Commit Graph
8 Commits
Author SHA1 Message Date
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 42ab542e25 fix(10-13): admin sidebar bleed and keyboard instance resolution
- App.vue: add v-else-if branch for admin routes that renders only router-view (no AppSidebar)
- App.vue: replace routeViewRef with getFileManagerInstance() using matched.find(r => r.instances?.default)
- App.vue: remove unused ref import (Gap 3 + Gap 4)
2026-06-16 19:07:54 +02:00
curo1305andClaude Sonnet 4.6 efd6c78a15 fix(10): resolve CR-01 prop mutation + CR-02 double-shortcut on modal open
CR-01: DocumentCard.vue `@unshared="doc.is_shared = false"` mutated a
defineProps prop (readonly in Vue 3). Replace with a local `isShared` ref
watched against prop changes so the Shared pill hides correctly after revoke.

CR-02: App.vue keyboard handler fired U/N/Escape shortcuts even when a modal
was open (no input focused). Add `role="dialog"` guard so all shortcuts are
suppressed while any dialog is in the DOM.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 10:16:28 +02:00
curo1305 69bf40af32 feat(10-10): wire OsDragOverlay into App.vue; expose handleOsDrop on FileManagerView
- App.vue: import + mount <OsDragOverlay @files-dropped="onOsFilesDropped" />
  after <ToastContainer /> (overlay z-[9998] stays below toast z-[9999])
- App.vue: add onOsFilesDropped handler -> routeViewRef.value?.handleOsDrop?.(files)
- FileManagerView: extend defineExpose to include handleOsDrop delegating to
  existing onFilesSelected({ files, autoClassify: true }) — no duplicate upload logic
- Full test suite: 198 passed, 0 failures
2026-06-15 20:46:05 +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 f92d98d067 feat(10-04): implement toast store, ToastContainer, mount in App.vue
- toast.js: reactive toasts array, show/dismiss with auto-dismiss via setTimeout
- ToastContainer.vue: Options API, Teleport to body, TransitionGroup, data-test attr
- type-to-class maps: accentClass/iconName/iconColorClass for success/error/warning/info
- App.vue: import and mount <ToastContainer /> after layout div
- all 10 tests pass; SettingsAccountTab and TotpEnrollment regressions green
2026-06-15 20:11:12 +02:00
curo1305 aa957d6c50 feat(02-06): auth layout switching + admin role guard (GAPs 2, 3, 4)
- App.vue: conditionally renders AuthLayout for auth routes, app shell otherwise
- router/index.js: meta.layout='auth' on all four auth routes
- router/index.js: meta.requiresAdmin=true on /admin route
- router/index.js: beforeEach role check redirects non-admin to /
- router/index.js: /account redirects to /settings
2026-05-31 20:37:46 +02:00
curo1305andClaude Sonnet 4.6 7a34807fa0 chore: initial commit — existing single-user document scanner codebase
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 08:53:28 +02:00