@objectifthunes/whiteboard 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/WhiteboardShell.tsx","../src/ZoomBar.tsx","../src/icons.tsx","../src/store.ts","../src/grid.ts","../src/Minimap.tsx","../src/FloatingPanel.tsx","../src/ConfirmDialog.tsx","../src/PanelErrorBoundary.tsx","../src/useWhiteboardLayout.ts","../src/cn.ts","../src/Alert.tsx","../src/Button.tsx","../src/ButtonRow.tsx","../src/Chip.tsx","../src/ChoiceCard.tsx","../src/List.tsx","../src/Skeleton.tsx","../src/ChoiceGroup.tsx","../src/CoordGrid.tsx","../src/Stack.tsx","../src/Typography.tsx","../src/EmptyState.tsx","../src/Field.tsx","../src/Label.tsx","../src/GeneratingOverlay.tsx","../src/IconText.tsx","../src/ImageThumb.tsx","../src/Inline.tsx","../src/Input.tsx","../src/ItemCard.tsx","../src/ItemList.tsx","../src/LoadingState.tsx","../src/PageLayout.tsx","../src/PanelCloseButton.tsx","../src/PanelSection.tsx","../src/PanelTitle.tsx","../src/PickerCard.tsx","../src/PickerGrid.tsx","../src/Pill.tsx","../src/Select.tsx","../src/SplitLayout.tsx","../src/TagRow.tsx","../src/Textarea.tsx","../src/ThemeToggle.tsx","../src/TitleRow.tsx","../src/WidgetSkeletons.tsx"],"sourcesContent":["'use client'\n\nimport { useRef, useCallback, useEffect, type ReactNode, type PointerEvent, type WheelEvent } from 'react'\nimport { ZoomBar } from './ZoomBar'\nimport { Minimap } from './Minimap'\nimport { useWhiteboardStore } from './store'\n\ninterface Props {\n children: ReactNode\n showMinimap?: boolean\n minimapLoading?: boolean\n /** Extra action buttons rendered inside the ZoomBar (e.g. a theme toggle) */\n extraActions?: ReactNode\n}\n\nexport function WhiteboardShell({ children, showMinimap = true, minimapLoading = false, extraActions }: Props) {\n const offset = useWhiteboardStore(s => s.offset)\n const scale = useWhiteboardStore(s => s.scale)\n const registryVersion = useWhiteboardStore(s => s.registryVersion)\n const viewportSize = useWhiteboardStore(s => s.viewportSize)\n const setOffset = useWhiteboardStore(s => s.setOffset)\n const setScale = useWhiteboardStore(s => s.setScale)\n const setViewportSize = useWhiteboardStore(s => s.setViewportSize)\n\n const shellRef = useRef<HTMLDivElement>(null)\n const panning = useRef(false)\n const last = useRef({ x: 0, y: 0 })\n const activePointerId = useRef<number | null>(null)\n const scaleRef = useRef(scale)\n const hasFitted = useRef(false)\n\n // Reset stale state when leaving the page so the next mount starts clean.\n useEffect(() => {\n return () => { useWhiteboardStore.getState().resetSession() }\n }, [])\n\n useEffect(() => {\n scaleRef.current = scale\n }, [scale])\n\n useEffect(() => {\n const shell = shellRef.current\n if (!shell) return\n\n const updateViewport = () => {\n const rect = shell.getBoundingClientRect()\n setViewportSize({\n width: Math.max(0, rect.width),\n height: Math.max(0, rect.height),\n })\n }\n\n updateViewport()\n if (typeof ResizeObserver === 'undefined') return\n\n const observer = new ResizeObserver(updateViewport)\n observer.observe(shell)\n return () => observer.disconnect()\n }, [setViewportSize])\n\n // Auto-fit on first meaningful panel registration.\n useEffect(() => {\n if (hasFitted.current) return\n const { panels } = useWhiteboardStore.getState()\n if (panels.size === 0 || viewportSize.width <= 0 || viewportSize.height <= 0) return\n hasFitted.current = true\n requestAnimationFrame(() => {\n useWhiteboardStore.getState().fitToContent()\n })\n }, [registryVersion, viewportSize])\n\n const onDown = useCallback((e: PointerEvent) => {\n if (e.target !== e.currentTarget) return\n if (e.button === 0 || e.button === 1) {\n panning.current = true\n activePointerId.current = e.pointerId\n last.current = { x: e.clientX, y: e.clientY }\n e.currentTarget.setPointerCapture(e.pointerId)\n e.preventDefault()\n }\n }, [])\n\n const onMove = useCallback((e: PointerEvent) => {\n if (!panning.current || activePointerId.current !== e.pointerId) return\n const dx = e.movementX ?? e.clientX - last.current.x\n const dy = e.movementY ?? e.clientY - last.current.y\n setOffset(p => ({ x: p.x + dx, y: p.y + dy }))\n last.current = { x: e.clientX, y: e.clientY }\n }, [setOffset])\n\n const stopPan = useCallback((e: PointerEvent) => {\n if (activePointerId.current !== null) {\n try {\n e.currentTarget.releasePointerCapture(activePointerId.current)\n } catch {\n // ignore if capture was already released\n }\n }\n panning.current = false\n activePointerId.current = null\n }, [])\n\n const onWheel = useCallback((e: WheelEvent) => {\n const s = scaleRef.current\n const rect = e.currentTarget.getBoundingClientRect()\n const anchor = { x: e.clientX - rect.left, y: e.clientY - rect.top }\n const nextScale = Math.min(3, Math.max(0.2, s * (e.deltaY > 0 ? 0.9 : 1.1)))\n const ratio = nextScale / s\n\n setOffset(prev => ({\n x: anchor.x - (anchor.x - prev.x) * ratio,\n y: anchor.y - (anchor.y - prev.y) * ratio,\n }))\n setScale(nextScale)\n }, [setOffset, setScale])\n\n return (\n <>\n <div\n ref={shellRef}\n onPointerDown={onDown}\n onPointerMove={onMove}\n onPointerUp={stopPan}\n onPointerCancel={stopPan}\n onWheel={onWheel}\n onContextMenu={e => e.preventDefault()}\n className=\"whiteboard-shell\"\n >\n <div\n className=\"whiteboard-canvas\"\n style={{ transform: `translate(${offset.x}px, ${offset.y}px) scale(${scale})` }}\n >\n <div className=\"whiteboard-grid\" aria-hidden />\n {children}\n </div>\n </div>\n <ZoomBar extraActions={extraActions} />\n {showMinimap ? <Minimap loading={minimapLoading} /> : null}\n </>\n )\n}\n","'use client'\n\nimport { useEffect, type ReactNode } from 'react'\nimport { Grid3x3, Minus, Plus, RotateCcw, ScanSearch } from './icons'\nimport { useWhiteboardStore } from './store'\n\ninterface Props {\n /** Extra action buttons rendered at the bottom of the zoom bar */\n extraActions?: ReactNode\n}\n\nexport function ZoomBar({ extraActions }: Props) {\n const scale = useWhiteboardStore(s => s.scale)\n const viewportSize = useWhiteboardStore(s => s.viewportSize)\n const snapToGrid = useWhiteboardStore(s => s.snapToGrid)\n const setScale = useWhiteboardStore(s => s.setScale)\n const setOffset = useWhiteboardStore(s => s.setOffset)\n const setSnapToGrid = useWhiteboardStore(s => s.setSnapToGrid)\n const fitToContent = useWhiteboardStore(s => s.fitToContent)\n const resetWidgets = useWhiteboardStore(s => s.resetWidgets)\n\n useEffect(() => {\n if (!snapToGrid) return\n window.dispatchEvent(new Event('whiteboard-snap-now'))\n }, [snapToGrid])\n\n const zoomTo = (nextScale: number) => {\n const clamped = Math.min(3, Math.max(0.2, nextScale))\n const ratio = clamped / scale\n const cx = (viewportSize.width || window.innerWidth) / 2\n const cy = (viewportSize.height || window.innerHeight) / 2\n setOffset(prev => ({\n x: cx - (cx - prev.x) * ratio,\n y: cy - (cy - prev.y) * ratio,\n }))\n setScale(clamped)\n }\n\n return (\n <div\n className=\"zoom-bar\"\n onPointerDown={e => e.stopPropagation()}\n onWheel={e => e.stopPropagation()}\n >\n <button type=\"button\" className=\"wb-btn wb-btn--secondary wb-btn--icon-only zoom-bar__icon\" onClick={() => zoomTo(scale * 0.8)} title=\"Zoom out\" aria-label=\"Zoom out\">\n <Minus size={14} />\n </button>\n <span className=\"zoom-bar__value\">\n {Math.round(scale * 100)}%\n </span>\n <button type=\"button\" className=\"wb-btn wb-btn--secondary wb-btn--icon-only zoom-bar__icon\" onClick={() => zoomTo(scale * 1.2)} title=\"Zoom in\" aria-label=\"Zoom in\">\n <Plus size={14} />\n </button>\n <button type=\"button\" className=\"wb-btn wb-btn--secondary wb-btn--icon-only zoom-bar__action\" onClick={fitToContent} title=\"Fit camera to all panels\" aria-label=\"Fit camera to all panels\">\n <ScanSearch size={14} />\n </button>\n <button type=\"button\" className=\"wb-btn wb-btn--secondary wb-btn--icon-only zoom-bar__action\" onClick={resetWidgets} title=\"Reset panel positions\" aria-label=\"Reset panel positions\">\n <RotateCcw size={14} />\n </button>\n <button\n type=\"button\"\n className={`wb-btn wb-btn--secondary wb-btn--icon-only zoom-bar__action${snapToGrid ? ' is-active' : ''}`}\n onClick={() => setSnapToGrid((prev) => !prev)}\n title={snapToGrid ? 'Disable snap to grid' : 'Enable snap to grid'}\n aria-label={snapToGrid ? 'Disable snap to grid' : 'Enable snap to grid'}\n >\n <Grid3x3 size={14} />\n </button>\n {extraActions}\n </div>\n )\n}\n","import type { SVGProps } from 'react'\n\ntype IconProps = SVGProps<SVGSVGElement> & { size?: number }\n\nconst defaults = (size = 14): SVGProps<SVGSVGElement> => ({\n xmlns: 'http://www.w3.org/2000/svg',\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n})\n\nexport function Minus({ size, ...props }: IconProps) {\n return <svg {...defaults(size)} {...props}><path d=\"M5 12h14\" /></svg>\n}\n\nexport function Plus({ size, ...props }: IconProps) {\n return <svg {...defaults(size)} {...props}><path d=\"M5 12h14\" /><path d=\"M12 5v14\" /></svg>\n}\n\nexport function ScanSearch({ size, ...props }: IconProps) {\n return (\n <svg {...defaults(size)} {...props}>\n <path d=\"M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425z\" fill=\"none\" stroke=\"none\" />\n <path d=\"M3 7V5a2 2 0 0 1 2-2h2\" />\n <path d=\"M17 3h2a2 2 0 0 1 2 2v2\" />\n <path d=\"M21 17v2a2 2 0 0 1-2 2h-2\" />\n <path d=\"M7 21H5a2 2 0 0 1-2-2v-2\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"m16 16-1.9-1.9\" />\n </svg>\n )\n}\n\nexport function RotateCcw({ size, ...props }: IconProps) {\n return (\n <svg {...defaults(size)} {...props}>\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <path d=\"M3 3v5h5\" />\n </svg>\n )\n}\n\nexport function Grid3x3({ size, ...props }: IconProps) {\n return (\n <svg {...defaults(size)} {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M3 9h18\" />\n <path d=\"M3 15h18\" />\n <path d=\"M9 3v18\" />\n <path d=\"M15 3v18\" />\n </svg>\n )\n}\n\nexport function Maximize2({ size, ...props }: IconProps) {\n return (\n <svg {...defaults(size)} {...props}>\n <polyline points=\"15 3 21 3 21 9\" />\n <polyline points=\"9 21 3 21 3 15\" />\n <line x1=\"21\" x2=\"14\" y1=\"3\" y2=\"10\" />\n <line x1=\"3\" x2=\"10\" y1=\"21\" y2=\"14\" />\n </svg>\n )\n}\n\nexport function Loader2({ size, ...props }: IconProps) {\n return (\n <svg {...defaults(size)} {...props}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n )\n}\n\nexport function AlertTriangle({ size, ...props }: IconProps) {\n return (\n <svg {...defaults(size)} {...props}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n )\n}\n\nexport function Check({ size, ...props }: IconProps) {\n return <svg {...defaults(size)} {...props}><path d=\"M20 6 9 17l-5-5\" /></svg>\n}\n\nexport function X({ size, ...props }: IconProps) {\n return <svg {...defaults(size)} {...props}><path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" /></svg>\n}\n\nexport function Moon({ size, ...props }: IconProps) {\n return <svg {...defaults(size)} {...props}><path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" /></svg>\n}\n\nexport function Sun({ size, ...props }: IconProps) {\n return (\n <svg {...defaults(size)} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" /><path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" /><path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" /><path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" /><path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n )\n}\n","'use client'\n\nimport { create } from 'zustand'\nimport { WHITEBOARD_GRID } from './grid'\n\n// ── Types ───────────────────────────────────────────────\n\nexport type PanelRect = {\n x: number\n y: number\n width: number\n height: number\n focusPadding?: number\n focusMaxScale?: number\n}\n\n// ── Geometry helpers ───────────────────────────────────\n\nexport function computeWhiteboardFit(\n panels: Map<string, PanelRect>,\n viewportSize: { width: number; height: number },\n padding = 60,\n) {\n if (panels.size === 0) return null\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity\n for (const r of panels.values()) {\n minX = Math.min(minX, r.x)\n minY = Math.min(minY, r.y)\n maxX = Math.max(maxX, r.x + r.width)\n maxY = Math.max(maxY, r.y + r.height)\n }\n\n const contentW = maxX - minX + padding * 2\n const contentH = maxY - minY + padding * 2\n const vpW = viewportSize.width || window.innerWidth\n const vpH = viewportSize.height || window.innerHeight\n const fitScale = Math.min(vpW / contentW, vpH / contentH, 1.5)\n const centerX = (minX + maxX) / 2\n const centerY = (minY + maxY) / 2\n\n return {\n scale: Math.min(3, Math.max(0.2, fitScale)),\n offset: {\n x: vpW / 2 - centerX * fitScale,\n y: vpH / 2 - centerY * fitScale,\n },\n }\n}\n\nexport function computeWhiteboardRectFocus(\n rect: PanelRect,\n viewportSize: { width: number; height: number },\n padding = 40,\n maxScale = 1.5,\n) {\n const vpW = viewportSize.width || window.innerWidth\n const vpH = viewportSize.height || window.innerHeight\n const safeWidth = Math.max(1, rect.width)\n const safeHeight = Math.max(1, rect.height)\n const fitScale = Math.min(\n (vpW - padding * 2) / safeWidth,\n (vpH - padding * 2) / safeHeight,\n maxScale,\n )\n const nextScale = Math.min(3, Math.max(0.2, fitScale))\n\n return {\n scale: nextScale,\n offset: {\n x: vpW / 2 - (rect.x + safeWidth / 2) * nextScale,\n y: vpH / 2 - (rect.y + safeHeight / 2) * nextScale,\n },\n }\n}\n\n// ── Store ──────────────────────────────────────────────\n\nexport interface WhiteboardStore {\n offset: { x: number; y: number }\n scale: number\n viewportSize: { width: number; height: number }\n snapToGrid: boolean\n snapGridSize: number\n panels: Map<string, PanelRect>\n resetFns: Map<string, () => void>\n /** Incremented each time the panel registry changes; subscribe to trigger re-renders. */\n registryVersion: number\n\n setOffset: (v: { x: number; y: number } | ((prev: { x: number; y: number }) => { x: number; y: number })) => void\n setScale: (v: number | ((prev: number) => number)) => void\n setViewportSize: (v: { width: number; height: number }) => void\n setSnapToGrid: (v: boolean | ((prev: boolean) => boolean)) => void\n\n register: (id: string, rect: PanelRect) => void\n unregister: (id: string) => void\n registerReset: (id: string, fn: () => void) => void\n unregisterReset: (id: string) => void\n\n fitToContent: () => void\n focusPanel: (rect: PanelRect, options?: { padding?: number; maxScale?: number }) => void\n resetWidgets: () => void\n\n /** Call on WhiteboardShell mount to discard any stale state from the previous session. */\n resetSession: () => void\n}\n\nexport const useWhiteboardStore = create<WhiteboardStore>((set, get) => ({\n offset: { x: 0, y: 0 },\n scale: 1,\n viewportSize: { width: 0, height: 0 },\n snapToGrid: false,\n snapGridSize: WHITEBOARD_GRID,\n panels: new Map(),\n resetFns: new Map(),\n registryVersion: 0,\n\n setOffset: (v) => set((s) => ({ offset: typeof v === 'function' ? v(s.offset) : v })),\n setScale: (v) => set((s) => ({ scale: typeof v === 'function' ? v(s.scale) : v })),\n setViewportSize: (v) => set({ viewportSize: v }),\n setSnapToGrid: (v) => set((s) => ({ snapToGrid: typeof v === 'function' ? v(s.snapToGrid) : v })),\n\n register: (id, rect) => {\n get().panels.set(id, rect)\n set((s) => ({ registryVersion: s.registryVersion + 1 }))\n },\n unregister: (id) => {\n get().panels.delete(id)\n set((s) => ({ registryVersion: s.registryVersion + 1 }))\n },\n registerReset: (id, fn) => { get().resetFns.set(id, fn) },\n unregisterReset: (id) => { get().resetFns.delete(id) },\n\n fitToContent: () => {\n const { panels, viewportSize } = get()\n const fit = computeWhiteboardFit(panels, viewportSize)\n if (fit) set({ scale: fit.scale, offset: fit.offset })\n },\n\n focusPanel: (rect, options) => {\n const { viewportSize } = get()\n const fit = computeWhiteboardRectFocus(\n rect, viewportSize, options?.padding ?? 40, options?.maxScale ?? 1.5,\n )\n set({ scale: fit.scale, offset: fit.offset })\n },\n\n resetWidgets: () => {\n for (const fn of get().resetFns.values()) fn()\n const attempt = (tries = 0) => {\n const { panels, viewportSize } = get()\n const fit = computeWhiteboardFit(panels, viewportSize)\n if (fit) { set({ scale: fit.scale, offset: fit.offset }); return }\n if (tries < 6) requestAnimationFrame(() => attempt(tries + 1))\n }\n requestAnimationFrame(() => requestAnimationFrame(() => attempt()))\n },\n\n resetSession: () => set({\n offset: { x: 0, y: 0 },\n scale: 1,\n viewportSize: { width: 0, height: 0 },\n snapToGrid: false,\n registryVersion: 0,\n panels: new Map(),\n resetFns: new Map(),\n }),\n}))\n","export const WHITEBOARD_GRID = 20\n\nexport function snapToWhiteboardGrid(value: number) {\n return Math.round(value / WHITEBOARD_GRID) * WHITEBOARD_GRID\n}\n","'use client'\n\nimport { useRef, type PointerEvent, type WheelEvent } from 'react'\nimport { Loader2 } from './icons'\nimport { useWhiteboardStore } from './store'\n\nconst MAP_W = 200\nconst MAP_H = 150\nconst PADDING = 40\nconst MIN_WORLD_SIZE = 1\n\ninterface Props {\n loading?: boolean\n}\n\nexport function Minimap({ loading = false }: Props) {\n // Subscribe to registryVersion so the minimap re-renders when panels change.\n useWhiteboardStore(s => s.registryVersion)\n const offset = useWhiteboardStore(s => s.offset)\n const scale = useWhiteboardStore(s => s.scale)\n const viewportSize = useWhiteboardStore(s => s.viewportSize)\n const panels = useWhiteboardStore(s => s.panels)\n const setOffset = useWhiteboardStore(s => s.setOffset)\n const setScale = useWhiteboardStore(s => s.setScale)\n const focusPanel = useWhiteboardStore(s => s.focusPanel)\n const containerRef = useRef<HTMLDivElement>(null)\n const dragging = useRef(false)\n const lastPanelTapRef = useRef<{ id: string; time: number } | null>(null)\n\n const rectEntries = Array.from(panels.entries())\n const visibleRectEntries = rectEntries.filter(([, rect]) => Number.isFinite(rect.width) && Number.isFinite(rect.height))\n const rects = visibleRectEntries.map(([, rect]) => rect)\n\n if (loading || rects.length === 0) {\n return (\n <div className=\"minimap minimap--loading\" style={{ width: MAP_W, height: MAP_H }}>\n <div className=\"minimap__loading\">\n <Loader2 size={14} className=\"icon-spin\" />\n </div>\n </div>\n )\n }\n\n const viewportWidth = viewportSize.width || window.innerWidth\n const viewportHeight = viewportSize.height || window.innerHeight\n const vpW = viewportWidth / scale\n const vpH = viewportHeight / scale\n const vpX = -offset.x / scale\n const vpY = -offset.y / scale\n\n let minX = Infinity\n let minY = Infinity\n let maxX = -Infinity\n let maxY = -Infinity\n for (const r of rects) {\n minX = Math.min(minX, r.x)\n minY = Math.min(minY, r.y)\n maxX = Math.max(maxX, r.x + r.width)\n maxY = Math.max(maxY, r.y + r.height)\n }\n\n // Keep minimap anchored to actual panel content bounds to avoid disappearing widgets.\n minX -= PADDING\n minY -= PADDING\n maxX += PADDING\n maxY += PADDING\n\n const worldW = Math.max(MIN_WORLD_SIZE, maxX - minX)\n const worldH = Math.max(MIN_WORLD_SIZE, maxY - minY)\n const mapScale = Math.min(MAP_W / worldW, MAP_H / worldH)\n\n const contentW = worldW * mapScale\n const contentH = worldH * mapScale\n const mapOffsetX = (MAP_W - contentW) / 2\n const mapOffsetY = (MAP_H - contentH) / 2\n\n const toMapX = (wx: number) => mapOffsetX + (wx - minX) * mapScale\n const toMapY = (wy: number) => mapOffsetY + (wy - minY) * mapScale\n\n const clientToWorld = (clientX: number, clientY: number) => {\n if (!containerRef.current) return\n\n const mapRect = containerRef.current.getBoundingClientRect()\n const localX = Math.min(MAP_W, Math.max(0, clientX - mapRect.left))\n const localY = Math.min(MAP_H, Math.max(0, clientY - mapRect.top))\n\n const boundedX = Math.min(contentW + mapOffsetX, Math.max(mapOffsetX, localX))\n const boundedY = Math.min(contentH + mapOffsetY, Math.max(mapOffsetY, localY))\n\n const worldX = (boundedX - mapOffsetX) / mapScale + minX\n const worldY = (boundedY - mapOffsetY) / mapScale + minY\n\n return { worldX, worldY }\n }\n\n const centerToWorld = (worldX: number, worldY: number, targetScale: number) => {\n const clampedScale = Math.min(3, Math.max(0.2, targetScale))\n setScale(clampedScale)\n setOffset({\n x: viewportWidth / 2 - worldX * clampedScale,\n y: viewportHeight / 2 - worldY * clampedScale,\n })\n }\n\n const panTo = (clientX: number, clientY: number) => {\n const world = clientToWorld(clientX, clientY)\n if (!world) return\n centerToWorld(world.worldX, world.worldY, scale)\n }\n\n const onDown = (e: PointerEvent) => {\n e.stopPropagation()\n e.preventDefault()\n dragging.current = true\n e.currentTarget.setPointerCapture(e.pointerId)\n panTo(e.clientX, e.clientY)\n }\n\n const onMove = (e: PointerEvent) => {\n if (!dragging.current) return\n panTo(e.clientX, e.clientY)\n }\n\n const onUp = () => {\n dragging.current = false\n }\n\n const onWheel = (e: WheelEvent<HTMLDivElement>) => {\n e.preventDefault()\n e.stopPropagation()\n const world = clientToWorld(e.clientX, e.clientY)\n if (!world) return\n const factor = e.deltaY > 0 ? 0.9 : 1.1\n centerToWorld(world.worldX, world.worldY, scale * factor)\n }\n\n return (\n <div\n ref={containerRef}\n onPointerDown={onDown}\n onPointerMove={onMove}\n onPointerUp={onUp}\n onPointerCancel={onUp}\n onWheel={onWheel}\n className=\"minimap\"\n style={{\n width: MAP_W,\n height: MAP_H,\n }}\n >\n {visibleRectEntries.map(([id, r]) => (\n <div\n key={id}\n className=\"minimap__panel\"\n onPointerDown={(event) => {\n event.stopPropagation()\n }}\n onPointerUp={(event) => {\n event.stopPropagation()\n const now = Date.now()\n const last = lastPanelTapRef.current\n if (last && last.id === id && now - last.time < 300) {\n event.preventDefault()\n focusPanel(r, { padding: r.focusPadding, maxScale: r.focusMaxScale })\n lastPanelTapRef.current = null\n return\n }\n lastPanelTapRef.current = { id, time: now }\n }}\n onDoubleClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n focusPanel(r, { padding: r.focusPadding, maxScale: r.focusMaxScale })\n }}\n style={{\n left: toMapX(r.x),\n top: toMapY(r.y),\n width: Math.max(1, r.width * mapScale),\n height: Math.max(1, r.height * mapScale),\n }}\n />\n ))}\n <div\n className=\"minimap__viewport\"\n style={{\n left: toMapX(vpX),\n top: toMapY(vpY),\n width: vpW * mapScale,\n height: vpH * mapScale,\n }}\n />\n </div>\n )\n}\n","'use client'\n\nimport { useRef, useId, useState, useCallback, useEffect, useLayoutEffect, memo, type ReactNode, type PointerEvent, type MutableRefObject } from 'react'\nimport { Maximize2 } from './icons'\nimport { useWhiteboardStore } from './store'\nimport type { PanelRect } from './store'\nimport { WHITEBOARD_GRID } from './grid'\n\ninterface Props {\n title: ReactNode\n defaultPosition: { x: number; y: number }\n width?: number\n className?: string\n /** Ref that stays in sync with the panel's current position and rendered size */\n trackRect?: MutableRefObject<PanelRect>\n /** Show a focus button that zooms the whiteboard to this panel */\n focusable?: boolean\n /** Optional camera framing controls used by the focus button */\n focusPadding?: number\n focusMaxScale?: number\n /** Extra action buttons rendered in the header bar next to the focus button */\n headerActions?: ReactNode\n children: ReactNode\n}\n\nexport const FloatingPanel = memo(function FloatingPanel({\n title,\n defaultPosition,\n width = 300,\n className,\n trackRect: trackRectRef,\n focusable,\n focusPadding = 40,\n focusMaxScale = 1.5,\n headerActions,\n children,\n}: Props) {\n const panelId = useId()\n const [pos, setPos] = useState(defaultPosition)\n const dragging = useRef(false)\n const posRef = useRef(pos)\n const elRef = useRef<HTMLDivElement>(null)\n const lastRegisteredRectRef = useRef<PanelRect | null>(null)\n const scale = useWhiteboardStore(s => s.scale)\n const snapToGrid = useWhiteboardStore(s => s.snapToGrid)\n const snapGridSize = useWhiteboardStore(s => s.snapGridSize)\n const register = useWhiteboardStore(s => s.register)\n const unregister = useWhiteboardStore(s => s.unregister)\n const registerReset = useWhiteboardStore(s => s.registerReset)\n const unregisterReset = useWhiteboardStore(s => s.unregisterReset)\n const focusPanel = useWhiteboardStore(s => s.focusPanel)\n const scaleRef = useRef(scale)\n const snapToGridRef = useRef(false)\n const snapGridSizeRef = useRef(20)\n const defaultPosRef = useRef(defaultPosition)\n const cleanupRef = useRef<(() => void) | null>(null)\n const lastTapRef = useRef<{ time: number; x: number; y: number } | null>(null)\n\n useEffect(() => {\n scaleRef.current = scale\n }, [scale])\n\n useEffect(() => {\n snapToGridRef.current = snapToGrid\n snapGridSizeRef.current = snapGridSize\n }, [snapToGrid, snapGridSize])\n\n useEffect(() => {\n const onSnapNow = () => {\n const snapSize = snapGridSizeRef.current\n setPos((current) => {\n const next = {\n x: Math.round(current.x / snapSize) * snapSize,\n y: Math.round(current.y / snapSize) * snapSize,\n }\n return next.x === current.x && next.y === current.y ? current : next\n })\n }\n\n window.addEventListener('whiteboard-snap-now', onSnapNow)\n return () => window.removeEventListener('whiteboard-snap-now', onSnapNow)\n }, [])\n\n useEffect(() => {\n posRef.current = pos\n }, [pos])\n\n const registerRect = useCallback(() => {\n const el = elRef.current\n if (!el) return\n\n const nextRect: PanelRect = {\n x: posRef.current.x,\n y: posRef.current.y,\n width: el.offsetWidth,\n height: el.offsetHeight,\n focusPadding,\n focusMaxScale,\n }\n\n const prev = lastRegisteredRectRef.current\n if (\n prev &&\n prev.x === nextRect.x &&\n prev.y === nextRect.y &&\n prev.width === nextRect.width &&\n prev.height === nextRect.height &&\n prev.focusPadding === nextRect.focusPadding &&\n prev.focusMaxScale === nextRect.focusMaxScale\n ) {\n return\n }\n\n lastRegisteredRectRef.current = nextRect\n register(panelId, nextRect)\n if (trackRectRef) {\n trackRectRef.current = nextRect\n }\n }, [focusMaxScale, focusPadding, panelId, register, trackRectRef])\n\n const getCurrentRect = useCallback((): PanelRect | null => {\n const el = elRef.current\n if (!el) return null\n return {\n x: posRef.current.x,\n y: posRef.current.y,\n width: el.offsetWidth,\n height: el.offsetHeight,\n focusPadding,\n focusMaxScale,\n }\n }, [focusMaxScale, focusPadding])\n\n const handleFocus = useCallback(() => {\n const rect = getCurrentRect()\n if (!rect) return\n focusPanel(rect, { padding: focusPadding, maxScale: focusMaxScale })\n }, [focusPanel, focusPadding, focusMaxScale, getCurrentRect])\n\n // Register reset function + cleanup on unmount\n useEffect(() => {\n registerReset(panelId, () => setPos(defaultPosRef.current))\n return () => {\n cleanupRef.current?.()\n unregister(panelId)\n unregisterReset(panelId)\n lastRegisteredRectRef.current = null\n }\n }, [panelId, registerReset, unregister, unregisterReset])\n\n // Measure actual DOM size after paint + register in panel registry.\n useLayoutEffect(() => {\n registerRect()\n }, [pos.x, pos.y, width, registerRect])\n\n // Track content-driven size changes (e.g. skeleton → real content).\n useEffect(() => {\n const el = elRef.current\n if (!el) return\n if (typeof ResizeObserver === 'undefined') return\n\n const obs = new ResizeObserver(() => {\n registerRect()\n })\n obs.observe(el)\n return () => obs.disconnect()\n }, [registerRect])\n\n const onDown = useCallback((e: PointerEvent) => {\n if (e.button !== 0) return\n dragging.current = true\n const startX = e.clientX\n const startY = e.clientY\n const startPosX = posRef.current.x\n const startPosY = posRef.current.y\n const startScale = scaleRef.current\n e.preventDefault()\n e.stopPropagation()\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n\n const move = (ev: globalThis.PointerEvent) => {\n if (!dragging.current) return\n const rawX = startPosX + (ev.clientX - startX) / startScale\n const rawY = startPosY + (ev.clientY - startY) / startScale\n const snapSize = snapGridSizeRef.current\n const nextX = snapToGridRef.current ? Math.round(rawX / snapSize) * snapSize : rawX\n const nextY = snapToGridRef.current ? Math.round(rawY / snapSize) * snapSize : rawY\n setPos({\n x: nextX,\n y: nextY,\n })\n }\n const up = () => {\n dragging.current = false\n window.removeEventListener('pointermove', move)\n window.removeEventListener('pointerup', up)\n cleanupRef.current = null\n }\n // Clean previous listeners if any\n cleanupRef.current?.()\n window.addEventListener('pointermove', move)\n window.addEventListener('pointerup', up)\n cleanupRef.current = up\n }, [])\n\n const panelClassName = className ? `floating-panel ${className}` : 'floating-panel'\n\n return (\n <div\n ref={elRef}\n className={panelClassName}\n style={{ left: pos.x, top: pos.y, width }}\n onPointerDown={e => e.stopPropagation()}\n onPointerUp={(e) => {\n if (dragging.current) return\n\n const now = Date.now()\n const last = lastTapRef.current\n if (last && now - last.time < 300) {\n const dx = e.clientX - last.x\n const dy = e.clientY - last.y\n if (dx * dx + dy * dy < 100) {\n e.stopPropagation()\n handleFocus()\n lastTapRef.current = null\n return\n }\n }\n lastTapRef.current = { time: now, x: e.clientX, y: e.clientY }\n }}\n onWheel={e => e.stopPropagation()}\n onDoubleClick={(e) => {\n e.stopPropagation()\n handleFocus()\n }}\n >\n <div onPointerDown={onDown} className=\"floating-panel__header\">\n <strong className=\"floating-panel__title\">{title}</strong>\n {headerActions}\n {focusable && (\n <button\n type=\"button\"\n className=\"wb-btn wb-btn--secondary wb-btn--icon-only floating-panel__focus\"\n onClick={handleFocus}\n onPointerDown={e => e.stopPropagation()}\n title=\"Focus on this panel\"\n aria-label=\"Focus on this panel\"\n >\n <Maximize2 size={14} />\n </button>\n )}\n </div>\n <div className=\"floating-panel__body\">\n {children}\n </div>\n </div>\n )\n})\n\n/** Helper: create a stable rect ref for use with trackRect */\nexport function usePanelRect(initial: { x: number; y: number }): MutableRefObject<PanelRect> {\n const ref = useRef<PanelRect>({ ...initial, width: 0, height: 0 })\n return ref\n}\n\n/** Get a position just below a tracked panel */\nexport function belowPanel(rect: PanelRect, gap = WHITEBOARD_GRID): { x: number; y: number } {\n return { x: rect.x, y: rect.y + rect.height + gap }\n}\n","'use client'\n\nimport { useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { AlertTriangle, Check, X } from './icons'\n\ninterface Props {\n open: boolean\n title: string\n message: string\n onConfirm: () => void\n onCancel: () => void\n confirmLabel?: string\n loading?: boolean\n error?: string | null\n}\n\nexport function ConfirmDialog({\n open,\n title,\n message,\n onConfirm,\n onCancel,\n confirmLabel = 'Confirm',\n loading,\n error,\n}: Props) {\n useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onCancel()\n }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [open, onCancel])\n\n if (!open || typeof document === 'undefined') return null\n\n return createPortal(\n <div className=\"confirm-modal-overlay\" onMouseDown={onCancel}>\n <div\n className=\"confirm-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n onMouseDown={(e) => e.stopPropagation()}\n >\n <div className=\"confirm-modal__header\">\n <span className=\"confirm-modal__title\">\n <AlertTriangle size={16} />\n {title}\n </span>\n <button type=\"button\" className=\"wb-btn wb-btn--secondary wb-btn--icon-only\" onClick={onCancel} aria-label=\"Close dialog\">\n <X size={14} />\n </button>\n </div>\n <p className=\"confirm-modal__message\">{message}</p>\n {error && <div className=\"wb-alert wb-alert--error\">{error}</div>}\n <div className=\"wb-btn-row\">\n <button type=\"button\" className=\"wb-btn wb-btn--secondary\" onClick={onCancel}>\n Cancel\n </button>\n <button type=\"button\" className=\"wb-btn wb-btn--danger\" onClick={onConfirm} disabled={loading}>\n {loading ? (\n 'Deleting...'\n ) : (\n <>\n <Check size={14} />\n {confirmLabel}\n </>\n )}\n </button>\n </div>\n </div>\n </div>,\n document.body\n )\n}\n","'use client'\n\nimport { Component, type ReactNode } from 'react'\n\ninterface Props {\n children: ReactNode\n fallbackMessage?: string\n}\n\ninterface State {\n error: Error | null\n}\n\nexport class PanelErrorBoundary extends Component<Props, State> {\n state: State = { error: null }\n\n static getDerivedStateFromError(error: Error): State {\n return { error }\n }\n\n render() {\n if (this.state.error) {\n return (\n <div className=\"wb-stack wb-stack--sm\">\n <div className=\"wb-alert wb-alert--error\">\n {this.props.fallbackMessage ?? 'This panel crashed.'}\n </div>\n <button\n type=\"button\"\n className=\"wb-btn wb-btn--secondary\"\n onClick={() => this.setState({ error: null })}\n >\n Retry\n </button>\n </div>\n )\n }\n return this.props.children\n }\n}\n","'use client'\n\nimport { useMemo } from 'react'\nimport { snapToWhiteboardGrid } from './grid'\n\ntype WidthMap = Record<string, number>\n\ninterface UseWhiteboardLayoutOptions<T extends WidthMap> {\n widths: T\n startX?: number\n y?: number\n gap?: number\n}\n\ntype PositionMap<T extends WidthMap> = { [K in keyof T]: { x: number; y: number } }\n\nexport function useWhiteboardLayout<T extends WidthMap>({\n widths,\n startX = 20,\n y = 40,\n gap = 20,\n}: UseWhiteboardLayoutOptions<T>) {\n const panelWidth = useMemo(() => {\n const normalized: WidthMap = {}\n for (const [key, value] of Object.entries(widths)) {\n normalized[key] = snapToWhiteboardGrid(value)\n }\n return normalized as T\n }, [widths])\n\n const layout = useMemo(\n () => ({\n startX: snapToWhiteboardGrid(startX),\n y: snapToWhiteboardGrid(y),\n gap: snapToWhiteboardGrid(gap),\n }),\n [startX, y, gap]\n )\n\n const positions = useMemo(() => {\n const next = {} as PositionMap<T>\n let x = layout.startX\n for (const [key, width] of Object.entries(panelWidth)) {\n ;(next as Record<string, { x: number; y: number }>)[key] = { x, y: layout.y }\n x += width + layout.gap\n }\n return next\n }, [layout.gap, layout.startX, layout.y, panelWidth])\n\n return { layout, panelWidth, positions }\n}\n","export function cn(...args: (string | false | null | undefined)[]): string {\n return args.filter(Boolean).join(' ')\n}\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype AlertTone = 'error' | 'muted' | 'info' | 'success'\n\ninterface AlertProps extends HTMLAttributes<HTMLParagraphElement> {\n tone?: AlertTone\n}\n\nconst toneClasses: Record<AlertTone, string> = {\n error: 'status-error',\n muted: 'text-sm text-muted',\n info: 'ui-alert ui-alert--info',\n success: 'ui-alert ui-alert--success',\n}\n\nexport function Alert({ tone = 'info', className, ...props }: AlertProps) {\n return <p className={cn(toneClasses[tone], className)} {...props} />\n}\n","import { forwardRef, type ButtonHTMLAttributes } from 'react'\nimport { Loader2 } from './icons'\nimport { cn } from './cn'\n\ntype ButtonVariant = 'primary' | 'secondary' | 'danger'\n\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant\n fullWidth?: boolean\n iconOnly?: boolean\n loading?: boolean\n loadingText?: string\n}\n\nconst variantClasses: Record<ButtonVariant, string> = {\n primary: '',\n secondary: 'secondary-btn',\n danger: 'danger-btn',\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n fullWidth = false,\n iconOnly = false,\n loading = false,\n disabled,\n className,\n children,\n loadingText,\n ...props\n },\n ref\n) {\n return (\n <button\n ref={ref}\n className={cn(variantClasses[variant], fullWidth && 'full-width-btn', iconOnly && 'icon-only-btn', className)}\n disabled={disabled || loading}\n {...props}\n >\n {loading ? (\n <>\n <Loader2 size={14} className=\"icon-spin\" />\n {loadingText || children}\n </>\n ) : (\n children\n )}\n </button>\n )\n})\n","import { createElement, type ElementType, type HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface ButtonRowProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n}\n\n/**\n * A flexible row of buttons with equal sizing. Replaces ALL action-row patterns:\n * `element-actions`, `asset-actions`, `character-actions`, `character-secondary-row`,\n * `editor-header__actions`, `style-picker-actions`, `confirm-actions`, `form-actions`,\n * `lang-batch-actions`, `widget-actions-row`.\n *\n * This replaces the old ActionGroup component which mapped variant strings to CSS classes.\n */\nexport function ButtonRow({ as = 'div', className, ...props }: ButtonRowProps) {\n return createElement(as, {\n className: cn('button-row', className),\n ...props,\n })\n}\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype ChipProps = HTMLAttributes<HTMLSpanElement>\n\nexport function Chip({ className, ...props }: ChipProps) {\n return <span className={cn('chip', className)} {...props} />\n}\n","import type { ButtonHTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface ChoiceCardProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n active?: boolean\n}\n\nexport function ChoiceCard({ active = false, className, ...props }: ChoiceCardProps) {\n return (\n <button\n type=\"button\"\n className={cn('choice-card', className)}\n data-active={active}\n {...props}\n />\n )\n}\n","import { createElement, type ElementType, type HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface ListProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n reset?: boolean\n}\n\nexport function List({ as = 'ul', reset = true, className, ...props }: ListProps) {\n return createElement(as, {\n className: cn(reset && 'list-reset', className),\n ...props,\n })\n}\n","import { createElement, type ElementType, type HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype SkeletonRadius = 'sm' | 'md' | 'pill'\n\nconst radiusClasses: Record<SkeletonRadius, string> = {\n sm: '',\n md: 'skeleton--md',\n pill: 'skeleton--pill',\n}\n\ninterface SkeletonProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n radius?: SkeletonRadius\n}\n\nexport function Skeleton({ as = 'div', radius = 'sm', className, ...props }: SkeletonProps) {\n return createElement(as, {\n className: cn('skeleton', radiusClasses[radius], className),\n 'aria-hidden': true,\n ...props,\n })\n}\n\nexport function InputSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton className={cn('skeleton-input', className)} {...rest} />\n}\n\nexport function ButtonSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton className={cn('skeleton-btn', className)} {...rest} />\n}\n\nexport function IconButtonSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton className={cn('skeleton-icon-btn', className)} {...rest} />\n}\n\nexport function SelectSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton className={cn('skeleton-select', className)} {...rest} />\n}\n\nexport function TextareaSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton className={cn('skeleton-textarea', className)} {...rest} />\n}\n\nexport function ThumbSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton className={cn('skeleton-thumb', className)} {...rest} />\n}\n\nexport function ChipSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton radius=\"pill\" className={cn('skeleton-chip', className)} {...rest} />\n}\n\nexport function TitleSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton className={cn('skeleton-title', className)} {...rest} />\n}\n\ninterface LineSkeletonProps extends HTMLAttributes<HTMLDivElement> {\n short?: boolean\n}\n\nexport function LineSkeleton({ short = false, className, ...props }: LineSkeletonProps) {\n return <Skeleton className={cn('skeleton-line', short && 'skeleton-line--short', className)} {...props} />\n}\n\nexport function AvatarSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton radius=\"pill\" className={cn('skeleton-avatar', className)} {...rest} />\n}\n\nexport function CanvasSkeleton(props: HTMLAttributes<HTMLDivElement>) {\n const { className, ...rest } = props\n return <Skeleton className={cn('skeleton-canvas', className)} {...rest} />\n}\n","import type { ReactNode } from 'react'\nimport { ChoiceCard } from './ChoiceCard'\nimport { List } from './List'\nimport { LineSkeleton, TitleSkeleton } from './Skeleton'\nimport { cn } from './cn'\n\nexport interface ChoiceOption<T extends string> {\n value: T\n label: ReactNode\n description?: ReactNode\n disabled?: boolean\n}\n\ninterface ChoiceGroupProps<T extends string> {\n options: ChoiceOption<T>[]\n value: T | null | undefined\n onChange: (value: T) => void\n className?: string\n}\n\nexport function ChoiceGroup<T extends string>({\n options,\n value,\n onChange,\n className,\n}: ChoiceGroupProps<T>) {\n return (\n <List className={cn('choice-list', className)}>\n {options.map((option) => (\n <li key={option.value}>\n <ChoiceCard\n active={value === option.value}\n onClick={() => onChange(option.value)}\n disabled={option.disabled}\n data-has-description={option.description ? 'true' : 'false'}\n >\n {option.description ? (\n <span className=\"choice-card__row\">\n <span className=\"choice-card__label\">{option.label}</span>\n <span className=\"choice-card__description\">{option.description}</span>\n </span>\n ) : (\n <span className=\"choice-card__label\">{option.label}</span>\n )}\n </ChoiceCard>\n </li>\n ))}\n </List>\n )\n}\n\ninterface ChoiceGroupSkeletonProps {\n count?: number\n className?: string\n withDescription?: boolean\n}\n\nexport function ChoiceGroupSkeleton({ count = 4, className, withDescription = false }: ChoiceGroupSkeletonProps) {\n return (\n <List className={cn('choice-list', className)} aria-hidden>\n {Array.from({ length: count }).map((_, i) => (\n <li key={`choice-skeleton-${i}`}>\n <div className=\"choice-card\">\n <TitleSkeleton className={cn('skeleton-title--sm', !withDescription && 'skeleton-choice-label')} />\n {withDescription ? <LineSkeleton short /> : null}\n </div>\n </li>\n ))}\n </List>\n )\n}\n","import type { HTMLAttributes, InputHTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface CoordGridProps extends HTMLAttributes<HTMLDivElement> {}\n\n/**\n * A 2-column grid for coordinate inputs.\n * Replaces `<div className=\"coord-grid\">`.\n */\nexport function CoordGrid({ className, ...props }: CoordGridProps) {\n return <div className={cn('coord-grid', className)} {...props} />\n}\n\ninterface CoordInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n axis: string\n}\n\n/**\n * A labeled coordinate input (x, y, z, scale).\n * Replaces `<label className=\"coord-input\">x <input ...></label>`.\n */\nexport function CoordInput({ axis, className, ...props }: CoordInputProps) {\n return (\n <label className={cn('coord-input', className)}>\n {axis} <input type=\"number\" step=\"0.01\" {...props} />\n </label>\n )\n}\n","import { createElement, type ElementType, type HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype StackSize = 'sm' | 'md'\n\ninterface StackProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n size?: StackSize\n}\n\nexport function Stack({\n as,\n size = 'md',\n className,\n ...props\n}: StackProps) {\n return createElement(as ?? 'div', {\n className: cn(size === 'sm' ? 'panel-stack-sm' : 'panel-stack', className),\n ...props,\n })\n}\n","import { createElement, type ElementType, type HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface TypographyProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n}\n\ninterface AssetTitleProps extends TypographyProps {\n clamp?: boolean\n}\n\ntype MutedTextSize = 'xs' | 'sm' | 'md'\n\nconst mutedSizeClasses: Record<MutedTextSize, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: '',\n}\n\nexport function AssetTitle({ as = 'p', clamp = false, className, ...props }: AssetTitleProps) {\n return createElement(as, {\n className: cn('asset-title', clamp && 'asset-title--clamp', className),\n ...props,\n })\n}\n\nexport function StoryTitle({ as = 'h3', className, ...props }: TypographyProps) {\n return createElement(as, {\n className: cn('story-title', className),\n ...props,\n })\n}\n\nexport function MutedText({ as = 'p', size = 'sm', className, ...props }: TypographyProps & { size?: MutedTextSize }) {\n return createElement(as, {\n className: cn(mutedSizeClasses[size], 'text-muted', className),\n ...props,\n })\n}\n\nexport function PageTitle({ as = 'h1', className, ...props }: TypographyProps) {\n return createElement(as, {\n className: cn('page-title', className),\n ...props,\n })\n}\n\nexport function SectionTitle({ as = 'span', className, ...props }: TypographyProps) {\n return createElement(as, {\n className: cn('widget-section__title', className),\n ...props,\n })\n}\n\nexport function SectionDescription({ as = 'p', className, ...props }: TypographyProps) {\n return createElement(as, {\n className: cn('widget-section__description', className),\n ...props,\n })\n}\n","import type { ReactNode } from 'react'\nimport { Stack } from './Stack'\nimport { AssetTitle, MutedText } from './Typography'\n\ninterface EmptyStateProps {\n title: ReactNode\n description?: ReactNode\n action?: ReactNode\n}\n\nexport function EmptyState({ title, description, action }: EmptyStateProps) {\n return (\n <Stack size=\"sm\">\n <AssetTitle>{title}</AssetTitle>\n {description ? <MutedText>{description}</MutedText> : null}\n {action}\n </Stack>\n )\n}\n","import { createElement, type ElementType, type HTMLAttributes, type ReactNode } from 'react'\nimport { cn } from './cn'\nimport { Label } from './Label'\nimport { MutedText } from './Typography'\n\ntype FieldLayout = 'stack' | 'control'\n\ninterface FieldProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n label?: ReactNode\n htmlFor?: string\n hint?: ReactNode\n error?: ReactNode\n layout?: FieldLayout\n}\n\nexport function Field({\n as,\n label,\n htmlFor,\n hint,\n error,\n layout = 'stack',\n className,\n children,\n ...props\n}: FieldProps) {\n return createElement(\n as ?? 'div',\n {\n className: cn(layout === 'control' ? 'widget-control' : 'panel-stack-sm', className),\n ...props,\n },\n <>\n {label ? <Label htmlFor={htmlFor}>{label}</Label> : null}\n {children}\n {hint ? <MutedText size=\"xs\">{hint}</MutedText> : null}\n {error ? <p className=\"field-error\">{error}</p> : null}\n </>\n )\n}\n","import type { LabelHTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype LabelProps = LabelHTMLAttributes<HTMLLabelElement>\n\nexport function Label({ className, ...props }: LabelProps) {\n return <label className={cn('widget-label', className)} {...props} />\n}\n","'use client'\n\nimport { Loader2 } from './icons'\nimport type { ReactNode } from 'react'\n\ninterface GeneratingOverlayProps {\n isGenerating: boolean\n children: ReactNode\n message?: string\n}\n\nexport function GeneratingOverlay({ isGenerating, children, message }: GeneratingOverlayProps) {\n return (\n <div className=\"generating-overlay-wrap\">\n {children}\n {isGenerating && (\n <div className=\"generating-overlay\" aria-live=\"polite\">\n <Loader2 size={20} className=\"icon-spin\" />\n <span>{message ?? 'Generating, please wait…'}</span>\n </div>\n )}\n </div>\n )\n}\n","import { createElement, type ElementType, type HTMLAttributes, type ReactNode } from 'react'\nimport { cn } from './cn'\n\ninterface IconTextProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n icon: ReactNode\n}\n\nexport function IconText({ as = 'span', icon, className, children, ...props }: IconTextProps) {\n return createElement(\n as,\n {\n className: cn('inline-row', className),\n ...props,\n },\n <>\n {icon}\n {children}\n </>\n )\n}\n","'use client'\n\nimport { useState, type HTMLAttributes, type ReactNode } from 'react'\nimport { cn } from './cn'\n\ntype ImageThumbSize = 'sm' | 'md' | 'fluid'\ntype ImageThumbFit = 'contain' | 'cover'\n\ninterface ImageThumbProps extends HTMLAttributes<HTMLDivElement> {\n src?: string | null\n alt: string\n placeholder?: ReactNode\n size?: ImageThumbSize\n fit?: ImageThumbFit\n onImageError?: () => void\n}\n\nexport function ImageThumb({\n src,\n alt,\n placeholder = 'No image',\n size = 'md',\n fit = 'contain',\n onImageError,\n className,\n ...props\n}: ImageThumbProps) {\n const [failedSrc, setFailedSrc] = useState<string | null>(null)\n const failed = Boolean(src && failedSrc === src)\n\n const classes = cn('image-thumb', `image-thumb--${size}`, `image-thumb--fit-${fit}`, className)\n\n return (\n <div className={classes} {...props}>\n {src && !failed ? (\n <img\n src={src}\n alt={alt}\n className=\"image-thumb__img\"\n style={{ objectFit: fit, objectPosition: 'center' }}\n onError={() => {\n setFailedSrc(src)\n onImageError?.()\n }}\n />\n ) : (\n <span className=\"image-thumb__placeholder\">{placeholder}</span>\n )}\n </div>\n )\n}\n","import { createElement, type ElementType, type HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface InlineProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n justify?: 'start' | 'between'\n}\n\nexport function Inline({\n as,\n justify = 'start',\n className,\n ...props\n}: InlineProps) {\n return createElement(as ?? 'div', {\n className: cn(justify === 'between' ? 'space-between' : 'inline-row', className),\n ...props,\n })\n}\n","import { forwardRef, type InputHTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype InputProps = InputHTMLAttributes<HTMLInputElement>\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input({ className, ...props }, ref) {\n return <input ref={ref} className={cn(className)} {...props} />\n})\n","import { createElement, type ElementType, type HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface ItemCardProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n}\n\n/**\n * A bordered card container used for list items (elements, facts, secrets, users, characters, assets).\n * Replaces raw `<div className=\"element-card\">`, `<div className=\"fact-card\">`,\n * `<div className=\"secret-card\">`, `<li className=\"user-card\">`, `<div className=\"character-card\">`,\n * `<li className=\"asset-card\">`, etc.\n */\nexport function ItemCard({ as = 'div', className, ...props }: ItemCardProps) {\n return createElement(as, {\n className: cn('item-card', className),\n ...props,\n })\n}\n","import { createElement, type ElementType, type HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface ItemListProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n}\n\n/**\n * A vertical list with consistent gap, used for lists of ItemCards.\n * Replaces raw `<div className=\"element-list\">`, `<div className=\"fact-list\">`,\n * `<div className=\"secret-list\">`, `<List className=\"user-list\">`,\n * `<List className=\"characters-list\">`, etc.\n */\nexport function ItemList({ as = 'div', className, ...props }: ItemListProps) {\n return createElement(as, {\n className: cn('item-list', className),\n ...props,\n })\n}\n","import { Loader2 } from './icons'\nimport { cn } from './cn'\n\ninterface LoadingStateProps {\n label?: string\n className?: string\n}\n\nexport function LoadingState({ label = 'Loading...', className }: LoadingStateProps) {\n return (\n <span className={cn('status-inline', className)}>\n <Loader2 size={14} className=\"icon-spin\" />\n {label}\n </span>\n )\n}\n","import type { ReactNode } from 'react'\n\nexport function PageShell({ children }: { children: ReactNode }) {\n return <main className=\"page-shell\">{children}</main>\n}\n\nexport function PageCard({ children }: { children: ReactNode }) {\n return <div className=\"page-card\">{children}</div>\n}\n","'use client'\n\nimport { X } from './icons'\nimport { Button } from './Button'\n\ninterface PanelCloseButtonProps {\n onClick: () => void\n label?: string\n}\n\nexport function PanelCloseButton({ onClick, label = 'Close' }: PanelCloseButtonProps) {\n return (\n <Button variant=\"secondary\" className=\"panel-close-btn\" onClick={onClick}>\n <X size={14} />\n {label}\n </Button>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { cn } from './cn'\nimport { SectionDescription, SectionTitle } from './Typography'\n\ninterface PanelSectionProps extends HTMLAttributes<HTMLDivElement> {\n heading?: ReactNode\n description?: ReactNode\n actions?: ReactNode\n}\n\nexport function PanelSection({ heading, description, actions, className, children, ...props }: PanelSectionProps) {\n return (\n <section className={cn('widget-section', className)} {...props}>\n {heading || actions ? (\n <header className={actions ? 'title-row' : undefined}>\n {heading ? <SectionTitle>{heading}</SectionTitle> : null}\n {actions}\n </header>\n ) : null}\n {description ? <SectionDescription>{description}</SectionDescription> : null}\n {children}\n </section>\n )\n}\n","'use client'\n\nimport type { ComponentType } from 'react'\n\ninterface PanelTitleProps {\n icon: ComponentType<{ size?: number; className?: string }>\n label: string\n}\n\nexport function PanelTitle({ icon: Icon, label }: PanelTitleProps) {\n return (\n <span className=\"panel-title-with-icon\">\n <Icon size={13} className=\"panel-title-icon\" />\n <span>{label}</span>\n </span>\n )\n}\n","import { createElement, type ElementType, type HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface PickerCardProps extends HTMLAttributes<HTMLElement> {\n as?: ElementType\n}\n\n/**\n * A clickable card used inside picker grids (asset pickers, variant pickers).\n * Replaces `<button className=\"picker-card\">`, `<Stack className=\"picker-card picker-card--skeleton\">`.\n */\nexport function PickerCard({ as = 'button', className, ...props }: PickerCardProps) {\n return createElement(as, {\n className: cn('picker-card', className),\n ...props,\n })\n}\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './cn'\nimport { List } from './List'\n\ntype PickerGridVariant = 'elements' | 'characters' | 'library'\n\nconst variantClasses: Record<PickerGridVariant, string> = {\n elements: 'picker-grid--elements',\n characters: 'picker-grid--characters',\n library: 'picker-grid--library',\n}\n\ninterface PickerGridProps extends HTMLAttributes<HTMLUListElement> {\n variant: PickerGridVariant\n}\n\n/**\n * A responsive grid for picker cards.\n * Replaces `<List className=\"picker-grid picker-grid--elements\">`, etc.\n */\nexport function PickerGrid({ variant, className, ...props }: PickerGridProps) {\n return <List className={cn('picker-grid', variantClasses[variant], className)} {...props} />\n}\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype PillTone = 'default' | 'success' | 'warning' | 'danger'\n\ninterface PillProps extends HTMLAttributes<HTMLSpanElement> {\n tone?: PillTone\n}\n\nconst toneClasses: Record<PillTone, string> = {\n default: '',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n}\n\nexport function Pill({ tone = 'default', className, ...props }: PillProps) {\n return <span className={cn('pill', toneClasses[tone], className)} {...props} />\n}\n","import { forwardRef, type SelectHTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype SelectProps = SelectHTMLAttributes<HTMLSelectElement>\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(function Select({ className, ...props }, ref) {\n return <select ref={ref} className={cn(className)} {...props} />\n})\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype SplitLayoutVariant = 'element' | 'character' | 'user'\n\nconst variantClasses: Record<SplitLayoutVariant, string> = {\n element: 'split-layout--element',\n character: 'split-layout--character',\n user: 'split-layout--user',\n}\n\ninterface SplitLayoutProps extends HTMLAttributes<HTMLDivElement> {\n variant: SplitLayoutVariant\n}\n\n/**\n * A two-column grid layout (image + content side-by-side).\n * Replaces `<div className=\"element-main\">`, `<div className=\"character-main\">`,\n * `<article className=\"user-row\">`.\n */\nexport function SplitLayout({ variant, className, ...props }: SplitLayoutProps) {\n return <div className={cn('split-layout', variantClasses[variant], className)} {...props} />\n}\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface TagRowProps extends HTMLAttributes<HTMLDivElement> {}\n\n/**\n * A horizontal wrapping row for chips/tags/pills/small items.\n * Replaces `<div className=\"element-tags-row\">`, `<div className=\"chip-row\">`,\n * `<div className=\"asset-meta\">`, etc.\n */\nexport function TagRow({ className, ...props }: TagRowProps) {\n return <div className={cn('tag-row', className)} {...props} />\n}\n","import { forwardRef, type TextareaHTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ntype TextareaProps = TextareaHTMLAttributes<HTMLTextAreaElement>\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea({ className, ...props }, ref) {\n return <textarea ref={ref} className={cn(className)} {...props} />\n})\n","'use client'\n\nimport { type ReactNode } from 'react'\nimport { Moon, Sun } from './icons'\n\ninterface ThemeToggleProps {\n className?: string\n theme?: 'light' | 'dark'\n onToggle?: () => void\n lightIcon?: ReactNode\n darkIcon?: ReactNode\n}\n\nexport function ThemeToggle({ className, theme = 'light', onToggle, lightIcon, darkIcon }: ThemeToggleProps) {\n return (\n <button className={className} onClick={onToggle} title={`Switch to ${theme === 'light' ? 'dark' : 'light'} mode`} aria-label=\"Toggle theme\">\n {theme === 'light' ? (darkIcon ?? <Moon />) : (lightIcon ?? <Sun />)}\n </button>\n )\n}\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './cn'\n\ninterface TitleRowProps extends HTMLAttributes<HTMLDivElement> {}\n\n/**\n * A horizontal row with space-between alignment, used for title + action pairs.\n * Replaces `<div className=\"element-card__title-row\">`,\n * `<div className=\"character-info__title-row\">`,\n * `<header className=\"widget-section__header\">`, etc.\n */\nexport function TitleRow({ className, ...props }: TitleRowProps) {\n return <div className={cn('title-row', className)} {...props} />\n}\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './cn'\nimport { ButtonRow } from './ButtonRow'\nimport { Inline } from './Inline'\nimport { ItemCard } from './ItemCard'\nimport { ItemList } from './ItemList'\nimport { List } from './List'\nimport { PickerCard } from './PickerCard'\nimport { SplitLayout } from './SplitLayout'\nimport { Stack } from './Stack'\nimport { TagRow } from './TagRow'\nimport { AvatarSkeleton, ButtonSkeleton, ChipSkeleton, InputSkeleton, LineSkeleton, SelectSkeleton, ThumbSkeleton, TitleSkeleton } from './Skeleton'\n\ninterface PanelFormSkeletonProps extends HTMLAttributes<HTMLDivElement> {\n inputs?: number\n showButton?: boolean\n}\n\nexport function PanelFormSkeleton({ inputs = 1, showButton = true, className, ...props }: PanelFormSkeletonProps) {\n return (\n <Stack className={className} {...props}>\n {Array.from({ length: inputs }).map((_, i) => (\n <InputSkeleton key={`panel-form-input-${i}`} />\n ))}\n {showButton && <ButtonSkeleton />}\n </Stack>\n )\n}\n\nexport function StoryCardSkeleton() {\n return (\n <article className=\"story-card\">\n <div className=\"story-cover\">\n <div className=\"story-cover__placeholder story-cover__placeholder--skeleton\" />\n </div>\n <div className=\"story-card__overlay story-card__overlay--skeleton\">\n <div className=\"story-card__overlay-text\">\n <Inline as=\"header\">\n <ChipSkeleton />\n <ChipSkeleton />\n </Inline>\n <TitleSkeleton />\n <LineSkeleton short />\n </div>\n </div>\n </article>\n )\n}\n\nexport function UserCardSkeleton() {\n return (\n <ItemCard as=\"li\">\n <SplitLayout variant=\"user\">\n <AvatarSkeleton />\n <Stack size=\"sm\">\n <TitleSkeleton />\n <LineSkeleton short />\n </Stack>\n <Stack size=\"sm\">\n <ChipSkeleton />\n <SelectSkeleton />\n </Stack>\n </SplitLayout>\n </ItemCard>\n )\n}\n\ninterface UserListSkeletonProps {\n count?: number\n}\n\nexport function UserListSkeleton({ count = 3 }: UserListSkeletonProps) {\n return (\n <ItemList as=\"ul\">\n {Array.from({ length: count }).map((_, i) => (\n <UserCardSkeleton key={`user-skeleton-${i}`} />\n ))}\n </ItemList>\n )\n}\n\nexport function AssetCardSkeleton() {\n return (\n <ItemCard as=\"li\">\n <Stack size=\"sm\">\n <ThumbSkeleton className=\"asset-thumb\" />\n <TitleSkeleton />\n <TagRow>\n <ChipSkeleton />\n <ChipSkeleton />\n </TagRow>\n </Stack>\n <ButtonRow>\n <ButtonSkeleton />\n <ButtonSkeleton />\n </ButtonRow>\n </ItemCard>\n )\n}\n\ninterface PickerGridSkeletonProps {\n count?: number\n gridClass: string\n}\n\nexport function PickerGridSkeleton({ count = 8, gridClass }: PickerGridSkeletonProps) {\n return (\n <List className={cn('picker-grid', gridClass)}>\n {Array.from({ length: count }).map((_, i) => (\n <li key={`picker-skeleton-${i}`}>\n <PickerCard as=\"div\" className=\"picker-card--skeleton\">\n <Stack size=\"sm\">\n <ThumbSkeleton className=\"asset-thumb\" />\n <LineSkeleton short />\n </Stack>\n </PickerCard>\n </li>\n ))}\n </List>\n )\n}\n"],"mappings":"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","names":["useRef","useEffect","jsx","jsxs","jsx","jsxs","jsx","jsxs","useRef","useEffect","useRef","useCallback","useEffect","jsx","jsxs","FloatingPanel","useRef","useEffect","useCallback","useEffect","Fragment","jsx","jsxs","useEffect","jsx","jsxs","jsx","Fragment","jsx","jsxs","Button","jsx","jsx","createElement","createElement","createElement","jsx","createElement","jsx","jsxs","jsx","jsxs","createElement","createElement","createElement","createElement","jsx","jsxs","createElement","jsx","Fragment","jsx","jsxs","createElement","jsx","jsxs","createElement","Fragment","jsxs","createElement","useState","jsx","useState","createElement","createElement","forwardRef","jsx","forwardRef","Input","createElement","createElement","createElement","createElement","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","createElement","createElement","jsx","variantClasses","jsx","toneClasses","forwardRef","jsx","forwardRef","Select","jsx","variantClasses","jsx","forwardRef","jsx","forwardRef","Textarea","jsx","jsx","jsx","jsxs"]}