From cd962ac37a68050a31bd594c3b8d05522051fd37 Mon Sep 17 00:00:00 2001 From: sHa Date: Mon, 28 Apr 2025 17:17:48 +0300 Subject: [PATCH] feat: Implement logo action buttons for copy and download functionality --- public/global.css | 67 +++++- src/App.svelte | 9 - src/components/LogoActions.svelte | 377 ++++++++++++++++++++++++++++++ src/components/LogoGrid.svelte | 98 +------- src/components/LogoList.svelte | 77 +----- 5 files changed, 445 insertions(+), 183 deletions(-) create mode 100644 src/components/LogoActions.svelte diff --git a/public/global.css b/public/global.css index fd5ace3..6add607 100644 --- a/public/global.css +++ b/public/global.css @@ -60,13 +60,70 @@ button:hover { font-size: 1rem; } -.copy-btn { - background-color: var(--secondary-color); - margin-right: 0.5rem; +.copy-btn, +.copy-group .png-btn { + background-color: var(--secondary-color, #2c3e50); + color: #fff; + font-weight: 500; + letter-spacing: 0.02em; + min-width: 2.5em; + border-radius: 0; + margin: 0; + padding: 0.4em 1em; + font-size: 0.95em; + border-right: 1px solid var(--color-border, #ddd); + transition: background 0.2s, color 0.2s; } -.download-btn { - background-color: #27ae60; +.copy-btn:last-child, +.copy-group .png-btn:last-child { + border-right: none; +} + +.copy-btn:focus, +.copy-btn:hover, +.copy-group .png-btn:focus, +.copy-group .png-btn:hover { + background: #222; + color: #fff; + outline: none; +} + +.download-btn, +.download-group .png-btn { + background: #27ae60; + color: #fff; + font-weight: 500; + letter-spacing: 0.02em; + min-width: 2.5em; + border-radius: 0; + margin: 0; + padding: 0.4em 1em; + font-size: 0.95em; + border-right: 1px solid var(--color-border, #ddd); + transition: background 0.2s, color 0.2s; +} + +.download-btn:last-child, +.download-group .png-btn:last-child { + border-right: none; +} + +.download-btn:focus, +.download-btn:hover, +.download-group .png-btn:focus, +.download-group .png-btn:hover { + background: #219150; + color: #fff; + outline: none; +} + +.copy-group, .download-group { + display: inline-flex; + border-radius: 6px; + overflow: hidden; + box-shadow: 0 1px 2px rgba(0,0,0,0.03); + margin-right: 0.5em; } /* Direct logo image size constraints that will work with any component structure */ diff --git a/src/App.svelte b/src/App.svelte index e39dd83..07eeca5 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -52,7 +52,6 @@ }); $: { - console.log('[theme] reactive theme:', theme); applyTheme(); } @@ -108,7 +107,6 @@ effectiveTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; } document.documentElement.setAttribute('data-theme', effectiveTheme); - console.log('[theme] theme:', theme, 'effectiveTheme:', effectiveTheme); } function setTheme(newTheme) { @@ -492,13 +490,6 @@ width: 100%; } - .logo-card, .logo-item { - background: var(--color-card); - color: var(--color-text); - border: 1px solid var(--color-border); - transition: background 0.2s, color 0.2s; - } - :global(.logo-card), :global(.logo-item) { background: var(--color-card); color: var(--color-text); diff --git a/src/components/LogoActions.svelte b/src/components/LogoActions.svelte new file mode 100644 index 0000000..7ae1824 --- /dev/null +++ b/src/components/LogoActions.svelte @@ -0,0 +1,377 @@ + + + + + {#if logo.format === 'SVG'} + + {#if showCopyMenu} + + {/if} + {/if} + + + + + {#if logo.format === 'SVG'} + + {#if showDownloadMenu} + + {/if} + {/if} + + + diff --git a/src/components/LogoGrid.svelte b/src/components/LogoGrid.svelte index d66e172..51bf177 100644 --- a/src/components/LogoGrid.svelte +++ b/src/components/LogoGrid.svelte @@ -1,5 +1,6 @@ @@ -69,19 +38,7 @@

{logo.name}

Format: {logo.format}

- - - - {#if logo.format === 'SVG'} - - {/if} - +
@@ -96,14 +53,11 @@ color: var(--color-text); border: 1px solid var(--color-border); border-radius: 8px; - overflow: hidden; + /* overflow: hidden; removed to allow dropdown menus to escape the card */ transition: background 0.2s, color 0.2s, transform 0.2s, box-shadow 0.2s; min-width: 320px; } - :global(.logo-card:hover) { - transform: translateY(-5px); - box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1); - } + .logo-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); @@ -153,50 +107,6 @@ gap: 0.5em; flex-wrap: nowrap; } - .download-group { - display: inline-flex; - border-radius: 6px; - overflow: hidden; - box-shadow: 0 1px 2px rgba(0,0,0,0.03); - } - .download-group .download-btn { - background: #27ae60; - color: #fff; - font-weight: 500; - letter-spacing: 0.02em; - min-width: 4em; - border-right: 1px solid var(--color-border); - border-radius: 0; - margin: 0; - padding: 0.4em 1em; - font-size: 0.95em; - transition: background 0.2s, color 0.2s; - } - .download-group .download-btn:focus, - .download-group .download-btn:hover { - background: #219150; - color: #fff; - outline: none; - } - .download-group .png-btn { - background: #27ae60; - color: #fff; - font-weight: 500; - letter-spacing: 0.02em; - min-width: 2.5em; - border-radius: 0; - margin: 0; - padding: 0.4em 1em; - font-size: 0.95em; - border-right: none; - transition: background 0.2s, color 0.2s; - } - .download-group .png-btn:focus, - .download-group .png-btn:hover { - background: #219150; - color: #fff; - outline: none; - } .no-results { grid-column: 1 / -1; text-align: center; diff --git a/src/components/LogoList.svelte b/src/components/LogoList.svelte index b2316d4..ef0ab32 100644 --- a/src/components/LogoList.svelte +++ b/src/components/LogoList.svelte @@ -1,5 +1,6 @@ @@ -70,19 +40,7 @@

Format: {logo.format}

- - - - {#if logo.format === 'SVG'} - - {/if} - +
{:else} @@ -145,37 +103,6 @@ align-items: center; gap: 0.5em; } - .download-group { - display: inline-flex; - border-radius: 6px; - overflow: hidden; - box-shadow: 0 1px 2px rgba(0,0,0,0.03); - } - .download-group button, - .download-group .png-btn { - background: #27ae60; - color: #fff; - font-weight: 500; - letter-spacing: 0.02em; - min-width: 2.5em; - border-radius: 0; - margin: 0; - padding: 0.4em 1em; - font-size: 0.95em; - border-right: 1px solid var(--color-border); - transition: background 0.2s, color 0.2s; - } - .download-group button:last-child { - border-right: none; - } - .download-group button:focus, - .download-group button:hover, - .download-group .png-btn:focus, - .download-group .png-btn:hover { - background: #219150; - color: #fff; - outline: none; - } .logo-list { display: flex; flex-direction: column;