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; }