curo1305
cb41753605
refactor(10-12): migrate sidebar + layout + TreeItem SVGs to AppIcon
...
- StorageBrowser.vue: replace 8 inline SVGs (plus, folder x2, pencil, trash, share, folderMove, document)
- AppSidebar.vue: replace 8 inline SVGs (tag, inbox, chevronRight x2, folder, cloud, shield, cog dual-path, logout)
- AdminSidebar.vue: replace 6 inline SVGs (home, users, chartBar, lightBulb, clipboardList, logout)
- TreeItem.vue: replace 1 inline SVG (chevronRight expand/collapse)
2026-06-16 08:35:02 +02:00
curo1305
f9ddda8e05
feat(10-11): add click-after-drag guard + teleport folder picker to StorageBrowser
...
- Guard file-row click: draggingFile ? null : emit('file-open', file)
- Add onFileDragEnd() with nextTick reset to prevent click-after-drag navigation
- Update onDropDocOnFolder to defer draggingFile reset via await nextTick()
- Replace absolute folder picker with Teleport to body + getBoundingClientRect positioning
- Add scroll/resize listeners to reposition picker on window scroll
- All 6 UX-11 dragmove tests now pass
2026-06-16 08:23:36 +02:00
curo1305
f20420a4b5
test(10-11): promote stub tests to real tests for drag-to-move + teleport dropdowns
...
- 6 real tests for UX-11 drag-to-move (click guard, drop emits, amber ring, dragend reset, toast wiring)
- 4 real tests for UX-13 Teleport dropdowns (DocumentCard, FolderRow position + scroll reposition)
- All dropdown tests RED (Teleport not yet implemented)
- Click-suppression test RED (guard not yet implemented)
2026-06-16 08:22:18 +02:00
curo1305
d7bda3c605
feat(10-09): add global keydown handler to App.vue — /, Escape, U, N shortcuts live
...
- Add routeViewRef = ref(null) and bind to <router-view ref="routeViewRef">
- Add onKeydown handler: guards INPUT/TEXTAREA/SELECT/contenteditable; routes / → focusSearch, Escape → clearSearch, U/u → triggerUpload, N/n → startNewFolder
- Chain document.addEventListener on onMounted, removeEventListener on onUnmounted
- Add double optional chaining (?.) in StorageBrowser.triggerUpload and focusSearch so stubs don't throw in tests
- 9 keyboard shortcut tests GREEN; full suite 190 passing 0 failures
2026-06-15 20:36:52 +02:00
curo1305
aaa0532af9
feat(10-09): plumb keyboard shortcut ref chain — DropZone→SearchBar→StorageBrowser→FileManagerView
...
- DropZone: defineExpose({ triggerInput }) to expose file picker trigger
- SearchBar: add inputEl ref + defineExpose({ focus }) for / shortcut
- StorageBrowser: add dropZoneRef + searchBarRef; expand defineExpose to include triggerUpload, focusSearch, clearSearch
- FileManagerView: add defineExpose delegating all four methods to browserRef via optional chaining
2026-06-15 20:35:38 +02:00
curo1305
9ea51d6401
feat(10-06): wire breadcrumb mapping + toast call sites; delete FolderBreadcrumb
...
- FileManagerView: add mappedBreadcrumb computed ({id,label} from foldersStore.breadcrumb)
- FileManagerView: import useToastStore; add toast.show() to doMove, doDeleteDoc, onFilesSelected
- FileManagerView: remove console.error from doMove/doDeleteDoc (toast communicates errors)
- CloudFolderView: add mappedBreadcrumb computed; pass to StorageBrowser :breadcrumb
- Delete FolderBreadcrumb.vue + FolderBreadcrumb.test.js (no dead code per CLAUDE.md)
- FileManagerView.test.js: replace dead FolderBreadcrumb mock with BreadcrumbBar mock
- StorageBrowser.skeleton.test.js: remove unused FolderBreadcrumb stub
- Full suite: 164/164 pass, 0 failures
2026-06-15 20:26:06 +02:00
curo1305
d040e77548
feat(10-06): update StorageBrowser — skeleton rows, EmptyState, BreadcrumbBar swap
...
- Replace FolderBreadcrumb import with BreadcrumbBar + EmptyState imports
- Replace <FolderBreadcrumb> with <BreadcrumbBar :root-label="mode === 'cloud' ? 'Cloud' : 'Home'">
- Replace Loading… div with 5 animated skeleton rows (animate-pulse, grid-cols-[2rem_1fr_6rem_8rem_6rem])
- Replace inline empty-state divs with three <EmptyState> blocks (search/in-folder/root)
- UX-02 skeleton tests green (4/4)
2026-06-15 20:23:34 +02:00
curo1305
413d3f0ff7
test(10-06): promote UX-02 skeleton stubs to RED failing tests
...
- Replace 4 it.todo stubs with real assertions for animate-pulse, Loading text, and grid class
- Keep UX-13 todo block unchanged (promoted in plan 10-12)
- setActivePinia per test; stub BreadcrumbBar/SearchBar/SortControls/DropZone/UploadProgress/TopicBadge/AppIcon/EmptyState
2026-06-15 20:22:26 +02:00
curo1305
794ff42bf5
test(10-05): Wave 0 keyboard + OS-drag + drag-to-move stubs (UX-05..09, UX-11)
...
- keyboard.test.js: 11 it.todo stubs for UX-05 search focus, UX-06 escape clear, UX-07 upload picker, UX-08 new folder
- OsDragOverlay.test.js: 7 it.todo stubs for UX-09 OS file drag overlay depth-counter + teleport
- StorageBrowser.dragmove.test.js: 6 it.todo stubs for UX-11 drag-to-move ring highlight + toast wiring
2026-06-15 20:12:39 +02:00
curo1305
75970352fc
test(10-05): Wave 0 skeleton + dropdown stubs (UX-02, UX-03, UX-04, UX-13, UX-14)
...
- StorageBrowser.skeleton.test.js: 7 it.todo stubs for UX-02 skeleton rows + UX-13 Teleport dropdown
- AppSidebar.empty.test.js: 10 it.todo stubs for UX-03 skeleton, UX-01 micro empty states, UX-14 inline-New removal
- AdminAuditView.skeleton.test.js: 5 it.todo stubs for UX-04 audit skeleton + UX-01 empty state
- AdminUsersView.skeleton.test.js: 3 it.todo stubs for UX-04 users skeleton
- dropdown.test.js: 4 it.todo stubs for UX-13 Teleport+getBoundingClientRect pattern
2026-06-15 20:11:40 +02:00
curo1305 and Claude Sonnet 4.6
cce70b2ef6
refactor(frontend): extract shared modules, thin views, delete dead code
...
Shared utilities:
- Add src/utils/formatters.js — formatDate, formatSize, providerColor,
providerBg, providerLabel; all components import from here, no inline duplicates
- Add src/components/ui/TreeItem.vue — generic expand/collapse tree node;
FolderTreeItem, CloudFolderTreeItem, CloudProviderTreeItem now wrap it
- Add src/components/storage/StorageBrowser.vue — unified file browser grid
used by both FileManagerView and CloudFolderView
View refactor (thin data-providers):
- FileManagerView.vue: stripped to props + event wiring; all layout moved to StorageBrowser
- CloudFolderView.vue: same treatment — feeds props into StorageBrowser
- All tree sidebar components delegate expand/collapse to TreeItem.vue
Dead code removed:
- Delete HomeView.vue — no active route, replaced by FileManagerView
- Delete FolderView.vue — no active route, logic merged into FileManagerView
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-02 16:10:47 +02:00