chore: merge executor worktree (10-05 Nyquist stubs)

This commit is contained in:
curo1305
2026-06-15 20:17:06 +02:00
9 changed files with 205 additions and 0 deletions
@@ -0,0 +1,20 @@
import { describe, it } from 'vitest'
describe('UX-03: AppSidebar shows skeleton placeholders while loading', () => {
it.todo('renders skeleton rows in folder section when loadingRoots=true')
it.todo('renders skeleton rows in topics section when topicsStore.loading=true')
it.todo('renders skeleton rows in cloud section when loadingCloudConnections=true')
it.todo('Loading… text is removed from all three sections')
})
describe('UX-01 (sidebar micro): EmptyState size=sm appears when each section is empty', () => {
it.todo('folders empty: EmptyState size=sm with icon=folder')
it.todo('topics empty: EmptyState size=sm with icon=tag')
it.todo('cloud empty: EmptyState size=sm with icon=cloud and a Settings link in #cta')
})
describe('UX-14: AppSidebar no longer renders an inline "New" folder button', () => {
it.todo('no <button> with text "New" exists in the rendered template')
it.todo('startNewFolder/cancelNewFolder/submitNewFolder methods are removed')
it.todo('newFolderName/showNewFolderInput state is removed')
})
@@ -0,0 +1,11 @@
import { describe, it } from 'vitest'
describe('UX-09: OsDragOverlay shows when OS files are dragged over the window', () => {
it.todo('overlay hidden by default (dragDepth=0)')
it.todo('dragenter with dataTransfer.types including "Files" shows overlay')
it.todo('dragenter without "Files" type is ignored (in-app element drag)')
it.todo('dragleave decrements depth; overlay hides when depth reaches 0')
it.todo('drop event emits files-dropped with the file list')
it.todo('drop resets dragDepth to 0 and hides overlay')
it.todo('overlay is teleported to body with z-[9998] (below toast z-[9999])')
})
@@ -0,0 +1,13 @@
import { describe, it } from 'vitest'
describe('UX-11: Drag-to-move document onto folder row', () => {
it.todo('dragOverFolderId set on @dragover applies bg-amber-50 ring-2 ring-inset ring-amber-300 to that folder row')
it.todo('drop on folder emits file-move with { fileId, folderId }')
it.todo('dragend resets draggingFile to null after nextTick (click-after-drag guard)')
it.todo('click on file row is suppressed when draggingFile is non-null')
})
describe('UX-11 (toast wiring): doMove emits toast', () => {
it.todo('successful moveToFolder triggers useToastStore.show("Document moved", "success")')
it.todo('failed moveToFolder triggers useToastStore.show("Move failed: ...", "error")')
})
@@ -0,0 +1,14 @@
import { describe, it } from 'vitest'
describe('UX-02: StorageBrowser shows skeleton rows during loading', () => {
it.todo('renders 5+ skeleton rows when loading=true (replaces Loading… text)')
it.todo('skeleton rows use grid-cols-[2rem_1fr_6rem_8rem_6rem] matching real row grid')
it.todo('skeleton rows use animate-pulse')
it.todo('Loading… text is absent when loading=true (skeleton replaces it)')
})
describe('UX-13: StorageBrowser folder picker uses Teleport + getBoundingClientRect', () => {
it.todo('folder picker dropdown is teleported to body (escapes overflow container)')
it.todo('dropdown position reflects getBoundingClientRect of the trigger button')
it.todo('window scroll while open recalculates position')
})
@@ -0,0 +1,8 @@
import { describe, it } from 'vitest'
describe('UX-13: Teleport + getBoundingClientRect dropdown pattern across components', () => {
it.todo('DocumentCard folder picker uses Teleport to body')
it.todo('DocumentCard folder picker position matches trigger getBoundingClientRect')
it.todo('FolderRow three-dot menu uses Teleport to body')
it.todo('FolderRow three-dot menu repositions on window scroll')
})