diff --git a/src/renderer/index.html b/src/renderer/index.html index 7e082f5..80f2ee4 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -10,17 +10,21 @@

πŸ“· Photo Renamer

- 폴더λ₯Ό μ„ νƒν•˜μ„Έμš”
- - +
+ + +
- +
+ 폴더λ₯Ό μ„ νƒν•˜μ„Έμš” + +
diff --git a/src/renderer/renderer.js b/src/renderer/renderer.js index a5e4700..99dfee9 100644 --- a/src/renderer/renderer.js +++ b/src/renderer/renderer.js @@ -75,6 +75,8 @@ async function openFolder() { state.files.length = 0; state.files.push(...list); state.selectedIdxs.clear(); + state.sortMode = 'name'; + updateSortButtons(); setStatus(`${state.files.length}개 파일 λ‘œλ“œλ¨`, true); const folderName = folder.replace(/\\/g, '/').split('/').pop(); @@ -169,11 +171,18 @@ async function sortFiles(mode) { if (!state.files.length) return; if (mode === 'name') state.files.sort((a, b) => a.name.localeCompare(b.name, 'ko')); else state.files.sort((a, b) => a.mtime - b.mtime); + state.sortMode = mode; state.selectedIdxs.clear(); + updateSortButtons(); await renderGrid(); setStatus(`${mode === 'name' ? 'μ΄λ¦„μˆœ' : 'λ‚ μ§œμˆœ'}으둜 정렬됨`, true); } +function updateSortButtons() { + btnSortName.classList.toggle('active', state.sortMode === 'name'); + btnSortDate.classList.toggle('active', state.sortMode === 'date'); +} + // ── 미리보기 ───────────────────────────────────── function updatePreview() { const prefix = inputPrefix.value.trim() || 'photo'; diff --git a/src/renderer/state.js b/src/renderer/state.js index f58c0b6..bfb8c9a 100644 --- a/src/renderer/state.js +++ b/src/renderer/state.js @@ -2,4 +2,5 @@ export const state = { files: [], currentFolder: null, selectedIdxs: new Set(), + sortMode: null, }; diff --git a/src/renderer/style.css b/src/renderer/style.css index 349792b..255d6f9 100644 --- a/src/renderer/style.css +++ b/src/renderer/style.css @@ -56,10 +56,10 @@ body.fullscreen #titlebar { font-size: 13px; font-weight: 600; color: var(--muted); letter-spacing: .08em; text-transform: uppercase; } -#titlebar .dir-path { +.dir-path { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--muted); opacity: .7; - max-width: 400px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + max-width: 360px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* ── νˆ΄λ°” ── */ @@ -80,6 +80,24 @@ body.fullscreen #titlebar { .btn-primary:hover { background: #9180ff; transform: translateY(-1px); } .btn-ghost { background: transparent; color: var(--muted); border: 1px solid var(--border); } .btn-ghost:hover { background: var(--card); color: var(--text); } +.sort-group { + display: flex; + background: var(--card); + border: 1px solid var(--border); + border-radius: 8px; + padding: 3px; + gap: 2px; +} +.sort-btn { + display: inline-flex; align-items: center; + padding: 4px 12px; border-radius: 5px; border: none; + font-family: inherit; font-size: 13px; font-weight: 500; + cursor: pointer; + background: transparent; color: var(--muted); + transition: background .15s, color .15s; +} +.sort-btn:hover { background: var(--surface); color: var(--text); } +.sort-btn.active { background: var(--accent); color: #fff; } .btn-success { background: #1a4a2e; color: var(--success); border: 1px solid #2a6a40; } .btn-success:hover { background: #204a34; } .btn-success:disabled { opacity: .4; cursor: not-allowed; transform: none; }