curo1305
d914761120
feat(11-03): responsive shells and storage rows
...
- App.vue: mobile header with hamburger button; slide-in overlay drawer
with Teleport backdrop, translate-x-0/-translate-x-full transition;
drawer state owned by App.vue (D-04/D-05); route-change auto-close
- AdminLayout.vue: matching responsive treatment — hamburger, backdrop,
drawer, route-change close (RESP-05)
- StorageBrowser.vue: responsive grid templates
(mobile: grid-cols-[2rem_1fr_6rem], sm: +modified, md: all 5 cols);
Size hidden below md, Modified hidden below sm; action buttons get
min-w-[36px] min-h-[36px] touch targets (RESP-02, RESP-03)
- Tests: drawer open/close/backdrop-close/route-change behaviour;
admin drawer; responsive column and touch-target class assertions
2026-06-16 21:22:59 +02:00
curo1305
f9e5a31945
fix(10-13): sidebar shimmer rows and search-at-root visibility
...
- TreeItem.vue: replace 'Loading…' text with 3 animate-pulse shimmer rows
- StorageBrowser.vue: showSearch now true for mode=local OR mode=cloud (Gap 1 + Gap 2)
2026-06-16 19:06:52 +02:00
curo1305
e97ca164d7
Refactor backend and frontend cleanup paths
2026-06-16 11:50:17 +02:00
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
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
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 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