@prometheus-ags/prometheus-entity-management 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/graph.ts","../src/engine.ts","../src/devtools.ts","../src/hooks.ts","../src/view/evaluator.ts","../src/view/prisma-compile.ts","../src/view/types.ts","../src/view/use-entity-view.ts","../src/crud/relations.ts","../src/crud/use-entity-crud.ts","../src/adapters/realtime-manager.ts","../src/adapters/realtime-adapters.ts","../src/adapters/prisma.ts","../src/adapters/electricsql.ts","../src/graphql/client.ts","../src/graphql/hooks.ts","../src/ui/utils.ts","../src/ui/entity-table.tsx","../src/ui/entity-sheets.tsx","../src/ui/columns.tsx","../src/table/row-models.ts","../src/table/use-table.ts","../src/table/faceting.ts","../src/table/selection-store.ts","../src/table/presets/preset-store.ts","../src/table/presets/memory-adapter.ts","../src/table/presets/zustand-adapter.ts","../src/table/presets/rest-adapter.ts","../src/table/presets/supabase-adapter.ts","../src/table/presets/electricsql-adapter.ts","../src/table/presets/use-table-presets.ts","../src/table/presets/table-storage-provider.tsx","../src/ui/table-primitives.tsx","../src/ui/data-table-column-header.tsx","../src/ui/inline-editor.tsx","../src/ui/action-column.tsx","../src/ui/data-table.tsx","../src/ui/gallery-view.tsx","../src/ui/list-view.tsx","../src/ui/view-mode-switcher.tsx","../src/ui/data-table-toolbar.tsx","../src/ui/data-table-pagination.tsx","../src/ui/empty-state.tsx","../src/ui/multi-select-bar.tsx","../src/ui/preset-picker.tsx","../src/ui/filter-preset-dialog.tsx","../src/ui/column-preset-dialog.tsx","../src/ui/entity-list-view.tsx","../src/ui/data-table-filter.tsx","../src/ui/pure-columns.tsx"],"names":["fetch","useStore","useMemo","useRef","useState","useCallback","useShallow","useEffect","create","list","id","document","_","React","jsxs","Fragment","jsx","X","Loader2","getCoreRowModel","rows","getSortedRowModel","s","newSort","createStore","InlineCellEditor","useId","PencilIcon","TrashIcon","XIcon","PlusIcon","selectionColumn","textColumn","numberColumn","dateColumn","booleanColumn","enumColumn","actionsColumn"],"mappings":"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","file":"index.mjs","sourcesContent":["import { create } from \"zustand\";\nimport { subscribeWithSelector } from \"zustand/middleware\";\nimport { immer } from \"zustand/middleware/immer\";\n\n/** Logical entity kind (e.g. `\"Post\"`). Used to partition the normalized graph. */\nexport type EntityType = string;\n/** Primary key for an entity within its `type`. Lists and relations reference this, not row copies. */\nexport type EntityId = string;\n/** Stable string key for a list query (often `JSON.stringify`-shaped). Lists store IDs only under this key. */\nexport type QueryKey = string;\n\n/**\n * Fetch/cache metadata for a single entity instance (`type:id`).\n * Separates transport concerns from canonical `entities` data so hooks can show spinners and stale-while-revalidate without mutating server-shaped fields.\n */\nexport interface EntityState {\n isFetching: boolean;\n lastFetched: number | null;\n error: string | null;\n stale: boolean;\n}\n\n/**\n * Ordered **IDs** for a list query plus pagination metadata — never embedded entity payloads.\n * Cross-view reactivity depends on this: when `entities[type][id]` updates, every list containing that id re-resolves rows from the graph.\n */\nexport interface ListState {\n ids: EntityId[];\n total: number | null;\n nextCursor: string | null;\n prevCursor: string | null;\n hasNextPage: boolean;\n hasPrevPage: boolean;\n isFetching: boolean;\n isFetchingMore: boolean;\n error: string | null;\n lastFetched: number | null;\n stale: boolean;\n currentPage: number | null;\n pageSize: number | null;\n}\n\n/**\n * Stable fallbacks for missing `lists[key]` / `entityStates[key]` slots.\n * Inline `?? { ... }` defaults allocate new objects every `getSnapshot` call and trigger React 19\n * “getSnapshot should be cached” / maximum update depth errors with `useSyncExternalStore`.\n */\nexport const EMPTY_IDS: EntityId[] = [];\n\nexport const EMPTY_ENTITY_STATE: EntityState = {\n isFetching: false,\n lastFetched: null,\n error: null,\n stale: false,\n};\n\nexport const EMPTY_LIST_STATE: ListState = {\n ids: EMPTY_IDS,\n total: null,\n nextCursor: null,\n prevCursor: null,\n hasNextPage: false,\n hasPrevPage: false,\n isFetching: false,\n isFetchingMore: false,\n error: null,\n lastFetched: null,\n stale: false,\n currentPage: null,\n pageSize: null,\n};\n\n/**\n * Canonical Zustand store: **entities** (server truth), **patches** (UI-only overlay), **lists** (id order + list meta), and **entityStates** (per-entity fetch state).\n * Prefer hooks for React reads; use `useGraphStore.getState()` inside stores/adapters/engine code where React is not available.\n */\nexport interface GraphState {\n /** Normalized server-confirmed records. Mutate only via upsert/replace/remove — not from components. */\n entities: Record<EntityType, Record<EntityId, Record<string, unknown>>>;\n /** Local-only fields merged at read time (`readEntity` / hooks). Never send patches to the server. */\n patches: Record<EntityType, Record<EntityId, Record<string, unknown>>>;\n /** Per-entity fetch lifecycle keyed as `${type}:${id}`. */\n entityStates: Record<string, EntityState>;\n /** List slots keyed by serialized query keys. Values hold id arrays and pagination — not entity clones. */\n lists: Record<QueryKey, ListState>;\n /**\n * Shallow-merge `data` into the canonical entity. Use when the API returns partial updates or normalized fragments.\n * @param type - Entity kind\n * @param id - Entity id\n * @param data - Fields to merge into existing canonical data\n */\n upsertEntity: (type: EntityType, id: EntityId, data: Record<string, unknown>) => void;\n /**\n * Batch upsert for list endpoints — avoids N separate writes when hydrating many rows at once.\n * @param type - Entity kind\n * @param entries - Pairs of id + partial/full payloads to merge\n */\n upsertEntities: (type: EntityType, entries: Array<{ id: EntityId; data: Record<string, unknown> }>) => void;\n /**\n * Replace the canonical entity entirely (no merge). Use when the server returns a full snapshot and partial merge would leave stale keys behind.\n */\n replaceEntity: (type: EntityType, id: EntityId, data: Record<string, unknown>) => void;\n /** Remove canonical entity, its patches, and its entityState. Does not remove the id from lists — use `removeIdFromAllLists` if needed. */\n removeEntity: (type: EntityType, id: EntityId) => void;\n /**\n * Merge UI-only fields into `patches` so every subscriber sees selection, expansion, optimistic toggles, etc., without forking canonical data.\n */\n patchEntity: (type: EntityType, id: EntityId, patch: Record<string, unknown>) => void;\n /** Remove specific patch keys; other patch keys remain. */\n unpatchEntity: (type: EntityType, id: EntityId, keys: string[]) => void;\n /** Drop all patches for an entity (e.g. after successful mutation when server data is authoritative). */\n clearPatch: (type: EntityType, id: EntityId) => void;\n /** Reflect in-flight GET for a single entity (deduped fetches in the engine still flip this once per logical request). */\n setEntityFetching: (type: EntityType, id: EntityId, fetching: boolean) => void;\n /** Persist terminal fetch failure message and clear fetching — hooks surface `error` while leaving prior data if any. */\n setEntityError: (type: EntityType, id: EntityId, error: string | null) => void;\n /** Mark entity successfully loaded; clears error, fetching, stale, and updates `lastFetched`. */\n setEntityFetched: (type: EntityType, id: EntityId) => void;\n /** Drive background revalidation: when true, hooks refetch while still showing cached `readEntity` data. */\n setEntityStale: (type: EntityType, id: EntityId, stale: boolean) => void;\n /**\n * Replace list ids and merge pagination meta after a primary list fetch (not load-more).\n * Resets fetching flags and clears list error on success path (engine calls this after normalize).\n */\n setListResult: (key: QueryKey, ids: EntityId[], meta: Partial<Omit<ListState, \"ids\" | \"isFetching\" | \"isFetchingMore\" | \"error\" | \"stale\">>) => void;\n /** Append unique ids (e.g. infinite scroll) while merging meta; dedupes id order. */\n appendListResult: (key: QueryKey, ids: EntityId[], meta: Partial<Omit<ListState, \"ids\" | \"isFetching\" | \"isFetchingMore\" | \"error\" | \"stale\">>) => void;\n /** Prepend ids (e.g. “new item at top”) with optional meta merge. */\n prependListResult: (key: QueryKey, ids: EntityId[], meta?: Partial<ListState>) => void;\n /** After deletes, keep every list consistent by removing an id everywhere it appears and decrementing `total` when tracked. */\n removeIdFromAllLists: (type: EntityType, id: EntityId) => void;\n /**\n * Insert or move an id in one list. If the id already exists, it is removed first then re-inserted at `position`.\n * @param position - `\"start\"`, `\"end\"`, or numeric index\n */\n insertIdInList: (key: QueryKey, id: EntityId, position: \"start\" | \"end\" | number) => void;\n /** Initial or full list fetch in progress (not page-2+). */\n setListFetching: (key: QueryKey, fetching: boolean) => void;\n /** Pagination / “load more” in progress for the same list key. */\n setListFetchingMore: (key: QueryKey, fetchingMore: boolean) => void;\n /** Record list fetch failure; clears both fetching flags. */\n setListError: (key: QueryKey, error: string | null) => void;\n /** Mark a list query stale so hooks can refetch without discarding current ids (stale-while-revalidate). */\n setListStale: (key: QueryKey, stale: boolean) => void;\n /**\n * Mark one or all entities of a type stale for subscriber-driven refetch. Does not delete data.\n * @param id - Omit to stale every entity of `type`\n */\n invalidateEntity: (type: EntityType, id?: EntityId) => void;\n /**\n * Mark lists stale by key prefix or custom predicate so the next access triggers background refresh without dropping ids immediately.\n */\n invalidateLists: (matcher: string | ((key: QueryKey) => boolean)) => void;\n /** Convenience: stale all entities of a type and lists whose keys start with `type`. */\n invalidateType: (type: EntityType) => void;\n /**\n * Single read path: `{ ...entities[type][id], ...patches[type][id] }` or null if no canonical row exists.\n * @returns Merged view suitable for rendering; not a deep clone\n */\n readEntity: <T = Record<string, unknown>>(type: EntityType, id: EntityId) => T | null;\n}\n\nfunction defaultEntityState(): EntityState {\n return { ...EMPTY_ENTITY_STATE };\n}\n\nfunction defaultListState(): ListState {\n return { ...EMPTY_LIST_STATE, ids: [] };\n}\n\nfunction ek(type: EntityType, id: EntityId) { return `${type}:${id}`; }\n\n/**\n * Global entity graph store (Zustand + Immer). **Components should not subscribe directly** — use hooks so layering stays `Component → hook → store`.\n * `getState()` is intended for non-React code paths (engine, adapters, mutations) that must write or read the graph synchronously.\n */\nexport const useGraphStore = create<GraphState>()(\n subscribeWithSelector(\n immer((set, get) => ({\n entities: {}, patches: {}, entityStates: {}, lists: {},\n\n upsertEntity: (type, id, data) => set((s) => {\n if (!s.entities[type]) s.entities[type] = {};\n s.entities[type][id] = { ...(s.entities[type][id] ?? {}), ...data };\n }),\n upsertEntities: (type, entries) => set((s) => {\n if (!s.entities[type]) s.entities[type] = {};\n for (const { id, data } of entries)\n s.entities[type][id] = { ...(s.entities[type][id] ?? {}), ...data };\n }),\n replaceEntity: (type, id, data) => set((s) => {\n if (!s.entities[type]) s.entities[type] = {};\n s.entities[type][id] = data;\n }),\n removeEntity: (type, id) => set((s) => {\n delete s.entities[type]?.[id];\n delete s.patches[type]?.[id];\n delete s.entityStates[ek(type, id)];\n }),\n patchEntity: (type, id, patch) => set((s) => {\n if (!s.patches[type]) s.patches[type] = {};\n s.patches[type][id] = { ...(s.patches[type][id] ?? {}), ...patch };\n }),\n unpatchEntity: (type, id, keys) => set((s) => {\n const p = s.patches[type]?.[id]; if (!p) return;\n for (const k of keys) delete p[k];\n }),\n clearPatch: (type, id) => set((s) => { delete s.patches[type]?.[id]; }),\n setEntityFetching: (type, id, fetching) => set((s) => {\n const k = ek(type, id);\n if (!s.entityStates[k]) s.entityStates[k] = defaultEntityState();\n s.entityStates[k].isFetching = fetching;\n }),\n setEntityError: (type, id, error) => set((s) => {\n const k = ek(type, id);\n if (!s.entityStates[k]) s.entityStates[k] = defaultEntityState();\n s.entityStates[k].error = error; s.entityStates[k].isFetching = false;\n }),\n setEntityFetched: (type, id) => set((s) => {\n const k = ek(type, id);\n if (!s.entityStates[k]) s.entityStates[k] = defaultEntityState();\n s.entityStates[k].lastFetched = Date.now();\n s.entityStates[k].isFetching = false;\n s.entityStates[k].error = null; s.entityStates[k].stale = false;\n }),\n setEntityStale: (type, id, stale) => set((s) => {\n const k = ek(type, id);\n if (!s.entityStates[k]) s.entityStates[k] = defaultEntityState();\n s.entityStates[k].stale = stale;\n }),\n setListResult: (key, ids, meta) => set((s) => {\n const ex = s.lists[key] ?? defaultListState();\n s.lists[key] = { ...ex, ...meta, ids, isFetching: false, isFetchingMore: false, error: null, stale: false, lastFetched: Date.now() };\n }),\n appendListResult: (key, ids, meta) => set((s) => {\n const ex = s.lists[key] ?? defaultListState();\n s.lists[key] = { ...ex, ...meta, ids: Array.from(new Set([...ex.ids, ...ids])), isFetching: false, isFetchingMore: false, error: null, stale: false, lastFetched: Date.now() };\n }),\n prependListResult: (key, ids, meta) => set((s) => {\n const ex = s.lists[key] ?? defaultListState();\n s.lists[key] = { ...ex, ...(meta ?? {}), ids: Array.from(new Set([...ids, ...ex.ids])), isFetching: false, isFetchingMore: false, error: null, stale: false, lastFetched: Date.now() };\n }),\n removeIdFromAllLists: (_type, id) => set((s) => {\n for (const key of Object.keys(s.lists)) {\n const list = s.lists[key]; const idx = list.ids.indexOf(id);\n if (idx !== -1) { list.ids.splice(idx, 1); if (list.total !== null) list.total -= 1; }\n }\n }),\n insertIdInList: (key, id, position) => set((s) => {\n if (!s.lists[key]) s.lists[key] = defaultListState();\n const ids = s.lists[key].ids;\n const ex = ids.indexOf(id); if (ex !== -1) ids.splice(ex, 1);\n if (position === \"start\") ids.unshift(id);\n else if (position === \"end\") ids.push(id);\n else ids.splice(position, 0, id);\n }),\n setListFetching: (key, fetching) => set((s) => {\n if (!s.lists[key]) s.lists[key] = defaultListState();\n s.lists[key].isFetching = fetching;\n }),\n setListFetchingMore: (key, fetchingMore) => set((s) => {\n if (!s.lists[key]) s.lists[key] = defaultListState();\n s.lists[key].isFetchingMore = fetchingMore;\n }),\n setListError: (key, error) => set((s) => {\n if (!s.lists[key]) s.lists[key] = defaultListState();\n s.lists[key].error = error; s.lists[key].isFetching = false; s.lists[key].isFetchingMore = false;\n }),\n setListStale: (key, stale) => set((s) => {\n if (!s.lists[key]) s.lists[key] = defaultListState();\n s.lists[key].stale = stale;\n }),\n invalidateEntity: (type, id) => set((s) => {\n if (id) { const k = ek(type, id); if (s.entityStates[k]) s.entityStates[k].stale = true; }\n else { for (const k of Object.keys(s.entityStates)) if (k.startsWith(`${type}:`)) s.entityStates[k].stale = true; }\n }),\n invalidateLists: (matcher) => set((s) => {\n const pred = typeof matcher === \"string\" ? (k: string) => k.startsWith(matcher) : matcher;\n for (const key of Object.keys(s.lists)) if (pred(key)) s.lists[key].stale = true;\n }),\n invalidateType: (type) => { get().invalidateEntity(type); get().invalidateLists(type); },\n readEntity: <T>(type: EntityType, id: EntityId): T | null => {\n const s = get(); const base = s.entities[type]?.[id]; if (!base) return null;\n const patch = s.patches[type]?.[id];\n return (patch ? { ...base, ...patch } : base) as T;\n },\n }))\n )\n);\n","import { useGraphStore } from \"./graph\";\nimport type { EntityType, EntityId } from \"./graph\";\n\n/**\n * Process-wide defaults for stale times, retries, and background revalidation.\n * Keeps hook signatures small: `useEntity` / `useEntityList` merge these with per-query overrides.\n */\nexport interface EngineOptions {\n defaultStaleTime?: number;\n /** Max age (`Date.now() - lastFetched`) for evicting entities with zero subscribers during GC. */\n defaultGcTime?: number;\n /** Interval between GC passes when the collector is active (default 60s). */\n gcInterval?: number;\n maxRetries?: number;\n retryBaseDelay?: number;\n revalidateOnFocus?: boolean;\n revalidateOnReconnect?: boolean;\n}\n\n/**\n * Declarative **instruction** for loading one entity: wire transport (`fetch`), normalization, and graph writes.\n * Hooks pass this to `fetchEntity`; the graph remains source of truth after success.\n */\nexport interface EntityQueryOptions<TRaw, TEntity extends Record<string, unknown>> {\n type: EntityType;\n id: EntityId | null | undefined;\n fetch: (id: EntityId) => Promise<TRaw>;\n normalize: (raw: TRaw) => TEntity;\n idField?: string;\n sideEffects?: (raw: TRaw, store: typeof useGraphStore) => void;\n staleTime?: number;\n enabled?: boolean;\n onSuccess?: (entity: TEntity) => void;\n onError?: (error: Error) => void;\n}\n\n/** Cursor/page knobs passed through to list `fetch` implementations (REST, GraphQL, etc.). */\nexport interface ListFetchParams {\n cursor?: string;\n page?: number;\n pageSize?: number;\n params?: Record<string, unknown>;\n}\n\n/**\n * Normalized list page shape from any backend. Items are mapped through `normalize` into `{ id, data }` upserts — the list stores ids only.\n */\nexport interface ListResponse<T> {\n items: T[];\n total?: number;\n nextCursor?: string;\n prevCursor?: string;\n hasNextPage?: boolean;\n hasPrevPage?: boolean;\n page?: number;\n pageSize?: number;\n}\n\n/**\n * Declarative **instruction** for a collection query: stable `queryKey`, fetcher, and per-row normalization into the graph.\n * `mode` controls whether a fetch replaces ids or appends (infinite scroll) when used with load-more.\n */\nexport interface ListQueryOptions<TRaw, TEntity extends Record<string, unknown>> {\n type: EntityType;\n queryKey: unknown[];\n fetch: (params: ListFetchParams) => Promise<ListResponse<TRaw>>;\n normalize: (raw: TRaw) => { id: EntityId; data: TEntity };\n sideEffects?: (items: TRaw[], store: typeof useGraphStore) => void;\n mode?: \"replace\" | \"append\";\n staleTime?: number;\n enabled?: boolean;\n onSuccess?: (result: ListResponse<TRaw>) => void;\n onError?: (error: Error) => void;\n}\n\n/**\n * Deterministic string key for list queries so object order in nested keys does not create duplicate cache entries.\n * @param key - Hook-provided query key array (serializable values)\n */\nexport function serializeKey(key: unknown[]): string {\n return JSON.stringify(key, (_, v) =>\n v && typeof v === \"object\" && !Array.isArray(v)\n ? Object.fromEntries(Object.entries(v as Record<string, unknown>).sort()) : v);\n}\n\nfunction sleep(ms: number) { return new Promise((r) => setTimeout(r, ms)); }\n\nconst inflight = new Map<string, Promise<unknown>>();\n/**\n * Collapse concurrent identical requests into one Promise (prevents stampedes when many components mount the same entity/list).\n * @param key - Logical dedupe key (e.g. `type:id` or serialized list key)\n * @param fn - Async work that performs the fetch + graph writes\n */\nexport function dedupe<T>(key: string, fn: () => Promise<T>): Promise<T> {\n if (inflight.has(key)) return inflight.get(key) as Promise<T>;\n const p = fn().finally(() => inflight.delete(key));\n inflight.set(key, p); return p;\n}\n\nconst subscriberStatsListeners = new Set<() => void>();\nfunction emitSubscriberStatsChange() {\n for (const cb of subscriberStatsListeners) cb();\n}\n\nconst subscribers = new Map<string, Set<symbol>>();\n/**\n * Ref-count graph interest for a subscriber key (`${type}:${id}`). Background revalidation skips keys with zero subscribers.\n * @returns Opaque token required for `unregisterSubscriber`\n */\nexport function registerSubscriber(key: string): symbol {\n const token = Symbol(key);\n if (!subscribers.has(key)) subscribers.set(key, new Set());\n subscribers.get(key)!.add(token);\n emitSubscriberStatsChange();\n return token;\n}\n/** Pair with `registerSubscriber` on unmount so idle entities stop refetching. */\nexport function unregisterSubscriber(key: string, token: symbol) {\n const set = subscribers.get(key);\n if (!set) return;\n set.delete(token);\n if (set.size === 0) subscribers.delete(key);\n emitSubscriberStatsChange();\n}\n/** Used by the engine to avoid background work for keys nothing in the tree is observing. */\nexport function hasSubscribers(key: string) { return (subscribers.get(key)?.size ?? 0) > 0; }\n\nconst DEFAULT_OPTIONS: Required<EngineOptions> = {\n defaultStaleTime: 30_000,\n defaultGcTime: 300_000,\n gcInterval: 60_000,\n maxRetries: 3,\n retryBaseDelay: 1_000,\n revalidateOnFocus: true,\n revalidateOnReconnect: true,\n};\nlet engineOptions: Required<EngineOptions> = { ...DEFAULT_OPTIONS };\n\n/**\n * Subscribe to ref-count changes for `registerSubscriber` / `unregisterSubscriber`.\n * Used by `useGraphDevTools` so subscriber totals update without graph mutations.\n */\nexport function subscribeSubscriberStats(onChange: () => void) {\n subscriberStatsListeners.add(onChange);\n return () => subscriberStatsListeners.delete(onChange);\n}\n\n/** Total active entity subscriber tokens across all keys (sum of ref-counts). */\nexport function getActiveSubscriberCount(): number {\n let n = 0;\n for (const set of subscribers.values()) n += set.size;\n return n;\n}\n\nlet gcIntervalId: ReturnType<typeof setInterval> | null = null;\n\n/**\n * One GC pass: removes entities that are unobserved, older than `defaultGcTime`, not fetching,\n * and have no non-empty local patches; then strips their ids from all lists.\n */\nfunction runGarbageCollection(): void {\n const store = useGraphStore.getState();\n const { defaultGcTime: gcTime } = getEngineOptions();\n const now = Date.now();\n const toRemove: Array<{ type: EntityType; id: EntityId }> = [];\n\n for (const type of Object.keys(store.entities)) {\n const bucket = store.entities[type];\n if (!bucket) continue;\n for (const id of Object.keys(bucket)) {\n const key = `${type}:${id}`;\n if (hasSubscribers(key)) continue;\n const patch = store.patches[type]?.[id];\n if (patch !== undefined && Object.keys(patch).length > 0) continue;\n const entityState = store.entityStates[key];\n if (entityState?.isFetching) continue;\n const lastFetched = entityState?.lastFetched;\n if (lastFetched == null) continue;\n if (now - lastFetched <= gcTime) continue;\n toRemove.push({ type, id });\n }\n }\n\n for (const { type, id } of toRemove) {\n store.removeEntity(type, id);\n store.removeIdFromAllLists(type, id);\n }\n}\n\n/**\n * Stops the periodic garbage-collection timer started by `startGarbageCollector` / `configureEngine`.\n */\nexport function stopGarbageCollector(): void {\n if (gcIntervalId != null && typeof clearInterval !== \"undefined\") {\n clearInterval(gcIntervalId);\n gcIntervalId = null;\n }\n}\n\n/**\n * Starts periodic garbage collection using current `getEngineOptions().gcInterval`.\n * Stops any previous interval first. No-ops during SSR (`window` is undefined) or without `setInterval`.\n * @returns Disposer that stops this collector (equivalent to `stopGarbageCollector`).\n */\nexport function startGarbageCollector(): () => void {\n stopGarbageCollector();\n if (typeof window === \"undefined\" || typeof setInterval === \"undefined\") return () => {};\n gcIntervalId = setInterval(() => runGarbageCollection(), getEngineOptions().gcInterval);\n return () => stopGarbageCollector();\n}\n\nfunction restartGarbageCollector() {\n startGarbageCollector();\n}\n\n/** Override global engine behavior (typically once at app bootstrap). Restarts GC with merged options. */\nexport function configureEngine(opts: EngineOptions) {\n engineOptions = { ...DEFAULT_OPTIONS, ...opts };\n restartGarbageCollector();\n}\n/** Read merged engine options; hooks use this for default `staleTime` and retry behavior. */\nexport function getEngineOptions() { return engineOptions; }\n\n/**\n * Run a single-entity fetch with dedupe, retries, normalization, and graph updates.\n * Call from hooks/adapters — not from presentational components.\n */\nexport async function fetchEntity<TRaw, TEntity extends Record<string, unknown>>(\n opts: EntityQueryOptions<TRaw, TEntity>, engineOpts: Required<EngineOptions>\n) {\n const { type, id, fetch, normalize, sideEffects, idField = \"id\" } = opts;\n if (!id) return;\n useGraphStore.getState().setEntityFetching(type, id, true);\n const attempt = async (retries: number): Promise<void> => {\n try {\n const raw = await fetch(id);\n const normalized = normalize(raw);\n const resolvedId = (normalized as Record<string, unknown>)[idField] as EntityId ?? id;\n useGraphStore.getState().upsertEntity(type, resolvedId, normalized);\n useGraphStore.getState().setEntityFetched(type, resolvedId);\n if (sideEffects) sideEffects(raw, useGraphStore);\n opts.onSuccess?.(normalized);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (retries < engineOpts.maxRetries) { await sleep(engineOpts.retryBaseDelay * Math.pow(2, retries)); return attempt(retries + 1); }\n useGraphStore.getState().setEntityError(type, id, error.message);\n opts.onError?.(error);\n }\n };\n await dedupe(`${type}:${id}`, () => attempt(0));\n}\n\n/**\n * Fetch a list page: upserts all rows, writes ids to the list key, supports append mode for pagination.\n * @param isLoadMore - When true, uses a separate dedupe key and `appendListResult` / `setListFetchingMore`.\n */\nexport async function fetchList<TRaw, TEntity extends Record<string, unknown>>(\n opts: ListQueryOptions<TRaw, TEntity>, params: ListFetchParams, engineOpts: Required<EngineOptions>, isLoadMore = false\n) {\n const { type, queryKey, fetch, normalize, sideEffects, mode = \"replace\" } = opts;\n const key = serializeKey(queryKey);\n const store = useGraphStore.getState();\n if (isLoadMore) store.setListFetchingMore(key, true);\n else store.setListFetching(key, true);\n const attempt = async (retries: number): Promise<void> => {\n try {\n const response = await fetch(params);\n const normalized = response.items.map(normalize);\n useGraphStore.getState().upsertEntities(type, normalized.map(({ id, data }) => ({ id, data })));\n for (const { id } of normalized) useGraphStore.getState().setEntityFetched(type, id);\n const ids = normalized.map(({ id }) => id);\n const meta = { total: response.total ?? null, nextCursor: response.nextCursor ?? null, prevCursor: response.prevCursor ?? null, hasNextPage: response.hasNextPage ?? !!response.nextCursor, hasPrevPage: response.hasPrevPage ?? !!response.prevCursor, currentPage: response.page ?? null, pageSize: response.pageSize ?? null };\n if (mode === \"append\" && isLoadMore) useGraphStore.getState().appendListResult(key, ids, meta);\n else useGraphStore.getState().setListResult(key, ids, meta);\n if (sideEffects) sideEffects(response.items, useGraphStore);\n opts.onSuccess?.(response);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (retries < engineOpts.maxRetries) { await sleep(engineOpts.retryBaseDelay * Math.pow(2, retries)); return attempt(retries + 1); }\n useGraphStore.getState().setListError(key, error.message);\n opts.onError?.(error);\n }\n };\n await dedupe(isLoadMore ? `${key}:more` : key, () => attempt(0));\n}\n\nlet focusListenerAttached = false;\n/**\n * Opt-in window listeners that mark **subscribed** entities stale on focus/reconnect so hooks can SWR-refetch.\n * Idempotent; safe for SSR (no-ops without `window`). Pair with `configureEngine` flags.\n */\nexport function attachGlobalListeners() {\n if (typeof window === \"undefined\" || focusListenerAttached) return;\n focusListenerAttached = true;\n // Start GC on first client attach so defaultGcTime applies even without configureEngine().\n restartGarbageCollector();\n const revalidateAll = () => {\n const state = useGraphStore.getState();\n for (const key of subscribers.keys()) {\n if (!hasSubscribers(key)) continue;\n const colonIdx = key.indexOf(\":\");\n if (colonIdx === -1) continue;\n const type = key.slice(0, colonIdx);\n const id = key.slice(colonIdx + 1);\n state.setEntityStale(type, id, true);\n }\n };\n if (engineOptions.revalidateOnFocus) {\n window.addEventListener(\"visibilitychange\", () => { if (document.visibilityState === \"visible\") revalidateAll(); });\n window.addEventListener(\"focus\", revalidateAll);\n }\n if (engineOptions.revalidateOnReconnect) window.addEventListener(\"online\", revalidateAll);\n}\n","import { useMemo, useSyncExternalStore } from \"react\";\nimport { useStore } from \"zustand\";\nimport { useGraphStore, type GraphState } from \"./graph\";\nimport { getActiveSubscriberCount, subscribeSubscriberStats } from \"./engine\";\n\nfunction collectGraphDevStats(\n entities: GraphState[\"entities\"],\n patches: GraphState[\"patches\"],\n entityStates: GraphState[\"entityStates\"],\n listsState: GraphState[\"lists\"],\n) {\n const entityCounts: Record<string, number> = {};\n let totalEntities = 0;\n for (const type of Object.keys(entities)) {\n const bucket = entities[type];\n if (!bucket) continue;\n const n = Object.keys(bucket).length;\n if (n > 0) entityCounts[type] = n;\n totalEntities += n;\n }\n\n const listKeys = Object.keys(listsState);\n const listCount = listKeys.length;\n\n const patchedEntities: Array<{ type: string; id: string }> = [];\n for (const type of Object.keys(patches)) {\n const bucket = patches[type];\n if (!bucket) continue;\n for (const id of Object.keys(bucket)) {\n const p = bucket[id];\n if (p && Object.keys(p).length > 0) patchedEntities.push({ type, id });\n }\n }\n\n const staleEntities: Array<{ type: string; id: string }> = [];\n const fetchingEntities: Array<{ type: string; id: string }> = [];\n for (const key of Object.keys(entityStates)) {\n const colon = key.indexOf(\":\");\n if (colon === -1) continue;\n const type = key.slice(0, colon);\n const id = key.slice(colon + 1);\n const es = entityStates[key];\n if (es.stale) staleEntities.push({ type, id });\n if (es.isFetching) fetchingEntities.push({ type, id });\n }\n\n const lists = listKeys.map((key) => ({\n key,\n idCount: listsState[key]?.ids.length ?? 0,\n isFetching: Boolean(listsState[key]?.isFetching || listsState[key]?.isFetchingMore),\n isStale: Boolean(listsState[key]?.stale),\n }));\n\n return {\n entityCounts,\n totalEntities,\n listCount,\n patchedEntities,\n staleEntities,\n fetchingEntities,\n lists,\n };\n}\n\nfunction subscriberCountServerSnapshot() {\n return 0;\n}\n\n/**\n * Debug-time snapshot of entity graph health: counts, list queries, patches, staleness,\n * in-flight fetches, and engine subscriber ref-counts.\n *\n * Mount inside a DevTools panel or debug route; subscriber totals update via\n * `useSyncExternalStore` when hooks register/unregister interest, and graph fields\n * update through the Zustand store.\n */\nexport function useGraphDevTools() {\n const subscriberCount = useSyncExternalStore(\n subscribeSubscriberStats,\n getActiveSubscriberCount,\n subscriberCountServerSnapshot\n );\n\n const entities = useStore(useGraphStore, (state) => state.entities);\n const patches = useStore(useGraphStore, (state) => state.patches);\n const entityStates = useStore(useGraphStore, (state) => state.entityStates);\n const listsState = useStore(useGraphStore, (state) => state.lists);\n\n const graphPart = useMemo(\n () => collectGraphDevStats(entities, patches, entityStates, listsState),\n [entities, patches, entityStates, listsState],\n );\n\n return { ...graphPart, subscriberCount };\n}\n","import { useEffect, useRef, useCallback, useMemo, useState } from \"react\";\nimport { useStore } from \"zustand\";\nimport { useShallow } from \"zustand/react/shallow\";\nimport { useGraphStore, EMPTY_ENTITY_STATE, EMPTY_LIST_STATE, EMPTY_IDS } from \"./graph\";\nimport { fetchEntity, fetchList, serializeKey, registerSubscriber, unregisterSubscriber, getEngineOptions, attachGlobalListeners } from \"./engine\";\nimport type { EntityType, EntityId, EntityState, ListState } from \"./graph\";\nimport type { EntityQueryOptions, ListQueryOptions, ListFetchParams, ListResponse } from \"./engine\";\n\nlet listenersAttached = false;\nfunction ensureListeners() { if (!listenersAttached) { attachGlobalListeners(); listenersAttached = true; } }\n\n/**\n * View-model for one entity row: merged canonical + patch data plus fetch lifecycle flags.\n * `isLoading` is true only when there is no data yet; `isFetching` includes background refreshes.\n */\nexport interface UseEntityResult<T> {\n data: T | null; isLoading: boolean; isFetching: boolean; error: string | null; isStale: boolean; refetch: () => void;\n}\n\n/**\n * Subscribe to a single normalized entity: populates the graph via `fetch`/`normalize`, dedupes in-flight work, and revalidates when stale.\n * Solves “query-owned silos” by keeping **one** canonical record every list/detail reads through.\n *\n * @param opts - Entity query instruction (`EntityQueryOptions`): `type`, `id`, `fetch`, `normalize`, optional `staleTime` / `enabled`\n * @returns Merged entity (`entities` + `patches`), loading/error/stale flags, and `refetch`\n *\n * @example\n * ```tsx\n * const { data, isLoading, refetch } = useEntity({\n * type: \"Project\",\n * id: projectId,\n * fetch: (id) => api.getProject(id),\n * normalize: (raw) => ({ ...raw, id: String(raw.id) }),\n * });\n * ```\n */\nexport function useEntity<TRaw, TEntity extends Record<string, unknown>>(opts: EntityQueryOptions<TRaw, TEntity>): UseEntityResult<TEntity> {\n const { type, id, staleTime = getEngineOptions().defaultStaleTime, enabled = true } = opts;\n ensureListeners();\n const fetchRef = useRef(opts.fetch); fetchRef.current = opts.fetch;\n const normalizeRef = useRef(opts.normalize); normalizeRef.current = opts.normalize;\n const data = useStore(useGraphStore, useShallow((state) => {\n if (!id) return null;\n const base = state.entities[type]?.[id]; if (!base) return null;\n const patch = state.patches[type]?.[id];\n return (patch ? { ...base, ...patch } : base) as TEntity;\n }));\n const entityState = useStore(useGraphStore, useCallback((state): EntityState =>\n state.entityStates[`${type}:${id}`] ?? EMPTY_ENTITY_STATE,\n [type, id]));\n const doFetch = useCallback(() => {\n if (!id || !enabled) return;\n fetchEntity({ type, id, fetch: fetchRef.current, normalize: normalizeRef.current }, getEngineOptions());\n }, [id, enabled, type]);\n useEffect(() => {\n if (!id || !enabled) return;\n const token = registerSubscriber(`${type}:${id}`);\n const state = useGraphStore.getState();\n const existingState = state.entityStates[`${type}:${id}`];\n const hasData = !!state.entities[type]?.[id];\n const isStale = !existingState?.lastFetched || existingState.stale || Date.now() - (existingState.lastFetched ?? 0) > staleTime;\n if (!hasData || isStale) doFetch();\n return () => unregisterSubscriber(`${type}:${id}`, token);\n }, [id, type, enabled, staleTime, doFetch]);\n useEffect(() => { if (entityState.stale && id && enabled && !entityState.isFetching) doFetch(); }, [entityState.stale, id, enabled, entityState.isFetching, doFetch]);\n return { data, isLoading: !data && entityState.isFetching, isFetching: entityState.isFetching, error: entityState.error, isStale: entityState.stale, refetch: doFetch };\n}\n\n/**\n * Resolved rows for a list query: **`items` joins `ids` to the graph** at render time so shared entities update everywhere.\n */\nexport interface UseEntityListResult<TEntity> {\n items: TEntity[]; ids: EntityId[]; isLoading: boolean; isFetching: boolean; isFetchingMore: boolean;\n error: string | null; hasNextPage: boolean; hasPrevPage: boolean; total: number | null; currentPage: number | null;\n fetchNextPage: () => void; refetch: () => void;\n}\n\n/**\n * Subscribe to a collection: stores **ordered ids** under a serialized `queryKey`, upserts each row into `entities`, and supports pagination.\n * Use when you need a table or feed backed by the shared graph (not an isolated query cache).\n *\n * @param opts - List query instruction (`ListQueryOptions`)\n * @returns Hydrated `items`, raw `ids`, pagination helpers, and fetch flags\n *\n * @example\n * ```tsx\n * const { items, fetchNextPage, hasNextPage } = useEntityList({\n * type: \"Task\",\n * queryKey: [\"tasks\", { projectId }],\n * fetch: (p) => api.listTasks({ ...p, projectId }),\n * normalize: (raw) => ({ id: raw.id, data: raw }),\n * mode: \"append\",\n * });\n * ```\n */\nexport function useEntityList<TRaw, TEntity extends Record<string, unknown>>(opts: ListQueryOptions<TRaw, TEntity>): UseEntityListResult<TEntity> {\n const { type, queryKey, staleTime = getEngineOptions().defaultStaleTime, enabled = true, mode = \"replace\" } = opts;\n ensureListeners();\n const key = useMemo(() => serializeKey(queryKey), [queryKey]);\n const fetchRef = useRef(opts.fetch); fetchRef.current = opts.fetch;\n const normalizeRef = useRef(opts.normalize); normalizeRef.current = opts.normalize;\n const listState = useStore(useGraphStore, useCallback((state): ListState => state.lists[key] ?? EMPTY_LIST_STATE, [key]));\n const items = useStore(\n useGraphStore,\n useShallow((state) => {\n const ids = state.lists[key]?.ids ?? EMPTY_IDS;\n return ids.map((id) => {\n const base = state.entities[type]?.[id];\n if (!base) return null;\n const patch = state.patches[type]?.[id];\n return (patch ? { ...base, ...patch } : base) as TEntity;\n }).filter((x): x is TEntity => x !== null);\n }),\n );\n const doFetch = useCallback((params: ListFetchParams = {}) => {\n if (!enabled) return;\n fetchList({ type, queryKey, mode, fetch: fetchRef.current, normalize: normalizeRef.current }, params, getEngineOptions(), false);\n }, [enabled, type, queryKey, mode]);\n const fetchNextPage = useCallback(() => {\n if (!listState.hasNextPage || listState.isFetchingMore || !enabled) return;\n fetchList({ type, queryKey, mode, fetch: fetchRef.current, normalize: normalizeRef.current }, { cursor: listState.nextCursor ?? undefined, page: (listState.currentPage ?? 0) + 1, pageSize: listState.pageSize ?? undefined }, getEngineOptions(), true);\n }, [listState.hasNextPage, listState.isFetchingMore, listState.nextCursor, listState.currentPage, listState.pageSize, enabled, type, queryKey, mode]);\n useEffect(() => {\n if (!enabled) return;\n const state = useGraphStore.getState(); const existing = state.lists[key];\n const isStale = !existing?.lastFetched || existing.stale || Date.now() - (existing.lastFetched ?? 0) > staleTime;\n if (!existing || isStale) doFetch({ page: 1, pageSize: listState.pageSize ?? undefined });\n }, [key, enabled, staleTime, doFetch, listState.pageSize]);\n useEffect(() => { if (listState.stale && enabled && !listState.isFetching) doFetch(); }, [listState.stale, enabled, listState.isFetching, doFetch]);\n return { items, ids: listState.ids, isLoading: listState.ids.length === 0 && listState.isFetching, isFetching: listState.isFetching, isFetchingMore: listState.isFetchingMore, error: listState.error, hasNextPage: listState.hasNextPage, hasPrevPage: listState.hasPrevPage, total: listState.total, currentPage: listState.currentPage, fetchNextPage, refetch: doFetch };\n}\n\n/**\n * Options for graph-aware mutations: API call + optional normalization into `entities`, optimistic patches, and targeted invalidation.\n * Prefer `invalidateLists` prefixes / `invalidateEntities` over ad-hoc store calls so list UIs stay coherent.\n */\nexport interface MutationOptions<TInput, TRaw, TEntity extends Record<string, unknown>> {\n type: EntityType; mutate: (input: TInput) => Promise<TRaw>;\n normalize?: (raw: TRaw, input: TInput) => { id: EntityId; data: TEntity };\n optimistic?: (input: TInput) => { id: EntityId; patch: Partial<TEntity> } | null;\n invalidateLists?: string[]; invalidateEntities?: Array<{ type: EntityType; id: EntityId }>;\n onSuccess?: (result: TRaw, input: TInput) => void; onError?: (error: Error, input: TInput) => void;\n}\n\n/** Imperative mutation handle plus explicit async `state` for UI pending/error/success. */\nexport interface UseMutationResult<TInput, TRaw> {\n mutate: (input: TInput) => Promise<TRaw | null>; trigger: (input: TInput) => void;\n reset: () => void; state: { isPending: boolean; isSuccess: boolean; isError: boolean; error: string | null };\n}\n\n/**\n * Perform writes through your API while keeping the entity graph authoritative: optional optimistic `patchEntity`, commit via `upsertEntity`, rollback on failure.\n * Use when `useEntity`/`useEntityList` describe reads and you need a consistent mutation story without a second client cache.\n *\n * @example\n * ```tsx\n * const { mutate, state } = useEntityMutation({\n * type: \"Task\",\n * mutate: (input) => api.updateTask(input.id, input.patch),\n * normalize: (raw) => ({ id: raw.id, data: raw }),\n * });\n * ```\n */\nexport function useEntityMutation<TInput, TRaw, TEntity extends Record<string, unknown>>(opts: MutationOptions<TInput, TRaw, TEntity>): UseMutationResult<TInput, TRaw> {\n const [state, setState] = useState({ isPending: false, isSuccess: false, isError: false, error: null as string | null });\n const optsRef = useRef(opts); optsRef.current = opts;\n const mutate = useCallback(async (input: TInput): Promise<TRaw | null> => {\n const { type, mutate: apiFn, normalize, optimistic, invalidateLists, invalidateEntities, onSuccess, onError } = optsRef.current;\n setState({ isPending: true, isSuccess: false, isError: false, error: null });\n let rollback: (() => void) | null = null;\n if (optimistic) {\n const opt = optimistic(input);\n if (opt) {\n const { id, patch } = opt; const store = useGraphStore.getState();\n const previous = { ...store.patches[type]?.[id] };\n store.patchEntity(type, id, patch as Record<string, unknown>);\n rollback = () => Object.keys(previous).length > 0 ? useGraphStore.getState().patchEntity(type, id, previous) : useGraphStore.getState().clearPatch(type, id);\n }\n }\n try {\n const result = await apiFn(input);\n if (normalize) {\n const { id, data } = normalize(result, input);\n useGraphStore.getState().upsertEntity(type, id, data);\n if (optimistic) { const opt = optimistic(input); if (opt) useGraphStore.getState().clearPatch(type, opt.id); }\n }\n if (invalidateLists) for (const k of invalidateLists) useGraphStore.getState().invalidateLists(k);\n if (invalidateEntities) for (const { type: t, id } of invalidateEntities) useGraphStore.getState().invalidateEntity(t, id);\n setState({ isPending: false, isSuccess: true, isError: false, error: null });\n onSuccess?.(result, input); return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n rollback?.();\n setState({ isPending: false, isSuccess: false, isError: true, error: error.message });\n onError?.(error, input); return null;\n }\n }, []);\n const trigger = useCallback((input: TInput) => { void mutate(input); }, [mutate]);\n const reset = useCallback(() => setState({ isPending: false, isSuccess: false, isError: false, error: null }), []);\n return { mutate, trigger, reset, state };\n}\n\n/**\n * Read/write **UI-only** fields for one entity (`patches` layer) so selection, hover, or transient state is visible in every view that reads that id.\n * Does not replace `useEntityCRUD`’s edit buffer for form drafts — patches are for shared, non-persisted overlays.\n *\n * @param type - Entity kind\n * @param id - Entity id (no-ops when null/undefined)\n * @returns Current patch slice and helpers `augment` / `unaugment` / `clear`\n */\nexport function useEntityAugment<TEntity extends Record<string, unknown>>(type: EntityType, id: EntityId | null | undefined) {\n const patch = useStore(useGraphStore, useCallback((state) => id ? ((state.patches[type]?.[id] as Partial<TEntity>) ?? null) : null, [type, id]));\n const augment = useCallback((fields: Partial<TEntity>) => { if (!id) return; useGraphStore.getState().patchEntity(type, id, fields as Record<string, unknown>); }, [type, id]);\n const unaugment = useCallback((keys: (keyof TEntity)[]) => { if (!id) return; useGraphStore.getState().unpatchEntity(type, id, keys as string[]); }, [type, id]);\n const clear = useCallback(() => { if (!id) return; useGraphStore.getState().clearPatch(type, id); }, [type, id]);\n return { patch, augment, unaugment, clear };\n}\n\n/** In-flight Suspense waiters keyed like the entity engine (`${type}:${id}`). */\nconst suspenseEntityPromises = new Map<string, Promise<void>>();\n\n/** In-flight Suspense waiters keyed by `serializeKey(queryKey)`. */\nconst suspenseListPromises = new Map<string, Promise<void>>();\n\nfunction getEntitySuspensePromise(type: EntityType, id: EntityId): Promise<void> {\n const key = `${type}:${id}`;\n const existing = suspenseEntityPromises.get(key);\n if (existing) return existing;\n\n let unsub: (() => void) | null = null;\n let settled = false;\n\n const promise = new Promise<void>((resolve, reject) => {\n const settle = (fn: () => void) => {\n if (settled) return;\n settled = true;\n unsub?.();\n unsub = null;\n fn();\n };\n\n const inspect = (state: ReturnType<typeof useGraphStore.getState>) => {\n if (settled) return;\n const hasData = !!state.entities[type]?.[id];\n const es = state.entityStates[key];\n if (hasData) settle(() => resolve());\n else if (es != null && es.error != null && !es.isFetching) {\n const msg = es.error;\n settle(() => reject(new Error(msg)));\n }\n };\n\n inspect(useGraphStore.getState());\n if (!settled) unsub = useGraphStore.subscribe((state) => inspect(state));\n });\n\n const tracked = promise.finally(() => { suspenseEntityPromises.delete(key); });\n suspenseEntityPromises.set(key, tracked);\n return tracked;\n}\n\nfunction getListSuspensePromise(listKey: string): Promise<void> {\n const existing = suspenseListPromises.get(listKey);\n if (existing) return existing;\n\n let unsub: (() => void) | null = null;\n let settled = false;\n\n const promise = new Promise<void>((resolve, reject) => {\n const settle = (fn: () => void) => {\n if (settled) return;\n settled = true;\n unsub?.();\n unsub = null;\n fn();\n };\n\n const inspect = (state: ReturnType<typeof useGraphStore.getState>) => {\n if (settled) return;\n const list = state.lists[listKey] ?? EMPTY_LIST_STATE;\n if (list.ids.length > 0) settle(() => resolve());\n else if (list.error != null && !list.isFetching) {\n const msg = list.error;\n settle(() => reject(new Error(msg)));\n }\n else if (list.ids.length === 0 && !list.isFetching && list.lastFetched != null) settle(() => resolve());\n };\n\n inspect(useGraphStore.getState());\n if (!settled) unsub = useGraphStore.subscribe((state) => inspect(state));\n });\n\n const tracked = promise.finally(() => { suspenseListPromises.delete(listKey); });\n suspenseListPromises.set(listKey, tracked);\n return tracked;\n}\n\n/**\n * Suspense-compatible version of `useEntity`. Throws a promise while the entity\n * is loading, allowing React Suspense boundaries to show fallback UI.\n * Once data is available, returns the entity data directly (never null).\n *\n * @param opts - Same as `useEntity` (`EntityQueryOptions`)\n * @returns `data` plus `isFetching`, `isStale`, and `refetch`\n * @throws Promise while loading (caught by the nearest Suspense boundary)\n * @throws Error if the fetch fails with no data, if `id` is missing when required, or if the entity never resolves\n */\nexport function useSuspenseEntity<TRaw, TEntity extends Record<string, unknown>>(\n opts: EntityQueryOptions<TRaw, TEntity>\n): { data: TEntity; isFetching: boolean; isStale: boolean; refetch: () => void } {\n const result = useEntity(opts);\n const { type, id } = opts;\n\n if (result.isLoading) {\n if (!id) throw new Error(\"useSuspenseEntity requires a non-null entity id\");\n throw getEntitySuspensePromise(type, id);\n }\n\n if (result.error != null && result.data == null) {\n throw new Error(result.error);\n }\n\n if (result.data == null) {\n throw new Error(!id ? \"useSuspenseEntity requires a non-null entity id\" : \"Entity not found\");\n }\n\n return {\n data: result.data,\n isFetching: result.isFetching,\n isStale: result.isStale,\n refetch: result.refetch,\n };\n}\n\n/**\n * Suspense-compatible version of `useEntityList`. Throws a promise during\n * initial load, allowing Suspense boundaries to handle loading state.\n *\n * @param opts - Same as `useEntityList` (`ListQueryOptions`)\n * @returns Same shape as `useEntityList` except `isLoading` is omitted (always false when not suspended)\n * @throws Promise while initially loading (caught by the nearest Suspense boundary)\n * @throws Error if the fetch fails while the list is still empty\n */\nexport function useSuspenseEntityList<TRaw, TEntity extends Record<string, unknown>>(\n opts: ListQueryOptions<TRaw, TEntity>\n): Omit<UseEntityListResult<TEntity>, \"isLoading\"> {\n const key = useMemo(() => serializeKey(opts.queryKey), [opts.queryKey]);\n const result = useEntityList(opts);\n\n if (result.isLoading) throw getListSuspensePromise(key);\n\n if (result.error != null && result.items.length === 0) {\n throw new Error(result.error);\n }\n\n const { isLoading: _isLoading, ...rest } = result;\n return rest;\n}\n","import type { FilterSpec, FilterClause, FilterGroup, SortSpec, SortClause } from \"./types\";\n\n/**\n * Evaluate `FilterSpec` against one in-memory entity — mirrors remote semantics as closely as plain JS allows.\n * Use for **local** and **hybrid** `useEntityView` paths so UI filtering matches what users expect from the declarative spec.\n */\nexport function matchesFilter(entity: Record<string, unknown>, filter: FilterSpec): boolean {\n if (Array.isArray(filter)) return filter.every((clause) => matchesClause(entity, clause));\n return matchesGroup(entity, filter);\n}\nfunction matchesGroup(entity: Record<string, unknown>, group: FilterGroup): boolean {\n const { logic, clauses } = group;\n if (logic === \"and\") return clauses.every((c) => \"logic\" in c ? matchesGroup(entity, c) : matchesClause(entity, c));\n return clauses.some((c) => \"logic\" in c ? matchesGroup(entity, c) : matchesClause(entity, c));\n}\nfunction matchesClause(entity: Record<string, unknown>, clause: FilterClause): boolean {\n const { field, op, value, predicate } = clause;\n const fv = getNestedValue(entity, field);\n switch (op) {\n case \"eq\": return fv === value;\n case \"neq\": return fv !== value;\n case \"gt\": return (fv as number) > (value as number);\n case \"gte\": return (fv as number) >= (value as number);\n case \"lt\": return (fv as number) < (value as number);\n case \"lte\": return (fv as number) <= (value as number);\n case \"in\": return Array.isArray(value) && value.includes(fv);\n case \"nin\": return Array.isArray(value) && !value.includes(fv);\n case \"isNull\": return fv == null;\n case \"isNotNull\": return fv != null;\n case \"contains\": return typeof fv === \"string\" && typeof value === \"string\" && fv.toLowerCase().includes(value.toLowerCase());\n case \"startsWith\": return typeof fv === \"string\" && typeof value === \"string\" && fv.toLowerCase().startsWith(value.toLowerCase());\n case \"endsWith\": return typeof fv === \"string\" && typeof value === \"string\" && fv.toLowerCase().endsWith(value.toLowerCase());\n case \"between\": { const [lo, hi] = value as [number, number]; return (fv as number) >= lo && (fv as number) <= hi; }\n case \"arrayContains\": return Array.isArray(fv) && fv.includes(value);\n case \"arrayOverlaps\": return Array.isArray(fv) && Array.isArray(value) && value.some((v) => fv.includes(v));\n case \"matches\": return typeof fv === \"string\" && new RegExp(value as string).test(fv);\n case \"custom\": return predicate ? predicate(fv, entity) : true;\n default: return true;\n }\n}\n/**\n * Case-insensitive substring match across configured string fields; empty query is a no-op pass.\n * Keeps quick search consistent between client-only and debounced remote `q` params.\n */\nexport function matchesSearch(entity: Record<string, unknown>, query: string, fields: string[]): boolean {\n if (!query.trim()) return true;\n const lq = query.toLowerCase();\n return fields.some((field) => { const v = getNestedValue(entity, field); return typeof v === \"string\" && v.toLowerCase().includes(lq); });\n}\n/**\n * Multi-key comparator implementing `SortSpec` (null ordering, optional custom comparators, locale-aware string fallback).\n * Shared by local sorting and binary insertion for realtime updates.\n */\nexport function compareEntities(a: Record<string, unknown>, b: Record<string, unknown>, sort: SortSpec): number {\n for (const clause of sort) { const r = compareByClause(a, b, clause); if (r !== 0) return r; } return 0;\n}\nfunction compareByClause(a: Record<string, unknown>, b: Record<string, unknown>, clause: SortClause): number {\n const { field, direction, nulls = \"last\", comparator } = clause;\n const av = getNestedValue(a, field); const bv = getNestedValue(b, field);\n const aNull = av == null; const bNull = bv == null;\n if (aNull && bNull) return 0;\n if (aNull) return nulls === \"first\" ? -1 : 1;\n if (bNull) return nulls === \"first\" ? 1 : -1;\n let cmp: number;\n if (comparator) cmp = comparator(av, bv);\n else if (typeof av === \"string\" && typeof bv === \"string\") cmp = av.localeCompare(bv, undefined, { sensitivity: \"base\", numeric: true });\n else if (typeof av === \"number\" && typeof bv === \"number\") cmp = av - bv;\n else cmp = String(av).localeCompare(String(bv));\n return direction === \"desc\" ? -cmp : cmp;\n}\n/**\n * Binary-search insertion index so realtime inserts land in sorted order without resorting the full id list (O(log n) per insert).\n * Skips missing `getEntity` rows by advancing low — callers should ensure entities exist or tolerate append-like behavior.\n */\nexport function findInsertionIndex(entity: Record<string, unknown>, sortedIds: string[], getEntity: (id: string) => Record<string, unknown> | null, sort: SortSpec): number {\n let lo = 0; let hi = sortedIds.length;\n while (lo < hi) { const mid = (lo + hi) >>> 1; const me = getEntity(sortedIds[mid]); if (!me) { lo = mid + 1; continue; } if (compareEntities(entity, me, sort) <= 0) hi = mid; else lo = mid + 1; }\n return lo;\n}\n/**\n * Pure list projection: map ids → entities, drop missing, filter/sort/search, return **ids** in display order.\n * Bridges stored id lists with on-the-fly view descriptors without duplicating entity payloads.\n */\nexport function applyView(ids: string[], getEntity: (id: string) => Record<string, unknown> | null, filter?: FilterSpec | null, sort?: SortSpec | null, search?: { query: string; fields: string[] } | null): string[] {\n let entries: Array<{ id: string; entity: Record<string, unknown> }> = [];\n for (const id of ids) { const entity = getEntity(id); if (!entity) continue; entries.push({ id, entity }); }\n if (filter && entries.length > 0) entries = entries.filter(({ entity }) => matchesFilter(entity, filter));\n if (search?.query) entries = entries.filter(({ entity }) => matchesSearch(entity, search.query, search.fields));\n if (sort && sort.length > 0) entries.sort((a, b) => compareEntities(a.entity, b.entity, sort));\n return entries.map((e) => e.id);\n}\n/**\n * Heuristic for whether the graph likely holds **all** rows for a list key (enables local-only filtering/sorting in `useEntityView`).\n * `total` and `hasNextPage` come from list metadata written by fetchers.\n */\nexport function checkCompleteness(loadedCount: number, total: number | null, hasNextPage: boolean): { isComplete: boolean; reason: string } {\n if (!hasNextPage && total !== null && loadedCount >= total) return { isComplete: true, reason: \"all-loaded\" };\n if (hasNextPage) return { isComplete: false, reason: \"has-more-pages\" };\n return { isComplete: true, reason: \"no-more-pages\" };\n}\nfunction getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n const parts = path.replace(/\\[(\\d+)\\]/g, \".$1\").split(\".\");\n let current: unknown = obj;\n for (const part of parts) { if (current == null || typeof current !== \"object\") return undefined; current = (current as Record<string, unknown>)[part]; }\n return current;\n}\n","import type { FilterClause, FilterGroup, FilterSpec, SortSpec } from \"./types\";\n\n/**\n * Nests a leaf Prisma field filter under dotted paths (e.g. `author.name` → `{ author: { name: { … } } }`).\n */\nfunction nestWhereField(parts: string[], leaf: unknown): Record<string, unknown> {\n if (parts.length === 0) return {};\n if (parts.length === 1) return { [parts[0]]: leaf };\n return { [parts[0]]: nestWhereField(parts.slice(1), leaf) };\n}\n\nfunction clauseToPrismaLeaf(c: FilterClause): Record<string, unknown> | null {\n switch (c.op) {\n case \"eq\":\n return { equals: c.value };\n case \"neq\":\n return { not: c.value };\n case \"gt\":\n return { gt: c.value };\n case \"gte\":\n return { gte: c.value };\n case \"lt\":\n return { lt: c.value };\n case \"lte\":\n return { lte: c.value };\n case \"contains\":\n return { contains: c.value, mode: \"insensitive\" };\n case \"startsWith\":\n return { startsWith: c.value, mode: \"insensitive\" };\n case \"endsWith\":\n return { endsWith: c.value, mode: \"insensitive\" };\n case \"in\":\n return { in: c.value };\n case \"nin\":\n return { notIn: c.value };\n case \"arrayContains\":\n return { has: c.value };\n case \"between\":\n case \"arrayOverlaps\":\n case \"matches\":\n case \"custom\":\n default:\n return null;\n }\n}\n\nfunction clauseToPrismaEntry(c: FilterClause): Record<string, unknown> | null {\n const parts = c.field.split(\".\").filter(Boolean);\n if (parts.length === 0) return null;\n\n if (c.op === \"isNull\") {\n /** `value` truthy → equals null; falsy → `{ not: null }` (see Prisma adapter docs). */\n const equalsNull = c.value === undefined || c.value === true;\n return nestWhereField(parts, equalsNull ? null : { not: null });\n }\n if (c.op === \"isNotNull\") {\n return nestWhereField(parts, { not: null });\n }\n\n const leaf = clauseToPrismaLeaf(c);\n if (leaf === null) return null;\n return nestWhereField(parts, leaf);\n}\n\nfunction groupToPrismaWhere(g: FilterGroup): Record<string, unknown> {\n const parts: Record<string, unknown>[] = [];\n for (const item of g.clauses) {\n if (\"logic\" in item) {\n const nested = groupToPrismaWhere(item);\n if (Object.keys(nested).length > 0) parts.push(nested);\n } else {\n const entry = clauseToPrismaEntry(item);\n if (entry) parts.push(entry);\n }\n }\n if (parts.length === 0) return {};\n if (parts.length === 1) return parts[0];\n return g.logic === \"or\" ? { OR: parts } : { AND: parts };\n}\n\n/**\n * Compiles a {@link FilterSpec} into a Prisma `where` object (plain JSON-serializable shape).\n *\n * Operator mapping matches common Prisma filter APIs: `eq` → `equals`, string ops use `mode: \"insensitive\"`,\n * `nin` → `notIn`, `arrayContains` → `has`, `isNull` uses `null` / `{ not: null }` per `value`, and `isNotNull` → `{ not: null }`.\n * Unsupported ops (`between`, `arrayOverlaps`, `matches`, `custom`) are omitted from the result.\n *\n * Top-level clause arrays are combined with `AND`. {@link FilterGroup} uses `AND` / `OR` to match `group.logic`.\n */\nexport function toPrismaWhere(filter: FilterSpec): Record<string, unknown> {\n if (Array.isArray(filter)) {\n const parts: Record<string, unknown>[] = [];\n for (const item of filter) {\n const entry = clauseToPrismaEntry(item);\n if (entry) parts.push(entry);\n }\n if (parts.length === 0) return {};\n if (parts.length === 1) return parts[0];\n return { AND: parts };\n }\n return groupToPrismaWhere(filter);\n}\n\n/**\n * Compiles a {@link SortSpec} into Prisma `orderBy` form: `[{ fieldName: \"asc\" | \"desc\" }, …]`.\n * `nulls` and `comparator` on {@link SortClause} are ignored (local-only); extend callers if your Prisma version supports null ordering.\n */\nexport function toPrismaOrderBy(sort: SortSpec): Record<string, string>[] {\n return sort.map((s) => ({ [s.field]: s.direction }));\n}\n","/**\n * Transport-agnostic comparison operators. Same spec can compile to REST, SQL, GraphQL, or local JS (`evaluator`).\n * `custom` opts out of automatic serialization — use for predicates only the client can evaluate.\n */\nexport type FilterOperator = \"eq\"|\"neq\"|\"gt\"|\"gte\"|\"lt\"|\"lte\"|\"in\"|\"nin\"|\"contains\"|\"startsWith\"|\"endsWith\"|\"isNull\"|\"isNotNull\"|\"between\"|\"arrayContains\"|\"arrayOverlaps\"|\"matches\"|\"custom\";\n/** Atomic filter: field path, operator, optional value, and optional JS predicate for `custom`. */\nexport interface FilterClause { field: string; op: FilterOperator; value?: unknown; predicate?: (fieldValue: unknown, entity: Record<string, unknown>) => boolean; }\nexport type FilterLogic = \"and\" | \"or\";\n/** Nested boolean group so you can express `(A AND B) OR C` without losing structure when compiling to backends. */\nexport interface FilterGroup { logic: FilterLogic; clauses: Array<FilterClause | FilterGroup>; }\n/** Top-level filter: flat AND list of clauses, or a recursive `FilterGroup`. */\nexport type FilterSpec = FilterGroup | FilterClause[];\nexport type SortDirection = \"asc\" | \"desc\";\n/** Single sort key with optional null ordering and custom comparator for local sort parity with remote semantics. */\nexport interface SortClause { field: string; direction: SortDirection; nulls?: \"first\" | \"last\"; comparator?: (a: unknown, b: unknown) => number; }\n/** Ordered multi-key sort (stable application in `compareEntities`). */\nexport type SortSpec = SortClause[];\n/**\n * Everything `useEntityView` needs to describe a virtualized collection: filters, sorts, and simple multi-field search.\n * One descriptor can drive local evaluation, remote query compilation, or hybrid mode.\n */\nexport interface ViewDescriptor { filter?: FilterSpec; sort?: SortSpec; search?: { query: string; fields: string[]; minChars?: number }; }\n/**\n * How complete local graph data is relative to the view: **local** (all in memory), **remote** (server must filter/sort), **hybrid** (show local fast + remote reconcile).\n */\nexport type CompletenessMode = \"local\" | \"remote\" | \"hybrid\";\n\n/**\n * Compile a view to flat REST query params (`sort`, `q`, and `field[op]=value` keys). Skips `custom` clauses — those cannot be expressed as strings.\n */\nexport function toRestParams(view: ViewDescriptor): Record<string, string> {\n const params: Record<string, string> = {};\n if (view.filter) { const clauses = flattenClauses(view.filter); for (const c of clauses) { if (c.op === \"custom\") continue; const key = c.op === \"eq\" ? c.field : `${c.field}[${c.op}]`; params[key] = Array.isArray(c.value) ? (c.value as unknown[]).join(\",\") : String(c.value ?? \"\"); } }\n if (view.sort) params[\"sort\"] = view.sort.map((s) => `${s.direction === \"desc\" ? \"-\" : \"\"}${s.field}`).join(\",\");\n if (view.search?.query) params[\"q\"] = view.search.query;\n return params;\n}\n\n/**\n * Compile a view to parameterized SQL fragments for server-side filtering/sorting. Unknown ops become `TRUE` — validate or restrict ops at the edge.\n */\nexport function toSQLClauses(view: ViewDescriptor): { where: string; orderBy: string; params: unknown[] } {\n const params: unknown[] = []; let paramIdx = 1;\n function clauseToSQL(c: FilterClause): string {\n const col = `\"${c.field}\"`;\n switch (c.op) {\n case \"eq\": params.push(c.value); return `${col} = $${paramIdx++}`;\n case \"neq\": params.push(c.value); return `${col} != $${paramIdx++}`;\n case \"gt\": params.push(c.value); return `${col} > $${paramIdx++}`;\n case \"gte\": params.push(c.value); return `${col} >= $${paramIdx++}`;\n case \"lt\": params.push(c.value); return `${col} < $${paramIdx++}`;\n case \"lte\": params.push(c.value); return `${col} <= $${paramIdx++}`;\n case \"in\": params.push(c.value); return `${col} = ANY($${paramIdx++})`;\n case \"nin\": params.push(c.value); return `${col} != ALL($${paramIdx++})`;\n case \"isNull\": return `${col} IS NULL`;\n case \"isNotNull\": return `${col} IS NOT NULL`;\n case \"contains\": params.push(`%${c.value}%`); return `${col} ILIKE $${paramIdx++}`;\n case \"startsWith\": params.push(`${c.value}%`); return `${col} ILIKE $${paramIdx++}`;\n case \"between\": { const [lo, hi] = c.value as [unknown, unknown]; params.push(lo, hi); return `${col} BETWEEN $${paramIdx++} AND $${paramIdx++}`; }\n case \"arrayContains\": params.push(c.value); return `$${paramIdx++} = ANY(${col})`;\n default: return \"TRUE\";\n }\n }\n function groupToSQL(g: FilterGroup): string {\n const parts = g.clauses.map((c) => \"logic\" in c ? `(${groupToSQL(c)})` : clauseToSQL(c));\n return parts.join(` ${g.logic.toUpperCase()} `);\n }\n let where = \"TRUE\";\n if (view.filter) { if (Array.isArray(view.filter)) where = view.filter.map(clauseToSQL).join(\" AND \") || \"TRUE\"; else where = groupToSQL(view.filter) || \"TRUE\"; }\n if (view.search?.query) { params.push(`%${view.search.query}%`); where += ` AND (${view.search.fields.map((f) => `\"${f}\"`).join(\" || ' ' || \")}) ILIKE $${paramIdx++}`; }\n const orderBy = view.sort ? view.sort.map((s) => `\"${s.field}\" ${s.direction.toUpperCase()}${s.nulls ? ` NULLS ${s.nulls.toUpperCase()}` : \"\"}`).join(\", \") : \"\";\n return { where, orderBy, params };\n}\n\n/**\n * Produce a GraphQL-variable-shaped object from a view (Hasura/Postgraphile-style `_op` maps). Intended as a starting point — wire to your actual schema.\n */\nexport function toGraphQLVariables(view: ViewDescriptor) {\n const result: { where?: Record<string, unknown>; orderBy?: Array<Record<string, unknown>>; search?: string } = {};\n if (view.filter) { const clauses = flattenClauses(view.filter); const where: Record<string, unknown> = {}; for (const c of clauses) { if (c.op === \"custom\") continue; where[c.field] = { [`_${c.op}`]: c.value }; } if (Object.keys(where).length) result.where = where; }\n if (view.sort) result.orderBy = view.sort.map((s) => ({ [s.field]: s.direction === \"desc\" ? \"desc_nulls_last\" : \"asc_nulls_last\" }));\n if (view.search?.query) result.search = view.search.query;\n return result;\n}\n\n/** Prisma `where` / `orderBy` compilers (JSON-serializable; pair with a route that passes them to `prisma.*.findMany`). */\nexport { toPrismaWhere, toPrismaOrderBy } from \"./prisma-compile\";\n\n/**\n * Normalize nested `FilterGroup` trees to a flat clause list for compilers that only understand atomic predicates.\n */\nexport function flattenClauses(filter: FilterSpec): FilterClause[] {\n if (Array.isArray(filter)) return filter;\n function walk(g: FilterGroup): FilterClause[] { return g.clauses.flatMap((c) => (\"logic\" in c ? walk(c) : [c])); }\n return walk(filter);\n}\n\n/** True if any clause requires client-side `predicate` logic — forces local/hybrid evaluation paths that cannot be pushed to generic REST/SQL. */\nexport function hasCustomPredicates(filter: FilterSpec): boolean { return flattenClauses(filter).some((c) => c.op === \"custom\"); }\n","import { useState, useEffect, useRef, useCallback, useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport { useShallow } from \"zustand/react/shallow\";\nimport { useGraphStore, EMPTY_IDS, EMPTY_LIST_STATE } from \"../graph\";\nimport { serializeKey, getEngineOptions } from \"../engine\";\nimport { applyView, checkCompleteness, matchesFilter, matchesSearch, findInsertionIndex } from \"./evaluator\";\nimport { toRestParams, toSQLClauses, toGraphQLVariables, hasCustomPredicates } from \"./types\";\nimport type { ViewDescriptor, FilterSpec, SortSpec, CompletenessMode } from \"./types\";\nimport type { EntityType, EntityId } from \"../graph\";\nimport type { ListResponse } from \"../engine\";\n\n/**\n * Precompiled transport payloads for one view snapshot — pass to REST, GraphQL, or SQL backends without re-deriving from `ViewDescriptor`.\n */\nexport interface ViewFetchParams { rest: Record<string, string>; graphql: ReturnType<typeof toGraphQLVariables>; sql: ReturnType<typeof toSQLClauses>; view: ViewDescriptor; }\n\n/**\n * Configure a **live view** over a base list: filter/sort/search in JS when data is complete, or compile the same spec to remote params when not.\n * `baseQueryKey` identifies the underlying id list in the graph; the hook may create additional keys for remote result sets.\n */\nexport interface UseEntityViewOptions<TEntity extends Record<string, unknown>> {\n type: EntityType; baseQueryKey: unknown[]; view: ViewDescriptor; mode?: CompletenessMode;\n remoteFetch?: (params: ViewFetchParams) => Promise<ListResponse<TEntity>>;\n normalize?: (raw: TEntity) => { id: EntityId; data: Record<string, unknown> };\n remoteDebounce?: number; staleTime?: number; enabled?: boolean;\n /** SSR-seeded ids written once into `lists[baseKey]` to avoid empty-state flash before hydration fetch. */\n initialIds?: EntityId[];\n /** SSR-seeded total for completeness heuristics when ids are preloaded. */\n initialTotal?: number;\n}\n\n/**\n * Rich list UI state: projected `items`/`viewIds`, completeness mode, remote vs local fetching flags, and imperative view updaters.\n * `isShowingLocalPending` signals hybrid mode where stale local rows are visible while a remote round-trip runs.\n */\nexport interface UseEntityViewResult<TEntity> {\n items: TEntity[]; viewIds: EntityId[]; viewTotal: number | null;\n isLoading: boolean; isFetching: boolean; isRemoteFetching: boolean; isShowingLocalPending: boolean;\n error: string | null; hasNextPage: boolean; fetchNextPage: () => void;\n isLocallyComplete: boolean; completenessMode: CompletenessMode;\n setView: (v: Partial<ViewDescriptor>) => void; setFilter: (f: FilterSpec | null) => void;\n setSort: (s: SortSpec | null) => void; setSearch: (q: string) => void; clearView: () => void; refetch: () => void;\n isFetchingMore: boolean;\n}\n\nconst EMPTY_ENTITY_BUCKET: Record<EntityId, Record<string, unknown>> = {};\n\n/**\n * Higher-level list hook: combines **graph-backed id lists**, declarative `ViewDescriptor`, local `applyView`, optional remote fetch, and realtime sorted insertion.\n * Solves “filters tied to one query cache” by deriving the visible id order from the shared graph whenever possible.\n *\n * @param opts - Base type/key, initial view, optional `remoteFetch` + `normalize`, SSR seeds, forced `mode`\n * @returns Projected entities, view metadata, completeness, and setters for interactive toolbars\n *\n * @example\n * ```tsx\n * const view = useEntityView({\n * type: \"Task\",\n * baseQueryKey: [\"tasks\", projectId],\n * view: { filter: [{ field: \"status\", op: \"eq\", value: \"open\" }], sort: [{ field: \"dueAt\", direction: \"asc\" }] },\n * remoteFetch: (p) => api.tasksQuery(p.rest),\n * normalize: (raw) => ({ id: raw.id, data: raw }),\n * });\n * ```\n */\nexport function useEntityView<TEntity extends Record<string, unknown>>(opts: UseEntityViewOptions<TEntity>): UseEntityViewResult<TEntity> {\n const { type, baseQueryKey, mode: forcedMode, remoteFetch, remoteDebounce = 300, staleTime = getEngineOptions().defaultStaleTime, enabled = true, initialIds, initialTotal } = opts;\n const optsRef = useRef(opts); optsRef.current = opts;\n const [liveView, setLiveView] = useState<ViewDescriptor>(opts.view);\n const liveViewRef = useRef(liveView); liveViewRef.current = liveView;\n const [isRemoteFetching, setIsRemoteFetching] = useState(false);\n const [remoteError, setRemoteError] = useState<string | null>(null);\n const [remoteResultKey, setRemoteResultKey] = useState<string | null>(null);\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const baseKey = useMemo(() => serializeKey(baseQueryKey), [baseQueryKey]);\n const seededRef = useRef(false);\n if (!seededRef.current && initialIds && initialIds.length > 0) {\n seededRef.current = true;\n const store = useGraphStore.getState();\n if (!store.lists[baseKey]) {\n store.setListResult(baseKey, initialIds, { total: initialTotal ?? null });\n }\n }\n const listState = useStore(\n useGraphStore,\n useCallback((state) => state.lists[baseKey] ?? null, [baseKey]),\n );\n const remoteListState = useStore(useGraphStore, useCallback((state) => remoteResultKey ? state.lists[remoteResultKey] ?? null : null, [remoteResultKey]));\n const { isComplete } = useMemo(() => {\n if (!listState) return { isComplete: false };\n return checkCompleteness(listState.ids.length, listState.total, listState.hasNextPage);\n }, [listState]);\n const completenessMode: CompletenessMode = useMemo(() => {\n if (forcedMode) return forcedMode;\n if (liveView.filter && hasCustomPredicates(liveView.filter)) return \"local\";\n if (isComplete) return \"local\";\n if (!remoteFetch) return \"local\";\n return \"hybrid\";\n }, [forcedMode, isComplete, liveView.filter, remoteFetch]);\n const localViewIds = useStore(\n useGraphStore,\n useShallow((state): EntityId[] => {\n const list = state.lists[baseKey] ?? EMPTY_LIST_STATE;\n const sourceIds =\n completenessMode !== \"remote\" && remoteResultKey\n ? (state.lists[remoteResultKey]?.ids ?? EMPTY_IDS)\n : list.ids;\n const getEntity = (id: EntityId): Record<string, unknown> | null => {\n const base = state.entities[type]?.[id];\n if (!base) return null;\n const patch = state.patches[type]?.[id];\n return patch ? { ...base, ...patch } : base;\n };\n return applyView(\n sourceIds,\n getEntity,\n liveView.filter,\n liveView.sort,\n liveView.search?.query\n ? { query: liveView.search.query, fields: liveView.search.fields }\n : null,\n );\n }),\n );\n const items = useStore(\n useGraphStore,\n useShallow((state): TEntity[] =>\n localViewIds\n .map((id) => {\n const base = state.entities[type]?.[id];\n if (!base) return null;\n const patch = state.patches[type]?.[id];\n return (patch ? { ...base, ...patch } : base) as TEntity;\n })\n .filter((item): item is TEntity => item !== null),\n ),\n );\n const fireRemoteFetch = useCallback(async (view: ViewDescriptor, cursor?: string) => {\n const { remoteFetch: rf, normalize: norm, baseQueryKey: bqk } = optsRef.current; if (!rf) return;\n const params: ViewFetchParams = { rest: toRestParams(view), graphql: toGraphQLVariables(view), sql: toSQLClauses(view), view };\n const rKey = serializeKey([...bqk, \"__view__\", view, cursor]);\n setRemoteResultKey(rKey); setIsRemoteFetching(true); setRemoteError(null);\n const store = useGraphStore.getState(); store.setListFetching(rKey, true);\n try {\n const response = await rf(params);\n const normalized = norm ? response.items.map(norm) : response.items.map((item) => ({ id: String((item as Record<string, unknown>).id), data: item as Record<string, unknown> }));\n store.upsertEntities(type, normalized); for (const { id } of normalized) store.setEntityFetched(type, id);\n store.setListResult(rKey, normalized.map(({ id }) => id), { total: response.total ?? null, nextCursor: response.nextCursor ?? null, hasNextPage: response.hasNextPage ?? !!response.nextCursor });\n } catch (err) { const msg = err instanceof Error ? err.message : String(err); setRemoteError(msg); store.setListError(rKey, msg); }\n finally { setIsRemoteFetching(false); }\n }, [type]);\n useEffect(() => {\n if (!enabled || completenessMode === \"local\" || !remoteFetch) return;\n const searchQuery = liveView.search?.query ?? \"\"; const minChars = liveView.search?.minChars ?? 2;\n if (searchQuery.length > 0 && searchQuery.length < minChars) return;\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n debounceTimer.current = setTimeout(() => fireRemoteFetch(liveViewRef.current), remoteDebounce);\n return () => { if (debounceTimer.current) clearTimeout(debounceTimer.current); };\n }, [liveView, completenessMode, enabled, remoteFetch, remoteDebounce, fireRemoteFetch]);\n useEffect(() => {\n if (!enabled) return; const state = useGraphStore.getState(); const existing = state.lists[baseKey];\n const isStale = !existing?.lastFetched || existing.stale || Date.now() - (existing.lastFetched ?? 0) > staleTime;\n if (!existing || isStale) fireRemoteFetch(liveViewRef.current);\n }, [baseKey, enabled, staleTime, fireRemoteFetch]);\n useEffect(() => {\n const unsub = useGraphStore.subscribe((state) => state.entities[type] ?? EMPTY_ENTITY_BUCKET, (newEntities, prevEntities) => {\n const view = liveViewRef.current; const store = useGraphStore.getState(); const list = store.lists[baseKey]; if (!list) return;\n for (const id of new Set([...Object.keys(newEntities), ...Object.keys(prevEntities)])) {\n const isPresent = id in newEntities; if (!isPresent) continue;\n const entity = newEntities[id] as Record<string, unknown>; const patch = store.patches[type]?.[id]; const merged = patch ? { ...entity, ...patch } : entity;\n const matches = (!view.filter || matchesFilter(merged, view.filter)) && (!view.search?.query || matchesSearch(merged, view.search.query, view.search.fields));\n if (matches && !list.ids.includes(id)) {\n if (view.sort && view.sort.length > 0) { const idx = findInsertionIndex(merged, list.ids, (eid) => { const b = store.entities[type]?.[eid]; if (!b) return null; const p = store.patches[type]?.[eid]; return p ? { ...b, ...p } : b; }, view.sort); store.insertIdInList(baseKey, id, idx); }\n else store.insertIdInList(baseKey, id, \"start\");\n }\n }\n });\n return unsub;\n }, [type, baseKey]);\n const setView = useCallback((partial: Partial<ViewDescriptor>) => setLiveView((prev) => ({ ...prev, ...partial })), []);\n const setFilter = useCallback((filter: FilterSpec | null) => setLiveView((prev) => ({ ...prev, filter: filter ?? undefined })), []);\n const setSort = useCallback((sort: SortSpec | null) => setLiveView((prev) => ({ ...prev, sort: sort ?? undefined })), []);\n const setSearch = useCallback((query: string) => setLiveView((prev) => ({ ...prev, search: prev.search ? { ...prev.search, query } : { query, fields: [] } })), []);\n const clearView = useCallback(() => setLiveView({}), []);\n const fetchNextPage = useCallback(() => { if (completenessMode === \"local\" || isRemoteFetching) return; fireRemoteFetch(liveViewRef.current, remoteListState?.nextCursor ?? undefined); }, [completenessMode, isRemoteFetching, remoteListState?.nextCursor, fireRemoteFetch]);\n const refetch = useCallback(() => fireRemoteFetch(liveViewRef.current), [fireRemoteFetch]);\n const viewTotal = remoteListState?.total ?? (isComplete ? localViewIds.length : listState?.total ?? null);\n return {\n items, viewIds: localViewIds, viewTotal, isLoading: items.length === 0 && (listState?.isFetching ?? true) && !isRemoteFetching,\n isFetching: (listState?.isFetching ?? false) || isRemoteFetching, isRemoteFetching,\n isShowingLocalPending: completenessMode === \"hybrid\" && isRemoteFetching && items.length > 0,\n error: remoteError ?? listState?.error ?? null, hasNextPage: completenessMode === \"local\" ? false : (remoteListState?.hasNextPage ?? listState?.hasNextPage ?? false),\n fetchNextPage, isLocallyComplete: isComplete, completenessMode, setView, setFilter, setSort, setSearch, clearView, refetch,\n isFetchingMore: remoteListState?.isFetching ?? false,\n };\n}\n","import { useGraphStore } from \"../graph\";\nimport { serializeKey } from \"../engine\";\nimport type { EntityType, EntityId } from \"../graph\";\n\nexport type RelationCardinality = \"belongsTo\" | \"hasMany\" | \"manyToMany\";\n/**\n * FK edge: this entity points at one parent row. Used to invalidate parent aggregates and optional list keys when the FK changes.\n */\nexport interface BelongsToRelation { cardinality: \"belongsTo\"; foreignKey: string; targetType: EntityType; invalidateTargetLists?: string[]; }\n/**\n * Inverse collection: children carry `foreignKey` pointing here; `listKeyPrefix` builds the child list query key for a given parent id.\n */\nexport interface HasManyRelation { cardinality: \"hasMany\"; targetType: EntityType; foreignKey: string; listKeyPrefix: (parentId: EntityId) => unknown[]; }\n/**\n * Join-style relation stored as an id array on this entity; invalidates partner lists derived via `listKeyPrefix` for each touched id.\n */\nexport interface ManyToManyRelation { cardinality: \"manyToMany\"; targetType: EntityType; localArrayField?: string; listKeyPrefix: (thisId: EntityId) => unknown[]; }\nexport type RelationDescriptor = BelongsToRelation | HasManyRelation | ManyToManyRelation;\n/**\n * Declarative relation metadata for one `EntityType`: optional named relations and list key prefixes to invalidate on any mutation.\n */\nexport interface EntitySchema { type: EntityType; relations?: Record<string, RelationDescriptor>; globalListKeys?: string[]; }\n/**\n * Snapshot diff passed to cascade rules after CRUD: compare `previous` vs `next` to find FK moves, array membership changes, etc.\n */\nexport interface CascadeContext { type: EntityType; id: EntityId; previous: Record<string, unknown> | null; next: Record<string, unknown> | null; op: \"create\" | \"update\" | \"delete\"; }\n\nconst schemaRegistry = new Map<EntityType, EntitySchema>();\n/** Register or replace schema for `schema.type` (typically at app init). */\nexport function registerSchema(schema: EntitySchema) { schemaRegistry.set(schema.type, schema); }\n/** Lookup schema for cascade/join reads; returns null if unregistered. */\nexport function getSchema(type: EntityType) { return schemaRegistry.get(type) ?? null; }\n\n/**\n * After a successful mutation, mark related entities/lists stale so hooks refetch without manually hunting query keys.\n * Traverses registered schemas (including reverse `hasMany`) so denormalized UIs stay eventually consistent with the graph.\n */\nexport function cascadeInvalidation(ctx: CascadeContext) {\n const schema = schemaRegistry.get(ctx.type); if (!schema) return;\n const store = useGraphStore.getState();\n if (schema.globalListKeys) for (const key of schema.globalListKeys) store.invalidateLists(key);\n if (!schema.relations) return;\n for (const [, relation] of Object.entries(schema.relations)) {\n switch (relation.cardinality) {\n case \"belongsTo\": {\n const prevFk = ctx.previous?.[relation.foreignKey] as EntityId | null;\n const nextFk = ctx.next?.[relation.foreignKey] as EntityId | null;\n if (prevFk && prevFk !== nextFk && relation.invalidateTargetLists) for (const kp of relation.invalidateTargetLists) store.invalidateLists((k) => k.startsWith(kp) && k.includes(prevFk));\n if (nextFk && relation.invalidateTargetLists) for (const kp of relation.invalidateTargetLists) store.invalidateLists((k) => k.startsWith(kp) && k.includes(nextFk));\n if (prevFk) store.invalidateEntity(relation.targetType, prevFk);\n if (nextFk) store.invalidateEntity(relation.targetType, nextFk);\n break;\n }\n case \"hasMany\": store.invalidateLists(serializeKey(relation.listKeyPrefix(ctx.id) as unknown[])); break;\n case \"manyToMany\": {\n const prevIds = ctx.previous?.[relation.localArrayField ?? \"\"] as EntityId[] | null;\n const nextIds = ctx.next?.[relation.localArrayField ?? \"\"] as EntityId[] | null;\n for (const relatedId of new Set([...(prevIds ?? []), ...(nextIds ?? [])])) store.invalidateLists(serializeKey(relation.listKeyPrefix(relatedId) as unknown[]));\n break;\n }\n }\n }\n for (const [, otherSchema] of schemaRegistry) {\n if (!otherSchema.relations) continue;\n for (const [, rel] of Object.entries(otherSchema.relations)) {\n if (rel.targetType !== ctx.type) continue;\n if (rel.cardinality === \"hasMany\") store.invalidateLists(serializeKey(rel.listKeyPrefix(ctx.id) as unknown[]));\n }\n }\n}\n\n/**\n * Resolve relation **placeholders** for detail panels: joins graph reads for belongs-to targets, has-many id lists, or many-to-many id arrays.\n * Returns plain objects suitable for rendering; does not mutate the graph.\n */\nexport function readRelations(type: EntityType, entity: Record<string, unknown>): Record<string, unknown> {\n const schema = schemaRegistry.get(type); if (!schema?.relations) return {};\n const store = useGraphStore.getState(); const result: Record<string, unknown> = {};\n for (const [name, relation] of Object.entries(schema.relations)) {\n switch (relation.cardinality) {\n case \"belongsTo\": { const fkValue = entity[relation.foreignKey] as EntityId | null; result[name] = fkValue ? store.readEntity(relation.targetType, fkValue) : null; break; }\n case \"hasMany\": { const listKey = serializeKey(relation.listKeyPrefix(entity.id as EntityId) as unknown[]); const listState = store.lists[listKey]; result[name] = listState ? listState.ids.map((id) => store.readEntity(relation.targetType, id)).filter(Boolean) : []; break; }\n case \"manyToMany\": { const ids = entity[relation.localArrayField ?? \"\"] as EntityId[] | null; result[name] = ids ? ids.map((id) => store.readEntity(relation.targetType, id)).filter(Boolean) : []; break; }\n }\n }\n return result;\n}\n","import { useState, useCallback, useRef, useMemo, useEffect } from \"react\";\nimport { useStore } from \"zustand\";\nimport { useGraphStore } from \"../graph\";\nimport { useEntity } from \"../hooks\";\nimport { useEntityView } from \"../view/use-entity-view\";\nimport { cascadeInvalidation, readRelations } from \"./relations\";\nimport { serializeKey } from \"../engine\";\nimport type { EntityType, EntityId } from \"../graph\";\nimport type { UseEntityViewResult, ViewFetchParams } from \"../view/use-entity-view\";\nimport type { ListResponse } from \"../engine\";\nimport type { ViewDescriptor, FilterSpec, SortSpec } from \"../view/types\";\n\n/** UI mode for a single CRUD surface: drives which panels/forms are active without scattering boolean flags. */\nexport type CRUDMode = \"list\" | \"detail\" | \"edit\" | \"create\";\n\n/**\n * Wire one entity type into list+detail+forms: remote list via `useEntityView`, optional detail fetch, and create/update/delete callbacks.\n * Mutations call `cascadeInvalidation` on success so related lists/entities refresh per registered schemas.\n */\nexport interface CRUDOptions<TEntity extends Record<string, unknown>> {\n type: EntityType; listQueryKey: unknown[];\n listFetch: (params: ViewFetchParams) => Promise<ListResponse<TEntity>>;\n normalize: (raw: TEntity) => { id: EntityId; data: TEntity };\n detailFetch?: (id: EntityId) => Promise<TEntity>;\n onCreate?: (data: Partial<TEntity>) => Promise<TEntity>;\n onUpdate?: (id: EntityId, patch: Partial<TEntity>) => Promise<TEntity>;\n onDelete?: (id: EntityId) => Promise<void>;\n createDefaults?: Partial<TEntity>; initialView?: ViewDescriptor;\n onCreateSuccess?: (entity: TEntity) => void; onUpdateSuccess?: (entity: TEntity) => void;\n onDeleteSuccess?: (id: EntityId) => void; onError?: (op: \"create\"|\"update\"|\"delete\", error: Error) => void;\n selectAfterCreate?: boolean; clearSelectionAfterDelete?: boolean;\n}\n\n/** Tracks which fields diverge from loaded detail — edit buffer stays in React state so other views keep showing canonical graph data until save. */\nexport interface DirtyFields<TEntity> { changed: Set<keyof TEntity>; isDirty: boolean; }\n\n/**\n * Everything a CRUD screen needs: composed `list` view, selection, detail subscription, relation joins, edit/create buffers, and mutating actions.\n * `applyOptimistic` is the escape hatch to mirror the buffer into `patches` for instant sliders/toggles without committing `save` yet.\n */\nexport interface CRUDState<TEntity extends Record<string, unknown>> {\n mode: CRUDMode; setMode: (mode: CRUDMode) => void; list: UseEntityViewResult<TEntity>;\n selectedId: EntityId | null; select: (id: EntityId | null) => void; openDetail: (id: EntityId) => void;\n detail: TEntity | null; detailIsLoading: boolean; detailError: string | null;\n relations: Record<string, unknown>; editBuffer: Partial<TEntity>;\n setField: <K extends keyof TEntity>(field: K, value: TEntity[K]) => void; setFields: (fields: Partial<TEntity>) => void;\n resetBuffer: () => void; dirty: DirtyFields<TEntity>; startEdit: (id?: EntityId) => void; cancelEdit: () => void;\n save: () => Promise<TEntity | null>; isSaving: boolean; saveError: string | null; applyOptimistic: () => void;\n createBuffer: Partial<TEntity>; setCreateField: <K extends keyof TEntity>(field: K, value: TEntity[K]) => void;\n setCreateFields: (fields: Partial<TEntity>) => void; resetCreateBuffer: () => void;\n startCreate: () => void; cancelCreate: () => void; create: () => Promise<TEntity | null>;\n isCreating: boolean; createError: string | null; deleteEntity: (id?: EntityId) => Promise<void>;\n isDeleting: boolean; deleteError: string | null; isEditing: boolean;\n}\n\n/**\n * Batteries-included CRUD orchestration over the entity graph: list filtering/sorting, detail fetch, isolated edit buffer, optimistic create row, and transactional save/delete with rollback.\n * Prefer this over ad-hoc `useEntity` wiring when building admin-style tables + side panels + forms for one resource.\n *\n * @param opts - `CRUDOptions` for type, list key/fetch, normalization, lifecycle callbacks\n * @returns `CRUDState` with list/detail/edit/create controls\n */\nexport function useEntityCRUD<TEntity extends Record<string, unknown>>(opts: CRUDOptions<TEntity>): CRUDState<TEntity> {\n const { type, listQueryKey, listFetch, normalize, detailFetch, onCreate, onUpdate, onDelete, createDefaults = {} as Partial<TEntity>, initialView = {}, selectAfterCreate = true, clearSelectionAfterDelete = true } = opts;\n const optsRef = useRef(opts); optsRef.current = opts;\n const [mode, setMode] = useState<CRUDMode>(\"list\");\n const [selectedId, setSelectedId] = useState<EntityId | null>(null);\n const select = useCallback((id: EntityId | null) => { setSelectedId(id); setMode(id ? \"detail\" : \"list\"); }, []);\n const openDetail = useCallback((id: EntityId) => { setSelectedId(id); setMode(\"detail\"); }, []);\n const list = useEntityView<TEntity>({ type, baseQueryKey: listQueryKey, view: initialView, remoteFetch: listFetch, normalize: (raw: TEntity) => normalize(raw) });\n const { data: detail, isLoading: detailIsLoading, error: detailError } = useEntity<TEntity, TEntity>({\n type, id: selectedId,\n fetch: detailFetch ?? ((id) => { const existing = useGraphStore.getState().readEntity<TEntity>(type, id); if (existing) return Promise.resolve(existing); return Promise.reject(new Error(\"No detailFetch\")); }),\n normalize: (raw) => raw, enabled: !!selectedId,\n });\n const relations = useMemo(() => detail ? readRelations(type, detail as Record<string, unknown>) : {}, [type, detail]);\n const [editBuffer, setEditBuffer] = useState<Partial<TEntity>>({});\n const [isSaving, setIsSaving] = useState(false); const [saveError, setSaveError] = useState<string | null>(null);\n useEffect(() => { if (detail) setEditBuffer({ ...detail }); }, [selectedId]); // eslint-disable-line\n const setField = useCallback(<K extends keyof TEntity>(field: K, value: TEntity[K]) => setEditBuffer((prev) => ({ ...prev, [field]: value })), []);\n const setFields = useCallback((fields: Partial<TEntity>) => setEditBuffer((prev) => ({ ...prev, ...fields })), []);\n const resetBuffer = useCallback(() => { const current = selectedId ? useGraphStore.getState().readEntity<TEntity>(type, selectedId) : null; setEditBuffer(current ? { ...current } : {}); }, [type, selectedId]);\n const dirty = useMemo((): DirtyFields<TEntity> => {\n if (!detail) return { changed: new Set(), isDirty: false };\n const changed = new Set<keyof TEntity>();\n for (const key of Object.keys(editBuffer) as (keyof TEntity)[]) { if (JSON.stringify(editBuffer[key]) !== JSON.stringify(detail[key])) changed.add(key); }\n return { changed, isDirty: changed.size > 0 };\n }, [editBuffer, detail]);\n const startEdit = useCallback((id?: EntityId) => { const targetId = id ?? selectedId; if (targetId) { setSelectedId(targetId); const entity = useGraphStore.getState().readEntity<TEntity>(type, targetId); setEditBuffer(entity ? { ...entity } : {}); } setMode(\"edit\"); }, [selectedId, type]);\n const cancelEdit = useCallback(() => { resetBuffer(); setMode(selectedId ? \"detail\" : \"list\"); setSaveError(null); }, [resetBuffer, selectedId]);\n const applyOptimistic = useCallback(() => { if (!selectedId) return; useGraphStore.getState().patchEntity(type, selectedId, editBuffer as Record<string, unknown>); }, [type, selectedId, editBuffer]);\n const save = useCallback(async (): Promise<TEntity | null> => {\n if (!selectedId || !onUpdate) return null;\n setIsSaving(true); setSaveError(null);\n const previous = useGraphStore.getState().readEntity<TEntity>(type, selectedId);\n useGraphStore.getState().upsertEntity(type, selectedId, editBuffer as Record<string, unknown>);\n try {\n const result = await onUpdate(selectedId, editBuffer);\n const { id, data } = normalize(result);\n useGraphStore.getState().replaceEntity(type, id, data as Record<string, unknown>);\n useGraphStore.getState().clearPatch(type, id);\n cascadeInvalidation({ type, id: selectedId, previous: previous as Record<string, unknown> | null, next: data as Record<string, unknown>, op: \"update\" });\n setMode(\"detail\"); optsRef.current.onUpdateSuccess?.(result); return result;\n } catch (err) {\n if (previous) useGraphStore.getState().replaceEntity(type, selectedId, previous as Record<string, unknown>);\n const error = err instanceof Error ? err : new Error(String(err)); setSaveError(error.message); optsRef.current.onError?.(\"update\", error); return null;\n } finally { setIsSaving(false); }\n }, [selectedId, type, editBuffer, normalize]);\n const [createBuffer, setCreateBuffer] = useState<Partial<TEntity>>({ ...createDefaults });\n const [isCreating, setIsCreating] = useState(false); const [createError, setCreateError] = useState<string | null>(null);\n const setCreateField = useCallback(<K extends keyof TEntity>(field: K, value: TEntity[K]) => setCreateBuffer((prev) => ({ ...prev, [field]: value })), []);\n const setCreateFields = useCallback((fields: Partial<TEntity>) => setCreateBuffer((prev) => ({ ...prev, ...fields })), []);\n const resetCreateBuffer = useCallback(() => setCreateBuffer({ ...(optsRef.current.createDefaults ?? {}) } as Partial<TEntity>), []);\n const startCreate = useCallback(() => { resetCreateBuffer(); setCreateError(null); setMode(\"create\"); }, [resetCreateBuffer]);\n const cancelCreate = useCallback(() => { resetCreateBuffer(); setMode(\"list\"); setCreateError(null); }, [resetCreateBuffer]);\n const create = useCallback(async (): Promise<TEntity | null> => {\n if (!onCreate) return null;\n setIsCreating(true); setCreateError(null);\n const tempId = `__temp__${Date.now()}`;\n const optimisticData = { ...createBuffer, id: tempId, _optimistic: true };\n useGraphStore.getState().upsertEntity(type, tempId, optimisticData as Record<string, unknown>);\n useGraphStore.getState().insertIdInList(serializeKey(listQueryKey), tempId, \"start\");\n try {\n const result = await onCreate(createBuffer);\n const { id: realId, data } = normalize(result);\n useGraphStore.getState().removeEntity(type, tempId);\n useGraphStore.getState().upsertEntity(type, realId, data as Record<string, unknown>);\n useGraphStore.getState().setEntityFetched(type, realId);\n const store = useGraphStore.getState();\n for (const key of Object.keys(store.lists)) { const list = store.lists[key]; const idx = list.ids.indexOf(tempId); if (idx !== -1) { store.removeIdFromAllLists(type, tempId); store.insertIdInList(key, realId, idx); } }\n cascadeInvalidation({ type, id: realId, previous: null, next: data as Record<string, unknown>, op: \"create\" });\n if (selectAfterCreate) { setSelectedId(realId); setMode(\"detail\"); } else setMode(\"list\");\n resetCreateBuffer(); optsRef.current.onCreateSuccess?.(result); return result;\n } catch (err) {\n useGraphStore.getState().removeEntity(type, tempId); useGraphStore.getState().removeIdFromAllLists(type, tempId);\n const error = err instanceof Error ? err : new Error(String(err)); setCreateError(error.message); optsRef.current.onError?.(\"create\", error); return null;\n } finally { setIsCreating(false); }\n }, [type, createBuffer, normalize, listQueryKey, selectAfterCreate, resetCreateBuffer]);\n const [isDeleting, setIsDeleting] = useState(false); const [deleteError, setDeleteError] = useState<string | null>(null);\n const deleteEntity = useCallback(async (id?: EntityId) => {\n const targetId = id ?? selectedId; if (!targetId || !onDelete) return;\n setIsDeleting(true); setDeleteError(null);\n const previous = useGraphStore.getState().readEntity<TEntity>(type, targetId);\n useGraphStore.getState().removeIdFromAllLists(type, targetId);\n try {\n await onDelete(targetId); useGraphStore.getState().removeEntity(type, targetId);\n cascadeInvalidation({ type, id: targetId, previous: previous as Record<string, unknown> | null, next: null, op: \"delete\" });\n if (clearSelectionAfterDelete && targetId === selectedId) { setSelectedId(null); setMode(\"list\"); }\n optsRef.current.onDeleteSuccess?.(targetId);\n } catch (err) {\n if (previous) { useGraphStore.getState().upsertEntity(type, targetId, previous as Record<string, unknown>); useGraphStore.getState().insertIdInList(serializeKey(listQueryKey), targetId, \"end\"); }\n const error = err instanceof Error ? err : new Error(String(err)); setDeleteError(error.message); optsRef.current.onError?.(\"delete\", error);\n } finally { setIsDeleting(false); }\n }, [type, selectedId, listQueryKey, clearSelectionAfterDelete]);\n return { mode, setMode, list, selectedId, select, openDetail, detail: detail ?? null, detailIsLoading, detailError: detailError ?? null, relations, editBuffer, setField, setFields, resetBuffer, dirty, startEdit, cancelEdit, save, isSaving, saveError, applyOptimistic, createBuffer, setCreateField, setCreateFields, resetCreateBuffer, startCreate, cancelCreate, create, isCreating, createError, deleteEntity, isDeleting, deleteError, isEditing: mode === \"edit\" || mode === \"create\" };\n}\n","/**\n * adapters/realtime-manager.ts\n *\n * Routes all adapter ChangeSet events into the entity graph.\n * Coalesces rapid-fire updates within a 16ms flush window so that\n * e.g. 10 Supabase row updates for the same entity become one Zustand write.\n */\nimport { useGraphStore } from \"../graph\";\nimport type { RealtimeAdapter, ChangeSet, EntityChange, AdapterStatus, UnsubscribeFn, ChannelConfig } from \"./types\";\n\nexport interface ManagerOptions {\n flushInterval?: number;\n onStatusChange?: (adapter: string, status: AdapterStatus) => void;\n onChangeReceived?: (adapter: string, change: EntityChange) => void;\n}\n\ninterface RegisteredAdapter { adapter: RealtimeAdapter; unsubscribes: UnsubscribeFn[]; }\n\nexport class RealtimeManager {\n private adapters = new Map<string, RegisteredAdapter>();\n private pendingChanges: EntityChange[] = [];\n private pendingListKeys = new Set<string>();\n private flushTimer: ReturnType<typeof setTimeout> | null = null;\n private opts: Required<ManagerOptions>;\n\n constructor(opts: ManagerOptions = {}) {\n this.opts = {\n flushInterval: opts.flushInterval ?? 16,\n onStatusChange: opts.onStatusChange ?? (() => {}),\n onChangeReceived: opts.onChangeReceived ?? (() => {}),\n };\n }\n\n register(adapter: RealtimeAdapter, channels: ChannelConfig[], normalize?: (raw: unknown) => EntityChange | null): UnsubscribeFn {\n const existing = this.adapters.get(adapter.name);\n const registered: RegisteredAdapter = existing ?? { adapter, unsubscribes: [] };\n if (!existing) this.adapters.set(adapter.name, registered);\n if (adapter.onStatusChange) {\n registered.unsubscribes.push(adapter.onStatusChange((s) => this.opts.onStatusChange(adapter.name, s)));\n }\n for (const channel of channels) {\n const unsub = adapter.subscribe(\n { label: `${adapter.name}/${channel.type}`, replayOnConnect: true },\n (cs) => this.handleChangeset(adapter.name, cs, normalize)\n );\n registered.unsubscribes.push(unsub);\n }\n return () => this.unregister(adapter.name);\n }\n\n unregister(name: string) {\n const r = this.adapters.get(name); if (!r) return;\n for (const u of r.unsubscribes) u();\n this.adapters.delete(name);\n }\n\n unregisterAll() { for (const n of this.adapters.keys()) this.unregister(n); }\n\n private handleChangeset(name: string, cs: ChangeSet, normalize?: (raw: unknown) => EntityChange | null) {\n for (const rawChange of cs.changes) {\n const change = normalize ? normalize(rawChange) : rawChange;\n if (!change) continue;\n this.opts.onChangeReceived(name, change);\n this.pendingChanges.push(change);\n }\n if (cs.affectedListKeys) for (const k of cs.affectedListKeys) this.pendingListKeys.add(k);\n this.scheduleFlush();\n }\n\n private scheduleFlush() {\n if (this.opts.flushInterval === 0) { this.flush(); return; }\n if (this.flushTimer !== null) return;\n this.flushTimer = setTimeout(() => { this.flushTimer = null; this.flush(); }, this.opts.flushInterval);\n }\n\n flush() {\n if (this.pendingChanges.length === 0 && this.pendingListKeys.size === 0) return;\n const changes = this.pendingChanges.splice(0);\n const listKeys = new Set(this.pendingListKeys); this.pendingListKeys.clear();\n const store = useGraphStore.getState();\n for (const change of coalesceChanges(changes)) {\n switch (change.op) {\n case \"insert\": case \"upsert\":\n if (change.data) { store.upsertEntity(change.type, change.id, change.data); store.setEntityFetched(change.type, change.id); }\n break;\n case \"update\":\n if (change.patch) {\n if (store.entities[change.type]?.[change.id]) store.upsertEntity(change.type, change.id, change.patch as Record<string, unknown>);\n else store.invalidateEntity(change.type, change.id);\n } else if (change.data) { store.upsertEntity(change.type, change.id, change.data); store.setEntityFetched(change.type, change.id); }\n break;\n case \"delete\":\n store.removeEntity(change.type, change.id);\n store.removeIdFromAllLists(change.type, change.id);\n break;\n }\n }\n for (const key of listKeys) store.invalidateLists(key);\n }\n\n forceFlush() { if (this.flushTimer !== null) { clearTimeout(this.flushTimer); this.flushTimer = null; } this.flush(); }\n}\n\nfunction coalesceChanges(changes: EntityChange[]): EntityChange[] {\n const byKey = new Map<string, EntityChange>();\n for (const c of changes) {\n const key = `${c.type}:${c.id}`; const existing = byKey.get(key);\n if (!existing) { byKey.set(key, { ...c }); continue; }\n if (c.op === \"delete\") { byKey.set(key, c); continue; }\n if (existing.op === \"delete\") continue;\n byKey.set(key, { ...existing, op: \"upsert\", data: c.data ?? existing.data, patch: c.patch ? { ...(existing.patch ?? {}), ...c.patch } : existing.patch });\n }\n return Array.from(byKey.values());\n}\n\nlet _manager: RealtimeManager | null = null;\nexport function getRealtimeManager(opts?: ManagerOptions): RealtimeManager {\n if (!_manager) _manager = new RealtimeManager(opts);\n return _manager;\n}\nexport function resetRealtimeManager() { _manager?.unregisterAll(); _manager = null; }\n","/**\n * adapters/realtime-adapters.ts\n *\n * WebSocket, Supabase Realtime, Convex, and GraphQL subscription adapters.\n * All implement RealtimeAdapter and route through RealtimeManager → entity graph.\n */\nimport type {\n RealtimeAdapter,\n SubscriptionConfig,\n ChangeSet,\n EntityChange,\n ChangeOperation,\n AdapterStatus,\n UnsubscribeFn,\n ChannelConfig,\n} from \"./types\";\n\n// =============================================================================\n// WebSocket adapter\n// =============================================================================\n\nexport interface WebSocketAdapterOptions {\n url: string | (() => string);\n parseMessage?: (data: unknown) => EntityChange[] | null;\n protocols?: string | string[];\n reconnectBaseDelay?: number;\n maxReconnectAttempts?: number;\n pingInterval?: number;\n pingMessage?: string;\n}\n\nexport function createWebSocketAdapter(opts: WebSocketAdapterOptions): RealtimeAdapter {\n const {\n url,\n parseMessage,\n protocols,\n reconnectBaseDelay = 1_000,\n maxReconnectAttempts = Infinity,\n pingInterval = 30_000,\n pingMessage = '{\"type\":\"ping\"}',\n } = opts;\n\n const statusCbs = new Set<(s: AdapterStatus) => void>();\n const handlers = new Set<(cs: ChangeSet) => void>();\n let ws: WebSocket | null = null;\n let attempts = 0;\n let reconnTimer: ReturnType<typeof setTimeout> | null = null;\n let pingTimer: ReturnType<typeof setInterval> | null = null;\n let stopped = false;\n\n const emit = (s: AdapterStatus) => { for (const cb of statusCbs) cb(s); };\n\n function connect() {\n if (stopped) return;\n const u = typeof url === \"function\" ? url() : url;\n emit(\"connecting\");\n ws = new WebSocket(u, protocols);\n ws.onopen = () => {\n attempts = 0;\n emit(\"connected\");\n if (pingInterval > 0)\n pingTimer = setInterval(() => { if (ws?.readyState === 1) ws.send(pingMessage); }, pingInterval);\n };\n ws.onmessage = (ev) => {\n let parsed: unknown;\n try { parsed = JSON.parse(ev.data); } catch { return; }\n const changes = parseMessage ? parseMessage(parsed) : defaultParse(parsed);\n if (!changes?.length) return;\n for (const h of handlers) h({ changes, timestamp: new Date().toISOString() });\n };\n ws.onclose = () => {\n emit(\"disconnected\");\n clearInterval(pingTimer!);\n if (!stopped && attempts < maxReconnectAttempts)\n reconnTimer = setTimeout(connect, reconnectBaseDelay * Math.pow(2, Math.min(attempts++, 6)));\n };\n ws.onerror = () => { emit(\"error\"); ws?.close(); };\n }\n\n return {\n name: \"websocket\",\n subscribe(_cfg: SubscriptionConfig, handler: (cs: ChangeSet) => void): UnsubscribeFn {\n handlers.add(handler);\n if (!ws || ws.readyState === WebSocket.CLOSED) connect();\n return () => {\n handlers.delete(handler);\n if (handlers.size === 0) {\n stopped = true;\n clearTimeout(reconnTimer!);\n clearInterval(pingTimer!);\n ws?.close();\n ws = null;\n }\n };\n },\n onStatusChange: (cb) => { statusCbs.add(cb); return () => statusCbs.delete(cb); },\n };\n}\n\nfunction defaultParse(data: unknown): EntityChange[] | null {\n if (!data || typeof data !== \"object\") return null;\n const d = data as Record<string, unknown>;\n if (d.op && d.type && d.id) return [d as unknown as EntityChange];\n if (Array.isArray(d.changes)) return d.changes as EntityChange[];\n return null;\n}\n\n// =============================================================================\n// Supabase Realtime adapter\n// =============================================================================\n\n// Minimal surface types — no hard dep on @supabase/supabase-js\ninterface SupabaseClient { channel(name: string): SupabaseChannel; }\ninterface SupabaseChannel {\n on(\n event: \"postgres_changes\",\n config: { event: \"*\"|\"INSERT\"|\"UPDATE\"|\"DELETE\"; schema: string; table: string; filter?: string },\n handler: (payload: SupabasePayload) => void\n ): SupabaseChannel;\n subscribe(cb?: (status: string) => void): SupabaseChannel;\n unsubscribe(): Promise<void>;\n}\ninterface SupabasePayload {\n eventType: \"INSERT\" | \"UPDATE\" | \"DELETE\";\n new: Record<string, unknown>;\n old: Record<string, unknown>;\n table: string;\n}\n\nexport interface SupabaseAdapterOptions {\n tableTypeMap?: Record<string, string>;\n extractId?: (record: Record<string, unknown>) => string;\n schema?: string;\n}\n\nexport function createSupabaseRealtimeAdapter(\n client: SupabaseClient,\n opts: SupabaseAdapterOptions = {}\n): RealtimeAdapter & {\n subscribeChannel: (config: ChannelConfig & { _handler?: (cs: ChangeSet) => void }) => UnsubscribeFn;\n} {\n const {\n tableTypeMap = {},\n extractId = (r) => String(r.id),\n schema = \"public\",\n } = opts;\n const statusCbs = new Set<(s: AdapterStatus) => void>();\n\n function resolveType(table: string): string {\n return tableTypeMap[table] ?? (table.charAt(0).toUpperCase() + table.slice(1));\n }\n\n function payloadToChange(p: SupabasePayload): EntityChange | null {\n const type = resolveType(p.table);\n if (p.eventType === \"DELETE\") {\n const id = extractId(p.old);\n return id ? { op: \"delete\", type, id } : null;\n }\n const id = extractId(p.new);\n if (!id) return null;\n return { op: p.eventType === \"INSERT\" ? \"insert\" : \"upsert\", type, id, data: p.new };\n }\n\n return {\n name: \"supabase-realtime\",\n /**\n * Generic subscribe is a no-op for Supabase. Use `subscribeChannel()` instead,\n * which accepts a `ChannelConfig` with Supabase-specific table/filter parameters.\n */\n subscribe(_cfg: SubscriptionConfig, _handler: (cs: ChangeSet) => void): UnsubscribeFn {\n return () => {};\n },\n onStatusChange: (cb) => { statusCbs.add(cb); return () => statusCbs.delete(cb); },\n subscribeChannel(config) {\n const tableName =\n Object.entries(tableTypeMap).find(([, t]) => t === config.type)?.[0] ??\n config.type.toLowerCase();\n const filterStr = config.id\n ? `id=eq.${config.id}`\n : config.filter\n ? Object.entries(config.filter).map(([k, v]) => `${k}=eq.${v}`).join(\",\")\n : undefined;\n\n const channel = client\n .channel(`entity-store:${config.type}:${config.id ?? \"all\"}`)\n .on(\"postgres_changes\", { event: \"*\", schema, table: tableName, ...(filterStr ? { filter: filterStr } : {}) }, (payload) => {\n const change = payloadToChange(payload);\n if (!change) return;\n config._handler?.({ changes: [change], timestamp: new Date().toISOString() });\n })\n .subscribe((status) => {\n const s: AdapterStatus =\n status === \"SUBSCRIBED\" ? \"connected\" :\n status === \"CHANNEL_ERROR\" ? \"error\" :\n status === \"CLOSED\" ? \"disconnected\" : \"connecting\";\n for (const cb of statusCbs) cb(s);\n });\n\n return () => { channel.unsubscribe(); };\n },\n };\n}\n\n// =============================================================================\n// Convex adapter — snapshot-diff reactive queries → EntityChanges\n// =============================================================================\n\ninterface ConvexClient {\n onUpdate<T>(\n query: unknown,\n args: Record<string, unknown>,\n handler: (result: T) => void\n ): UnsubscribeFn;\n}\n\nexport interface ConvexChannelConfig<T extends Record<string, unknown>> {\n type: string;\n query: unknown;\n args?: Record<string, unknown>;\n extractId?: (record: T) => string;\n normalize?: (record: T) => Record<string, unknown>;\n}\n\nexport function createConvexAdapter<T extends Record<string, unknown>>(opts: {\n client: ConvexClient;\n channels: ConvexChannelConfig<T>[];\n}): RealtimeAdapter {\n const { client, channels } = opts;\n const statusCbs = new Set<(s: AdapterStatus) => void>();\n const snapshots = new Map<string, Map<string, T>>();\n\n function diffSnapshot(\n type: string,\n prev: Map<string, T>,\n next: T[],\n extractId: (r: T) => string,\n normalize?: (r: T) => Record<string, unknown>\n ): EntityChange[] {\n const changes: EntityChange[] = [];\n const nextIds = new Set<string>();\n\n for (const record of next) {\n const id = extractId(record);\n nextIds.add(id);\n const data = normalize ? normalize(record) : (record as unknown as Record<string, unknown>);\n changes.push({ op: prev.has(id) ? \"upsert\" : \"insert\", type, id, data });\n prev.set(id, record);\n }\n\n for (const [id] of prev) {\n if (!nextIds.has(id)) {\n changes.push({ op: \"delete\", type, id });\n prev.delete(id);\n }\n }\n\n return changes;\n }\n\n return {\n name: \"convex\",\n subscribe(_cfg: SubscriptionConfig, handler: (cs: ChangeSet) => void): UnsubscribeFn {\n const unsubs: UnsubscribeFn[] = [];\n\n for (const ch of channels) {\n const { type, query, args = {}, normalize } = ch;\n const extractId =\n ch.extractId ??\n ((r: T) =>\n String(\n (r as Record<string, unknown>)._id ??\n (r as Record<string, unknown>).id\n ));\n\n if (!snapshots.has(type)) snapshots.set(type, new Map());\n const snap = snapshots.get(type)!;\n\n unsubs.push(\n client.onUpdate(query, args, (records: T[]) => {\n const changes = diffSnapshot(type, snap, records, extractId, normalize);\n if (changes.length > 0)\n handler({ changes, timestamp: new Date().toISOString() });\n })\n );\n }\n\n for (const cb of statusCbs) cb(\"connected\");\n return () => {\n for (const u of unsubs) u();\n for (const cb of statusCbs) cb(\"disconnected\");\n };\n },\n onStatusChange: (cb) => { statusCbs.add(cb); return () => statusCbs.delete(cb); },\n };\n}\n\n// =============================================================================\n// GraphQL Subscription adapter — graphql-ws protocol\n// =============================================================================\n\ninterface GQLWsClient {\n subscribe<T>(\n payload: { query: string; variables?: Record<string, unknown> },\n sink: {\n next: (value: { data: T }) => void;\n error: (err: unknown) => void;\n complete: () => void;\n }\n ): UnsubscribeFn;\n}\n\nexport interface GQLSubscriptionConfig<T extends Record<string, unknown>> {\n type: string;\n document: string;\n variables?: Record<string, unknown>;\n getPayload: (\n data: T\n ) => GQLPayload | GQLPayload[] | null;\n}\n\ninterface GQLPayload {\n type?: string;\n node?: Record<string, unknown>;\n id?: string;\n}\n\nexport function createGraphQLSubscriptionAdapter<T extends Record<string, unknown>>(opts: {\n client: GQLWsClient;\n subscriptions: GQLSubscriptionConfig<T>[];\n extractId?: (node: Record<string, unknown>, type: string) => string;\n normalize?: (node: Record<string, unknown>, type: string) => Record<string, unknown>;\n}): RealtimeAdapter {\n const {\n client,\n subscriptions,\n extractId = (n) => String(n.id),\n normalize,\n } = opts;\n const statusCbs = new Set<(s: AdapterStatus) => void>();\n\n function payloadToChange(type: string, p: GQLPayload): EntityChange | null {\n const gqlType = p.type ?? \"updated\";\n\n if (gqlType === \"deleted\") {\n const id = p.id ?? (p.node ? extractId(p.node, type) : null);\n return id ? { op: \"delete\", type, id } : null;\n }\n\n if (!p.node) return null;\n const id = extractId(p.node, type);\n const data = normalize ? normalize(p.node, type) : stripTypename(p.node);\n const op: ChangeOperation = gqlType === \"created\" ? \"insert\" : \"upsert\";\n return { op, type, id, data };\n }\n\n return {\n name: \"graphql-subscription\",\n subscribe(_cfg: SubscriptionConfig, handler: (cs: ChangeSet) => void): UnsubscribeFn {\n const unsubs: UnsubscribeFn[] = [];\n\n for (const sub of subscriptions) {\n const { type, document, variables, getPayload } = sub;\n\n unsubs.push(\n client.subscribe<T>(\n { query: document, variables },\n {\n next: ({ data }) => {\n const raw = getPayload(data);\n if (!raw) return;\n const payloads = Array.isArray(raw) ? raw : [raw];\n const changes = payloads\n .map((p) => payloadToChange(type, p))\n .filter((c): c is EntityChange => c !== null);\n if (changes.length > 0)\n handler({ changes, timestamp: new Date().toISOString() });\n },\n error: (e) => {\n console.error(`[GQLSub] ${type}:`, e);\n for (const cb of statusCbs) cb(\"error\");\n },\n complete: () => {\n for (const cb of statusCbs) cb(\"disconnected\");\n },\n }\n )\n );\n }\n\n for (const cb of statusCbs) cb(\"connected\");\n return () => { for (const u of unsubs) u(); };\n },\n onStatusChange: (cb) => { statusCbs.add(cb); return () => statusCbs.delete(cb); },\n };\n}\n\nfunction stripTypename(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (k === \"__typename\") continue;\n result[k] =\n v && typeof v === \"object\" && !Array.isArray(v)\n ? stripTypename(v as Record<string, unknown>)\n : v;\n }\n return result;\n}\n","import { toPrismaOrderBy, toPrismaWhere } from \"../view/prisma-compile\";\nimport type { FilterSpec, SortSpec, ViewDescriptor } from \"../view/types\";\nimport type {\n BelongsToRelation,\n EntitySchema,\n HasManyRelation,\n ManyToManyRelation,\n RelationDescriptor,\n} from \"../crud/relations\";\nimport type { EntityQueryOptions, ListFetchParams, ListQueryOptions, ListResponse } from \"../engine\";\nimport type { CRUDOptions } from \"../crud/use-entity-crud\";\nimport type { ViewFetchParams } from \"../view/use-entity-view\";\nimport type { EntityId, EntityType } from \"../graph\";\n\nexport { toPrismaWhere, toPrismaOrderBy } from \"../view/prisma-compile\";\n\n/**\n * Options for {@link createPrismaEntityConfig}: one REST-backed resource aligned with Prisma-style `where` / `orderBy` / `include` payloads.\n */\nexport interface PrismaEntityConfigOptions<TEntity extends Record<string, unknown>> {\n /** Graph entity type key (e.g. `\"Task\"`). */\n type: string;\n /** Base REST URL for the collection (list) and detail as `${endpoint}/:id`. */\n endpoint: string;\n /** Primary key field on normalized entities (default `\"id\"`). */\n idField?: string;\n /**\n * Declarative relations (Prisma-flavored names) used to build {@link EntitySchema} and {@link toPrismaInclude}.\n * `type` is the **related** model; `foreignKey` is the FK or scalar list field name as in your API.\n */\n relations?: Record<\n string,\n {\n type: string;\n foreignKey: string;\n relation: \"belongsTo\" | \"hasMany\" | \"manyToMany\";\n }\n >;\n}\n\nfunction trimSlash(s: string) {\n return s.replace(/\\/+$/, \"\");\n}\n\nfunction joinEndpoint(base: string, ...segments: string[]) {\n let u = trimSlash(base);\n for (const seg of segments) {\n if (!seg) continue;\n u += `/${String(seg).replace(/^\\/+/, \"\")}`;\n }\n return u;\n}\n\nfunction defaultNormalize<TEntity extends Record<string, unknown>>(\n raw: TEntity,\n idField: string\n): { id: EntityId; data: TEntity } {\n const id = (raw as Record<string, unknown>)[idField];\n return { id: id != null ? String(id) : \"\", data: raw };\n}\n\n/**\n * Appends Prisma-shaped `where` / `orderBy` as JSON query params (`where`, `orderBy`) plus `page`, `pageSize`, `cursor`.\n */\nfunction listSearchParams(\n where: Record<string, unknown>,\n orderBy: Record<string, string>[] | undefined,\n p: ListFetchParams\n): string {\n const sp = new URLSearchParams();\n if (Object.keys(where).length > 0) sp.set(\"where\", JSON.stringify(where));\n if (orderBy && orderBy.length > 0) sp.set(\"orderBy\", JSON.stringify(orderBy));\n if (p.page != null) sp.set(\"page\", String(p.page));\n if (p.pageSize != null) sp.set(\"pageSize\", String(p.pageSize));\n if (p.cursor) sp.set(\"cursor\", p.cursor);\n if (p.params && typeof p.params === \"object\") {\n for (const [k, v] of Object.entries(p.params)) {\n if (v === undefined || v === null) continue;\n sp.set(k, typeof v === \"string\" ? v : JSON.stringify(v));\n }\n }\n const q = sp.toString();\n return q ? `?${q}` : \"\";\n}\n\nasync function readListResponse<T>(res: Response): Promise<ListResponse<T>> {\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n const json = (await res.json()) as Record<string, unknown>;\n const items = (Array.isArray(json.items)\n ? json.items\n : Array.isArray(json.data)\n ? json.data\n : Array.isArray(json)\n ? json\n : []) as T[];\n return {\n items,\n total: typeof json.total === \"number\" ? json.total : undefined,\n nextCursor: typeof json.nextCursor === \"string\" ? json.nextCursor : undefined,\n prevCursor: typeof json.prevCursor === \"string\" ? json.prevCursor : undefined,\n hasNextPage: typeof json.hasNextPage === \"boolean\" ? json.hasNextPage : undefined,\n hasPrevPage: typeof json.hasPrevPage === \"boolean\" ? json.hasPrevPage : undefined,\n page: typeof json.page === \"number\" ? json.page : undefined,\n pageSize: typeof json.pageSize === \"number\" ? json.pageSize : undefined,\n };\n}\n\n/**\n * Converts registered {@link RelationDescriptor} entries into a Prisma `include` map (`true` for each relation name).\n */\nexport function toPrismaInclude(\n relations: Record<string, RelationDescriptor>\n): Record<string, boolean | Record<string, unknown>> {\n const include: Record<string, boolean | Record<string, unknown>> = {};\n for (const name of Object.keys(relations)) include[name] = true;\n return include;\n}\n\n/**\n * Maps Prisma-style relation declarations from {@link PrismaEntityConfigOptions} into a single {@link EntitySchema}\n * for {@link registerSchema} / cascade invalidation. `hasMany` uses `listKeyPrefix: (id) => [targetType, { [foreignKey]: id }]`.\n * `manyToMany` uses `localArrayField: foreignKey` and a stable `listKeyPrefix` of `[targetType, relationName, id]`.\n */\nexport function prismaRelationsToSchema(\n type: string,\n relations: PrismaEntityConfigOptions<Record<string, unknown>>[\"relations\"]\n): EntitySchema {\n if (!relations || Object.keys(relations).length === 0) return { type: type as EntityType };\n\n const out: Record<string, RelationDescriptor> = {};\n for (const [name, rel] of Object.entries(relations)) {\n const targetType = rel.type as EntityType;\n switch (rel.relation) {\n case \"belongsTo\":\n out[name] = {\n cardinality: \"belongsTo\",\n foreignKey: rel.foreignKey,\n targetType,\n } satisfies BelongsToRelation;\n break;\n case \"hasMany\":\n out[name] = {\n cardinality: \"hasMany\",\n targetType,\n foreignKey: rel.foreignKey,\n listKeyPrefix: (parentId: EntityId) => [targetType, { [rel.foreignKey]: parentId }],\n } satisfies HasManyRelation;\n break;\n case \"manyToMany\":\n out[name] = {\n cardinality: \"manyToMany\",\n targetType,\n localArrayField: rel.foreignKey,\n listKeyPrefix: (thisId: EntityId) => [targetType, name, thisId],\n } satisfies ManyToManyRelation;\n break;\n }\n }\n return { type: type as EntityType, relations: out };\n}\n\n/**\n * Factory for REST-backed entity/list/CRUD options that serialize filters and sorts with {@link toPrismaWhere} / {@link toPrismaOrderBy}.\n *\n * - {@link PrismaEntityConfigOptions.endpoint `endpoint`} — GET list; GET `${endpoint}/:id` for detail.\n * - List/CRUD fetchers send `where` and `orderBy` as JSON query strings unless you override via {@link ListFetchParams.params}.\n */\nexport function createPrismaEntityConfig<TEntity extends Record<string, unknown>>(\n config: PrismaEntityConfigOptions<TEntity>\n) {\n const { type, endpoint, idField = \"id\", relations } = config;\n const entityType = type as EntityType;\n\n const normalize = (raw: TEntity) => defaultNormalize(raw, idField);\n\n return {\n /**\n * Builds {@link EntityQueryOptions} for {@link useEntity} (GET `${endpoint}/:id`).\n */\n entity: (id: EntityId): EntityQueryOptions<TEntity, TEntity> => ({\n type: entityType,\n id,\n idField,\n fetch: async (entityId) => {\n const res = await fetch(joinEndpoint(endpoint, String(entityId)));\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n return res.json() as Promise<TEntity>;\n },\n normalize: (raw) => raw,\n }),\n\n /**\n * Builds {@link ListQueryOptions} for {@link useEntityList}. Encode `filter` / `sort` in the returned `queryKey` so\n * refetches track view changes; each fetch sends Prisma-shaped `where` / `orderBy` query params.\n */\n list: (params?: {\n page?: number;\n pageSize?: number;\n filter?: FilterSpec;\n sort?: SortSpec;\n }): ListQueryOptions<TEntity, TEntity> => {\n const filter = params?.filter;\n const sort = params?.sort;\n const queryKey: unknown[] = [entityType, endpoint, \"list\", filter ?? null, sort ?? null];\n return {\n type: entityType,\n queryKey,\n normalize,\n fetch: async (p: ListFetchParams) => {\n const where = filter ? toPrismaWhere(filter) : {};\n const orderBy = sort && sort.length > 0 ? toPrismaOrderBy(sort) : undefined;\n const qs = listSearchParams(where, orderBy, p);\n const res = await fetch(`${trimSlash(endpoint)}${qs}`);\n return readListResponse<TEntity>(res);\n },\n };\n },\n\n /**\n * Builds partial {@link CRUDOptions} for {@link useEntityCRUD}: wires list fetch (Prisma query params from `ViewDescriptor`)\n * and detail fetch. Supply `onCreate` / `onUpdate` / `onDelete` at the call site.\n */\n crud: (opts?: { initialView?: ViewDescriptor }): CRUDOptions<TEntity> => {\n const initialView = opts?.initialView ?? {};\n return {\n type: entityType,\n listQueryKey: [entityType, endpoint, \"crud\"],\n normalize,\n initialView,\n listFetch: async (p: ViewFetchParams) => {\n const where = p.view.filter ? toPrismaWhere(p.view.filter) : {};\n const orderBy = p.view.sort && p.view.sort.length > 0 ? toPrismaOrderBy(p.view.sort) : undefined;\n const qs = listSearchParams(where, orderBy, {});\n const res = await fetch(`${trimSlash(endpoint)}${qs}`);\n return readListResponse<TEntity>(res);\n },\n detailFetch: async (entityId) => {\n const res = await fetch(joinEndpoint(endpoint, String(entityId)));\n if (!res.ok) throw new Error(`HTTP ${res.status}: ${res.statusText}`);\n return res.json() as Promise<TEntity>;\n },\n };\n },\n\n /** Schemas to pass to {@link registerSchema} (one entry for this `type`). */\n schemas: (): EntitySchema[] => [prismaRelationsToSchema(type, relations)],\n };\n}\n","/**\n * adapters/electricsql.ts\n *\n * ElectricSQL + PGlite local-first adapter.\n *\n * Server Postgres → ElectricSQL shape sync (SSE) → PGlite (local WASM Postgres)\n * ↓ NOTIFY\n * Entity Graph (Zustand)\n *\n * Reads from PGlite (instant, offline-capable).\n * Writes go to PGlite first (optimistic); Electric syncs to Postgres in background.\n */\nimport { useState, useEffect, useCallback } from \"react\";\nimport { useGraphStore } from \"../graph\";\nimport { getRealtimeManager } from \"./realtime-manager\";\nimport type { SyncAdapter, SubscriptionConfig, ChangeSet, EntityChange, AdapterStatus, UnsubscribeFn } from \"./types\";\nimport type { EntityType, EntityId } from \"../graph\";\n\n// ---------------------------------------------------------------------------\n// Minimal surface types (avoids hard deps on @electric-sql/pglite etc.)\n// ---------------------------------------------------------------------------\ninterface PGlite {\n query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<{ rows: T[] }>;\n exec(sql: string): Promise<void>;\n listen(channel: string, handler: (payload: string) => void): Promise<() => void>;\n}\ninterface ShapeMessage<T = Record<string, unknown>> {\n headers: { operation: \"insert\" | \"update\" | \"delete\" };\n offset: string; value: T; key: string;\n}\ninterface ShapeStream<T = Record<string, unknown>> {\n subscribe(onMsg: (msgs: ShapeMessage<T>[]) => void, onErr?: (e: Error) => void): () => void;\n isUpToDate: boolean; lastOffset: string;\n}\n\n// ---------------------------------------------------------------------------\n// Config\n// ---------------------------------------------------------------------------\nexport interface ElectricTableConfig<T extends Record<string, unknown>> {\n type: EntityType; table: string; where?: string; idColumn?: string;\n normalize?: (row: T) => Record<string, unknown>;\n shapeStream: ShapeStream<T>;\n}\n\nexport interface ElectricAdapterOptions {\n pglite: PGlite;\n tables: ElectricTableConfig<Record<string, unknown>>[];\n onSynced?: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Adapter factory\n// ---------------------------------------------------------------------------\nexport function createElectricAdapter(opts: ElectricAdapterOptions): SyncAdapter {\n const { pglite, tables, onSynced } = opts;\n const statusCbs = new Set<(s: AdapterStatus) => void>();\n const syncedCbs = new Set<() => void>();\n const syncedTables = new Set<string>();\n let globalHandler: ((cs: ChangeSet) => void) | null = null;\n\n function checkAllSynced() {\n if (tables.every((t) => syncedTables.has(t.table))) { onSynced?.(); for (const cb of syncedCbs) cb(); }\n }\n\n function toChange<T extends Record<string, unknown>>(tc: ElectricTableConfig<T>, msg: ShapeMessage<T>): EntityChange | null {\n const { type, idColumn = \"id\", normalize } = tc; const op = msg.headers.operation;\n const raw = msg.value; const id = String(raw[idColumn]); if (!id) return null;\n const data = normalize ? normalize(raw) : (raw as Record<string, unknown>);\n if (op === \"delete\") return { op: \"delete\", type, id };\n return { op: op === \"insert\" ? \"insert\" : \"upsert\", type, id, data };\n }\n\n const shapeUnsubs: UnsubscribeFn[] = [];\n for (const tc of tables) {\n shapeUnsubs.push(tc.shapeStream.subscribe((msgs) => {\n if (!globalHandler) return;\n const changes = msgs.map((m) => toChange(tc as ElectricTableConfig<Record<string, unknown>>, m as ShapeMessage<Record<string, unknown>>)).filter((c): c is EntityChange => c !== null);\n if (changes.length > 0) globalHandler({ changes, timestamp: new Date().toISOString() });\n if (tc.shapeStream.isUpToDate) { syncedTables.add(tc.table); checkAllSynced(); }\n }, (e) => { console.error(`[Electric] ${tc.table}:`, e); for (const cb of statusCbs) cb(\"error\"); }));\n }\n\n void (async () => {\n for (const tc of tables) {\n await pglite.listen(`entity_store_${tc.table}`, (payload) => {\n if (!globalHandler) return;\n try {\n const parsed: { op: string; row: Record<string, unknown> } = JSON.parse(payload);\n const change = toChange(tc as ElectricTableConfig<Record<string, unknown>>, { headers: { operation: parsed.op as \"insert\"|\"update\"|\"delete\" }, offset: \"\", key: String(parsed.row[tc.idColumn ?? \"id\"]), value: parsed.row });\n if (change) globalHandler({ changes: [change] });\n } catch { /* non-JSON frame */ }\n });\n }\n })();\n\n return {\n name: \"electricsql\",\n subscribe(_cfg: SubscriptionConfig, handler: (cs: ChangeSet) => void): UnsubscribeFn {\n globalHandler = handler;\n for (const cb of statusCbs) cb(\"connected\");\n return () => { globalHandler = null; for (const u of shapeUnsubs) u(); };\n },\n onStatusChange(cb) { statusCbs.add(cb); return () => statusCbs.delete(cb); },\n async query<T = Record<string, unknown>>(sql: string, params?: unknown[]) { const r = await pglite.query<T>(sql, params); return { rows: r.rows }; },\n async execute(sql: string, _params?: unknown[]) { await pglite.exec(sql); },\n isSynced() { return tables.every((t) => syncedTables.has(t.table)); },\n onSyncComplete(cb): UnsubscribeFn {\n if (this.isSynced()) { cb(); return () => {}; }\n syncedCbs.add(cb); return () => syncedCbs.delete(cb);\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// React hook: useLocalFirst\n// ---------------------------------------------------------------------------\nexport interface UseLocalFirstResult {\n isSynced: boolean;\n query: <T = Record<string, unknown>>(sql: string, params?: unknown[]) => Promise<T[]>;\n execute: (sql: string, params?: unknown[]) => Promise<void>;\n}\n\nexport function useLocalFirst(adapter: SyncAdapter): UseLocalFirstResult {\n const [isSynced, setIsSynced] = useState(adapter.isSynced());\n useEffect(() => {\n const u1 = adapter.onSyncComplete(() => setIsSynced(true));\n const u2 = getRealtimeManager().register(adapter, []);\n return () => { u1(); u2(); };\n }, [adapter]);\n const query = useCallback(async <T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]> => (await adapter.query<T>(sql, params)).rows, [adapter]);\n const execute = useCallback((sql: string, params?: unknown[]) => adapter.execute(sql, params), [adapter]);\n return { isSynced, query, execute };\n}\n\n// ---------------------------------------------------------------------------\n// usePGliteQuery — run raw SQL, populate graph\n// ---------------------------------------------------------------------------\nexport function usePGliteQuery<T extends Record<string, unknown>>(opts: {\n adapter: SyncAdapter; type: EntityType; sql: string; params?: unknown[];\n idColumn?: string; normalize?: (row: T) => Record<string, unknown>; deps?: unknown[];\n}) {\n const { adapter, type, sql, params, idColumn = \"id\", normalize, deps = [] } = opts;\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n useEffect(() => {\n let cancelled = false; setIsLoading(true);\n adapter.query<T>(sql, params).then((r) => {\n if (cancelled) return;\n const store = useGraphStore.getState();\n store.upsertEntities(type, r.rows.map((row) => ({ id: String(row[idColumn]), data: normalize ? normalize(row) : (row as Record<string, unknown>) })));\n for (const row of r.rows) store.setEntityFetched(type, String(row[idColumn]));\n setIsLoading(false); setError(null);\n }).catch((e) => { if (!cancelled) { setError(String(e)); setIsLoading(false); } });\n return () => { cancelled = true; };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sql, type, ...deps]);\n return { isLoading, error };\n}\n","/**\n * graphql/client.ts\n *\n * GraphQL client that integrates with the entity graph.\n * Normalizes query/mutation responses using declarative EntityDescriptors.\n * After normalization, entities live in the same graph as REST data —\n * a GQL mutation to Post:123 updates REST-subscribed components instantly.\n */\nimport { useGraphStore } from \"../graph\";\nimport { dedupe } from \"../engine\";\nimport type { EntityType, EntityId } from \"../graph\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\nexport interface GQLClientConfig {\n url: string;\n headers?: () => Record<string, string>;\n onError?: (errors: GQLError[]) => void;\n}\n\nexport interface GQLError {\n message: string;\n locations?: Array<{ line: number; column: number }>;\n path?: string[];\n extensions?: Record<string, unknown>;\n}\n\nexport interface GQLResponse<T> { data: T | null; errors?: GQLError[]; }\n\nexport interface EntityDescriptor<TNode, TEntity extends Record<string, unknown>> {\n type: EntityType;\n path: string;\n extractId?: (node: TNode) => EntityId;\n normalize: (node: TNode) => TEntity;\n relations?: EntityDescriptor<unknown, Record<string, unknown>>[];\n}\n\n// ---------------------------------------------------------------------------\n// Raw executor\n// ---------------------------------------------------------------------------\nexport async function executeGQL<T>(cfg: GQLClientConfig, document: string, variables?: Record<string, unknown>): Promise<GQLResponse<T>> {\n const headers = { \"Content-Type\": \"application/json\", ...(cfg.headers?.() ?? {}) };\n const res = await fetch(cfg.url, { method: \"POST\", headers, body: JSON.stringify({ query: document, variables }) });\n if (!res.ok) throw new Error(`GQL request failed: ${res.status}`);\n const json = (await res.json()) as GQLResponse<T>;\n if (json.errors?.length) cfg.onError?.(json.errors);\n return json;\n}\n\n// ---------------------------------------------------------------------------\n// Normalisation\n// ---------------------------------------------------------------------------\nexport function normalizeGQLResponse<T>(data: T, descriptors: EntityDescriptor<unknown, Record<string, unknown>>[]): Array<{ type: EntityType; id: EntityId }> {\n const store = useGraphStore.getState();\n const written: Array<{ type: EntityType; id: EntityId }> = [];\n\n function resolvePath(obj: Record<string, unknown>, path: string): unknown {\n return path.split(\".\").reduce<unknown>((acc, key) => acc && typeof acc === \"object\" && !Array.isArray(acc) ? (acc as Record<string, unknown>)[key] : undefined, obj);\n }\n\n function walk(subtree: unknown, desc: EntityDescriptor<unknown, Record<string, unknown>>) {\n if (!subtree) return;\n const { type, extractId = (n: Record<string, unknown>) => String(n.id), normalize, relations } = desc;\n const process = (node: unknown) => {\n if (!node || typeof node !== \"object\") return;\n const id = extractId(node as Record<string, unknown>); const normalized = normalize(node);\n store.upsertEntity(type, id, normalized); store.setEntityFetched(type, id);\n written.push({ type, id });\n if (relations) for (const rel of relations) walk(resolvePath(node as Record<string, unknown>, rel.path), rel);\n };\n if (Array.isArray(subtree)) for (const item of subtree) process(item);\n else process(subtree);\n }\n\n for (const desc of descriptors) {\n const subtree = desc.path === \".\" ? data : (data && typeof data === \"object\" ? resolvePath(data as Record<string, unknown>, desc.path) : undefined);\n walk(subtree, desc);\n }\n return written;\n}\n\n// ---------------------------------------------------------------------------\n// GQLClient class\n// ---------------------------------------------------------------------------\nexport class GQLClient {\n constructor(private cfg: GQLClientConfig) {}\n\n async query<TData, TEntity extends Record<string, unknown>>(opts: {\n document: string; variables?: Record<string, unknown>;\n descriptors: EntityDescriptor<unknown, TEntity>[];\n cacheKey?: string;\n }): Promise<GQLResponse<TData>> {\n const key = opts.cacheKey ?? `gql:${opts.document.slice(0, 60)}:${JSON.stringify(opts.variables ?? {})}`;\n return dedupe(key, async () => {\n const r = await executeGQL<TData>(this.cfg, opts.document, opts.variables);\n if (r.data) normalizeGQLResponse(r.data, opts.descriptors as EntityDescriptor<unknown, Record<string, unknown>>[]);\n return r;\n });\n }\n\n async mutate<TData, TEntity extends Record<string, unknown>>(opts: {\n document: string; variables?: Record<string, unknown>;\n descriptors?: EntityDescriptor<unknown, TEntity>[];\n optimistic?: () => void;\n }): Promise<GQLResponse<TData>> {\n const snapshot = opts.optimistic ? takeSnapshot() : null;\n if (opts.optimistic) opts.optimistic();\n try {\n const r = await executeGQL<TData>(this.cfg, opts.document, opts.variables);\n if (r.data && opts.descriptors) normalizeGQLResponse(r.data, opts.descriptors as EntityDescriptor<unknown, Record<string, unknown>>[]);\n return r;\n } catch (err) {\n if (snapshot) restoreSnapshot(snapshot);\n throw err;\n }\n }\n\n subscribe<TData>(opts: {\n document: string; variables?: Record<string, unknown>;\n descriptors: EntityDescriptor<unknown, Record<string, unknown>>[];\n wsClient: { subscribe: (p: unknown, s: unknown) => () => void };\n onData?: (data: TData) => void; onError?: (e: unknown) => void;\n }): () => void {\n return opts.wsClient.subscribe(\n { query: opts.document, variables: opts.variables },\n { next: ({ data }: { data: TData }) => { if (data) { normalizeGQLResponse(data, opts.descriptors); opts.onData?.(data); } }, error: opts.onError ?? console.error, complete: () => {} },\n );\n }\n}\n\ninterface Snapshot { entities: Record<string, Record<string, Record<string, unknown>>>; patches: Record<string, Record<string, Record<string, unknown>>>; }\nfunction takeSnapshot(): Snapshot { const s = useGraphStore.getState(); return { entities: JSON.parse(JSON.stringify(s.entities)), patches: JSON.parse(JSON.stringify(s.patches)) }; }\nfunction restoreSnapshot(snap: Snapshot) {\n useGraphStore.setState((s) => {\n for (const key of Object.keys(s.entities)) delete s.entities[key];\n for (const [key, val] of Object.entries(snap.entities)) s.entities[key] = val;\n for (const key of Object.keys(s.patches)) delete s.patches[key];\n for (const [key, val] of Object.entries(snap.patches)) s.patches[key] = val;\n });\n}\n\nexport function createGQLClient(cfg: GQLClientConfig): GQLClient { return new GQLClient(cfg); }\n","/**\n * graphql/hooks.ts\n *\n * React hooks for GraphQL. Mirror of REST hooks — same graph, same stale/fetch logic.\n * After normalization data lives in the same entity graph, so a GQL mutation\n * immediately updates REST useEntity subscribers and vice versa.\n */\nimport { useEffect, useRef, useCallback, useMemo, useState } from \"react\";\nimport { useStore } from \"zustand\";\nimport { useShallow } from \"zustand/react/shallow\";\nimport { useGraphStore, EMPTY_ENTITY_STATE, EMPTY_LIST_STATE, EMPTY_IDS } from \"../graph\";\nimport { registerSubscriber, unregisterSubscriber, getEngineOptions, serializeKey } from \"../engine\";\nimport type { GQLClient, EntityDescriptor } from \"./client\";\nimport type { EntityType, EntityId, EntityState, ListState } from \"../graph\";\n\n// ---------------------------------------------------------------------------\n// useGQLEntity\n// ---------------------------------------------------------------------------\nexport interface GQLEntityOptions<TData, TEntity extends Record<string, unknown>> {\n client: GQLClient; document: string; variables?: Record<string, unknown>;\n type: EntityType; id: EntityId | null | undefined;\n descriptor: EntityDescriptor<unknown, TEntity>;\n sideDescriptors?: EntityDescriptor<unknown, Record<string, unknown>>[];\n staleTime?: number; enabled?: boolean;\n onSuccess?: (data: TData) => void; onError?: (err: Error) => void;\n}\n\nexport function useGQLEntity<TData, TEntity extends Record<string, unknown>>(opts: GQLEntityOptions<TData, TEntity>) {\n const { type, id, staleTime = getEngineOptions().defaultStaleTime, enabled = true } = opts;\n const optsRef = useRef(opts); optsRef.current = opts;\n\n const data = useStore(useGraphStore, useShallow((s) => {\n if (!id) return null;\n const base = s.entities[type]?.[id]; if (!base) return null;\n const patch = s.patches[type]?.[id];\n return (patch ? { ...base, ...patch } : base) as TEntity;\n }));\n\n const entityState = useStore(useGraphStore, useCallback((s): EntityState =>\n s.entityStates[`${type}:${id}`] ?? EMPTY_ENTITY_STATE,\n [type, id]));\n\n const doFetch = useCallback(() => {\n if (!id || !enabled) return;\n const { client, document, variables, descriptor, sideDescriptors, onSuccess, onError } = optsRef.current;\n useGraphStore.getState().setEntityFetching(type, id, true);\n client.query<TData, Record<string, unknown>>({\n document, variables: { ...variables, id },\n descriptors: sideDescriptors ? [descriptor as EntityDescriptor<unknown, Record<string, unknown>>, ...sideDescriptors] : [descriptor as EntityDescriptor<unknown, Record<string, unknown>>],\n cacheKey: `gql-entity:${type}:${id}:${document.slice(0, 40)}`,\n }).then((r) => {\n useGraphStore.getState().setEntityFetched(type, id);\n if (r.data) onSuccess?.(r.data);\n }).catch((e: Error) => { useGraphStore.getState().setEntityError(type, id, e.message); onError?.(e); });\n }, [id, type, enabled]);\n\n useEffect(() => {\n if (!id || !enabled) return;\n const token = registerSubscriber(`${type}:${id}`);\n const s = useGraphStore.getState(); const ex = s.entityStates[`${type}:${id}`];\n if (!s.entities[type]?.[id] || !ex?.lastFetched || ex.stale || Date.now() - (ex.lastFetched ?? 0) > staleTime) doFetch();\n return () => unregisterSubscriber(`${type}:${id}`, token);\n }, [id, type, enabled, staleTime, doFetch]);\n\n useEffect(() => { if (entityState.stale && id && enabled && !entityState.isFetching) doFetch(); }, [entityState.stale, id, enabled, entityState.isFetching, doFetch]);\n\n return { data, isLoading: !data && entityState.isFetching, isFetching: entityState.isFetching, error: entityState.error, isStale: entityState.stale, refetch: doFetch };\n}\n\n// ---------------------------------------------------------------------------\n// useGQLList\n// ---------------------------------------------------------------------------\nexport interface GQLListOptions<TData, TEntity extends Record<string, unknown>> {\n client: GQLClient; document: string; variables?: Record<string, unknown>;\n type: EntityType; queryKey: unknown[];\n descriptor: EntityDescriptor<unknown, TEntity>;\n getItems: (data: TData) => unknown[];\n getPagination?: (data: TData) => { total?: number; nextCursor?: string; hasNextPage?: boolean; page?: number; pageSize?: number };\n sideDescriptors?: EntityDescriptor<unknown, Record<string, unknown>>[];\n mode?: \"replace\" | \"append\"; staleTime?: number; enabled?: boolean;\n}\n\nexport function useGQLList<TData, TEntity extends Record<string, unknown>>(opts: GQLListOptions<TData, TEntity>) {\n const { type, queryKey, staleTime = getEngineOptions().defaultStaleTime, enabled = true, mode = \"replace\" } = opts;\n const optsRef = useRef(opts); optsRef.current = opts;\n const key = useMemo(() => serializeKey(queryKey), [queryKey]);\n\n const listState = useStore(useGraphStore, useCallback((s): ListState => s.lists[key] ?? EMPTY_LIST_STATE, [key]));\n\n const items = useStore(\n useGraphStore,\n useShallow((s) => {\n const ids = s.lists[key]?.ids ?? EMPTY_IDS;\n return ids.map((id) => {\n const base = s.entities[type]?.[id];\n if (!base) return null;\n const p = s.patches[type]?.[id];\n return (p ? { ...base, ...p } : base) as TEntity;\n }).filter((x): x is TEntity => x !== null);\n }),\n );\n\n const doFetch = useCallback((cursor?: string, append = false) => {\n if (!enabled) return;\n const { client, document, variables, descriptor, sideDescriptors, getItems, getPagination } = optsRef.current;\n const store = useGraphStore.getState();\n if (append) store.setListFetchingMore(key, true); else store.setListFetching(key, true);\n const vars = { ...variables, ...(cursor ? { cursor } : {}) };\n client.query<TData, Record<string, unknown>>({\n document, variables: vars,\n descriptors: sideDescriptors ? [descriptor as EntityDescriptor<unknown, Record<string, unknown>>, ...sideDescriptors] : [descriptor as EntityDescriptor<unknown, Record<string, unknown>>],\n cacheKey: `gql-list:${key}:${cursor ?? \"first\"}`,\n }).then((r) => {\n if (!r.data) return;\n const rawItems = getItems(r.data); const pag = getPagination?.(r.data) ?? {};\n const { extractId = (n: Record<string, unknown>) => String(n.id) } = descriptor;\n const ids = rawItems.map((item) => extractId(item as Record<string, unknown>));\n const meta = { total: pag.total ?? null, nextCursor: pag.nextCursor ?? null, hasNextPage: pag.hasNextPage ?? !!pag.nextCursor, currentPage: pag.page ?? null, pageSize: pag.pageSize ?? null };\n if (append && mode === \"append\") useGraphStore.getState().appendListResult(key, ids, meta);\n else useGraphStore.getState().setListResult(key, ids, meta);\n }).catch((e: Error) => useGraphStore.getState().setListError(key, e.message));\n }, [key, enabled, mode]);\n\n useEffect(() => {\n if (!enabled) return;\n const ex = useGraphStore.getState().lists[key];\n if (!ex || ex.stale || !ex.lastFetched || Date.now() - ex.lastFetched > staleTime) doFetch();\n }, [key, enabled, staleTime, doFetch]);\n\n useEffect(() => { if (listState.stale && enabled && !listState.isFetching) doFetch(); }, [listState.stale, enabled, listState.isFetching, doFetch]);\n\n const fetchNextPage = useCallback(() => { if (!listState.hasNextPage || listState.isFetchingMore) return; doFetch(listState.nextCursor ?? undefined, true); }, [listState.hasNextPage, listState.isFetchingMore, listState.nextCursor, doFetch]);\n\n return { items, ids: listState.ids, isLoading: listState.ids.length === 0 && listState.isFetching, isFetching: listState.isFetching, isFetchingMore: listState.isFetchingMore, error: listState.error, hasNextPage: listState.hasNextPage, total: listState.total, currentPage: listState.currentPage, fetchNextPage, refetch: () => doFetch() };\n}\n\n// ---------------------------------------------------------------------------\n// useGQLMutation\n// ---------------------------------------------------------------------------\nexport function useGQLMutation<TData, TEntity extends Record<string, unknown>>(opts: {\n client: GQLClient; document: string; type: string;\n descriptors?: EntityDescriptor<unknown, TEntity>[];\n optimistic?: (variables: Record<string, unknown>) => void;\n invalidateLists?: string[];\n onSuccess?: (data: TData) => void; onError?: (err: Error) => void;\n}) {\n const optsRef = useRef(opts); optsRef.current = opts;\n const [state, setState] = useState({ isPending: false, isSuccess: false, isError: false, error: null as string | null });\n const mutate = useCallback(async (variables: Record<string, unknown>) => {\n const { client, document, descriptors, optimistic, invalidateLists, onSuccess, onError } = optsRef.current;\n setState({ isPending: true, isSuccess: false, isError: false, error: null });\n try {\n const r = await client.mutate<TData, TEntity>({ document, variables, descriptors, optimistic: optimistic ? () => optimistic(variables) : undefined });\n if (invalidateLists) for (const k of invalidateLists) useGraphStore.getState().invalidateLists(k);\n setState({ isPending: false, isSuccess: true, isError: false, error: null });\n if (r.data) onSuccess?.(r.data); return r;\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n setState({ isPending: false, isSuccess: false, isError: true, error: e.message }); onError?.(e); return null;\n }\n }, []);\n const trigger = useCallback((v: Record<string, unknown>) => { void mutate(v); }, [mutate]);\n return { mutate, trigger, state };\n}\n\n// ---------------------------------------------------------------------------\n// useGQLSubscription\n// ---------------------------------------------------------------------------\nexport function useGQLSubscription<TData>(opts: {\n client: GQLClient; wsClient: { subscribe: (payload: unknown, sink: unknown) => () => void };\n document: string; variables?: Record<string, unknown>;\n descriptors: EntityDescriptor<unknown, Record<string, unknown>>[];\n onData?: (data: TData) => void; onError?: (err: unknown) => void; enabled?: boolean;\n}) {\n const { document, variables, enabled = true } = opts;\n const [status, setStatus] = useState({ connected: false, error: null as string | null });\n const optsRef = useRef(opts); optsRef.current = opts;\n useEffect(() => {\n const { client, wsClient, descriptors, onData, onError } = optsRef.current;\n if (!enabled) return;\n const unsub = client.subscribe<TData>({ document, variables, descriptors, wsClient, onData: (d) => { setStatus({ connected: true, error: null }); onData?.(d); }, onError: (e) => { setStatus({ connected: false, error: String(e) }); onError?.(e); } });\n setStatus({ connected: true, error: null }); return unsub;\n }, [document, variables, enabled]);\n return status;\n}\n","/**\n * ui/utils.ts — minimal cn() helper for the UI layer\n * (same as app-level utils but keeps the library self-contained)\n */\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","/**\n * ui/EntityTable.tsx\n *\n * Production data table: TanStack Table + sorting synced to useEntityView,\n * inline cell editing, load-more / page pagination, skeleton loading, empty state.\n */\nimport React, { useState, useCallback, useMemo } from \"react\";\nimport { useReactTable, getCoreRowModel, getSortedRowModel, flexRender, type ColumnDef, type SortingState, type RowSelectionState, type VisibilityState } from \"@tanstack/react-table\";\nimport { Search, X, RefreshCw, Loader2, ChevronLeft, ChevronRight } from \"lucide-react\";\nimport { cn } from \"./utils\";\nimport type { UseEntityViewResult } from \"../view/use-entity-view\";\n\n// ---------------------------------------------------------------------------\n// Inline cell editor\n// ---------------------------------------------------------------------------\nexport function InlineCellEditor({ initialValue, onCommit, onCancel, className }: { initialValue: string; onCommit: (v: string) => void; onCancel: () => void; className?: string }) {\n const [value, setValue] = useState(initialValue);\n return (\n <input value={value} onChange={e => setValue(e.target.value)} autoFocus\n onBlur={() => { if (value !== initialValue) onCommit(value); else onCancel(); }}\n onKeyDown={e => { if (e.key === \"Enter\") { e.preventDefault(); if (value !== initialValue) onCommit(value); else onCancel(); } if (e.key === \"Escape\") { e.preventDefault(); onCancel(); } e.stopPropagation(); }}\n onClick={e => e.stopPropagation()}\n className={cn(\"h-7 px-2 py-0 text-sm rounded border border-ring bg-background focus:outline-none w-full\", className)} />\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityTable\n// ---------------------------------------------------------------------------\nexport interface EntityTableProps<T extends Record<string, unknown>> {\n viewResult: UseEntityViewResult<T>;\n columns: ColumnDef<T>[];\n getRowId?: (row: T) => string;\n selectedId?: string | null;\n onRowClick?: (row: T) => void;\n onCellEdit?: (row: T, field: string, value: unknown) => void;\n onBulkAction?: (rows: T[]) => React.ReactNode;\n paginationMode?: \"none\" | \"loadMore\" | \"pages\";\n pageSize?: number;\n searchPlaceholder?: string;\n searchFields?: string[];\n toolbarChildren?: React.ReactNode;\n showToolbar?: boolean;\n emptyState?: React.ReactNode;\n className?: string;\n}\n\nexport function EntityTable<T extends Record<string, unknown>>({ viewResult, columns, getRowId = r => String(r.id), selectedId, onRowClick, onCellEdit, onBulkAction, paginationMode = \"loadMore\", pageSize = 50, searchPlaceholder = \"Search…\", searchFields, toolbarChildren, showToolbar = true, emptyState, className }: EntityTableProps<T>) {\n const { items, isLoading, isFetching, isRemoteFetching, isShowingLocalPending, hasNextPage, fetchNextPage, isFetchingMore, viewTotal, setSort, setSearch, refetch } = viewResult;\n const [sorting, setSorting] = useState<SortingState>([]);\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n const [colVis, setColVis] = useState<VisibilityState>({});\n const [search, setSearchLocal] = useState(\"\");\n const [editingCell, setEditingCell] = useState<{ rowId: string; field: string; value: string } | null>(null);\n const [page, setPage] = useState(1);\n\n const handleSort = useCallback((updater: SortingState | ((prev: SortingState) => SortingState)) => {\n const next = typeof updater === \"function\" ? updater(sorting) : updater;\n setSorting(next);\n setSort(next.length ? next.map((s) => ({ field: s.id, direction: s.desc ? (\"desc\" as const) : (\"asc\" as const) })) : null);\n }, [sorting, setSort]);\n\n const handleSearch = useCallback((v: string) => { setSearchLocal(v); setSearch(v); }, [setSearch]);\n\n const pagedItems = useMemo(() => paginationMode === \"pages\" ? items.slice((page - 1) * pageSize, page * pageSize) : items, [items, paginationMode, page, pageSize]);\n const totalPages = Math.ceil(items.length / pageSize);\n\n const table = useReactTable<T>({\n data: pagedItems, columns, getRowId, manualSorting: true,\n state: { sorting, rowSelection, columnVisibility: colVis },\n onSortingChange: handleSort, onRowSelectionChange: setRowSelection, onColumnVisibilityChange: setColVis,\n getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), enableRowSelection: true,\n });\n\n const selectedRows = table.getSelectedRowModel().rows.map(r => r.original);\n\n return (\n <div className={cn(\"flex flex-col h-full\", className)}>\n {showToolbar && (\n <div className=\"flex items-center gap-2 px-3 py-2.5 border-b shrink-0\">\n <div className=\"relative flex-1 max-w-xs\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground\" />\n <input value={search} onChange={e => handleSearch(e.target.value)} placeholder={searchPlaceholder}\n className=\"w-full h-7 pl-8 pr-7 rounded-md bg-muted/50 border text-xs placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring transition-colors\" />\n {search && <button onClick={() => handleSearch(\"\")} className=\"absolute right-2.5 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"><X className=\"w-3.5 h-3.5\" /></button>}\n </div>\n {isShowingLocalPending && <span className=\"text-[10px] text-muted-foreground flex items-center gap-1\"><Loader2 className=\"w-3 h-3 animate-spin\" />Loading complete results…</span>}\n <div className=\"ml-auto flex items-center gap-1.5\">\n {selectedRows.length > 0 && onBulkAction && (<><span className=\"text-xs text-muted-foreground\">{selectedRows.length} selected</span>{onBulkAction(selectedRows)}</>)}\n <span className=\"text-xs text-muted-foreground\">{viewTotal != null ? `${viewTotal}` : \"\"}</span>\n <button onClick={refetch} disabled={isRemoteFetching} className=\"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors\"><RefreshCw className={cn(\"w-3.5 h-3.5\", isRemoteFetching && \"animate-spin\")} /></button>\n {toolbarChildren}\n </div>\n </div>\n )}\n <div className=\"flex-1 overflow-auto\">\n <table className=\"w-full border-collapse text-sm\">\n <thead className=\"sticky top-0 z-10\">\n {table.getHeaderGroups().map(hg => (\n <tr key={hg.id} className=\"bg-muted/50 border-b\">\n {hg.headers.map(h => (\n <th key={h.id} style={{ width: h.getSize() }} className=\"px-3 py-2 text-left font-normal text-muted-foreground\">\n {h.isPlaceholder ? null : flexRender(h.column.columnDef.header, h.getContext())}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {isLoading ? Array.from({ length: 6 }).map((_, i) => (\n <tr key={i} className=\"border-b\">\n {columns.map((_, j) => <td key={j} className=\"px-3 py-2.5\"><div className=\"h-3 rounded bg-muted animate-pulse\" style={{ width: `${50 + ((i * 7 + j * 13) % 40)}%` }} /></td>)}\n </tr>\n )) : table.getRowModel().rows.length === 0 ? (\n <tr><td colSpan={columns.length} className=\"px-4 py-16 text-center text-sm text-muted-foreground\">{emptyState ?? \"No results\"}</td></tr>\n ) : table.getRowModel().rows.map(row => {\n const isSelected = row.id === selectedId;\n return (\n <tr key={row.id} onClick={() => onRowClick?.(row.original)}\n className={cn(\"border-b group/row cursor-pointer transition-colors\", isSelected ? \"bg-primary/5\" : \"hover:bg-muted/40\")}>\n {row.getVisibleCells().map(cell => {\n const meta = cell.column.columnDef.meta?.entityMeta;\n const isEditingThis = editingCell?.rowId === row.id && editingCell?.field === cell.column.id;\n return (\n <td key={cell.id} style={{ width: cell.column.getSize() }} className=\"px-3 py-2.5\"\n onDoubleClick={e => { if (!meta?.editable || !onCellEdit) return; e.stopPropagation(); setEditingCell({ rowId: row.id, field: cell.column.id, value: String(cell.getValue() ?? \"\") }); }}>\n {isEditingThis\n ? <InlineCellEditor initialValue={editingCell!.value} onCommit={v => { onCellEdit!(row.original, cell.column.id, v); setEditingCell(null); }} onCancel={() => setEditingCell(null)} />\n : flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n <div className=\"flex items-center justify-between px-3 py-2 border-t shrink-0 text-xs text-muted-foreground\">\n <span>{isFetching && !isLoading ? \"Updating…\" : `${items.length} loaded`}</span>\n {paginationMode === \"loadMore\" && hasNextPage && (\n <button onClick={fetchNextPage} disabled={isFetchingMore} className=\"flex items-center gap-1.5 px-2.5 py-1 rounded border text-xs hover:bg-muted transition-colors disabled:opacity-50\">\n {isFetchingMore ? <><Loader2 className=\"w-3 h-3 animate-spin\" />Loading…</> : \"Load more\"}\n </button>\n )}\n {paginationMode === \"pages\" && totalPages > 1 && (\n <div className=\"flex items-center gap-1\">\n <button onClick={() => setPage(p => Math.max(1, p - 1))} disabled={page === 1} className=\"p-1 rounded hover:bg-muted disabled:opacity-50\"><ChevronLeft className=\"w-3.5 h-3.5\" /></button>\n <span>Page {page} of {totalPages}</span>\n <button onClick={() => setPage(p => Math.min(totalPages, p + 1))} disabled={page >= totalPages} className=\"p-1 rounded hover:bg-muted disabled:opacity-50\"><ChevronRight className=\"w-3.5 h-3.5\" /></button>\n </div>\n )}\n </div>\n </div>\n );\n}\n","/**\n * ui/EntitySheets.tsx\n *\n * EntityDetailSheet — right-panel detail view with edit/delete actions.\n * EntityFormSheet — right-panel create / edit form with field-level dirty tracking.\n */\nimport React from \"react\";\nimport { X, Loader2, Pencil, Trash2 } from \"lucide-react\";\nimport { cn } from \"./utils\";\nimport type { CRUDState } from \"../crud/use-entity-crud\";\n\n// ---------------------------------------------------------------------------\n// Field descriptors\n// ---------------------------------------------------------------------------\nexport type FieldType = \"text\" | \"textarea\" | \"number\" | \"email\" | \"url\" | \"date\" | \"boolean\" | \"enum\" | \"custom\";\n\nexport interface FieldDescriptor<TEntity> {\n field: keyof TEntity & string;\n label: string;\n type: FieldType;\n required?: boolean;\n placeholder?: string;\n options?: Array<{ value: string; label: string }>;\n hint?: string;\n render?: (value: unknown, entity: TEntity) => React.ReactNode;\n editControl?: (value: unknown, onChange: (v: unknown) => void, entity: Partial<TEntity>) => React.ReactNode;\n hideOnCreate?: boolean;\n hideOnEdit?: boolean;\n readonlyOnEdit?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Sheet wrapper\n// ---------------------------------------------------------------------------\nexport function Sheet({ open, onClose, title, subtitle, children, footer, width = \"w-[480px]\" }: {\n open: boolean; onClose: () => void; title: string; subtitle?: string;\n children: React.ReactNode; footer?: React.ReactNode; width?: string;\n}) {\n React.useEffect(() => {\n const h = (e: KeyboardEvent) => { if (e.key === \"Escape\") onClose(); };\n if (open) window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [open, onClose]);\n\n return (\n <>\n <div onClick={onClose} className={cn(\"fixed inset-0 z-40 bg-black/40 backdrop-blur-sm transition-opacity\", open ? \"opacity-100\" : \"opacity-0 pointer-events-none\")} />\n <div className={cn(\"fixed top-0 right-0 h-full z-50 flex flex-col border-l bg-background shadow-2xl transition-transform duration-300\", width, open ? \"translate-x-0\" : \"translate-x-full\")}>\n <div className=\"flex items-start justify-between gap-3 px-5 pt-5 pb-4 border-b shrink-0\">\n <div><h2 className=\"text-base font-semibold\">{title}</h2>{subtitle && <p className=\"text-xs text-muted-foreground mt-0.5\">{subtitle}</p>}</div>\n <button onClick={onClose} className=\"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors mt-0.5\"><X className=\"w-4 h-4\" /></button>\n </div>\n <div className=\"flex-1 overflow-y-auto px-5 py-4\">{children}</div>\n {footer && <div className=\"shrink-0 px-5 py-4 border-t flex items-center gap-2\">{footer}</div>}\n </div>\n </>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Generic field control\n// ---------------------------------------------------------------------------\nfunction FieldControl<TEntity extends Record<string, unknown>>({ descriptor, value, onChange, entity, readonly }: { descriptor: FieldDescriptor<TEntity>; value: unknown; onChange: (v: unknown) => void; entity: Partial<TEntity>; readonly?: boolean }) {\n if (descriptor.editControl && !readonly) return <>{descriptor.editControl(value, onChange, entity)}</>;\n if (readonly && descriptor.render) return <>{descriptor.render(value, entity as TEntity)}</>;\n if (readonly) return <p className=\"text-sm py-1\">{value != null && value !== \"\" ? String(value) : \"—\"}</p>;\n const base = \"h-8 px-2.5 rounded-md border bg-muted/50 text-sm focus:outline-none focus:ring-1 focus:ring-ring transition-colors w-full\";\n switch (descriptor.type) {\n case \"text\": case \"email\": case \"url\":\n return <input type={descriptor.type} value={String(value ?? \"\")} onChange={e => onChange(e.target.value)} placeholder={descriptor.placeholder} className={base} />;\n case \"number\":\n return <input type=\"number\" value={String(value ?? \"\")} onChange={e => onChange(e.target.valueAsNumber)} placeholder={descriptor.placeholder} className={base} />;\n case \"textarea\":\n return <textarea value={String(value ?? \"\")} onChange={e => onChange(e.target.value)} placeholder={descriptor.placeholder} className=\"w-full min-h-[80px] rounded-md border bg-muted/50 px-3 py-2 text-sm resize-none focus:outline-none focus:ring-1 focus:ring-ring transition-colors\" />;\n case \"date\":\n return <input type=\"date\" value={value ? new Date(value as string).toISOString().split(\"T\")[0] : \"\"} onChange={e => onChange(e.target.value ? new Date(e.target.value).toISOString() : null)} className={base} />;\n case \"boolean\":\n return (\n <button type=\"button\" role=\"switch\" aria-checked={!!value} onClick={() => onChange(!value)}\n className={cn(\"relative inline-flex h-5 w-9 items-center rounded-full transition-colors\", value ? \"bg-primary\" : \"bg-input\")}>\n <span className={cn(\"inline-block h-3.5 w-3.5 rounded-full bg-background shadow transition-transform\", value ? \"translate-x-4\" : \"translate-x-0.5\")} />\n </button>\n );\n case \"enum\":\n return (\n <select value={String(value ?? \"\")} onChange={e => onChange(e.target.value)} className={cn(base, \"appearance-none cursor-pointer\")}>\n {!value && <option value=\"\">Select…</option>}\n {(descriptor.options ?? []).map(o => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n );\n default:\n return <input value={String(value ?? \"\")} onChange={e => onChange(e.target.value)} className={base} />;\n }\n}\n\n// ---------------------------------------------------------------------------\n// EntityDetailSheet\n// ---------------------------------------------------------------------------\nexport function EntityDetailSheet<TEntity extends Record<string, unknown>>({ crud, fields, title = \"Details\", description, children, showEditButton = true, showDeleteButton = true, deleteConfirmMessage = \"This action cannot be undone.\" }: {\n crud: CRUDState<TEntity>; fields: FieldDescriptor<TEntity>[];\n title?: string | ((e: TEntity) => string);\n description?: string | ((e: TEntity) => string);\n children?: (entity: TEntity, crud: CRUDState<TEntity>) => React.ReactNode;\n showEditButton?: boolean; showDeleteButton?: boolean; deleteConfirmMessage?: string;\n}) {\n const [confirmDelete, setConfirmDelete] = React.useState(false);\n const open = crud.mode === \"detail\" && !!crud.selectedId;\n const entity = crud.detail;\n const resolvedTitle = entity && typeof title === \"function\" ? title(entity) : String(title);\n const resolvedDesc = entity && description ? (typeof description === \"function\" ? description(entity) : description) : undefined;\n\n return (\n <Sheet open={open} onClose={() => crud.select(null)} title={resolvedTitle} subtitle={resolvedDesc}\n footer={<>\n {showEditButton && <button onClick={() => crud.startEdit()} className=\"flex-1 h-8 rounded-md border text-sm hover:bg-muted transition-colors flex items-center justify-center gap-1.5\"><Pencil className=\"w-3.5 h-3.5\" />Edit</button>}\n {showDeleteButton && <button onClick={() => setConfirmDelete(true)} className=\"h-8 w-8 flex items-center justify-center rounded-md border text-destructive hover:bg-destructive/10 transition-colors\"><Trash2 className=\"w-3.5 h-3.5\" /></button>}\n </>}>\n {crud.detailIsLoading && <div className=\"flex items-center justify-center h-32\"><Loader2 className=\"w-4 h-4 animate-spin text-muted-foreground\" /></div>}\n {entity && (\n <div className=\"flex flex-col gap-4\">\n {fields.map(f => (\n <div key={f.field}>\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase tracking-wide mb-1\">{f.label}</p>\n <FieldControl descriptor={f} value={entity[f.field]} onChange={() => {}} entity={entity} readonly />\n </div>\n ))}\n {children && (<><div className=\"border-t my-1\" />{children(entity, crud)}</>)}\n </div>\n )}\n {confirmDelete && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n <div onClick={() => setConfirmDelete(false)} className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\" />\n <div className=\"relative bg-background border rounded-xl shadow-2xl w-full max-w-sm p-5 animate-in fade-in\">\n <h3 className=\"text-sm font-semibold mb-1\">Delete {resolvedTitle}?</h3>\n <p className=\"text-xs text-muted-foreground mb-4\">{deleteConfirmMessage}</p>\n <div className=\"flex gap-2 justify-end\">\n <button onClick={() => setConfirmDelete(false)} className=\"h-7 px-3 rounded border text-sm hover:bg-muted transition-colors\">Cancel</button>\n <button onClick={async () => { await crud.deleteEntity(); setConfirmDelete(false); }} disabled={crud.isDeleting}\n className=\"h-7 px-3 rounded bg-destructive text-destructive-foreground text-sm hover:bg-destructive/90 transition-colors disabled:opacity-50 flex items-center gap-1\">\n {crud.isDeleting && <Loader2 className=\"w-3 h-3 animate-spin\" />}Delete\n </button>\n </div>\n </div>\n </div>\n )}\n </Sheet>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityFormSheet\n// ---------------------------------------------------------------------------\nexport function EntityFormSheet<TEntity extends Record<string, unknown>>({ crud, fields, createTitle = \"Create\", editTitle = \"Edit\" }: {\n crud: CRUDState<TEntity>; fields: FieldDescriptor<TEntity>[];\n createTitle?: string; editTitle?: string | ((e: TEntity) => string);\n}) {\n const isCreate = crud.mode === \"create\"; const isEdit = crud.mode === \"edit\";\n const open = isCreate || isEdit;\n const buf = isCreate ? crud.createBuffer : crud.editBuffer;\n const setField = isCreate ? crud.setCreateField : crud.setField;\n const handleSave = isCreate ? crud.create : crud.save;\n const handleClose = isCreate ? crud.cancelCreate : crud.cancelEdit;\n const isPending = isCreate ? crud.isCreating : crud.isSaving;\n const error = isCreate ? crud.createError : crud.saveError;\n const resolvedTitle = isCreate ? createTitle : (crud.detail && typeof editTitle === \"function\" ? editTitle(crud.detail) : String(editTitle));\n const visibleFields = fields.filter(f => isCreate ? !f.hideOnCreate : !f.hideOnEdit);\n\n return (\n <Sheet open={open} onClose={handleClose} title={resolvedTitle}\n subtitle={isEdit && crud.dirty.isDirty ? `${crud.dirty.changed.size} field${crud.dirty.changed.size > 1 ? \"s\" : \"\"} modified` : undefined}\n footer={<>\n <button onClick={handleClose} disabled={isPending} className=\"flex-1 h-8 rounded-md border text-sm hover:bg-muted transition-colors\">Cancel</button>\n <button onClick={handleSave} disabled={isPending || (isEdit && !crud.dirty.isDirty)} className=\"flex-1 h-8 rounded-md bg-primary text-primary-foreground text-sm hover:bg-primary/90 transition-colors disabled:opacity-50 flex items-center justify-center gap-1.5\">\n {isPending && <Loader2 className=\"w-3.5 h-3.5 animate-spin\" />}{isCreate ? \"Create\" : \"Save changes\"}\n </button>\n </>}>\n <div className=\"flex flex-col gap-4\">\n {error && <div className=\"px-3 py-2 rounded-md bg-destructive/10 border border-destructive/20 text-xs text-destructive\">{error}</div>}\n {visibleFields.map(f => {\n const isDirty = !isCreate && crud.dirty.changed.has(f.field as keyof TEntity);\n return (\n <div key={f.field} className=\"flex flex-col gap-1.5\">\n <label className={cn(\"text-xs font-medium\", isDirty ? \"text-primary\" : \"text-muted-foreground\")}>\n {f.label}{f.required && <span className=\"text-destructive ml-0.5\">*</span>}\n {isDirty && <span className=\"ml-1.5 text-[10px] font-normal opacity-70\">modified</span>}\n </label>\n <FieldControl descriptor={f} value={buf[f.field]} onChange={v => setField(f.field as keyof TEntity, v as TEntity[keyof TEntity])} entity={buf} readonly={f.readonlyOnEdit && isEdit} />\n {f.hint && <p className=\"text-[10px] text-muted-foreground\">{f.hint}</p>}\n </div>\n );\n })}\n </div>\n </Sheet>\n );\n}\n","/**\n * ui/columns.tsx\n *\n * Typed column builders for EntityTable.\n * Each column carries TanStack Table config + entity-store metadata.\n * The metadata drives both rendering AND the filter toolbar.\n */\nimport type { ReactNode } from \"react\";\nimport type { ColumnDef } from \"@tanstack/react-table\";\n\nexport type ColumnFilterType = \"text\" | \"number\" | \"date\" | \"dateRange\" | \"boolean\" | \"enum\" | \"relation\" | \"none\";\n\nexport interface EntityColumnMeta<TEntity> {\n field: keyof TEntity;\n filterType: ColumnFilterType;\n enumOptions?: Array<{ label: string; value: string; color?: string }>;\n relationEntityType?: string;\n editable?: boolean;\n hideable?: boolean;\n}\n\ndeclare module \"@tanstack/react-table\" {\n // biome-ignore lint/correctness/noUnusedVariables: TValue must match @tanstack/react-table ColumnMeta\n interface ColumnMeta<TData, TValue> {\n entityMeta?: EntityColumnMeta<TData>;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Sort header\n// ---------------------------------------------------------------------------\nexport function SortHeader({ column, label }: { column: { getIsSorted: () => false | \"asc\" | \"desc\"; toggleSorting: (desc?: boolean) => void }; label: string }) {\n const sorted = column.getIsSorted();\n return (\n <button type=\"button\" onClick={() => column.toggleSorting(sorted === \"asc\")}\n className=\"flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors\">\n {label}\n <span className=\"opacity-50 group-hover:opacity-100 text-[10px]\">\n {sorted === \"asc\" ? \"↑\" : sorted === \"desc\" ? \"↓\" : \"↕\"}\n </span>\n </button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Selection column\n// ---------------------------------------------------------------------------\nexport function selectionColumn<T>(): ColumnDef<T> {\n return {\n id: \"__select__\", size: 40, enableSorting: false, enableHiding: false,\n header: ({ table }) => (\n <input\n type=\"checkbox\"\n checked={table.getIsAllPageRowsSelected()}\n ref={(el) => {\n if (el) el.indeterminate = table.getIsSomePageRowsSelected();\n }}\n onChange={(e) => table.toggleAllPageRowsSelected(e.target.checked)}\n className=\"rounded border-border\"\n aria-label=\"Select all rows on this page\"\n />\n ),\n cell: ({ row }) => (\n <input\n type=\"checkbox\"\n checked={row.getIsSelected()}\n onChange={(e) => row.toggleSelected(e.target.checked)}\n onClick={(e) => e.stopPropagation()}\n className=\"rounded border-border\"\n aria-label={`Select row ${row.id}`}\n />\n ),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Column builders\n// ---------------------------------------------------------------------------\nexport function textColumn<T>(opts: { field: keyof T & string; header: string; size?: number; editable?: boolean; filterType?: ColumnFilterType; cell?: (v: string, row: T) => ReactNode }): ColumnDef<T> {\n const { field, header, size = 200, editable = false, filterType = \"text\", cell } = opts;\n return {\n id: field, accessorKey: field, size,\n header: ({ column }) => <SortHeader column={column} label={header} />,\n cell: ({ getValue, row }) => { const v = getValue() as string; return cell ? cell(v, row.original) : <span className=\"truncate block\" title={v}>{v}</span>; },\n meta: { entityMeta: { field, filterType, editable, hideable: true } },\n };\n}\n\nexport function numberColumn<T>(opts: { field: keyof T & string; header: string; size?: number; format?: (v: number) => string; editable?: boolean }): ColumnDef<T> {\n const { field, header, size = 100, format = v => v.toLocaleString(), editable = false } = opts;\n return {\n id: field, accessorKey: field, size,\n header: ({ column }) => <SortHeader column={column} label={header} />,\n cell: ({ getValue }) => { const v = getValue() as number | null; return <span className=\"tabular-nums text-right block\">{v != null ? format(v) : \"—\"}</span>; },\n meta: { entityMeta: { field, filterType: \"number\", editable, hideable: true } },\n };\n}\n\nexport function dateColumn<T>(opts: { field: keyof T & string; header: string; size?: number; format?: Intl.DateTimeFormatOptions }): ColumnDef<T> {\n const { field, header, size = 140, format = { year: \"numeric\", month: \"short\", day: \"numeric\" } } = opts;\n return {\n id: field, accessorKey: field, size,\n header: ({ column }) => <SortHeader column={column} label={header} />,\n cell: ({ getValue }) => { const v = getValue() as string | null; return v ? <span className=\"text-sm\">{new Date(v).toLocaleDateString(undefined, format)}</span> : <span className=\"text-muted-foreground\">—</span>; },\n meta: { entityMeta: { field, filterType: \"dateRange\", hideable: true } },\n };\n}\n\nexport function booleanColumn<T>(opts: { field: keyof T & string; header: string; size?: number; trueLabel?: string; falseLabel?: string }): ColumnDef<T> {\n const { field, header, size = 80, trueLabel = \"Yes\", falseLabel = \"No\" } = opts;\n return {\n id: field, accessorKey: field, size, header,\n cell: ({ getValue }) => { const v = getValue() as boolean; return <span className={v ? \"text-green-600\" : \"text-muted-foreground\"}>{v ? trueLabel : falseLabel}</span>; },\n meta: { entityMeta: { field, filterType: \"boolean\", hideable: true } },\n };\n}\n\nexport function enumColumn<T>(opts: { field: keyof T & string; header: string; options: Array<{ value: string; label: string; className?: string }>; size?: number; editable?: boolean }): ColumnDef<T> {\n const { field, header, options, size = 120, editable = false } = opts;\n const map = new Map(options.map(o => [o.value, o]));\n return {\n id: field, accessorKey: field, size,\n header: ({ column }) => <SortHeader column={column} label={header} />,\n cell: ({ getValue }) => { const v = getValue() as string; const opt = map.get(v); return opt ? <span className={`inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium border ${opt.className ?? \"bg-muted text-muted-foreground border-border\"}`}>{opt.label}</span> : <span className=\"text-xs text-muted-foreground\">{v}</span>; },\n meta: { entityMeta: { field, filterType: \"enum\", enumOptions: options.map(o => ({ label: o.label, value: o.value })), editable, hideable: true } },\n };\n}\n\nexport interface ActionItem<T> { label: string; icon?: React.ComponentType<{ className?: string }>; onClick: (row: T) => void; destructive?: boolean; separator?: boolean; hidden?: (row: T) => boolean; disabled?: (row: T) => boolean; }\n\nexport function actionsColumn<T>(actions: ActionItem<T>[]): ColumnDef<T> {\n return {\n id: \"__actions__\", size: 48, enableSorting: false, enableHiding: false, header: () => null,\n cell: ({ row }) => (\n <div className=\"flex items-center gap-0.5 opacity-0 group-hover/row:opacity-100 transition-opacity\">\n {actions.filter(a => !a.hidden?.(row.original)).map((action) => (\n <button key={action.label} type=\"button\" onClick={e => { e.stopPropagation(); action.onClick(row.original); }} disabled={action.disabled?.(row.original)}\n className={`p-1 rounded text-xs transition-colors ${action.destructive ? \"text-destructive hover:bg-destructive/10\" : \"text-muted-foreground hover:text-foreground hover:bg-muted\"}`}>\n {action.icon ? <action.icon className=\"w-3.5 h-3.5\" /> : action.label}\n </button>\n ))}\n </div>\n ),\n };\n}\n","/**\n * table/row-models.ts\n *\n * Pure row model pipeline functions. Each stage transforms data\n * into a RowModel — no side effects, no external dependencies.\n */\nimport type {\n Row,\n Cell,\n Column,\n ColumnDef,\n RowModel,\n TableInstance,\n SortingState,\n ColumnFiltersState,\n ExpandedState,\n GroupingState,\n PaginationState,\n CellContext,\n FilterFn,\n SortingFn,\n} from \"./types\";\n\n// ---------------------------------------------------------------------------\n// Accessor helpers\n// ---------------------------------------------------------------------------\nfunction resolveAccessor<TData>(\n columnDef: ColumnDef<TData>,\n row: TData,\n index: number,\n): unknown {\n if (columnDef.accessorFn) return columnDef.accessorFn(row, index);\n if (columnDef.accessorKey) return (row as Record<string, unknown>)[columnDef.accessorKey];\n return undefined;\n}\n\nfunction getColumnId<TData>(colDef: ColumnDef<TData>, index: number): string {\n return colDef.id ?? colDef.accessorKey ?? `col_${index}`;\n}\n\n// ---------------------------------------------------------------------------\n// Built-in filter functions\n// ---------------------------------------------------------------------------\nconst builtInFilterFns: Record<string, FilterFn<unknown>> = {\n auto: (row, columnId, filterValue) => {\n const val = row.getValue(columnId);\n if (filterValue == null || filterValue === \"\") return true;\n if (typeof val === \"string\") return val.toLowerCase().includes(String(filterValue).toLowerCase());\n if (typeof val === \"number\") return val === Number(filterValue);\n if (typeof val === \"boolean\") return val === filterValue;\n return String(val).toLowerCase().includes(String(filterValue).toLowerCase());\n },\n};\n\n// ---------------------------------------------------------------------------\n// Built-in sorting comparators\n// ---------------------------------------------------------------------------\nfunction defaultSortingFn(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return 1;\n if (b == null) return -1;\n if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n return String(a).localeCompare(String(b));\n}\n\n// ---------------------------------------------------------------------------\n// Create Row wrapper\n// ---------------------------------------------------------------------------\nexport function createRow<TData>(\n original: TData,\n index: number,\n columns: Column<TData>[],\n table: TableInstance<TData>,\n depth: number = 0,\n parentId?: string,\n subRows: Row<TData>[] = [],\n): Row<TData> {\n const id = table.options.getRowId\n ? table.options.getRowId(original, index)\n : String(index);\n\n const row: Row<TData> = {\n id,\n index,\n original,\n depth,\n parentId,\n subRows,\n\n getValue: <T = unknown>(columnId: string): T => {\n const col = columns.find((c) => c.id === columnId);\n if (!col) return undefined as T;\n return resolveAccessor(col.columnDef, original, index) as T;\n },\n renderValue: <T = unknown>(columnId: string): T | null => {\n const val = row.getValue<T>(columnId);\n return val ?? null;\n },\n\n getIsSelected: () => !!table.getState().rowSelection[id],\n getCanSelect: () => {\n const opt = table.options.enableRowSelection;\n if (opt === false) return false;\n if (typeof opt === \"function\") return opt(row);\n return true;\n },\n getIsAllSubRowsSelected: () =>\n subRows.length > 0 && subRows.every((sr) => sr.getIsSelected()),\n getIsSomeSelected: () =>\n subRows.some((sr) => sr.getIsSelected() || sr.getIsSomeSelected()),\n toggleSelected: (value?: boolean) => {\n const next = value ?? !row.getIsSelected();\n table.setRowSelection((prev) => ({ ...prev, [id]: next }));\n },\n getToggleSelectedHandler: () => (e: unknown) => {\n row.toggleSelected();\n },\n\n getIsExpanded: () => {\n const expanded = table.getState().expanded;\n if (expanded === true) return true;\n return !!expanded[id];\n },\n getCanExpand: () => subRows.length > 0,\n toggleExpanded: (value?: boolean) => {\n const next = value ?? !row.getIsExpanded();\n table.setExpanded((prev) => {\n if (prev === true) {\n const allRows: Record<string, boolean> = {};\n table.getCoreRowModel().flatRows.forEach((r) => { allRows[r.id] = true; });\n allRows[id] = next;\n return allRows;\n }\n return { ...prev, [id]: next };\n });\n },\n getToggleExpandedHandler: () => () => row.toggleExpanded(),\n\n getIsGrouped: () => !!row.groupingColumnId,\n groupingColumnId: undefined,\n groupingValue: undefined,\n\n getVisibleCells: () =>\n row.getAllCells().filter((cell) => cell.column.getIsVisible()),\n getAllCells: () =>\n columns.map((col) => createCell(row, col, table)),\n\n getIsPinned: () => false,\n pin: () => {},\n };\n\n return row;\n}\n\n// ---------------------------------------------------------------------------\n// Create Cell wrapper\n// ---------------------------------------------------------------------------\nfunction createCell<TData>(\n row: Row<TData>,\n column: Column<TData>,\n table: TableInstance<TData>,\n): Cell<TData> {\n const cellId = `${row.id}_${column.id}`;\n const cell: Cell<TData> = {\n id: cellId,\n row,\n column,\n getValue: <T = unknown>() => row.getValue<T>(column.id),\n renderValue: <T = unknown>() => row.renderValue<T>(column.id),\n getIsGrouped: () => row.getIsGrouped() && row.groupingColumnId === column.id,\n getIsPlaceholder: () => false,\n getIsAggregated: () => row.subRows.length > 0 && row.getIsGrouped() && row.groupingColumnId !== column.id,\n getContext: (): CellContext<TData> => ({\n table,\n row,\n cell,\n column,\n getValue: cell.getValue,\n renderValue: cell.renderValue,\n }),\n };\n return cell;\n}\n\n// ---------------------------------------------------------------------------\n// 1. getCoreRowModel\n// ---------------------------------------------------------------------------\nexport function getCoreRowModel<TData>(\n data: TData[],\n columns: Column<TData>[],\n table: TableInstance<TData>,\n): RowModel<TData> {\n const getSubRows = table.options.getSubRows;\n const flatRows: Row<TData>[] = [];\n\n function processRows(items: TData[], depth: number, parentId?: string): Row<TData>[] {\n return items.map((item, index) => {\n const subData = getSubRows?.(item, index);\n const row = createRow(item, flatRows.length, columns, table, depth, parentId);\n flatRows.push(row);\n if (subData && subData.length > 0) {\n row.subRows = processRows(subData, depth + 1, row.id);\n }\n return row;\n });\n }\n\n const rows = processRows(data, 0);\n const rowsById: Record<string, Row<TData>> = {};\n flatRows.forEach((r) => { rowsById[r.id] = r; });\n\n return { rows, flatRows, rowsById };\n}\n\n// ---------------------------------------------------------------------------\n// 2. getFilteredRowModel\n// ---------------------------------------------------------------------------\nexport function getFilteredRowModel<TData>(\n rowModel: RowModel<TData>,\n columnFilters: ColumnFiltersState,\n globalFilter: unknown,\n columns: Column<TData>[],\n globalFilterFn?: FilterFn<TData>,\n): RowModel<TData> {\n const hasColumnFilters = columnFilters.length > 0;\n const hasGlobalFilter = globalFilter != null && globalFilter !== \"\";\n\n if (!hasColumnFilters && !hasGlobalFilter) return rowModel;\n\n const filterFns = new Map<string, FilterFn<TData>>();\n for (const cf of columnFilters) {\n const col = columns.find((c) => c.id === cf.id);\n if (col) {\n const fn = col.columnDef.filterFn;\n filterFns.set(cf.id, (typeof fn === \"function\" ? fn : builtInFilterFns.auto) as FilterFn<TData>);\n }\n }\n\n const resolvedGlobalFilterFn = (globalFilterFn ?? builtInFilterFns.auto) as FilterFn<TData>;\n const flatRows: Row<TData>[] = [];\n\n function filterRows(rows: Row<TData>[]): Row<TData>[] {\n return rows.filter((row) => {\n for (const cf of columnFilters) {\n const fn = filterFns.get(cf.id);\n if (fn && !fn(row, cf.id, cf.value)) return false;\n }\n if (hasGlobalFilter) {\n const matches = columns.some((col) =>\n resolvedGlobalFilterFn(row, col.id, globalFilter),\n );\n if (!matches) return false;\n }\n flatRows.push(row);\n if (row.subRows.length > 0) {\n const filteredSubRows = filterRows(row.subRows);\n if (filteredSubRows.length > 0) {\n row = { ...row, subRows: filteredSubRows };\n return true;\n }\n }\n return true;\n });\n }\n\n const rows = filterRows(rowModel.rows);\n const rowsById: Record<string, Row<TData>> = {};\n flatRows.forEach((r) => { rowsById[r.id] = r; });\n\n return { rows, flatRows, rowsById };\n}\n\n// ---------------------------------------------------------------------------\n// 3. getSortedRowModel\n// ---------------------------------------------------------------------------\nexport function getSortedRowModel<TData>(\n rowModel: RowModel<TData>,\n sorting: SortingState,\n columns: Column<TData>[],\n): RowModel<TData> {\n if (sorting.length === 0) return rowModel;\n\n const sortFns: Array<{\n columnId: string;\n desc: boolean;\n fn: SortingFn<TData> | null;\n colDef: ColumnDef<TData> | null;\n }> = sorting.map((s) => {\n const col = columns.find((c) => c.id === s.id);\n const colDef = col?.columnDef ?? null;\n let fn: SortingFn<TData> | null = null;\n if (colDef?.sortingFn && typeof colDef.sortingFn === \"function\") {\n fn = colDef.sortingFn;\n }\n return { columnId: s.id, desc: s.desc, fn, colDef };\n });\n\n function sortRows(rows: Row<TData>[]): Row<TData>[] {\n const sorted = [...rows].sort((rowA, rowB) => {\n for (const { columnId, desc, fn, colDef } of sortFns) {\n let result: number;\n if (fn) {\n result = fn(rowA, rowB, columnId);\n } else {\n const a = rowA.getValue(columnId);\n const b = rowB.getValue(columnId);\n result = defaultSortingFn(a, b);\n }\n if (colDef?.invertSorting) result = -result;\n if (result !== 0) return desc ? -result : result;\n }\n return 0;\n });\n\n return sorted.map((row) => {\n if (row.subRows.length > 0) {\n return { ...row, subRows: sortRows(row.subRows) };\n }\n return row;\n });\n }\n\n const rows = sortRows(rowModel.rows);\n const flatRows: Row<TData>[] = [];\n function flatten(rows: Row<TData>[]) {\n rows.forEach((r) => { flatRows.push(r); if (r.subRows.length) flatten(r.subRows); });\n }\n flatten(rows);\n const rowsById: Record<string, Row<TData>> = {};\n flatRows.forEach((r) => { rowsById[r.id] = r; });\n\n return { rows, flatRows, rowsById };\n}\n\n// ---------------------------------------------------------------------------\n// 4. getGroupedRowModel\n// ---------------------------------------------------------------------------\nexport function getGroupedRowModel<TData>(\n rowModel: RowModel<TData>,\n grouping: GroupingState,\n columns: Column<TData>[],\n table: TableInstance<TData>,\n): RowModel<TData> {\n if (grouping.length === 0) return rowModel;\n\n function groupRows(rows: Row<TData>[], depth: number): Row<TData>[] {\n if (depth >= grouping.length) return rows;\n\n const columnId = grouping[depth];\n const groups = new Map<unknown, Row<TData>[]>();\n\n for (const row of rows) {\n const value = row.getValue(columnId);\n const key = value ?? \"__null__\";\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(row);\n }\n\n const groupedRows: Row<TData>[] = [];\n let groupIndex = 0;\n\n for (const [key, groupItems] of groups) {\n const firstRow = groupItems[0];\n const groupRow = createRow(\n firstRow.original,\n groupIndex++,\n columns,\n table,\n depth,\n );\n groupRow.groupingColumnId = columnId;\n groupRow.groupingValue = key === \"__null__\" ? null : key;\n groupRow.subRows = groupRows(groupItems, depth + 1);\n groupedRows.push(groupRow);\n }\n\n return groupedRows;\n }\n\n const rows = groupRows(rowModel.rows, 0);\n const flatRows: Row<TData>[] = [];\n function flatten(items: Row<TData>[]) {\n items.forEach((r) => { flatRows.push(r); if (r.subRows.length) flatten(r.subRows); });\n }\n flatten(rows);\n const rowsById: Record<string, Row<TData>> = {};\n flatRows.forEach((r) => { rowsById[r.id] = r; });\n\n return { rows, flatRows, rowsById };\n}\n\n// ---------------------------------------------------------------------------\n// 5. getExpandedRowModel\n// ---------------------------------------------------------------------------\nexport function getExpandedRowModel<TData>(\n rowModel: RowModel<TData>,\n expanded: ExpandedState,\n): RowModel<TData> {\n const flatRows: Row<TData>[] = [];\n\n function expandRows(rows: Row<TData>[]): Row<TData>[] {\n const result: Row<TData>[] = [];\n for (const row of rows) {\n result.push(row);\n flatRows.push(row);\n const isExpanded = expanded === true || (typeof expanded === \"object\" && expanded[row.id]);\n if (isExpanded && row.subRows.length > 0) {\n const expandedSubRows = expandRows(row.subRows);\n result.push(...expandedSubRows);\n }\n }\n return result;\n }\n\n const rows = expandRows(rowModel.rows);\n const rowsById: Record<string, Row<TData>> = {};\n flatRows.forEach((r) => { rowsById[r.id] = r; });\n\n return { rows, flatRows, rowsById };\n}\n\n// ---------------------------------------------------------------------------\n// 6. getPaginatedRowModel\n// ---------------------------------------------------------------------------\nexport function getPaginatedRowModel<TData>(\n rowModel: RowModel<TData>,\n pagination: PaginationState,\n): RowModel<TData> {\n const { pageIndex, pageSize } = pagination;\n const start = pageIndex * pageSize;\n const end = start + pageSize;\n const rows = rowModel.rows.slice(start, end);\n const flatRows = rows;\n const rowsById: Record<string, Row<TData>> = {};\n flatRows.forEach((r) => { rowsById[r.id] = r; });\n\n return { rows, flatRows, rowsById };\n}\n\n// ---------------------------------------------------------------------------\n// Helper: get selected row model\n// ---------------------------------------------------------------------------\nexport function getSelectedRowModel<TData>(\n rowModel: RowModel<TData>,\n selection: Record<string, boolean>,\n): RowModel<TData> {\n const rows = rowModel.flatRows.filter((r) => selection[r.id]);\n const rowsById: Record<string, Row<TData>> = {};\n rows.forEach((r) => { rowsById[r.id] = r; });\n return { rows, flatRows: rows, rowsById };\n}\n","/**\n * table/use-table.ts\n *\n * Headless table engine hook — structural parity with TanStack Table v8.\n * Manages all feature state internally (sorting, filtering, pagination,\n * selection, visibility, ordering, pinning, sizing, grouping, expanding)\n * or accepts controlled state via options.\n */\nimport { useState, useMemo, useCallback, useRef } from \"react\";\nimport type {\n TableOptions,\n TableInstance,\n TableState,\n Column,\n ColumnDef,\n Header,\n HeaderGroup,\n Updater,\n SortingState,\n ColumnFiltersState,\n RowSelectionState,\n ColumnVisibilityState,\n ColumnOrderState,\n ColumnPinningState,\n ColumnSizingState,\n ColumnSizingInfoState,\n ExpandedState,\n GroupingState,\n PaginationState,\n SortingFn,\n RowModel,\n} from \"./types\";\nimport {\n getCoreRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n getGroupedRowModel,\n getExpandedRowModel,\n getPaginatedRowModel,\n getSelectedRowModel,\n} from \"./row-models\";\n\n// ---------------------------------------------------------------------------\n// Default state\n// ---------------------------------------------------------------------------\nconst defaultState: TableState = {\n sorting: [],\n columnFilters: [],\n globalFilter: \"\",\n rowSelection: {},\n columnVisibility: {},\n columnOrder: [],\n columnPinning: { left: [], right: [] },\n columnSizing: {},\n columnSizingInfo: {\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: [],\n },\n expanded: {},\n grouping: [],\n pagination: { pageIndex: 0, pageSize: 10 },\n};\n\n// ---------------------------------------------------------------------------\n// Updater helpers\n// ---------------------------------------------------------------------------\nfunction resolveUpdater<T>(updater: Updater<T>, prev: T): T {\n return typeof updater === \"function\" ? (updater as (prev: T) => T)(prev) : updater;\n}\n\nfunction getColumnId<TData>(def: ColumnDef<TData>, index: number): string {\n return def.id ?? def.accessorKey ?? `col_${index}`;\n}\n\n// ---------------------------------------------------------------------------\n// Build Column objects from ColumnDef\n// ---------------------------------------------------------------------------\nfunction buildColumns<TData>(\n defs: ColumnDef<TData>[],\n table: { getState: () => TableState } & Record<string, unknown>,\n stateSetters: Record<string, (updater: Updater<unknown>) => void>,\n depth: number = 0,\n parent?: Column<TData>,\n): Column<TData>[] {\n return defs.map((def, index) => {\n const id = getColumnId(def, index);\n\n const column: Column<TData> = {\n id,\n depth,\n columnDef: def,\n columns: [],\n parent,\n\n getFlatColumns: () => {\n const flat: Column<TData>[] = [column];\n column.columns.forEach((c) => {\n flat.push(...c.getFlatColumns());\n });\n return flat;\n },\n getLeafColumns: () => {\n if (column.columns.length === 0) return [column];\n return column.columns.flatMap((c) => c.getLeafColumns());\n },\n\n // Sorting\n getIsSorted: () => {\n const s = table.getState().sorting.find((s) => s.id === id);\n if (!s) return false;\n return s.desc ? \"desc\" : \"asc\";\n },\n getNextSortingOrder: () => {\n const current = column.getIsSorted();\n if (!current) return def.sortDescFirst ? \"desc\" : \"asc\";\n if (current === \"asc\") return \"desc\";\n return false;\n },\n getCanSort: () => def.enableSorting !== false,\n toggleSorting: (desc?: boolean, isMulti?: boolean) => {\n stateSetters.setSorting(((prev: SortingState) => {\n const existingIndex = prev.findIndex((s) => s.id === id);\n if (desc === undefined) {\n const nextOrder = column.getNextSortingOrder();\n if (nextOrder === false) {\n return isMulti ? prev.filter((s) => s.id !== id) : [];\n }\n const newSort = { id, desc: nextOrder === \"desc\" };\n if (isMulti) {\n if (existingIndex >= 0) {\n const next = [...prev];\n next[existingIndex] = newSort;\n return next;\n }\n return [...prev, newSort];\n }\n return [newSort];\n }\n const newSort = { id, desc };\n if (isMulti) {\n if (existingIndex >= 0) {\n const next = [...prev];\n next[existingIndex] = newSort;\n return next;\n }\n return [...prev, newSort];\n }\n return [newSort];\n }) as Updater<unknown>);\n },\n clearSorting: () => {\n stateSetters.setSorting(((prev: SortingState) =>\n prev.filter((s) => s.id !== id)) as Updater<unknown>);\n },\n getSortIndex: () => table.getState().sorting.findIndex((s) => s.id === id),\n getAutoSortingFn: () => (() => 0) as SortingFn<TData>,\n getAutoSortDir: () => \"asc\",\n\n // Filtering\n getIsFiltered: () => table.getState().columnFilters.some((f) => f.id === id),\n getFilterValue: () => table.getState().columnFilters.find((f) => f.id === id)?.value,\n setFilterValue: (value) => {\n stateSetters.setColumnFilters(((prev: ColumnFiltersState) => {\n const existing = prev.findIndex((f) => f.id === id);\n if (value == null || value === \"\") {\n return existing >= 0 ? prev.filter((f) => f.id !== id) : prev;\n }\n if (existing >= 0) {\n const next = [...prev];\n next[existing] = { id, value };\n return next;\n }\n return [...prev, { id, value }];\n }) as Updater<unknown>);\n },\n getCanFilter: () => def.enableFiltering !== false,\n getAutoFilterFn: () => undefined,\n\n // Visibility\n getIsVisible: () => table.getState().columnVisibility[id] !== false,\n toggleVisibility: (value) => {\n stateSetters.setColumnVisibility(((prev: ColumnVisibilityState) => ({\n ...prev,\n [id]: value ?? !column.getIsVisible(),\n })) as Updater<unknown>);\n },\n getCanHide: () => def.enableHiding !== false,\n\n // Pinning\n getIsPinned: () => {\n const p = table.getState().columnPinning;\n if (p.left?.includes(id)) return \"left\";\n if (p.right?.includes(id)) return \"right\";\n return false;\n },\n pin: (position) => {\n stateSetters.setColumnPinning(((prev: ColumnPinningState) => {\n const left = (prev.left ?? []).filter((c) => c !== id);\n const right = (prev.right ?? []).filter((c) => c !== id);\n if (position === \"left\") left.push(id);\n if (position === \"right\") right.push(id);\n return { left, right };\n }) as Updater<unknown>);\n },\n getCanPin: () => def.enablePinning !== false,\n\n // Grouping\n getIsGrouped: () => table.getState().grouping.includes(id),\n toggleGrouping: () => {\n stateSetters.setGrouping(((prev: GroupingState) => {\n if (prev.includes(id)) return prev.filter((g) => g !== id);\n return [...prev, id];\n }) as Updater<unknown>);\n },\n getCanGroup: () => def.enableGrouping !== false,\n getGroupedIndex: () => table.getState().grouping.indexOf(id),\n\n // Sizing\n getSize: () => {\n const custom = table.getState().columnSizing[id];\n return custom ?? def.size ?? 150;\n },\n getStart: (_position) => {\n return 0;\n },\n getCanResize: () => def.enableResizing !== false,\n resetSize: () => {\n stateSetters.setColumnSizing(((prev: ColumnSizingState) => {\n const next = { ...prev };\n delete next[id];\n return next;\n }) as Updater<unknown>);\n },\n\n getIndex: () => 0,\n };\n\n if (def.columns) {\n column.columns = buildColumns(def.columns, table, stateSetters, depth + 1, column);\n }\n\n return column;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Build Header objects from Columns\n// ---------------------------------------------------------------------------\nfunction buildHeaderGroups<TData>(\n columns: Column<TData>[],\n table: TableInstance<TData>,\n): HeaderGroup<TData>[] {\n const leafColumns = columns.flatMap((c) => c.getLeafColumns());\n\n const headers: Header<TData>[] = leafColumns.map((column, idx) => {\n const header: Header<TData> = {\n id: column.id,\n index: idx,\n depth: 0,\n column,\n isPlaceholder: false,\n subHeaders: [],\n colSpan: 1,\n rowSpan: 1,\n getSize: () => column.getSize(),\n getStart: () => 0,\n getContext: () => ({ table, header, column }),\n getResizeHandler: () => {\n return (_event: unknown) => {\n // Column resize handling\n };\n },\n getLeafHeaders: () => [header],\n };\n return header;\n });\n\n return [{ id: \"headerGroup_0\", depth: 0, headers }];\n}\n\n// ---------------------------------------------------------------------------\n// useTable hook\n// ---------------------------------------------------------------------------\nexport function useTable<TData extends Record<string, unknown>>(\n options: TableOptions<TData>,\n): TableInstance<TData> {\n const { data, columns: columnDefs } = options;\n\n // Internal state — seeded by initialState (uncontrolled) or state (controlled, initial only)\n const ini = options.initialState;\n const [sorting, _setSorting] = useState<SortingState>(\n options.state?.sorting ?? ini?.sorting ?? [],\n );\n const [columnFilters, _setColumnFilters] = useState<ColumnFiltersState>(\n options.state?.columnFilters ?? ini?.columnFilters ?? [],\n );\n const [globalFilter, _setGlobalFilter] = useState<unknown>(\n options.state?.globalFilter ?? ini?.globalFilter ?? \"\",\n );\n const [rowSelection, _setRowSelection] = useState<RowSelectionState>(\n options.state?.rowSelection ?? ini?.rowSelection ?? {},\n );\n const [columnVisibility, _setColumnVisibility] = useState<ColumnVisibilityState>(\n options.state?.columnVisibility ?? ini?.columnVisibility ?? {},\n );\n const [columnOrder, _setColumnOrder] = useState<ColumnOrderState>(\n options.state?.columnOrder ?? ini?.columnOrder ?? [],\n );\n const [columnPinning, _setColumnPinning] = useState<ColumnPinningState>(\n options.state?.columnPinning ?? ini?.columnPinning ?? { left: [], right: [] },\n );\n const [columnSizing, _setColumnSizing] = useState<ColumnSizingState>(\n options.state?.columnSizing ?? ini?.columnSizing ?? {},\n );\n const [columnSizingInfo, _setColumnSizingInfo] = useState<ColumnSizingInfoState>(\n options.state?.columnSizingInfo ?? ini?.columnSizingInfo ?? defaultState.columnSizingInfo,\n );\n const [expanded, _setExpanded] = useState<ExpandedState>(\n options.state?.expanded ?? ini?.expanded ?? {},\n );\n const [grouping, _setGrouping] = useState<GroupingState>(\n options.state?.grouping ?? ini?.grouping ?? [],\n );\n const [pagination, _setPagination] = useState<PaginationState>(\n options.state?.pagination ?? ini?.pagination ?? { pageIndex: 0, pageSize: 10 },\n );\n\n // Merge controlled + internal state\n const state: TableState = useMemo(\n () => ({\n sorting: options.state?.sorting ?? sorting,\n columnFilters: options.state?.columnFilters ?? columnFilters,\n globalFilter: options.state?.globalFilter ?? globalFilter,\n rowSelection: options.state?.rowSelection ?? rowSelection,\n columnVisibility: options.state?.columnVisibility ?? columnVisibility,\n columnOrder: options.state?.columnOrder ?? columnOrder,\n columnPinning: options.state?.columnPinning ?? columnPinning,\n columnSizing: options.state?.columnSizing ?? columnSizing,\n columnSizingInfo: options.state?.columnSizingInfo ?? columnSizingInfo,\n expanded: options.state?.expanded ?? expanded,\n grouping: options.state?.grouping ?? grouping,\n pagination: options.state?.pagination ?? pagination,\n }),\n [\n options.state, sorting, columnFilters, globalFilter,\n rowSelection, columnVisibility, columnOrder, columnPinning,\n columnSizing, columnSizingInfo, expanded, grouping, pagination,\n ],\n );\n\n const stateRef = useRef(state);\n stateRef.current = state;\n\n // State setters that respect controlled/uncontrolled\n const setSorting = useCallback((updater: Updater<SortingState>) => {\n options.onSortingChange?.(updater);\n if (!options.state?.sorting) _setSorting((prev) => resolveUpdater(updater, prev));\n }, [options.onSortingChange, options.state?.sorting]);\n\n const setColumnFilters = useCallback((updater: Updater<ColumnFiltersState>) => {\n options.onColumnFiltersChange?.(updater);\n if (!options.state?.columnFilters) _setColumnFilters((prev) => resolveUpdater(updater, prev));\n if (options.autoResetPageIndex !== false) {\n _setPagination((prev) => ({ ...prev, pageIndex: 0 }));\n }\n }, [options.onColumnFiltersChange, options.state?.columnFilters, options.autoResetPageIndex]);\n\n const setGlobalFilter = useCallback((value: unknown) => {\n options.onGlobalFilterChange?.(value as Updater<unknown>);\n if (!options.state?.globalFilter) _setGlobalFilter(value);\n if (options.autoResetPageIndex !== false) {\n _setPagination((prev) => ({ ...prev, pageIndex: 0 }));\n }\n }, [options.onGlobalFilterChange, options.state?.globalFilter, options.autoResetPageIndex]);\n\n const setRowSelection = useCallback((updater: Updater<RowSelectionState>) => {\n options.onRowSelectionChange?.(updater);\n if (!options.state?.rowSelection) _setRowSelection((prev) => resolveUpdater(updater, prev));\n }, [options.onRowSelectionChange, options.state?.rowSelection]);\n\n const setColumnVisibility = useCallback((updater: Updater<ColumnVisibilityState>) => {\n options.onColumnVisibilityChange?.(updater);\n if (!options.state?.columnVisibility) _setColumnVisibility((prev) => resolveUpdater(updater, prev));\n }, [options.onColumnVisibilityChange, options.state?.columnVisibility]);\n\n const setColumnOrder = useCallback((updater: Updater<ColumnOrderState>) => {\n options.onColumnOrderChange?.(updater);\n if (!options.state?.columnOrder) _setColumnOrder((prev) => resolveUpdater(updater, prev));\n }, [options.onColumnOrderChange, options.state?.columnOrder]);\n\n const setColumnPinning = useCallback((updater: Updater<ColumnPinningState>) => {\n options.onColumnPinningChange?.(updater);\n if (!options.state?.columnPinning) _setColumnPinning((prev) => resolveUpdater(updater, prev));\n }, [options.onColumnPinningChange, options.state?.columnPinning]);\n\n const setColumnSizing = useCallback((updater: Updater<ColumnSizingState>) => {\n options.onColumnSizingChange?.(updater);\n if (!options.state?.columnSizing) _setColumnSizing((prev) => resolveUpdater(updater, prev));\n }, [options.onColumnSizingChange, options.state?.columnSizing]);\n\n const setColumnSizingInfo = useCallback((updater: Updater<ColumnSizingInfoState>) => {\n options.onColumnSizingInfoChange?.(updater);\n if (!options.state?.columnSizingInfo) _setColumnSizingInfo((prev) => resolveUpdater(updater, prev));\n }, [options.onColumnSizingInfoChange, options.state?.columnSizingInfo]);\n\n const setExpanded = useCallback((updater: Updater<ExpandedState>) => {\n options.onExpandedChange?.(updater);\n if (!options.state?.expanded) _setExpanded((prev) => resolveUpdater(updater, prev));\n }, [options.onExpandedChange, options.state?.expanded]);\n\n const setGrouping = useCallback((updater: Updater<GroupingState>) => {\n options.onGroupingChange?.(updater);\n if (!options.state?.grouping) _setGrouping((prev) => resolveUpdater(updater, prev));\n }, [options.onGroupingChange, options.state?.grouping]);\n\n const setPagination = useCallback((updater: Updater<PaginationState>) => {\n options.onPaginationChange?.(updater);\n if (!options.state?.pagination) _setPagination((prev) => resolveUpdater(updater, prev));\n }, [options.onPaginationChange, options.state?.pagination]);\n\n const stateSetters = useMemo(() => ({\n setSorting: setSorting as (u: Updater<unknown>) => void,\n setColumnFilters: setColumnFilters as (u: Updater<unknown>) => void,\n setGlobalFilter: setGlobalFilter as (u: Updater<unknown>) => void,\n setRowSelection: setRowSelection as (u: Updater<unknown>) => void,\n setColumnVisibility: setColumnVisibility as (u: Updater<unknown>) => void,\n setColumnOrder: setColumnOrder as (u: Updater<unknown>) => void,\n setColumnPinning: setColumnPinning as (u: Updater<unknown>) => void,\n setColumnSizing: setColumnSizing as (u: Updater<unknown>) => void,\n setColumnSizingInfo: setColumnSizingInfo as (u: Updater<unknown>) => void,\n setExpanded: setExpanded as (u: Updater<unknown>) => void,\n setGrouping: setGrouping as (u: Updater<unknown>) => void,\n setPagination: setPagination as (u: Updater<unknown>) => void,\n }), [\n setSorting, setColumnFilters, setGlobalFilter,\n setRowSelection, setColumnVisibility, setColumnOrder,\n setColumnPinning, setColumnSizing, setColumnSizingInfo,\n setExpanded, setGrouping, setPagination,\n ]);\n\n const getState = useCallback(() => state, [state]);\n\n /** Minimal table shell for row-model pipeline (createRow needs options, getState, setters, getCoreRowModel). */\n const coreRowModelRef = useRef<RowModel<TData> | null>(null);\n const emptyCoreRowModel = useMemo<RowModel<TData>>(\n () => ({ rows: [], flatRows: [], rowsById: {} }),\n [],\n );\n const rowModelTable = useMemo(\n (): TableInstance<TData> =>\n ({\n options,\n getState: () => stateRef.current,\n setRowSelection,\n setExpanded,\n getCoreRowModel: () => coreRowModelRef.current ?? emptyCoreRowModel,\n }) as TableInstance<TData>,\n [options, setRowSelection, setExpanded, emptyCoreRowModel],\n );\n\n // Build column objects\n const columns: Column<TData>[] = useMemo(\n () => buildColumns(columnDefs, { getState, ...stateSetters }, stateSetters),\n [columnDefs, getState, stateSetters],\n );\n\n // Ordered columns\n const orderedColumns = useMemo(() => {\n if (state.columnOrder.length === 0) return columns;\n const ordered: Column<TData>[] = [];\n const remaining = [...columns];\n for (const id of state.columnOrder) {\n const idx = remaining.findIndex((c) => c.id === id);\n if (idx >= 0) {\n ordered.push(remaining[idx]);\n remaining.splice(idx, 1);\n }\n }\n ordered.push(...remaining);\n return ordered;\n }, [columns, state.columnOrder]);\n\n // Visible columns\n const visibleColumns = useMemo(\n () => orderedColumns.filter((c) => c.getIsVisible()),\n [orderedColumns],\n );\n\n // Pinned columns\n const leftPinnedColumns = useMemo(\n () => visibleColumns.filter((c) => c.getIsPinned() === \"left\"),\n [visibleColumns],\n );\n const rightPinnedColumns = useMemo(\n () => visibleColumns.filter((c) => c.getIsPinned() === \"right\"),\n [visibleColumns],\n );\n const centerColumns = useMemo(\n () => visibleColumns.filter((c) => c.getIsPinned() === false),\n [visibleColumns],\n );\n\n // Row model pipeline\n const coreRowModel = useMemo(() => {\n const cm = getCoreRowModel(data, columns, rowModelTable);\n coreRowModelRef.current = cm;\n return cm;\n }, [data, columns, rowModelTable]);\n\n const filteredRowModel = useMemo(() => {\n if (options.manualFiltering) return coreRowModel;\n return getFilteredRowModel(\n coreRowModel,\n state.columnFilters,\n state.globalFilter,\n columns,\n options.globalFilterFn,\n );\n }, [coreRowModel, state.columnFilters, state.globalFilter, columns, options.manualFiltering, options.globalFilterFn]);\n\n const sortedRowModel = useMemo(() => {\n if (options.manualSorting) return filteredRowModel;\n return getSortedRowModel(filteredRowModel, state.sorting, columns);\n }, [filteredRowModel, state.sorting, columns, options.manualSorting]);\n\n const groupedRowModel = useMemo(() => {\n if (options.manualGrouping || state.grouping.length === 0) return sortedRowModel;\n return getGroupedRowModel(sortedRowModel, state.grouping, columns, rowModelTable);\n }, [sortedRowModel, state.grouping, columns, options.manualGrouping, rowModelTable]);\n\n const expandedRowModel = useMemo(\n () => getExpandedRowModel(groupedRowModel, state.expanded),\n [groupedRowModel, state.expanded],\n );\n\n const prePaginationRowModel = expandedRowModel;\n\n const paginatedRowModel = useMemo(() => {\n if (options.manualPagination) return prePaginationRowModel;\n return getPaginatedRowModel(prePaginationRowModel, state.pagination);\n }, [prePaginationRowModel, state.pagination, options.manualPagination]);\n\n const selectedRowModel = useMemo(\n () => getSelectedRowModel(coreRowModel, state.rowSelection),\n [coreRowModel, state.rowSelection],\n );\n\n // Page count\n const pageCount = useMemo(() => {\n if (options.pageCount != null) return options.pageCount;\n return Math.ceil(prePaginationRowModel.rows.length / state.pagination.pageSize);\n }, [options.pageCount, prePaginationRowModel, state.pagination.pageSize]);\n\n // Build table instance\n const table: TableInstance<TData> = useMemo(() => {\n const inst: TableInstance<TData> = {\n options,\n getState: () => state,\n setState: (updater) => {\n const next = resolveUpdater(updater, state);\n setSorting(next.sorting);\n setColumnFilters(next.columnFilters);\n setGlobalFilter(next.globalFilter);\n setRowSelection(next.rowSelection);\n setColumnVisibility(next.columnVisibility);\n setColumnOrder(next.columnOrder);\n setColumnPinning(next.columnPinning);\n setColumnSizing(next.columnSizing);\n setColumnSizingInfo(next.columnSizingInfo);\n setExpanded(next.expanded);\n setGrouping(next.grouping);\n setPagination(next.pagination);\n },\n reset: () => {\n setSorting([]);\n setColumnFilters([]);\n setGlobalFilter(\"\");\n setRowSelection({});\n setColumnVisibility({});\n setColumnOrder([]);\n setColumnPinning({ left: [], right: [] });\n setColumnSizing({});\n setColumnSizingInfo(defaultState.columnSizingInfo);\n setExpanded({});\n setGrouping([]);\n setPagination({ pageIndex: 0, pageSize: 10 });\n },\n\n // Column access\n getAllColumns: () => columns,\n getAllFlatColumns: () => columns.flatMap((c) => c.getFlatColumns()),\n getAllLeafColumns: () => columns.flatMap((c) => c.getLeafColumns()),\n getColumn: (id) => columns.find((c) => c.id === id),\n\n // Header groups\n getHeaderGroups: () => buildHeaderGroups(visibleColumns, inst),\n getLeftHeaderGroups: () => buildHeaderGroups(leftPinnedColumns, inst),\n getCenterHeaderGroups: () => buildHeaderGroups(centerColumns, inst),\n getRightHeaderGroups: () => buildHeaderGroups(rightPinnedColumns, inst),\n getFooterGroups: () => buildHeaderGroups(visibleColumns, inst),\n\n // Row models\n getCoreRowModel: () => coreRowModel,\n getRowModel: () => paginatedRowModel,\n getPreFilteredRowModel: () => coreRowModel,\n getFilteredRowModel: () => filteredRowModel,\n getPreSortedRowModel: () => filteredRowModel,\n getSortedRowModel: () => sortedRowModel,\n getGroupedRowModel: () => groupedRowModel,\n getExpandedRowModel: () => expandedRowModel,\n getPrePaginationRowModel: () => prePaginationRowModel,\n getPaginationRowModel: () => paginatedRowModel,\n getSelectedRowModel: () => selectedRowModel,\n getRow: (id) => {\n const row = coreRowModel.rowsById[id];\n if (!row) throw new Error(`Row with id \"${id}\" not found`);\n return row;\n },\n\n // Sorting\n setSorting,\n resetSorting: () => setSorting([]),\n\n // Filtering\n setColumnFilters,\n resetColumnFilters: () => setColumnFilters([]),\n setGlobalFilter,\n resetGlobalFilter: () => setGlobalFilter(\"\"),\n\n // Pagination\n setPageIndex: (updater) =>\n setPagination((prev) => ({\n ...prev,\n pageIndex: resolveUpdater(updater, prev.pageIndex),\n })),\n resetPageIndex: () =>\n setPagination((prev) => ({ ...prev, pageIndex: 0 })),\n setPageSize: (updater) =>\n setPagination((prev) => ({\n ...prev,\n pageSize: resolveUpdater(updater, prev.pageSize),\n pageIndex: 0,\n })),\n resetPageSize: () =>\n setPagination((prev) => ({ ...prev, pageSize: 10 })),\n getPageCount: () => pageCount,\n getCanPreviousPage: () => state.pagination.pageIndex > 0,\n getCanNextPage: () => state.pagination.pageIndex < pageCount - 1,\n previousPage: () =>\n setPagination((prev) => ({\n ...prev,\n pageIndex: Math.max(0, prev.pageIndex - 1),\n })),\n nextPage: () =>\n setPagination((prev) => ({\n ...prev,\n pageIndex: Math.min(pageCount - 1, prev.pageIndex + 1),\n })),\n firstPage: () =>\n setPagination((prev) => ({ ...prev, pageIndex: 0 })),\n lastPage: () =>\n setPagination((prev) => ({\n ...prev,\n pageIndex: Math.max(0, pageCount - 1),\n })),\n\n // Row selection\n setRowSelection,\n resetRowSelection: () => setRowSelection({}),\n toggleAllRowsSelected: (value) => {\n const next: RowSelectionState = {};\n const shouldSelect = value ?? !inst.getIsAllRowsSelected();\n if (shouldSelect) {\n coreRowModel.flatRows.forEach((r) => {\n if (r.getCanSelect()) next[r.id] = true;\n });\n }\n setRowSelection(next);\n },\n toggleAllPageRowsSelected: (value) => {\n const shouldSelect = value ?? !inst.getIsAllPageRowsSelected();\n setRowSelection((prev) => {\n const next = { ...prev };\n paginatedRowModel.rows.forEach((r) => {\n if (r.getCanSelect()) next[r.id] = shouldSelect;\n });\n return next;\n });\n },\n getIsAllRowsSelected: () =>\n coreRowModel.flatRows.filter((r) => r.getCanSelect()).every((r) => state.rowSelection[r.id]),\n getIsAllPageRowsSelected: () =>\n paginatedRowModel.rows.filter((r) => r.getCanSelect()).every((r) => state.rowSelection[r.id]),\n getIsSomeRowsSelected: () =>\n coreRowModel.flatRows.some((r) => state.rowSelection[r.id]),\n getIsSomePageRowsSelected: () =>\n paginatedRowModel.rows.some((r) => state.rowSelection[r.id]) &&\n !inst.getIsAllPageRowsSelected(),\n getToggleAllRowsSelectedHandler: () => () => inst.toggleAllRowsSelected(),\n getToggleAllPageRowsSelectedHandler: () => () => inst.toggleAllPageRowsSelected(),\n\n // Column visibility\n setColumnVisibility,\n resetColumnVisibility: () => setColumnVisibility({}),\n toggleAllColumnsVisible: (value) => {\n const vis: ColumnVisibilityState = {};\n const shouldShow = value ?? !inst.getIsAllColumnsVisible();\n columns.forEach((c) => { vis[c.id] = shouldShow; });\n setColumnVisibility(vis);\n },\n getIsAllColumnsVisible: () =>\n columns.every((c) => c.getIsVisible()),\n getIsSomeColumnsVisible: () =>\n columns.some((c) => c.getIsVisible()),\n getToggleAllColumnsVisibilityHandler: () => () =>\n inst.toggleAllColumnsVisible(),\n getVisibleFlatColumns: () => visibleColumns,\n getVisibleLeafColumns: () =>\n visibleColumns.flatMap((c) => c.getLeafColumns()),\n\n // Column ordering\n setColumnOrder,\n resetColumnOrder: () => setColumnOrder([]),\n\n // Column pinning\n setColumnPinning,\n resetColumnPinning: () => setColumnPinning({ left: [], right: [] }),\n getLeftFlatColumns: () => leftPinnedColumns,\n getRightFlatColumns: () => rightPinnedColumns,\n getCenterFlatColumns: () => centerColumns,\n getLeftLeafColumns: () => leftPinnedColumns.flatMap((c) => c.getLeafColumns()),\n getRightLeafColumns: () => rightPinnedColumns.flatMap((c) => c.getLeafColumns()),\n getCenterLeafColumns: () => centerColumns.flatMap((c) => c.getLeafColumns()),\n\n // Column sizing\n setColumnSizing,\n setColumnSizingInfo,\n resetColumnSizing: () => setColumnSizing({}),\n\n // Grouping\n setGrouping,\n resetGrouping: () => setGrouping([]),\n\n // Expanding\n setExpanded,\n resetExpanded: () => setExpanded({}),\n toggleAllRowsExpanded: (value) => {\n const shouldExpand = value ?? !inst.getIsAllRowsExpanded();\n if (shouldExpand) {\n const next: Record<string, boolean> = {};\n coreRowModel.flatRows.forEach((r) => { next[r.id] = true; });\n setExpanded(next);\n } else {\n setExpanded({});\n }\n },\n getIsAllRowsExpanded: () => {\n const exp = state.expanded;\n if (exp === true) return true;\n return coreRowModel.flatRows\n .filter((r) => r.subRows.length > 0)\n .every((r) => exp[r.id]);\n },\n getIsSomeRowsExpanded: () => {\n const exp = state.expanded;\n if (exp === true) return true;\n return Object.values(exp).some(Boolean);\n },\n getCanSomeRowsExpand: () =>\n coreRowModel.flatRows.some((r) => r.subRows.length > 0),\n getExpandedDepth: () => {\n let maxDepth = 0;\n coreRowModel.flatRows.forEach((r) => {\n if (r.depth > maxDepth) maxDepth = r.depth;\n });\n return maxDepth;\n },\n };\n\n return inst;\n }, [\n options, state, columns, visibleColumns, leftPinnedColumns, rightPinnedColumns,\n centerColumns, coreRowModel, filteredRowModel, sortedRowModel, groupedRowModel,\n expandedRowModel, prePaginationRowModel, paginatedRowModel, selectedRowModel, pageCount,\n setSorting, setColumnFilters, setGlobalFilter, setRowSelection,\n setColumnVisibility, setColumnOrder, setColumnPinning, setColumnSizing,\n setColumnSizingInfo, setExpanded, setGrouping, setPagination,\n ]);\n\n return table;\n}\n","/**\n * table/faceting.ts\n *\n * Column faceting utilities — compute unique values, counts,\n * and min/max for filter UI controls.\n */\nimport type { Row, RowModel } from \"./types\";\n\n/**\n * Compute unique values and their counts for a given column.\n * Useful for rendering filter dropdown options with hit counts.\n */\nexport function getFacetedUniqueValues<TData>(\n rowModel: RowModel<TData>,\n columnId: string,\n): Map<unknown, number> {\n const counts = new Map<unknown, number>();\n\n for (const row of rowModel.flatRows) {\n const value = row.getValue(columnId);\n if (Array.isArray(value)) {\n for (const v of value) {\n counts.set(v, (counts.get(v) ?? 0) + 1);\n }\n } else {\n counts.set(value, (counts.get(value) ?? 0) + 1);\n }\n }\n\n return counts;\n}\n\n/**\n * Compute min and max numeric values for a given column.\n * Returns [min, max] or undefined if no numeric values exist.\n */\nexport function getFacetedMinMaxValues<TData>(\n rowModel: RowModel<TData>,\n columnId: string,\n): [number, number] | undefined {\n let min = Infinity;\n let max = -Infinity;\n let hasValue = false;\n\n for (const row of rowModel.flatRows) {\n const raw = row.getValue(columnId);\n const value = typeof raw === \"number\" ? raw : Number(raw);\n if (!Number.isNaN(value)) {\n hasValue = true;\n if (value < min) min = value;\n if (value > max) max = value;\n }\n }\n\n return hasValue ? [min, max] : undefined;\n}\n\n/**\n * Get a filtered row model scoped to a single column's facet.\n * Returns a row model that excludes the given column's own filter,\n * so the facet counts reflect what would be available if that\n * specific filter were removed.\n */\nexport function getFacetedRowModel<TData>(\n preFilteredRowModel: RowModel<TData>,\n columnId: string,\n allFilteredRowModel: RowModel<TData>,\n): RowModel<TData> {\n return preFilteredRowModel;\n}\n","/**\n * table/selection-store.ts\n *\n * Zustand store for multi-select state, shared across all view modes.\n * Each EntityListView instance creates its own store via createSelectionStore()\n * so multiple lists on the same page don't interfere.\n */\nimport { createStore, type StoreApi } from \"zustand\";\nimport { useStore } from \"zustand\";\nimport React from \"react\";\n\nexport interface SelectionStoreState {\n selectedIds: Set<string>;\n isMultiSelectMode: boolean;\n\n toggle: (id: string) => void;\n select: (id: string) => void;\n deselect: (id: string) => void;\n selectAll: (ids: string[]) => void;\n deselectAll: () => void;\n setMultiSelectMode: (enabled: boolean) => void;\n toggleMultiSelectMode: () => void;\n isSelected: (id: string) => boolean;\n selectedCount: () => number;\n getSelectedIds: () => string[];\n}\n\n/**\n * Singleton used only so hooks can call `useSelectionStore` when multi-select is off.\n * Selectors should ignore this store’s state when the real `selectionStore` prop is undefined.\n */\nexport const selectionStorePlaceholder: StoreApi<SelectionStoreState> =\n createSelectionStore();\n\nexport function createSelectionStore(): StoreApi<SelectionStoreState> {\n return createStore<SelectionStoreState>((set, get) => ({\n selectedIds: new Set(),\n isMultiSelectMode: false,\n\n toggle: (id) =>\n set((state) => {\n const next = new Set(state.selectedIds);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return { selectedIds: next };\n }),\n\n select: (id) =>\n set((state) => {\n if (state.selectedIds.has(id)) return state;\n const next = new Set(state.selectedIds);\n next.add(id);\n return { selectedIds: next };\n }),\n\n deselect: (id) =>\n set((state) => {\n if (!state.selectedIds.has(id)) return state;\n const next = new Set(state.selectedIds);\n next.delete(id);\n return { selectedIds: next };\n }),\n\n selectAll: (ids) =>\n set(() => ({ selectedIds: new Set(ids) })),\n\n deselectAll: () =>\n set(() => ({ selectedIds: new Set(), isMultiSelectMode: false })),\n\n setMultiSelectMode: (enabled) =>\n set(() => ({\n isMultiSelectMode: enabled,\n selectedIds: enabled ? get().selectedIds : new Set(),\n })),\n\n toggleMultiSelectMode: () => {\n const current = get().isMultiSelectMode;\n get().setMultiSelectMode(!current);\n },\n\n isSelected: (id) => get().selectedIds.has(id),\n selectedCount: () => get().selectedIds.size,\n getSelectedIds: () => Array.from(get().selectedIds),\n }));\n}\n\nexport function useSelectionStore<T>(\n store: StoreApi<SelectionStoreState>,\n selector: (state: SelectionStoreState) => T,\n): T {\n return useStore(store, selector);\n}\n\nexport const SelectionContext = React.createContext<StoreApi<SelectionStoreState> | null>(null);\n\nexport function useSelectionContext(): StoreApi<SelectionStoreState> {\n const store = React.useContext(SelectionContext);\n if (!store) throw new Error(\"useSelectionContext must be used within a SelectionContext.Provider\");\n return store;\n}\n","/**\n * table/presets/preset-store.ts\n *\n * Zustand store for reactive preset state across all tables.\n * Holds loaded presets, active selections, pending remote changes,\n * and the configurable auto-apply vs notify behavior.\n */\nimport { createStore, type StoreApi } from \"zustand\";\nimport type { ViewMode } from \"../types\";\nimport type {\n FilterPreset,\n ColumnPreset,\n PresetChangeEvent,\n UnsubscribeFn,\n} from \"./types\";\nimport type { TableStorageAdapter } from \"./storage\";\n\nexport interface TablePresetSlice {\n filters: FilterPreset[];\n columns: ColumnPreset[];\n activeFilterId: string | null;\n activeColumnId: string | null;\n activeViewMode: ViewMode;\n}\n\nexport interface PresetStoreState {\n presets: Record<string, TablePresetSlice>;\n pendingChanges: PresetChangeEvent[];\n realtimeMode: \"auto-apply\" | \"notify\";\n\n getTablePresets: (tableId: string) => TablePresetSlice;\n\n loadPresets: (tableId: string, adapter: TableStorageAdapter) => Promise<void>;\n applyFilterPreset: (tableId: string, presetId: string | null) => void;\n applyColumnPreset: (tableId: string, presetId: string | null) => void;\n setViewMode: (tableId: string, mode: ViewMode) => void;\n\n saveFilterPreset: (\n tableId: string,\n preset: FilterPreset,\n adapter: TableStorageAdapter,\n ) => Promise<void>;\n saveColumnPreset: (\n tableId: string,\n preset: ColumnPreset,\n adapter: TableStorageAdapter,\n ) => Promise<void>;\n deleteFilterPreset: (\n tableId: string,\n presetId: string,\n adapter: TableStorageAdapter,\n ) => Promise<void>;\n deleteColumnPreset: (\n tableId: string,\n presetId: string,\n adapter: TableStorageAdapter,\n ) => Promise<void>;\n\n handleRemoteChange: (event: PresetChangeEvent, adapter: TableStorageAdapter) => void;\n acknowledgePendingChange: (index: number) => void;\n dismissPendingChanges: (tableId: string) => void;\n}\n\nconst defaultSlice: TablePresetSlice = {\n filters: [],\n columns: [],\n activeFilterId: null,\n activeColumnId: null,\n activeViewMode: \"table\",\n};\n\nexport function createPresetStore(\n realtimeMode: \"auto-apply\" | \"notify\" = \"auto-apply\",\n): StoreApi<PresetStoreState> {\n return createStore<PresetStoreState>((set, get) => ({\n presets: {},\n pendingChanges: [],\n realtimeMode,\n\n getTablePresets: (tableId) =>\n get().presets[tableId] ?? defaultSlice,\n\n loadPresets: async (tableId, adapter) => {\n const [filters, columns, active] = await Promise.all([\n adapter.loadFilterPresets(tableId),\n adapter.loadColumnPresets(tableId),\n adapter.loadActivePresets(tableId),\n ]);\n\n set((state) => ({\n presets: {\n ...state.presets,\n [tableId]: {\n filters,\n columns,\n activeFilterId: active.filterId ?? null,\n activeColumnId: active.columnId ?? null,\n activeViewMode: active.viewMode ?? \"table\",\n },\n },\n }));\n },\n\n applyFilterPreset: (tableId, presetId) => {\n set((state) => {\n const slice = state.presets[tableId] ?? { ...defaultSlice };\n return {\n presets: {\n ...state.presets,\n [tableId]: { ...slice, activeFilterId: presetId },\n },\n };\n });\n },\n\n applyColumnPreset: (tableId, presetId) => {\n set((state) => {\n const slice = state.presets[tableId] ?? { ...defaultSlice };\n return {\n presets: {\n ...state.presets,\n [tableId]: { ...slice, activeColumnId: presetId },\n },\n };\n });\n },\n\n setViewMode: (tableId, mode) => {\n set((state) => {\n const slice = state.presets[tableId] ?? { ...defaultSlice };\n return {\n presets: {\n ...state.presets,\n [tableId]: { ...slice, activeViewMode: mode },\n },\n };\n });\n },\n\n saveFilterPreset: async (tableId, preset, adapter) => {\n await adapter.saveFilterPreset(tableId, preset);\n set((state) => {\n const slice = state.presets[tableId] ?? { ...defaultSlice };\n const idx = slice.filters.findIndex((p) => p.id === preset.id);\n const filters = [...slice.filters];\n if (idx >= 0) filters[idx] = preset;\n else filters.push(preset);\n return {\n presets: {\n ...state.presets,\n [tableId]: { ...slice, filters },\n },\n };\n });\n },\n\n saveColumnPreset: async (tableId, preset, adapter) => {\n await adapter.saveColumnPreset(tableId, preset);\n set((state) => {\n const slice = state.presets[tableId] ?? { ...defaultSlice };\n const idx = slice.columns.findIndex((p) => p.id === preset.id);\n const columns = [...slice.columns];\n if (idx >= 0) columns[idx] = preset;\n else columns.push(preset);\n return {\n presets: {\n ...state.presets,\n [tableId]: { ...slice, columns },\n },\n };\n });\n },\n\n deleteFilterPreset: async (tableId, presetId, adapter) => {\n await adapter.deleteFilterPreset(tableId, presetId);\n set((state) => {\n const slice = state.presets[tableId] ?? { ...defaultSlice };\n return {\n presets: {\n ...state.presets,\n [tableId]: {\n ...slice,\n filters: slice.filters.filter((p) => p.id !== presetId),\n activeFilterId:\n slice.activeFilterId === presetId ? null : slice.activeFilterId,\n },\n },\n };\n });\n },\n\n deleteColumnPreset: async (tableId, presetId, adapter) => {\n await adapter.deleteColumnPreset(tableId, presetId);\n set((state) => {\n const slice = state.presets[tableId] ?? { ...defaultSlice };\n return {\n presets: {\n ...state.presets,\n [tableId]: {\n ...slice,\n columns: slice.columns.filter((p) => p.id !== presetId),\n activeColumnId:\n slice.activeColumnId === presetId ? null : slice.activeColumnId,\n },\n },\n };\n });\n },\n\n handleRemoteChange: (event, adapter) => {\n const mode = get().realtimeMode;\n if (mode === \"auto-apply\") {\n get().loadPresets(event.tableId, adapter);\n } else {\n set((state) => ({\n pendingChanges: [...state.pendingChanges, event],\n }));\n }\n },\n\n acknowledgePendingChange: (index) => {\n set((state) => ({\n pendingChanges: state.pendingChanges.filter((_, i) => i !== index),\n }));\n },\n\n dismissPendingChanges: (tableId) => {\n set((state) => ({\n pendingChanges: state.pendingChanges.filter(\n (e) => e.tableId !== tableId,\n ),\n }));\n },\n }));\n}\n","/**\n * table/presets/memory-adapter.ts\n *\n * In-memory storage adapter — zero-config default.\n * Data lives only for the session lifetime.\n */\nimport type { TableStorageAdapter } from \"./storage\";\nimport type { FilterPreset, ColumnPreset, ActivePresets } from \"./types\";\n\nexport class MemoryAdapter implements TableStorageAdapter {\n private filters = new Map<string, FilterPreset[]>();\n private columns = new Map<string, ColumnPreset[]>();\n private active = new Map<string, ActivePresets>();\n\n async loadFilterPresets(tableId: string): Promise<FilterPreset[]> {\n return this.filters.get(tableId) ?? [];\n }\n\n async saveFilterPreset(tableId: string, preset: FilterPreset): Promise<void> {\n const list = this.filters.get(tableId) ?? [];\n const idx = list.findIndex((p) => p.id === preset.id);\n if (idx >= 0) {\n list[idx] = preset;\n } else {\n list.push(preset);\n }\n this.filters.set(tableId, list);\n }\n\n async deleteFilterPreset(tableId: string, presetId: string): Promise<void> {\n const list = this.filters.get(tableId) ?? [];\n this.filters.set(\n tableId,\n list.filter((p) => p.id !== presetId),\n );\n }\n\n async loadColumnPresets(tableId: string): Promise<ColumnPreset[]> {\n return this.columns.get(tableId) ?? [];\n }\n\n async saveColumnPreset(tableId: string, preset: ColumnPreset): Promise<void> {\n const list = this.columns.get(tableId) ?? [];\n const idx = list.findIndex((p) => p.id === preset.id);\n if (idx >= 0) {\n list[idx] = preset;\n } else {\n list.push(preset);\n }\n this.columns.set(tableId, list);\n }\n\n async deleteColumnPreset(tableId: string, presetId: string): Promise<void> {\n const list = this.columns.get(tableId) ?? [];\n this.columns.set(\n tableId,\n list.filter((p) => p.id !== presetId),\n );\n }\n\n async loadActivePresets(tableId: string): Promise<ActivePresets> {\n return this.active.get(tableId) ?? {};\n }\n\n async saveActivePresets(tableId: string, active: ActivePresets): Promise<void> {\n this.active.set(tableId, active);\n }\n}\n","/**\n * table/presets/zustand-adapter.ts\n *\n * Zustand-backed storage adapter with persist middleware.\n * Supports localStorage, sessionStorage, or IndexedDB.\n * Emits change events locally and syncs across tabs via storage events.\n */\nimport { createStore, type StoreApi } from \"zustand\";\nimport { persist, type PersistStorage } from \"zustand/middleware\";\nimport type { TableStorageAdapter } from \"./storage\";\nimport type {\n FilterPreset,\n ColumnPreset,\n ActivePresets,\n PresetChangeEvent,\n UnsubscribeFn,\n} from \"./types\";\n\ninterface ZustandPresetState {\n tables: Record<\n string,\n {\n filters: FilterPreset[];\n columns: ColumnPreset[];\n active: ActivePresets;\n }\n >;\n}\n\nexport interface ZustandAdapterOptions {\n storageKey?: string;\n storage?: PersistStorage<ZustandPresetState>;\n}\n\nexport class ZustandPersistAdapter implements TableStorageAdapter {\n private store: StoreApi<ZustandPresetState>;\n private listeners = new Map<string, Set<(event: PresetChangeEvent) => void>>();\n\n constructor(options: ZustandAdapterOptions = {}) {\n const storageKey = options.storageKey ?? \"prometheus-table-presets\";\n\n this.store = createStore<ZustandPresetState>()(\n persist(\n () => ({ tables: {} }),\n {\n name: storageKey,\n storage: options.storage,\n },\n ),\n );\n\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"storage\", (e) => {\n if (e.key === storageKey && e.newValue) {\n try {\n const parsed = JSON.parse(e.newValue) as { state: ZustandPresetState };\n if (parsed.state) {\n this.store.setState(parsed.state);\n for (const [tableId, callbacks] of this.listeners) {\n for (const cb of callbacks) {\n cb({\n tableId,\n presetType: \"filter\",\n presetId: \"\",\n operation: \"updated\",\n source: \"remote\",\n timestamp: Date.now(),\n });\n }\n }\n }\n } catch {\n // ignore parse errors from external storage changes\n }\n }\n });\n }\n }\n\n private getTable(tableId: string) {\n return (\n this.store.getState().tables[tableId] ?? {\n filters: [],\n columns: [],\n active: {},\n }\n );\n }\n\n private setTable(\n tableId: string,\n updater: (\n prev: { filters: FilterPreset[]; columns: ColumnPreset[]; active: ActivePresets },\n ) => { filters: FilterPreset[]; columns: ColumnPreset[]; active: ActivePresets },\n ) {\n this.store.setState((state) => ({\n tables: {\n ...state.tables,\n [tableId]: updater(\n state.tables[tableId] ?? { filters: [], columns: [], active: {} },\n ),\n },\n }));\n }\n\n private emit(event: PresetChangeEvent) {\n const callbacks = this.listeners.get(event.tableId);\n if (callbacks) {\n for (const cb of callbacks) cb(event);\n }\n }\n\n async loadFilterPresets(tableId: string): Promise<FilterPreset[]> {\n return this.getTable(tableId).filters;\n }\n\n async saveFilterPreset(tableId: string, preset: FilterPreset): Promise<void> {\n this.setTable(tableId, (prev) => {\n const idx = prev.filters.findIndex((p) => p.id === preset.id);\n const filters = [...prev.filters];\n if (idx >= 0) filters[idx] = preset;\n else filters.push(preset);\n return { ...prev, filters };\n });\n this.emit({\n tableId,\n presetType: \"filter\",\n presetId: preset.id,\n operation: this.getTable(tableId).filters.some((p) => p.id === preset.id)\n ? \"updated\"\n : \"created\",\n preset,\n source: \"local\",\n timestamp: Date.now(),\n });\n }\n\n async deleteFilterPreset(tableId: string, presetId: string): Promise<void> {\n this.setTable(tableId, (prev) => ({\n ...prev,\n filters: prev.filters.filter((p) => p.id !== presetId),\n }));\n this.emit({\n tableId,\n presetType: \"filter\",\n presetId,\n operation: \"deleted\",\n source: \"local\",\n timestamp: Date.now(),\n });\n }\n\n async loadColumnPresets(tableId: string): Promise<ColumnPreset[]> {\n return this.getTable(tableId).columns;\n }\n\n async saveColumnPreset(tableId: string, preset: ColumnPreset): Promise<void> {\n this.setTable(tableId, (prev) => {\n const idx = prev.columns.findIndex((p) => p.id === preset.id);\n const columns = [...prev.columns];\n if (idx >= 0) columns[idx] = preset;\n else columns.push(preset);\n return { ...prev, columns };\n });\n this.emit({\n tableId,\n presetType: \"column\",\n presetId: preset.id,\n operation: \"updated\",\n preset,\n source: \"local\",\n timestamp: Date.now(),\n });\n }\n\n async deleteColumnPreset(tableId: string, presetId: string): Promise<void> {\n this.setTable(tableId, (prev) => ({\n ...prev,\n columns: prev.columns.filter((p) => p.id !== presetId),\n }));\n this.emit({\n tableId,\n presetType: \"column\",\n presetId,\n operation: \"deleted\",\n source: \"local\",\n timestamp: Date.now(),\n });\n }\n\n async loadActivePresets(tableId: string): Promise<ActivePresets> {\n return this.getTable(tableId).active;\n }\n\n async saveActivePresets(tableId: string, active: ActivePresets): Promise<void> {\n this.setTable(tableId, (prev) => ({ ...prev, active }));\n }\n\n subscribe(\n tableId: string,\n callback: (event: PresetChangeEvent) => void,\n ): UnsubscribeFn {\n if (!this.listeners.has(tableId)) this.listeners.set(tableId, new Set());\n this.listeners.get(tableId)!.add(callback);\n return () => {\n this.listeners.get(tableId)?.delete(callback);\n };\n }\n}\n","/**\n * table/presets/rest-adapter.ts\n *\n * REST API storage adapter with optional polling or SSE for realtime updates.\n * Requires a REST endpoint that stores presets per table ID.\n */\nimport type { TableStorageAdapter } from \"./storage\";\nimport type {\n FilterPreset,\n ColumnPreset,\n ActivePresets,\n PresetChangeEvent,\n UnsubscribeFn,\n} from \"./types\";\n\nexport interface RestAdapterOptions {\n baseUrl: string;\n headers?: Record<string, string> | (() => Record<string, string>);\n pollInterval?: number;\n sseEndpoint?: string;\n}\n\nexport class RestApiAdapter implements TableStorageAdapter {\n private baseUrl: string;\n private headers: Record<string, string> | (() => Record<string, string>);\n private pollInterval?: number;\n private sseEndpoint?: string;\n\n constructor(options: RestAdapterOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n this.headers = options.headers ?? {};\n this.pollInterval = options.pollInterval;\n this.sseEndpoint = options.sseEndpoint;\n }\n\n private getHeaders(): Record<string, string> {\n const h = typeof this.headers === \"function\" ? this.headers() : this.headers;\n return { \"Content-Type\": \"application/json\", ...h };\n }\n\n async loadFilterPresets(tableId: string): Promise<FilterPreset[]> {\n const res = await fetch(\n `${this.baseUrl}/tables/${encodeURIComponent(tableId)}/filter-presets`,\n { headers: this.getHeaders() },\n );\n if (!res.ok) return [];\n return res.json();\n }\n\n async saveFilterPreset(tableId: string, preset: FilterPreset): Promise<void> {\n await fetch(\n `${this.baseUrl}/tables/${encodeURIComponent(tableId)}/filter-presets/${encodeURIComponent(preset.id)}`,\n {\n method: \"PUT\",\n headers: this.getHeaders(),\n body: JSON.stringify(preset),\n },\n );\n }\n\n async deleteFilterPreset(tableId: string, presetId: string): Promise<void> {\n await fetch(\n `${this.baseUrl}/tables/${encodeURIComponent(tableId)}/filter-presets/${encodeURIComponent(presetId)}`,\n { method: \"DELETE\", headers: this.getHeaders() },\n );\n }\n\n async loadColumnPresets(tableId: string): Promise<ColumnPreset[]> {\n const res = await fetch(\n `${this.baseUrl}/tables/${encodeURIComponent(tableId)}/column-presets`,\n { headers: this.getHeaders() },\n );\n if (!res.ok) return [];\n return res.json();\n }\n\n async saveColumnPreset(tableId: string, preset: ColumnPreset): Promise<void> {\n await fetch(\n `${this.baseUrl}/tables/${encodeURIComponent(tableId)}/column-presets/${encodeURIComponent(preset.id)}`,\n {\n method: \"PUT\",\n headers: this.getHeaders(),\n body: JSON.stringify(preset),\n },\n );\n }\n\n async deleteColumnPreset(tableId: string, presetId: string): Promise<void> {\n await fetch(\n `${this.baseUrl}/tables/${encodeURIComponent(tableId)}/column-presets/${encodeURIComponent(presetId)}`,\n { method: \"DELETE\", headers: this.getHeaders() },\n );\n }\n\n async loadActivePresets(tableId: string): Promise<ActivePresets> {\n const res = await fetch(\n `${this.baseUrl}/tables/${encodeURIComponent(tableId)}/active`,\n { headers: this.getHeaders() },\n );\n if (!res.ok) return {};\n return res.json();\n }\n\n async saveActivePresets(tableId: string, active: ActivePresets): Promise<void> {\n await fetch(\n `${this.baseUrl}/tables/${encodeURIComponent(tableId)}/active`,\n {\n method: \"PUT\",\n headers: this.getHeaders(),\n body: JSON.stringify(active),\n },\n );\n }\n\n subscribe(\n tableId: string,\n callback: (event: PresetChangeEvent) => void,\n ): UnsubscribeFn {\n if (this.sseEndpoint) {\n return this.subscribeSSE(tableId, callback);\n }\n if (this.pollInterval) {\n return this.subscribePoll(tableId, callback);\n }\n return () => {};\n }\n\n private subscribeSSE(\n tableId: string,\n callback: (event: PresetChangeEvent) => void,\n ): UnsubscribeFn {\n const url = `${this.sseEndpoint}?tableId=${encodeURIComponent(tableId)}`;\n const source = new EventSource(url);\n\n source.addEventListener(\"preset-change\", (e) => {\n try {\n const event = JSON.parse(e.data) as PresetChangeEvent;\n callback(event);\n } catch {\n // ignore malformed SSE data\n }\n });\n\n return () => source.close();\n }\n\n private subscribePoll(\n tableId: string,\n callback: (event: PresetChangeEvent) => void,\n ): UnsubscribeFn {\n let lastFilterHash = \"\";\n let lastColumnHash = \"\";\n\n const check = async () => {\n const [filters, columns] = await Promise.all([\n this.loadFilterPresets(tableId),\n this.loadColumnPresets(tableId),\n ]);\n\n const filterHash = JSON.stringify(filters);\n const columnHash = JSON.stringify(columns);\n\n if (filterHash !== lastFilterHash && lastFilterHash !== \"\") {\n callback({\n tableId,\n presetType: \"filter\",\n presetId: \"\",\n operation: \"updated\",\n source: \"remote\",\n timestamp: Date.now(),\n });\n }\n if (columnHash !== lastColumnHash && lastColumnHash !== \"\") {\n callback({\n tableId,\n presetType: \"column\",\n presetId: \"\",\n operation: \"updated\",\n source: \"remote\",\n timestamp: Date.now(),\n });\n }\n\n lastFilterHash = filterHash;\n lastColumnHash = columnHash;\n };\n\n void check();\n const interval = setInterval(check, this.pollInterval!);\n return () => clearInterval(interval);\n }\n}\n","/**\n * table/presets/supabase-adapter.ts\n *\n * Supabase Realtime adapter for preset persistence.\n * Subscribes to a `table_presets` table for live changes.\n *\n * Uses type-only imports; the Supabase client is a peer dependency.\n */\nimport type { TableStorageAdapter } from \"./storage\";\nimport type {\n FilterPreset,\n ColumnPreset,\n ActivePresets,\n PresetChangeEvent,\n UnsubscribeFn,\n} from \"./types\";\n\ninterface SupabaseClient {\n from: (table: string) => {\n select: (columns?: string) => {\n eq: (col: string, val: string) => {\n eq: (col: string, val: string) => Promise<{ data: unknown[] | null; error: unknown }>;\n single: () => Promise<{ data: unknown | null; error: unknown }>;\n } & Promise<{ data: unknown[] | null; error: unknown }>;\n };\n upsert: (data: unknown) => Promise<{ error: unknown }>;\n delete: () => {\n eq: (col: string, val: string) => {\n eq: (col: string, val: string) => Promise<{ error: unknown }>;\n };\n };\n };\n channel: (name: string) => {\n on: (\n event: string,\n config: Record<string, unknown>,\n callback: (payload: Record<string, unknown>) => void,\n ) => { subscribe: () => { unsubscribe: () => void } };\n };\n}\n\nexport interface SupabaseAdapterOptions {\n supabaseClient: SupabaseClient;\n tableName?: string;\n userId?: string;\n}\n\nexport class SupabaseRealtimeAdapter implements TableStorageAdapter {\n private client: SupabaseClient;\n private tableName: string;\n private userId: string;\n\n constructor(options: SupabaseAdapterOptions) {\n this.client = options.supabaseClient;\n this.tableName = options.tableName ?? \"table_presets\";\n this.userId = options.userId ?? \"anonymous\";\n }\n\n async loadFilterPresets(tableId: string): Promise<FilterPreset[]> {\n const { data } = await this.client\n .from(this.tableName)\n .select(\"*\")\n .eq(\"table_id\", tableId)\n .eq(\"preset_type\", \"filter\");\n if (!data) return [];\n return (data as Record<string, unknown>[]).map((row) =>\n JSON.parse(row.preset_data as string) as FilterPreset,\n );\n }\n\n async saveFilterPreset(tableId: string, preset: FilterPreset): Promise<void> {\n await this.client.from(this.tableName).upsert({\n id: `${tableId}:filter:${preset.id}`,\n table_id: tableId,\n preset_type: \"filter\",\n preset_id: preset.id,\n preset_data: JSON.stringify(preset),\n user_id: this.userId,\n updated_at: new Date().toISOString(),\n });\n }\n\n async deleteFilterPreset(tableId: string, presetId: string): Promise<void> {\n await this.client\n .from(this.tableName)\n .delete()\n .eq(\"table_id\", tableId)\n .eq(\"preset_id\", presetId);\n }\n\n async loadColumnPresets(tableId: string): Promise<ColumnPreset[]> {\n const { data } = await this.client\n .from(this.tableName)\n .select(\"*\")\n .eq(\"table_id\", tableId)\n .eq(\"preset_type\", \"column\");\n if (!data) return [];\n return (data as Record<string, unknown>[]).map((row) =>\n JSON.parse(row.preset_data as string) as ColumnPreset,\n );\n }\n\n async saveColumnPreset(tableId: string, preset: ColumnPreset): Promise<void> {\n await this.client.from(this.tableName).upsert({\n id: `${tableId}:column:${preset.id}`,\n table_id: tableId,\n preset_type: \"column\",\n preset_id: preset.id,\n preset_data: JSON.stringify(preset),\n user_id: this.userId,\n updated_at: new Date().toISOString(),\n });\n }\n\n async deleteColumnPreset(tableId: string, presetId: string): Promise<void> {\n await this.client\n .from(this.tableName)\n .delete()\n .eq(\"table_id\", tableId)\n .eq(\"preset_id\", presetId);\n }\n\n async loadActivePresets(tableId: string): Promise<ActivePresets> {\n const result = await this.client\n .from(this.tableName)\n .select(\"preset_data\")\n .eq(\"table_id\", tableId)\n .eq(\"preset_type\", \"active\");\n const data = result.data;\n if (!data || data.length === 0) return {};\n return JSON.parse((data[0] as Record<string, string>).preset_data) as ActivePresets;\n }\n\n async saveActivePresets(tableId: string, active: ActivePresets): Promise<void> {\n await this.client.from(this.tableName).upsert({\n id: `${tableId}:active`,\n table_id: tableId,\n preset_type: \"active\",\n preset_id: \"active\",\n preset_data: JSON.stringify(active),\n user_id: this.userId,\n updated_at: new Date().toISOString(),\n });\n }\n\n subscribe(\n tableId: string,\n callback: (event: PresetChangeEvent) => void,\n ): UnsubscribeFn {\n const subscription = this.client\n .channel(`table-presets:${tableId}`)\n .on(\n \"postgres_changes\",\n {\n event: \"*\",\n schema: \"public\",\n table: this.tableName,\n filter: `table_id=eq.${tableId}`,\n },\n (payload) => {\n const row = (payload.new ?? payload.old ?? {}) as Record<string, string>;\n const presetType = row.preset_type as \"filter\" | \"column\";\n if (presetType !== \"filter\" && presetType !== \"column\") return;\n\n const eventType = payload.eventType as string;\n let operation: PresetChangeEvent[\"operation\"] = \"updated\";\n if (eventType === \"INSERT\") operation = \"created\";\n else if (eventType === \"DELETE\") operation = \"deleted\";\n\n let preset: FilterPreset | ColumnPreset | undefined;\n try {\n if (row.preset_data) {\n preset = JSON.parse(row.preset_data);\n }\n } catch {\n // ignore parse errors\n }\n\n callback({\n tableId,\n presetType,\n presetId: row.preset_id ?? \"\",\n operation,\n preset,\n source: \"remote\",\n timestamp: Date.now(),\n });\n },\n )\n .subscribe();\n\n return () => subscription.unsubscribe();\n }\n}\n","/**\n * table/presets/electricsql-adapter.ts\n *\n * ElectricSQL / PGlite adapter for local-first preset persistence.\n * Uses type-only imports; PGlite is a peer/optional dependency.\n */\nimport type { TableStorageAdapter } from \"./storage\";\nimport type {\n FilterPreset,\n ColumnPreset,\n ActivePresets,\n PresetChangeEvent,\n UnsubscribeFn,\n} from \"./types\";\n\ninterface PGliteInstance {\n query: <T = Record<string, unknown>>(\n sql: string,\n params?: unknown[],\n ) => Promise<{ rows: T[] }>;\n exec: (sql: string) => Promise<void>;\n listen?: (\n channel: string,\n callback: (payload: string) => void,\n ) => Promise<() => void>;\n}\n\nexport interface ElectricSQLAdapterOptions {\n db: PGliteInstance;\n tableName?: string;\n}\n\nexport class ElectricSQLAdapter implements TableStorageAdapter {\n private db: PGliteInstance;\n private tableName: string;\n private initialized = false;\n\n constructor(options: ElectricSQLAdapterOptions) {\n this.db = options.db;\n this.tableName = options.tableName ?? \"table_presets\";\n }\n\n private async ensureTable() {\n if (this.initialized) return;\n await this.db.exec(`\n CREATE TABLE IF NOT EXISTS ${this.tableName} (\n id TEXT PRIMARY KEY,\n table_id TEXT NOT NULL,\n preset_type TEXT NOT NULL,\n preset_id TEXT NOT NULL,\n preset_data TEXT NOT NULL,\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n );\n CREATE INDEX IF NOT EXISTS idx_${this.tableName}_table_type\n ON ${this.tableName}(table_id, preset_type);\n `);\n this.initialized = true;\n }\n\n private makeId(tableId: string, presetType: string, presetId: string): string {\n return `${tableId}:${presetType}:${presetId}`;\n }\n\n async loadFilterPresets(tableId: string): Promise<FilterPreset[]> {\n await this.ensureTable();\n const { rows } = await this.db.query<{ preset_data: string }>(\n `SELECT preset_data FROM ${this.tableName} WHERE table_id = $1 AND preset_type = $2`,\n [tableId, \"filter\"],\n );\n return rows.map((r) => JSON.parse(r.preset_data) as FilterPreset);\n }\n\n async saveFilterPreset(tableId: string, preset: FilterPreset): Promise<void> {\n await this.ensureTable();\n const id = this.makeId(tableId, \"filter\", preset.id);\n await this.db.query(\n `INSERT INTO ${this.tableName} (id, table_id, preset_type, preset_id, preset_data, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT (id) DO UPDATE SET preset_data = $5, updated_at = $6`,\n [id, tableId, \"filter\", preset.id, JSON.stringify(preset), new Date().toISOString()],\n );\n }\n\n async deleteFilterPreset(tableId: string, presetId: string): Promise<void> {\n await this.ensureTable();\n const id = this.makeId(tableId, \"filter\", presetId);\n await this.db.query(`DELETE FROM ${this.tableName} WHERE id = $1`, [id]);\n }\n\n async loadColumnPresets(tableId: string): Promise<ColumnPreset[]> {\n await this.ensureTable();\n const { rows } = await this.db.query<{ preset_data: string }>(\n `SELECT preset_data FROM ${this.tableName} WHERE table_id = $1 AND preset_type = $2`,\n [tableId, \"column\"],\n );\n return rows.map((r) => JSON.parse(r.preset_data) as ColumnPreset);\n }\n\n async saveColumnPreset(tableId: string, preset: ColumnPreset): Promise<void> {\n await this.ensureTable();\n const id = this.makeId(tableId, \"column\", preset.id);\n await this.db.query(\n `INSERT INTO ${this.tableName} (id, table_id, preset_type, preset_id, preset_data, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT (id) DO UPDATE SET preset_data = $5, updated_at = $6`,\n [id, tableId, \"column\", preset.id, JSON.stringify(preset), new Date().toISOString()],\n );\n }\n\n async deleteColumnPreset(tableId: string, presetId: string): Promise<void> {\n await this.ensureTable();\n const id = this.makeId(tableId, \"column\", presetId);\n await this.db.query(`DELETE FROM ${this.tableName} WHERE id = $1`, [id]);\n }\n\n async loadActivePresets(tableId: string): Promise<ActivePresets> {\n await this.ensureTable();\n const id = this.makeId(tableId, \"active\", \"active\");\n const { rows } = await this.db.query<{ preset_data: string }>(\n `SELECT preset_data FROM ${this.tableName} WHERE id = $1`,\n [id],\n );\n if (rows.length === 0) return {};\n return JSON.parse(rows[0].preset_data) as ActivePresets;\n }\n\n async saveActivePresets(tableId: string, active: ActivePresets): Promise<void> {\n await this.ensureTable();\n const id = this.makeId(tableId, \"active\", \"active\");\n await this.db.query(\n `INSERT INTO ${this.tableName} (id, table_id, preset_type, preset_id, preset_data, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT (id) DO UPDATE SET preset_data = $5, updated_at = $6`,\n [id, tableId, \"active\", \"active\", JSON.stringify(active), new Date().toISOString()],\n );\n }\n\n subscribe(\n tableId: string,\n callback: (event: PresetChangeEvent) => void,\n ): UnsubscribeFn {\n if (!this.db.listen) return () => {};\n\n let unsub: (() => void) | null = null;\n\n this.db\n .listen!(`preset_change_${tableId}`, (payload) => {\n try {\n const event = JSON.parse(payload) as PresetChangeEvent;\n callback({ ...event, source: \"remote\" });\n } catch {\n // ignore parse errors\n }\n })\n .then((fn) => {\n unsub = fn;\n });\n\n return () => unsub?.();\n }\n}\n","/**\n * table/presets/use-table-presets.ts\n *\n * Hook for loading, saving, and applying presets with realtime sync.\n */\nimport { useEffect, useRef, useState, useCallback, useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport type { ViewMode } from \"../types\";\nimport type {\n FilterPreset,\n ColumnPreset,\n PresetChangeEvent,\n} from \"./types\";\nimport type { TableStorageAdapter } from \"./storage\";\nimport { createPresetStore, type PresetStoreState } from \"./preset-store\";\nimport { MemoryAdapter } from \"./memory-adapter\";\n\nexport interface UseTablePresetsOptions {\n adapter?: TableStorageAdapter;\n realtimeMode?: \"auto-apply\" | \"notify\";\n enabled?: boolean;\n}\n\nexport interface UseTablePresetsResult {\n filterPresets: FilterPreset[];\n columnPresets: ColumnPreset[];\n activeFilterPreset: FilterPreset | null;\n activeColumnPreset: ColumnPreset | null;\n activeViewMode: ViewMode;\n pendingChanges: PresetChangeEvent[];\n\n applyFilterPreset: (id: string | null) => void;\n applyColumnPreset: (id: string | null) => void;\n setViewMode: (mode: ViewMode) => void;\n\n saveFilterPreset: (\n preset: Omit<FilterPreset, \"id\" | \"createdAt\" | \"updatedAt\">,\n ) => Promise<void>;\n updateFilterPreset: (\n id: string,\n patch: Partial<FilterPreset>,\n ) => Promise<void>;\n saveColumnPreset: (\n preset: Omit<ColumnPreset, \"id\" | \"createdAt\" | \"updatedAt\">,\n ) => Promise<void>;\n updateColumnPreset: (\n id: string,\n patch: Partial<ColumnPreset>,\n ) => Promise<void>;\n deleteFilterPreset: (id: string) => Promise<void>;\n deleteColumnPreset: (id: string) => Promise<void>;\n\n acknowledgePendingChange: (index: number) => void;\n dismissPendingChanges: () => void;\n\n isLoading: boolean;\n isSubscribed: boolean;\n}\n\nlet nextId = 0;\nfunction generateId(): string {\n return `preset_${Date.now()}_${++nextId}`;\n}\n\nexport function useTablePresets(\n tableId: string,\n options: UseTablePresetsOptions = {},\n): UseTablePresetsResult {\n const { adapter, realtimeMode = \"auto-apply\", enabled = true } = options;\n\n const resolvedAdapter: TableStorageAdapter = adapter ?? new MemoryAdapter();\n const adapterRef = useRef<TableStorageAdapter>(resolvedAdapter);\n adapterRef.current = resolvedAdapter;\n\n const storeRef = useRef(createPresetStore(realtimeMode));\n const store = storeRef.current;\n\n const [isLoading, setIsLoading] = useState(false);\n const [isSubscribed, setIsSubscribed] = useState(false);\n\n // Load presets on mount\n useEffect(() => {\n if (!enabled) return;\n setIsLoading(true);\n store\n .getState()\n .loadPresets(tableId, adapterRef.current)\n .finally(() => setIsLoading(false));\n }, [tableId, enabled, store]);\n\n // Subscribe to realtime changes\n useEffect(() => {\n if (!enabled) return;\n const currentAdapter = adapterRef.current;\n if (!currentAdapter.subscribe) {\n setIsSubscribed(false);\n return;\n }\n const unsub = currentAdapter.subscribe(tableId, (event: PresetChangeEvent) => {\n store.getState().handleRemoteChange(event, currentAdapter);\n });\n setIsSubscribed(true);\n return () => unsub();\n }, [tableId, enabled, store]);\n\n const slice = useStore(store, (s) => s.presets[tableId] ?? s.getTablePresets(tableId));\n const allPendingChanges = useStore(store, (s) => s.pendingChanges);\n const pendingChanges = useMemo(\n () => allPendingChanges.filter((e) => e.tableId === tableId),\n [allPendingChanges, tableId],\n );\n\n const activeFilterPreset = useMemo(\n () => slice.filters.find((p) => p.id === slice.activeFilterId) ?? null,\n [slice.filters, slice.activeFilterId],\n );\n\n const activeColumnPreset = useMemo(\n () => slice.columns.find((p) => p.id === slice.activeColumnId) ?? null,\n [slice.columns, slice.activeColumnId],\n );\n\n const applyFilterPreset = useCallback(\n (id: string | null) => {\n store.getState().applyFilterPreset(tableId, id);\n adapterRef.current.saveActivePresets(tableId, {\n filterId: id ?? undefined,\n columnId: slice.activeColumnId ?? undefined,\n viewMode: slice.activeViewMode,\n });\n },\n [tableId, slice.activeColumnId, slice.activeViewMode, store],\n );\n\n const applyColumnPreset = useCallback(\n (id: string | null) => {\n store.getState().applyColumnPreset(tableId, id);\n adapterRef.current.saveActivePresets(tableId, {\n filterId: slice.activeFilterId ?? undefined,\n columnId: id ?? undefined,\n viewMode: slice.activeViewMode,\n });\n },\n [tableId, slice.activeFilterId, slice.activeViewMode, store],\n );\n\n const setViewMode = useCallback(\n (mode: ViewMode) => {\n store.getState().setViewMode(tableId, mode);\n adapterRef.current.saveActivePresets(tableId, {\n filterId: slice.activeFilterId ?? undefined,\n columnId: slice.activeColumnId ?? undefined,\n viewMode: mode,\n });\n },\n [tableId, slice.activeFilterId, slice.activeColumnId, store],\n );\n\n const saveFilterPreset = useCallback(\n async (preset: Omit<FilterPreset, \"id\" | \"createdAt\" | \"updatedAt\">) => {\n const now = new Date().toISOString();\n const full: FilterPreset = {\n ...preset,\n id: generateId(),\n createdAt: now,\n updatedAt: now,\n };\n await store.getState().saveFilterPreset(tableId, full, adapterRef.current);\n },\n [tableId, store],\n );\n\n const updateFilterPreset = useCallback(\n async (id: string, patch: Partial<FilterPreset>) => {\n const existing = slice.filters.find((p) => p.id === id);\n if (!existing) return;\n const updated: FilterPreset = {\n ...existing,\n ...patch,\n id,\n updatedAt: new Date().toISOString(),\n };\n await store.getState().saveFilterPreset(tableId, updated, adapterRef.current);\n },\n [tableId, slice.filters, store],\n );\n\n const saveColumnPreset = useCallback(\n async (preset: Omit<ColumnPreset, \"id\" | \"createdAt\" | \"updatedAt\">) => {\n const now = new Date().toISOString();\n const full: ColumnPreset = {\n ...preset,\n id: generateId(),\n createdAt: now,\n updatedAt: now,\n };\n await store.getState().saveColumnPreset(tableId, full, adapterRef.current);\n },\n [tableId, store],\n );\n\n const updateColumnPreset = useCallback(\n async (id: string, patch: Partial<ColumnPreset>) => {\n const existing = slice.columns.find((p) => p.id === id);\n if (!existing) return;\n const updated: ColumnPreset = {\n ...existing,\n ...patch,\n id,\n updatedAt: new Date().toISOString(),\n };\n await store.getState().saveColumnPreset(tableId, updated, adapterRef.current);\n },\n [tableId, slice.columns, store],\n );\n\n const deleteFilterPreset = useCallback(\n async (id: string) => {\n await store.getState().deleteFilterPreset(tableId, id, adapterRef.current);\n },\n [tableId, store],\n );\n\n const deleteColumnPreset = useCallback(\n async (id: string) => {\n await store.getState().deleteColumnPreset(tableId, id, adapterRef.current);\n },\n [tableId, store],\n );\n\n const acknowledgePendingChange = useCallback(\n (index: number) => {\n store.getState().acknowledgePendingChange(index);\n },\n [store],\n );\n\n const dismissPendingChanges = useCallback(() => {\n store.getState().dismissPendingChanges(tableId);\n }, [tableId, store]);\n\n return {\n filterPresets: slice.filters,\n columnPresets: slice.columns,\n activeFilterPreset,\n activeColumnPreset,\n activeViewMode: slice.activeViewMode,\n pendingChanges,\n\n applyFilterPreset,\n applyColumnPreset,\n setViewMode,\n saveFilterPreset,\n updateFilterPreset,\n saveColumnPreset,\n updateColumnPreset,\n deleteFilterPreset,\n deleteColumnPreset,\n acknowledgePendingChange,\n dismissPendingChanges,\n\n isLoading,\n isSubscribed,\n };\n}\n","/**\n * table/presets/table-storage-provider.tsx\n *\n * React context provider for the default TableStorageAdapter and realtime config.\n * Tables without this provider fall back to MemoryAdapter and \"auto-apply\".\n */\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport type { TableStorageAdapter } from \"./storage\";\nimport { MemoryAdapter } from \"./memory-adapter\";\n\ninterface TableStorageContextValue {\n adapter: TableStorageAdapter;\n realtimeMode: \"auto-apply\" | \"notify\";\n}\n\nconst TableStorageContext = createContext<TableStorageContextValue>({\n adapter: new MemoryAdapter(),\n realtimeMode: \"auto-apply\",\n});\n\nexport interface TableStorageProviderProps {\n adapter: TableStorageAdapter;\n realtimeMode?: \"auto-apply\" | \"notify\";\n children: React.ReactNode;\n}\n\nexport function TableStorageProvider({\n adapter,\n realtimeMode = \"auto-apply\",\n children,\n}: TableStorageProviderProps) {\n const value = useMemo(\n () => ({ adapter, realtimeMode }),\n [adapter, realtimeMode],\n );\n return (\n <TableStorageContext.Provider value={value}>\n {children}\n </TableStorageContext.Provider>\n );\n}\n\nexport function useTableStorageAdapter(): TableStorageAdapter {\n return useContext(TableStorageContext).adapter;\n}\n\nexport function useTableRealtimeMode(): \"auto-apply\" | \"notify\" {\n return useContext(TableStorageContext).realtimeMode;\n}\n","/**\n * ui/table-primitives.tsx\n *\n * shadcn/ui-style table primitives — thin wrappers around HTML table\n * elements with Tailwind semantic classes.\n */\nimport React from \"react\";\nimport { cn } from \"./utils\";\n\nexport const Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n));\nTable.displayName = \"Table\";\n\nexport const TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"bg-muted/60\", className)} {...props} />\n));\nTableHeader.displayName = \"TableHeader\";\n\nexport const TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"bg-background\", className)} {...props} />\n));\nTableBody.displayName = \"TableBody\";\n\nexport const TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\"bg-muted/50 font-medium\", className)}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\nexport const TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"transition-colors hover:bg-muted/30 data-[state=selected]:bg-primary/10\",\n className,\n )}\n {...props}\n />\n));\nTableRow.displayName = \"TableRow\";\n\nexport const TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-10 px-3 text-left align-middle text-xs font-semibold uppercase tracking-wide text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = \"TableHead\";\n\nexport const TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"px-3 py-2.5 align-middle text-sm [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n));\nTableCell.displayName = \"TableCell\";\n\nexport const TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n","/**\n * ui/data-table-column-header.tsx\n *\n * Sortable table column header with sort indicators.\n */\nimport type { Column } from \"../table/types\";\nimport { cn } from \"./utils\";\n\ninterface DataTableColumnHeaderProps<TData> {\n column: Column<TData>;\n title: string;\n className?: string;\n}\n\nexport function DataTableColumnHeader<TData>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>;\n }\n\n const sorted = column.getIsSorted();\n\n return (\n <button\n type=\"button\"\n className={cn(\n \"flex items-center gap-1 -ml-2 px-2 py-1.5 rounded-lg hover:bg-muted/60 text-left font-semibold transition-colors\",\n className,\n )}\n onClick={(e) => column.toggleSorting(undefined, e.shiftKey)}\n >\n <span>{title}</span>\n <span className=\"ml-1 flex flex-col text-xs leading-none\">\n {sorted === \"asc\" ? (\n <SortAscIcon className=\"h-3.5 w-3.5\" />\n ) : sorted === \"desc\" ? (\n <SortDescIcon className=\"h-3.5 w-3.5\" />\n ) : (\n <SortNoneIcon className=\"h-3.5 w-3.5 text-muted-foreground/50\" />\n )}\n </span>\n {column.getSortIndex() >= 0 && (\n <span className=\"ml-0.5 text-[10px] text-muted-foreground tabular-nums\">\n {column.getSortIndex() + 1}\n </span>\n )}\n </button>\n );\n}\n\nfunction SortAscIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" className={className} aria-hidden>\n <title>Sorted ascending</title>\n <path fillRule=\"evenodd\" d=\"M8 3.5a.5.5 0 01.354.146l3.5 3.5a.5.5 0 11-.708.708L8 4.707 4.854 7.854a.5.5 0 11-.708-.708l3.5-3.5A.5.5 0 018 3.5z\" />\n </svg>\n );\n}\n\nfunction SortDescIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" className={className} aria-hidden>\n <title>Sorted descending</title>\n <path fillRule=\"evenodd\" d=\"M8 12.5a.5.5 0 01-.354-.146l-3.5-3.5a.5.5 0 11.708-.708L8 11.293l3.146-3.147a.5.5 0 11.708.708l-3.5 3.5A.5.5 0 018 12.5z\" />\n </svg>\n );\n}\n\nfunction SortNoneIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" className={className} aria-hidden>\n <title>Not sorted</title>\n <path d=\"M8 3.5a.5.5 0 01.354.146l2.5 2.5a.5.5 0 11-.708.708L8 4.707 5.854 6.854a.5.5 0 11-.708-.708l2.5-2.5A.5.5 0 018 3.5z\" />\n <path d=\"M8 12.5a.5.5 0 01-.354-.146l-2.5-2.5a.5.5 0 11.708-.708L8 11.293l2.146-2.147a.5.5 0 11.708.708l-2.5 2.5A.5.5 0 018 12.5z\" />\n </svg>\n );\n}\n","/**\n * ui/inline-editor.tsx\n *\n * Shared inline editing primitives:\n * - InlineCellEditor: for table cells (double-click to edit)\n * - InlineItemEditor: expand-in-place form for gallery/list items\n */\nimport {\n useState,\n useRef,\n useEffect,\n useCallback,\n useId,\n} from \"react\";\nimport type { KeyboardEvent } from \"react\";\nimport type { ColumnDef, ItemDescriptor } from \"../table/types\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// InlineCellEditor — table cell inline editing\n// ---------------------------------------------------------------------------\ninterface InlineCellEditorProps<TData> {\n value: unknown;\n columnDef: ColumnDef<TData>;\n onSave: (value: unknown) => void;\n onCancel: () => void;\n className?: string;\n /** Associates the control with a `<label htmlFor>` in parent forms. */\n inputId?: string;\n /** Accessible name for the control (required when used without a visible label). */\n ariaLabel?: string;\n}\n\nexport function InlineCellEditor<TData>({\n value: initialValue,\n columnDef,\n onSave,\n onCancel,\n className,\n inputId,\n ariaLabel,\n}: InlineCellEditorProps<TData>) {\n const [value, setValue] = useState<unknown>(initialValue);\n const inputRef = useRef<HTMLInputElement>(null);\n const selectRef = useRef<HTMLSelectElement>(null);\n const filterType = columnDef.meta?.entityMeta?.filterType ?? \"text\";\n\n useEffect(() => {\n if (filterType === \"enum\") {\n selectRef.current?.focus();\n return;\n }\n if (filterType === \"boolean\") return;\n inputRef.current?.focus();\n inputRef.current?.select();\n }, [filterType]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n onSave(value);\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n }\n },\n [value, onSave, onCancel],\n );\n\n const handleBlur = useCallback(() => {\n onSave(value);\n }, [value, onSave]);\n\n if (filterType === \"boolean\") {\n return (\n <div className={cn(\"flex items-center\", className)}>\n <input\n id={inputId}\n type=\"checkbox\"\n checked={!!value}\n onChange={(e) => {\n setValue(e.target.checked);\n onSave(e.target.checked);\n }}\n className=\"h-4 w-4 rounded border-primary text-primary focus:ring-ring\"\n aria-label={ariaLabel ?? \"Edit boolean value\"}\n />\n </div>\n );\n }\n\n if (filterType === \"enum\") {\n const options = columnDef.meta?.entityMeta?.enumOptions ?? [];\n return (\n <select\n ref={selectRef}\n id={inputId}\n value={String(value ?? \"\")}\n onChange={(e) => {\n setValue(e.target.value);\n onSave(e.target.value);\n }}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className={cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 text-sm\",\n className,\n )}\n aria-label={ariaLabel ?? \"Select value\"}\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n );\n }\n\n if (filterType === \"number\") {\n return (\n <input\n ref={inputRef}\n id={inputId}\n type=\"number\"\n value={value != null ? String(value) : \"\"}\n onChange={(e) => setValue(e.target.value === \"\" ? null : Number(e.target.value))}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className={cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 text-sm\",\n className,\n )}\n aria-label={ariaLabel ?? \"Edit number\"}\n placeholder=\"0\"\n />\n );\n }\n\n if (filterType === \"date\" || filterType === \"dateRange\") {\n return (\n <input\n ref={inputRef}\n id={inputId}\n type=\"date\"\n value={value != null ? String(value) : \"\"}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className={cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 text-sm\",\n className,\n )}\n aria-label={ariaLabel ?? \"Edit date\"}\n />\n );\n }\n\n return (\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n value={value != null ? String(value) : \"\"}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className={cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 text-sm\",\n className,\n )}\n aria-label={ariaLabel ?? \"Edit text\"}\n placeholder=\"Value\"\n />\n );\n}\n\n// ---------------------------------------------------------------------------\n// InlineItemEditor — expand-in-place form for gallery/list items\n// ---------------------------------------------------------------------------\ninterface InlineItemEditorProps<TData extends Record<string, unknown>> {\n item: TData;\n columns: ColumnDef<TData>[];\n itemDescriptor?: ItemDescriptor<TData>;\n onSave: (changes: Partial<TData>) => void;\n onCancel: () => void;\n className?: string;\n}\n\nexport function InlineItemEditor<TData extends Record<string, unknown>>({\n item,\n columns,\n itemDescriptor: _itemDescriptor,\n onSave,\n onCancel,\n className,\n}: InlineItemEditorProps<TData>) {\n const baseId = useId();\n const [editValues, setEditValues] = useState<Record<string, unknown>>({});\n\n const editableFields = columns.filter(\n (c) => c.meta?.entityMeta?.editable && c.accessorKey,\n );\n\n function updateField(field: string, value: unknown) {\n setEditValues((prev) => ({ ...prev, [field]: value }));\n }\n\n function handleSave() {\n const changes: Partial<TData> = {};\n for (const [key, val] of Object.entries(editValues)) {\n (changes as Record<string, unknown>)[key] = val;\n }\n onSave(changes);\n }\n\n return (\n <div\n className={cn(\n \"space-y-3 rounded-md border bg-muted/30 p-4 animate-in slide-in-from-top-2 duration-200\",\n className,\n )}\n >\n {editableFields.map((col) => {\n const key = col.accessorKey as string;\n const label =\n typeof col.header === \"string\" ? col.header : key;\n const currentValue = key in editValues ? editValues[key] : item[key];\n const fieldId = `${baseId}-${key}`;\n\n return (\n <div key={key} className=\"space-y-1\">\n <label htmlFor={fieldId} className=\"text-xs font-medium text-muted-foreground\">\n {label}\n </label>\n <InlineCellEditor\n value={currentValue}\n columnDef={col}\n onSave={(v) => updateField(key, v)}\n onCancel={() => {}}\n inputId={fieldId}\n ariaLabel={label}\n />\n </div>\n );\n })}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"inline-flex h-8 items-center rounded-md border border-input bg-background px-3 text-xs font-medium hover:bg-accent\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n className=\"inline-flex h-8 items-center rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground hover:bg-primary/90\"\n >\n Save\n </button>\n </div>\n </div>\n );\n}\n","/**\n * ui/action-column.tsx\n *\n * ActionDef system with built-in CRUD action helpers.\n * Renders as a dropdown menu in table rows, icon buttons in gallery\n * cards and list items.\n */\nimport { useState, useRef, useEffect } from \"react\";\nimport type { ActionDef } from \"../table/types\";\nimport { cn } from \"./utils\";\n\n// ---------------------------------------------------------------------------\n// Built-in action helpers\n// ---------------------------------------------------------------------------\nexport function viewAction<T>(opts: {\n onClick: (item: T) => void;\n label?: string;\n}): ActionDef<T> {\n return {\n id: \"view\",\n label: opts.label ?? \"View\",\n icon: EyeIcon,\n onClick: opts.onClick,\n variant: \"ghost\",\n };\n}\n\nexport function editAction<T>(opts: {\n onClick: (item: T) => void;\n label?: string;\n}): ActionDef<T> {\n return {\n id: \"edit\",\n label: opts.label ?? \"Edit\",\n icon: PencilIcon,\n onClick: opts.onClick,\n variant: \"ghost\",\n };\n}\n\nexport function deleteAction<T>(opts: {\n onClick: (item: T) => void;\n label?: string;\n confirm?: string;\n}): ActionDef<T> {\n return {\n id: \"delete\",\n label: opts.label ?? \"Delete\",\n icon: TrashIcon,\n onClick: opts.onClick,\n destructive: true,\n confirm: opts.confirm ?? \"Are you sure you want to delete this item?\",\n variant: \"destructive\",\n };\n}\n\n// ---------------------------------------------------------------------------\n// Action dropdown (for table rows)\n// ---------------------------------------------------------------------------\ninterface ActionDropdownProps<T> {\n item: T;\n actions: ActionDef<T>[];\n className?: string;\n}\n\nexport function ActionDropdown<T>({\n item,\n actions,\n className,\n}: ActionDropdownProps<T>) {\n const [isOpen, setIsOpen] = useState(false);\n const [confirmAction, setConfirmAction] = useState<ActionDef<T> | null>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const visibleActions = actions.filter((a) => !a.hidden?.(item));\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setIsOpen(false);\n }\n }\n if (isOpen) document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [isOpen]);\n\n if (visibleActions.length === 0) return null;\n\n function executeAction(action: ActionDef<T>) {\n if (action.confirm) {\n setConfirmAction(action);\n setIsOpen(false);\n return;\n }\n action.onClick(item);\n setIsOpen(false);\n }\n\n return (\n <div className={cn(\"relative inline-block\", className)} ref={menuRef}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent text-muted-foreground\"\n >\n <MoreIcon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Actions</span>\n </button>\n\n {isOpen && (\n <div className=\"absolute right-0 z-50 mt-1 min-w-[160px] rounded-md border bg-popover py-1 shadow-md\">\n {visibleActions.map((action) => (\n <button\n key={action.id}\n type=\"button\"\n disabled={action.disabled?.(item)}\n onClick={() => executeAction(action)}\n className={cn(\n \"flex w-full items-center gap-2 px-3 py-1.5 text-sm hover:bg-accent disabled:pointer-events-none disabled:opacity-50\",\n action.destructive && \"text-destructive hover:text-destructive\",\n )}\n >\n {action.icon && <action.icon className=\"h-4 w-4\" />}\n {action.label}\n </button>\n ))}\n </div>\n )}\n\n {confirmAction && (\n <ConfirmDialog\n message={\n typeof confirmAction.confirm === \"function\"\n ? confirmAction.confirm(item)\n : (confirmAction.confirm as string)\n }\n destructive={confirmAction.destructive}\n onConfirm={() => {\n confirmAction.onClick(item);\n setConfirmAction(null);\n }}\n onCancel={() => setConfirmAction(null)}\n />\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Action button row (for gallery cards and list items)\n// ---------------------------------------------------------------------------\ninterface ActionButtonRowProps<T> {\n item: T;\n actions: ActionDef<T>[];\n maxVisible?: number;\n className?: string;\n}\n\nexport function ActionButtonRow<T>({\n item,\n actions,\n maxVisible = 2,\n className,\n}: ActionButtonRowProps<T>) {\n const visibleActions = actions.filter((a) => !a.hidden?.(item));\n const inline = visibleActions.slice(0, maxVisible);\n const overflow = visibleActions.slice(maxVisible);\n const [confirmAction, setConfirmAction] = useState<ActionDef<T> | null>(null);\n\n function executeAction(action: ActionDef<T>) {\n if (action.confirm) {\n setConfirmAction(action);\n return;\n }\n action.onClick(item);\n }\n\n return (\n <div className={cn(\"flex items-center gap-1\", className)}>\n {inline.map((action) => (\n <button\n key={action.id}\n type=\"button\"\n onClick={() => executeAction(action)}\n disabled={action.disabled?.(item)}\n aria-label={action.label}\n title={action.label}\n className={cn(\n \"inline-flex h-7 w-7 items-center justify-center rounded-md hover:bg-accent disabled:pointer-events-none disabled:opacity-50\",\n action.destructive && \"text-destructive hover:text-destructive\",\n )}\n >\n {action.icon && <action.icon className=\"h-3.5 w-3.5\" />}\n </button>\n ))}\n\n {overflow.length > 0 && (\n <ActionDropdown item={item} actions={overflow} />\n )}\n\n {confirmAction && (\n <ConfirmDialog\n message={\n typeof confirmAction.confirm === \"function\"\n ? confirmAction.confirm(item)\n : (confirmAction.confirm as string)\n }\n destructive={confirmAction.destructive}\n onConfirm={() => {\n confirmAction.onClick(item);\n setConfirmAction(null);\n }}\n onCancel={() => setConfirmAction(null)}\n />\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Confirm dialog\n// ---------------------------------------------------------------------------\nfunction ConfirmDialog({\n message,\n destructive,\n onConfirm,\n onCancel,\n}: {\n message: string;\n destructive?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n}) {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\">\n <div className=\"w-full max-w-sm rounded-lg border bg-background p-6 shadow-lg\">\n <p className=\"text-sm\">{message}</p>\n <div className=\"mt-4 flex justify-end gap-2\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"inline-flex h-9 items-center rounded-md border border-input bg-background px-4 text-sm font-medium hover:bg-accent\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={onConfirm}\n className={cn(\n \"inline-flex h-9 items-center rounded-md px-4 text-sm font-medium text-white\",\n destructive\n ? \"bg-destructive hover:bg-destructive/90\"\n : \"bg-primary hover:bg-primary/90\",\n )}\n >\n Confirm\n </button>\n </div>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Icons\n// ---------------------------------------------------------------------------\nfunction MoreIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <title>More actions</title>\n <circle cx=\"12\" cy=\"12\" r=\"1\" /><circle cx=\"12\" cy=\"5\" r=\"1\" /><circle cx=\"12\" cy=\"19\" r=\"1\" />\n </svg>\n );\n}\n\nfunction EyeIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <title>View</title>\n <path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\" /><circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction PencilIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <title>Edit</title>\n <path d=\"M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n </svg>\n );\n}\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <title>Delete</title>\n <path d=\"M3 6h18\" /><path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" /><path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n );\n}\n","/**\n * ui/data-table.tsx\n *\n * Table-mode renderer using shadcn/ui primitives.\n * Supports inline cell editing, row selection, action columns,\n * column resize handles, and pinned column positioning.\n */\nimport { useState, useCallback } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type { TableInstance, Row, ActionDef, ColumnDef } from \"../table/types\";\nimport type { SelectionStoreState } from \"../table/selection-store\";\nimport { useSelectionStore, selectionStorePlaceholder } from \"../table/selection-store\";\nimport {\n Table,\n TableHeader,\n TableBody,\n TableRow,\n TableHead,\n TableCell,\n} from \"./table-primitives\";\nimport { DataTableColumnHeader } from \"./data-table-column-header\";\nimport { InlineCellEditor } from \"./inline-editor\";\nimport { ActionDropdown } from \"./action-column\";\nimport { cn } from \"./utils\";\n\ninterface DataTableProps<TData extends Record<string, unknown>> {\n table: TableInstance<TData>;\n actions?: ActionDef<TData>[];\n enableInlineEdit?: boolean;\n onInlineSave?: (item: TData, field: string, value: unknown) => void | Promise<void>;\n selectionStore?: StoreApi<SelectionStoreState>;\n enableMultiSelect?: boolean;\n getRowId?: (row: TData) => string;\n className?: string;\n}\n\nexport function DataTable<TData extends Record<string, unknown>>({\n table,\n actions,\n enableInlineEdit,\n onInlineSave,\n selectionStore,\n enableMultiSelect,\n getRowId,\n className,\n}: DataTableProps<TData>) {\n const [editingCell, setEditingCell] = useState<{\n rowId: string;\n columnId: string;\n } | null>(null);\n\n const headerGroups = table.getHeaderGroups();\n const rowModel = table.getRowModel();\n\n const handleCellDoubleClick = useCallback(\n (rowId: string, columnId: string, columnDef: ColumnDef<TData>) => {\n if (!enableInlineEdit) return;\n if (!columnDef.meta?.entityMeta?.editable) return;\n setEditingCell({ rowId, columnId });\n },\n [enableInlineEdit],\n );\n\n const handleInlineSave = useCallback(\n async (row: Row<TData>, columnId: string, value: unknown) => {\n const field = columnId;\n await onInlineSave?.(row.original, field, value);\n setEditingCell(null);\n },\n [onInlineSave],\n );\n\n return (\n <Table className={className}>\n <TableHeader>\n {headerGroups.map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {enableMultiSelect && selectionStore && (\n <TableHead className=\"w-[40px]\">\n <SelectAllCheckbox\n table={table}\n store={selectionStore}\n getRowId={getRowId}\n />\n </TableHead>\n )}\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n style={{ width: header.getSize() }}\n className={cn(\n header.column.getIsPinned() === \"left\" && \"sticky left-0 z-10 bg-muted/60\",\n header.column.getIsPinned() === \"right\" && \"sticky right-0 z-10 bg-muted/60\",\n )}\n >\n {header.isPlaceholder ? null : (\n <DataTableColumnHeader\n column={header.column}\n title={\n typeof header.column.columnDef.header === \"string\"\n ? header.column.columnDef.header\n : header.column.id\n }\n />\n )}\n </TableHead>\n ))}\n {actions && actions.length > 0 && (\n <TableHead className=\"w-[50px] text-right\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n )}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {rowModel.rows.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={\n (headerGroups[0]?.headers.length ?? 0) +\n (enableMultiSelect ? 1 : 0) +\n (actions?.length ? 1 : 0)\n }\n className=\"h-24 text-center text-muted-foreground\"\n >\n No results.\n </TableCell>\n </TableRow>\n ) : (\n rowModel.rows.map((row) => (\n <DataTableRow\n key={row.id}\n row={row}\n table={table}\n actions={actions}\n enableMultiSelect={enableMultiSelect}\n selectionStore={selectionStore}\n getRowId={getRowId}\n editingCell={editingCell}\n onCellDoubleClick={handleCellDoubleClick}\n onInlineSave={handleInlineSave}\n onCancelEdit={() => setEditingCell(null)}\n />\n ))\n )}\n </TableBody>\n </Table>\n );\n}\n\n// ---------------------------------------------------------------------------\n// DataTableRow\n// ---------------------------------------------------------------------------\ninterface DataTableRowProps<TData extends Record<string, unknown>> {\n row: Row<TData>;\n table: TableInstance<TData>;\n actions?: ActionDef<TData>[];\n enableMultiSelect?: boolean;\n selectionStore?: StoreApi<SelectionStoreState>;\n getRowId?: (row: TData) => string;\n editingCell: { rowId: string; columnId: string } | null;\n onCellDoubleClick: (rowId: string, columnId: string, columnDef: ColumnDef<TData>) => void;\n onInlineSave: (row: Row<TData>, columnId: string, value: unknown) => void;\n onCancelEdit: () => void;\n}\n\nfunction DataTableRow<TData extends Record<string, unknown>>({\n row,\n table: _table,\n actions,\n enableMultiSelect,\n selectionStore,\n getRowId,\n editingCell,\n onCellDoubleClick,\n onInlineSave,\n onCancelEdit,\n}: DataTableRowProps<TData>) {\n const rowId = getRowId?.(row.original) ?? row.id;\n const selStore = selectionStore ?? selectionStorePlaceholder;\n const isSelected = useSelectionStore(selStore, (s) =>\n selectionStore ? s.isSelected(rowId) : false,\n );\n\n return (\n <TableRow data-state={isSelected ? \"selected\" : undefined}>\n {enableMultiSelect && selectionStore && (\n <TableCell className=\"w-[40px]\">\n <RowCheckbox store={selectionStore} rowId={rowId} />\n </TableCell>\n )}\n {row.getVisibleCells().map((cell) => {\n const isEditing =\n editingCell?.rowId === row.id &&\n editingCell?.columnId === cell.column.id;\n\n return (\n <TableCell\n key={cell.id}\n onDoubleClick={() =>\n onCellDoubleClick(row.id, cell.column.id, cell.column.columnDef)\n }\n className={cn(\n cell.column.getIsPinned() === \"left\" && \"sticky left-0 z-10 bg-background group-hover:bg-muted/30\",\n cell.column.getIsPinned() === \"right\" && \"sticky right-0 z-10 bg-background group-hover:bg-muted/30\",\n )}\n >\n {isEditing ? (\n <InlineCellEditor\n value={cell.getValue()}\n columnDef={cell.column.columnDef}\n onSave={(value) => onInlineSave(row, cell.column.id, value)}\n onCancel={onCancelEdit}\n />\n ) : (\n <CellRenderer cell={cell} />\n )}\n </TableCell>\n );\n })}\n {actions && actions.length > 0 && (\n <TableCell className=\"w-[50px] text-right\">\n <ActionDropdown item={row.original} actions={actions} />\n </TableCell>\n )}\n </TableRow>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Cell renderer\n// ---------------------------------------------------------------------------\nfunction CellRenderer<TData>({ cell }: { cell: { column: { columnDef: ColumnDef<TData> }; getContext: () => unknown; renderValue: <T>() => T | null } }) {\n const cellDef = cell.column.columnDef.cell;\n\n if (typeof cellDef === \"function\") {\n return <>{cellDef(cell.getContext() as never)}</>;\n }\n\n const value = cell.renderValue<unknown>();\n if (value == null) return null;\n\n if (typeof value === \"boolean\") {\n return <span>{value ? \"Yes\" : \"No\"}</span>;\n }\n\n return <span>{String(value)}</span>;\n}\n\n// ---------------------------------------------------------------------------\n// Checkbox components\n// ---------------------------------------------------------------------------\nfunction SelectAllCheckbox<TData extends Record<string, unknown>>({\n table,\n store,\n getRowId,\n}: {\n table: TableInstance<TData>;\n store: StoreApi<SelectionStoreState>;\n getRowId?: (row: TData) => string;\n}) {\n const selectedCount = useSelectionStore(store, (s) => s.selectedCount());\n const pageRows = table.getRowModel().rows;\n const allPageIds = pageRows.map((r) => getRowId?.(r.original) ?? r.id);\n const allSelected = allPageIds.length > 0 && selectedCount >= allPageIds.length;\n const selectAll = useSelectionStore(store, (s) => s.selectAll);\n const deselectAll = useSelectionStore(store, (s) => s.deselectAll);\n\n return (\n <input\n type=\"checkbox\"\n checked={allSelected}\n onChange={() => {\n if (allSelected) deselectAll();\n else selectAll(allPageIds);\n }}\n className=\"h-4 w-4 rounded accent-primary\"\n aria-label=\"Select all rows on this page\"\n />\n );\n}\n\nfunction RowCheckbox({\n store,\n rowId,\n}: {\n store: StoreApi<SelectionStoreState>;\n rowId: string;\n}) {\n const isSelected = useSelectionStore(store, (s) => s.isSelected(rowId));\n const toggle = useSelectionStore(store, (s) => s.toggle);\n\n return (\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => toggle(rowId)}\n className=\"h-4 w-4 rounded accent-primary\"\n aria-label={`Select row ${rowId}`}\n />\n );\n}\n","/**\n * ui/gallery-view.tsx\n *\n * Responsive CSS Grid card layout with field-descriptor-driven\n * default cards and renderCard() override.\n */\nimport { useState, useCallback } from \"react\";\nimport type { KeyboardEvent, ReactNode } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type {\n Row,\n ActionDef,\n ColumnDef,\n ItemDescriptor,\n ItemRenderContext,\n GalleryColumns,\n} from \"../table/types\";\nimport type { SelectionStoreState } from \"../table/selection-store\";\nimport { useSelectionStore, selectionStorePlaceholder } from \"../table/selection-store\";\nimport { ActionButtonRow } from \"./action-column\";\nimport { InlineItemEditor } from \"./inline-editor\";\nimport { cn } from \"./utils\";\n\ninterface GalleryViewProps<TData extends Record<string, unknown>> {\n rows: Row<TData>[];\n columns: ColumnDef<TData>[];\n itemDescriptor?: ItemDescriptor<TData>;\n renderCard?: (item: TData, context: ItemRenderContext<TData>) => ReactNode;\n actions?: ActionDef<TData>[];\n enableInlineEdit?: boolean;\n onInlineSave?: (item: TData, changes: Partial<TData>) => void | Promise<void>;\n selectionStore?: StoreApi<SelectionStoreState>;\n enableMultiSelect?: boolean;\n getRowId?: (row: TData) => string;\n galleryColumns?: GalleryColumns;\n className?: string;\n}\n\nexport function GalleryView<TData extends Record<string, unknown>>({\n rows,\n columns,\n itemDescriptor,\n renderCard,\n actions = [],\n enableInlineEdit,\n onInlineSave,\n selectionStore,\n enableMultiSelect,\n getRowId,\n galleryColumns,\n className,\n}: GalleryViewProps<TData>) {\n const [editingId, setEditingId] = useState<string | null>(null);\n\n const breakpointClasses = galleryColumns\n ? buildBreakpointClasses(galleryColumns)\n : \"\";\n\n return (\n <div\n className={cn(\n !galleryColumns &&\n \"grid gap-4 [grid-template-columns:repeat(auto-fill,minmax(280px,1fr))]\",\n breakpointClasses,\n className,\n )}\n >\n {rows.map((row) => {\n const id = getRowId?.(row.original) ?? row.id;\n const isEditing = editingId === id;\n\n return (\n <GalleryCard\n key={id}\n row={row}\n itemId={id}\n columns={columns}\n itemDescriptor={itemDescriptor}\n renderCard={renderCard}\n actions={actions}\n isEditing={isEditing}\n enableInlineEdit={enableInlineEdit}\n onStartEdit={() => setEditingId(id)}\n onCancelEdit={() => setEditingId(null)}\n onInlineSave={(changes) => {\n onInlineSave?.(row.original, changes);\n setEditingId(null);\n }}\n selectionStore={selectionStore}\n enableMultiSelect={enableMultiSelect}\n />\n );\n })}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Gallery card\n// ---------------------------------------------------------------------------\ninterface GalleryCardProps<TData extends Record<string, unknown>> {\n row: Row<TData>;\n itemId: string;\n columns: ColumnDef<TData>[];\n itemDescriptor?: ItemDescriptor<TData>;\n renderCard?: (item: TData, context: ItemRenderContext<TData>) => ReactNode;\n actions: ActionDef<TData>[];\n isEditing: boolean;\n enableInlineEdit?: boolean;\n onStartEdit: () => void;\n onCancelEdit: () => void;\n onInlineSave: (changes: Partial<TData>) => void;\n selectionStore?: StoreApi<SelectionStoreState>;\n enableMultiSelect?: boolean;\n}\n\nfunction GalleryCard<TData extends Record<string, unknown>>({\n row,\n itemId,\n columns,\n itemDescriptor,\n renderCard,\n actions,\n isEditing,\n enableInlineEdit,\n onStartEdit,\n onCancelEdit,\n onInlineSave,\n selectionStore,\n enableMultiSelect,\n}: GalleryCardProps<TData>) {\n const selStore = selectionStore ?? selectionStorePlaceholder;\n const isSelected = useSelectionStore(selStore, (s) =>\n selectionStore ? s.isSelected(itemId) : false,\n );\n const isMultiSelectMode = useSelectionStore(selStore, (s) =>\n selectionStore ? s.isMultiSelectMode : false,\n );\n const storeToggle = useSelectionStore(selStore, (s) => s.toggle);\n const toggle = useCallback(\n (id: string) => {\n if (selectionStore) storeToggle(id);\n },\n [selectionStore, storeToggle],\n );\n\n const context: ItemRenderContext<TData> = {\n isSelected,\n isEditing,\n isMultiSelectMode,\n onToggleSelect: () => toggle(itemId),\n onEdit: onStartEdit,\n onSave: onInlineSave,\n onCancel: onCancelEdit,\n actions,\n row,\n };\n\n if (renderCard) {\n return (\n <div\n className={cn(\n \"relative rounded-lg border bg-card transition-shadow hover:shadow-md\",\n isSelected && \"ring-2 ring-primary\",\n )}\n >\n {enableMultiSelect && isMultiSelectMode && (\n <div className=\"absolute left-2 top-2 z-10\">\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => toggle(itemId)}\n className=\"h-4 w-4 rounded border-primary text-primary focus:ring-ring\"\n aria-label={`Select item ${itemId}`}\n />\n </div>\n )}\n {renderCard(row.original, context)}\n </div>\n );\n }\n\n const item = row.original;\n const desc = itemDescriptor;\n\n const cardEditProps = enableInlineEdit\n ? {\n role: \"button\" as const,\n tabIndex: 0 as const,\n onDoubleClick: () => onStartEdit(),\n onKeyDown: (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onStartEdit();\n }\n },\n }\n : {};\n\n return (\n <div\n className={cn(\n \"relative flex flex-col rounded-lg border bg-card transition-shadow hover:shadow-md\",\n isSelected && \"ring-2 ring-primary\",\n enableInlineEdit && \"cursor-default\",\n )}\n {...cardEditProps}\n >\n {enableMultiSelect && isMultiSelectMode && (\n <div className=\"absolute left-2 top-2 z-10\">\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => toggle(itemId)}\n className=\"h-4 w-4 rounded border-primary text-primary focus:ring-ring\"\n aria-label={`Select item ${itemId}`}\n />\n </div>\n )}\n\n {desc?.image && !!(item as Record<string, unknown>)[desc.image] && (\n <div className=\"aspect-video w-full overflow-hidden rounded-t-lg bg-muted\">\n <img\n src={String((item as Record<string, unknown>)[desc.image])}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n />\n </div>\n )}\n\n <div className=\"flex flex-1 flex-col gap-1 p-4\">\n <div className=\"flex items-start gap-2\">\n {desc?.avatar && !!(item as Record<string, unknown>)[desc.avatar] && (\n <img\n src={String((item as Record<string, unknown>)[desc.avatar])}\n alt=\"\"\n className=\"h-8 w-8 rounded-full object-cover\"\n />\n )}\n <div className=\"flex-1 min-w-0\">\n {desc?.title && (\n <h3 className=\"truncate font-medium text-sm\">\n {String((item as Record<string, unknown>)[desc.title] ?? \"\")}\n </h3>\n )}\n {desc?.subtitle && (\n <p className=\"truncate text-xs text-muted-foreground\">\n {String((item as Record<string, unknown>)[desc.subtitle] ?? \"\")}\n </p>\n )}\n </div>\n </div>\n\n {desc?.description && !!(item as Record<string, unknown>)[desc.description] && (\n <p className=\"mt-1 text-xs text-muted-foreground line-clamp-2\">\n {String((item as Record<string, unknown>)[desc.description])}\n </p>\n )}\n\n {desc?.badges && desc.badges.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-1\">\n {desc.badges.map((badge) => {\n const val = String((item as Record<string, unknown>)[badge.field] ?? \"\");\n const opt = badge.options?.find((o) => o.value === val);\n return (\n <span\n key={badge.field}\n className={cn(\n \"inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-medium\",\n opt?.className,\n )}\n >\n {opt?.label ?? val}\n </span>\n );\n })}\n </div>\n )}\n\n {desc?.metadata && desc.metadata.length > 0 && (\n <div className=\"mt-2 space-y-0.5\">\n {desc.metadata.map((meta) => {\n const val = (item as Record<string, unknown>)[meta.field];\n return (\n <div key={meta.field} className=\"flex items-center gap-1 text-[11px] text-muted-foreground\">\n <span className=\"font-medium\">{meta.label}:</span>\n <span>{meta.format ? meta.format(val) : String(val ?? \"\")}</span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n\n {isEditing && (\n <div className=\"border-t p-4\">\n <InlineItemEditor\n item={item}\n columns={columns}\n itemDescriptor={desc}\n onSave={onInlineSave}\n onCancel={onCancelEdit}\n />\n </div>\n )}\n\n {!isEditing && actions.length > 0 && (\n <div className=\"flex items-center justify-end border-t px-3 py-2\">\n <ActionButtonRow item={item} actions={actions} />\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Breakpoint class helper\n// ---------------------------------------------------------------------------\nfunction buildBreakpointClasses(cols: GalleryColumns): string {\n const classes = [\"grid gap-4\"];\n if (cols.sm) classes.push(`grid-cols-${cols.sm}`);\n else classes.push(\"grid-cols-1\");\n if (cols.md) classes.push(`md:grid-cols-${cols.md}`);\n if (cols.lg) classes.push(`lg:grid-cols-${cols.lg}`);\n if (cols.xl) classes.push(`xl:grid-cols-${cols.xl}`);\n return classes.join(\" \");\n}\n","/**\n * ui/list-view.tsx\n *\n * Configurable list view with per-item type dispatch,\n * inline expand-in-place editing, and selection support.\n */\nimport { useState, useCallback } from \"react\";\nimport type { KeyboardEvent, ReactNode } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type {\n Row,\n ActionDef,\n ColumnDef,\n ItemDescriptor,\n ItemRenderContext,\n} from \"../table/types\";\nimport type { SelectionStoreState } from \"../table/selection-store\";\nimport { useSelectionStore, selectionStorePlaceholder } from \"../table/selection-store\";\nimport { ActionButtonRow } from \"./action-column\";\nimport { InlineItemEditor } from \"./inline-editor\";\nimport { cn } from \"./utils\";\n\ninterface ListViewProps<TData extends Record<string, unknown>> {\n rows: Row<TData>[];\n columns: ColumnDef<TData>[];\n itemDescriptor?: ItemDescriptor<TData>;\n renderItem?: (item: TData, context: ItemRenderContext<TData>) => ReactNode;\n actions?: ActionDef<TData>[];\n enableInlineEdit?: boolean;\n onInlineSave?: (item: TData, changes: Partial<TData>) => void | Promise<void>;\n selectionStore?: StoreApi<SelectionStoreState>;\n enableMultiSelect?: boolean;\n getRowId?: (row: TData) => string;\n className?: string;\n}\n\nexport function ListView<TData extends Record<string, unknown>>({\n rows,\n columns,\n itemDescriptor,\n renderItem,\n actions = [],\n enableInlineEdit,\n onInlineSave,\n selectionStore,\n enableMultiSelect,\n getRowId,\n className,\n}: ListViewProps<TData>) {\n const [editingId, setEditingId] = useState<string | null>(null);\n\n return (\n <div className={cn(\"divide-y rounded-md border\", className)}>\n {rows.map((row) => {\n const id = getRowId?.(row.original) ?? row.id;\n const isEditing = editingId === id;\n\n return (\n <ListItem\n key={id}\n row={row}\n itemId={id}\n columns={columns}\n itemDescriptor={itemDescriptor}\n renderItem={renderItem}\n actions={actions}\n isEditing={isEditing}\n enableInlineEdit={enableInlineEdit}\n onStartEdit={() => setEditingId(id)}\n onCancelEdit={() => setEditingId(null)}\n onInlineSave={(changes) => {\n onInlineSave?.(row.original, changes);\n setEditingId(null);\n }}\n selectionStore={selectionStore}\n enableMultiSelect={enableMultiSelect}\n />\n );\n })}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// List item\n// ---------------------------------------------------------------------------\ninterface ListItemProps<TData extends Record<string, unknown>> {\n row: Row<TData>;\n itemId: string;\n columns: ColumnDef<TData>[];\n itemDescriptor?: ItemDescriptor<TData>;\n renderItem?: (item: TData, context: ItemRenderContext<TData>) => ReactNode;\n actions: ActionDef<TData>[];\n isEditing: boolean;\n enableInlineEdit?: boolean;\n onStartEdit: () => void;\n onCancelEdit: () => void;\n onInlineSave: (changes: Partial<TData>) => void;\n selectionStore?: StoreApi<SelectionStoreState>;\n enableMultiSelect?: boolean;\n}\n\nfunction ListItem<TData extends Record<string, unknown>>({\n row,\n itemId,\n columns,\n itemDescriptor,\n renderItem,\n actions,\n isEditing,\n enableInlineEdit,\n onStartEdit,\n onCancelEdit,\n onInlineSave,\n selectionStore,\n enableMultiSelect,\n}: ListItemProps<TData>) {\n const selStore = selectionStore ?? selectionStorePlaceholder;\n const isSelected = useSelectionStore(selStore, (s) =>\n selectionStore ? s.isSelected(itemId) : false,\n );\n const isMultiSelectMode = useSelectionStore(selStore, (s) =>\n selectionStore ? s.isMultiSelectMode : false,\n );\n const storeToggle = useSelectionStore(selStore, (s) => s.toggle);\n const toggle = useCallback(\n (id: string) => {\n if (selectionStore) storeToggle(id);\n },\n [selectionStore, storeToggle],\n );\n\n const context: ItemRenderContext<TData> = {\n isSelected,\n isEditing,\n isMultiSelectMode,\n onToggleSelect: () => toggle(itemId),\n onEdit: onStartEdit,\n onSave: onInlineSave,\n onCancel: onCancelEdit,\n actions,\n row,\n };\n\n const item = row.original;\n const desc = itemDescriptor;\n\n const rowEditProps = enableInlineEdit\n ? {\n role: \"button\" as const,\n tabIndex: 0 as const,\n onDoubleClick: () => onStartEdit(),\n onKeyDown: (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onStartEdit();\n }\n },\n }\n : {};\n\n return (\n <div\n className={cn(\n \"transition-colors\",\n isSelected && \"bg-muted/50\",\n )}\n >\n <div className=\"flex items-center gap-3 px-4 py-3 hover:bg-muted/30\">\n {enableMultiSelect && isMultiSelectMode && (\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={() => toggle(itemId)}\n className=\"h-4 w-4 flex-shrink-0 rounded border-primary text-primary focus:ring-ring\"\n aria-label={`Select item ${itemId}`}\n />\n )}\n\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <div\n className={cn(\"min-w-0 flex-1\", enableInlineEdit && \"cursor-default\")}\n {...rowEditProps}\n >\n {renderItem ? (\n renderItem(item, context)\n ) : (\n <DefaultListItemContent item={item} descriptor={desc} />\n )}\n </div>\n\n {!isEditing && actions.length > 0 && (\n <div className=\"flex-shrink-0\">\n <ActionButtonRow item={item} actions={actions} maxVisible={2} />\n </div>\n )}\n </div>\n </div>\n\n {isEditing && (\n <div className=\"px-4 pb-3\">\n <InlineItemEditor\n item={item}\n columns={columns}\n itemDescriptor={desc}\n onSave={onInlineSave}\n onCancel={onCancelEdit}\n />\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Default list item content\n// ---------------------------------------------------------------------------\nfunction DefaultListItemContent<TData extends Record<string, unknown>>({\n item,\n descriptor,\n}: {\n item: TData;\n descriptor?: ItemDescriptor<TData>;\n}) {\n if (!descriptor) {\n const keys = Object.keys(item);\n return (\n <div className=\"flex-1 min-w-0\">\n <p className=\"truncate text-sm font-medium\">\n {String(item[keys[0]] ?? \"\")}\n </p>\n {keys[1] && (\n <p className=\"truncate text-xs text-muted-foreground\">\n {String(item[keys[1]] ?? \"\")}\n </p>\n )}\n </div>\n );\n }\n\n const IconComponent =\n typeof descriptor.icon === \"function\" ? descriptor.icon : null;\n const iconField =\n typeof descriptor.icon === \"string\" ? descriptor.icon : null;\n\n return (\n <div className=\"flex flex-1 items-center gap-3 min-w-0\">\n {descriptor.avatar && !!(item as Record<string, unknown>)[descriptor.avatar] && (\n <img\n src={String((item as Record<string, unknown>)[descriptor.avatar])}\n alt=\"\"\n className=\"h-9 w-9 flex-shrink-0 rounded-full object-cover\"\n />\n )}\n\n {!descriptor.avatar && IconComponent && (\n <div className=\"flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-full bg-muted\">\n <IconComponent className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n )}\n\n {!descriptor.avatar && iconField && !!(item as Record<string, unknown>)[iconField] && (\n <div className=\"flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-full bg-muted\">\n <span className=\"text-sm\">{String((item as Record<string, unknown>)[iconField])}</span>\n </div>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <p className=\"truncate text-sm font-medium\">\n {String((item as Record<string, unknown>)[descriptor.title] ?? \"\")}\n </p>\n {descriptor.subtitle && (\n <p className=\"truncate text-xs text-muted-foreground\">\n {String((item as Record<string, unknown>)[descriptor.subtitle] ?? \"\")}\n </p>\n )}\n </div>\n\n {descriptor.badges && descriptor.badges.length > 0 && (\n <div className=\"flex flex-shrink-0 gap-1\">\n {descriptor.badges.map((badge) => {\n const val = String((item as Record<string, unknown>)[badge.field] ?? \"\");\n const opt = badge.options?.find((o) => o.value === val);\n return (\n <span\n key={badge.field}\n className={cn(\n \"inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-medium\",\n opt?.className,\n )}\n >\n {opt?.label ?? val}\n </span>\n );\n })}\n </div>\n )}\n\n {descriptor.metadata && descriptor.metadata.length > 0 && (\n <div className=\"hidden flex-shrink-0 gap-4 sm:flex\">\n {descriptor.metadata.map((meta) => {\n const val = (item as Record<string, unknown>)[meta.field];\n return (\n <span key={meta.field} className=\"text-xs text-muted-foreground\">\n {meta.format ? meta.format(val) : String(val ?? \"\")}\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","/**\n * ui/view-mode-switcher.tsx\n *\n * Icon toggle group for switching between table/gallery/list view modes.\n */\nimport type { ComponentType } from \"react\";\nimport type { ViewMode } from \"../table/types\";\nimport { cn } from \"./utils\";\n\ninterface ViewModeSwitcherProps {\n mode: ViewMode;\n onModeChange: (mode: ViewMode) => void;\n enabledModes?: ViewMode[];\n className?: string;\n}\n\nexport function ViewModeSwitcher({\n mode,\n onModeChange,\n enabledModes = [\"table\", \"gallery\", \"list\"],\n className,\n}: ViewModeSwitcherProps) {\n if (enabledModes.length <= 1) return null;\n\n const modes: Array<{ key: ViewMode; icon: ComponentType<{ className?: string }>; label: string }> = [\n { key: \"table\", icon: TableIcon, label: \"Table view\" },\n { key: \"gallery\", icon: GalleryIcon, label: \"Gallery view\" },\n { key: \"list\", icon: ListIcon, label: \"List view\" },\n ];\n\n return (\n <div className={cn(\"inline-flex items-center rounded-lg bg-muted/60 p-1 gap-0.5\", className)}>\n {modes\n .filter((m) => enabledModes.includes(m.key))\n .map(({ key, icon: Icon, label }) => (\n <button\n key={key}\n type=\"button\"\n onClick={() => onModeChange(key)}\n title={label}\n className={cn(\n \"inline-flex h-7 w-7 items-center justify-center rounded-md transition-colors\",\n mode === key\n ? \"bg-background text-foreground\"\n : \"text-muted-foreground hover:bg-muted/60 hover:text-foreground\",\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n <span className=\"sr-only\">{label}</span>\n </button>\n ))}\n </div>\n );\n}\n\nfunction TableIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Table</title>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\" />\n <line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" />\n </svg>\n );\n}\n\nfunction GalleryIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Gallery</title>\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\" />\n <rect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\" />\n </svg>\n );\n}\n\nfunction ListIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>List</title>\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\" />\n </svg>\n );\n}\n","/**\n * ui/data-table-toolbar.tsx\n *\n * Shared toolbar across all view modes — search, active filters,\n * preset pickers, column visibility, view mode switcher, and refresh.\n */\nimport { useState, type ReactNode } from \"react\";\nimport type { TableInstance, ViewMode } from \"../table/types\";\nimport { ViewModeSwitcher } from \"./view-mode-switcher\";\nimport { cn } from \"./utils\";\n\ninterface DataTableToolbarProps<TData> {\n table: TableInstance<TData>;\n viewMode: ViewMode;\n onViewModeChange: (mode: ViewMode) => void;\n enabledViewModes?: ViewMode[];\n enableSearch?: boolean;\n onRefresh?: () => void;\n showColumnVisibility?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\nexport function DataTableToolbar<TData>({\n table,\n viewMode,\n onViewModeChange,\n enabledViewModes,\n enableSearch = true,\n onRefresh,\n showColumnVisibility = true,\n className,\n children,\n}: DataTableToolbarProps<TData>) {\n const [colVisOpen, setColVisOpen] = useState(false);\n const globalFilter = table.getState().globalFilter;\n const columnFilters = table.getState().columnFilters;\n const hasFilters = columnFilters.length > 0;\n\n return (\n <div className={cn(\"flex items-center justify-between gap-2\", className)}>\n <div className=\"flex flex-1 items-center gap-2\">\n {enableSearch && (\n <input\n type=\"search\"\n placeholder=\"Search...\"\n value={String(globalFilter ?? \"\")}\n onChange={(e) => table.setGlobalFilter(e.target.value || undefined)}\n className=\"flex h-9 w-full max-w-sm rounded-lg bg-muted/60 px-3 py-1 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:bg-muted transition-colors\"\n aria-label=\"Search table\"\n />\n )}\n\n {hasFilters && (\n <div className=\"flex items-center gap-1\">\n {columnFilters.map((f) => (\n <span\n key={f.id}\n className=\"inline-flex items-center gap-1 rounded-full bg-muted/70 px-2.5 py-0.5 text-xs font-medium text-foreground\"\n >\n {f.id}: {String(f.value)}\n <button\n type=\"button\"\n onClick={() =>\n table.setColumnFilters((prev) =>\n prev.filter((cf) => cf.id !== f.id),\n )\n }\n className=\"ml-0.5 rounded-full hover:bg-muted p-0.5 transition-colors\"\n aria-label={`Remove filter ${f.id}`}\n >\n <XIcon className=\"h-3 w-3\" />\n </button>\n </span>\n ))}\n <button\n type=\"button\"\n onClick={() => table.resetColumnFilters()}\n className=\"text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n Clear all\n </button>\n </div>\n )}\n\n {children}\n </div>\n\n <div className=\"flex items-center gap-1.5\">\n <ViewModeSwitcher\n mode={viewMode}\n onModeChange={onViewModeChange}\n enabledModes={enabledViewModes}\n />\n\n {showColumnVisibility && viewMode === \"table\" && (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setColVisOpen(!colVisOpen)}\n className=\"inline-flex h-9 items-center gap-1.5 rounded-lg bg-muted/60 px-3 text-sm font-medium text-foreground hover:bg-muted transition-colors\"\n >\n <ColumnsIcon className=\"h-4 w-4\" />\n Columns\n </button>\n {colVisOpen && (\n <ColumnVisibilityMenu\n table={table}\n onClose={() => setColVisOpen(false)}\n />\n )}\n </div>\n )}\n\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n title=\"Refresh\"\n aria-label=\"Refresh\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-lg bg-muted/60 text-muted-foreground hover:bg-muted hover:text-foreground transition-colors\"\n >\n <RefreshIcon className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Column visibility dropdown\n// ---------------------------------------------------------------------------\nfunction ColumnVisibilityMenu<TData>({\n table,\n onClose,\n}: {\n table: TableInstance<TData>;\n onClose: () => void;\n}) {\n const columns = table.getAllLeafColumns().filter((c) => c.getCanHide());\n\n return (\n <>\n <button\n type=\"button\"\n className=\"fixed inset-0 z-40 cursor-default bg-transparent p-0\"\n onClick={onClose}\n aria-label=\"Close column visibility menu\"\n />\n <div className=\"absolute right-0 z-50 mt-1 min-w-[180px] rounded-xl bg-popover p-2 shadow-xl\">\n <div className=\"mb-2 px-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Toggle columns\n </div>\n {columns.map((column) => (\n <label\n key={column.id}\n className=\"flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1.5 text-sm hover:bg-muted/60 transition-colors\"\n >\n <input\n type=\"checkbox\"\n checked={column.getIsVisible()}\n onChange={() => column.toggleVisibility()}\n className=\"h-4 w-4 rounded accent-primary\"\n />\n {typeof column.columnDef.header === \"string\"\n ? column.columnDef.header\n : column.id}\n </label>\n ))}\n </div>\n </>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Icons\n// ---------------------------------------------------------------------------\nfunction XIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Close</title>\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nfunction ColumnsIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Columns</title>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"21\" />\n </svg>\n );\n}\n\nfunction RefreshIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Refresh</title>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\n","/**\n * ui/data-table-pagination.tsx\n *\n * Shared pagination across all view modes — page nav,\n * page size selector, and load-more button mode.\n */\nimport { useId, type ReactNode } from \"react\";\nimport type { TableInstance } from \"../table/types\";\nimport { cn } from \"./utils\";\n\ninterface DataTablePaginationProps<TData> {\n table: TableInstance<TData>;\n mode?: \"pages\" | \"loadMore\" | \"none\";\n pageSizeOptions?: number[];\n onLoadMore?: () => void;\n totalCount?: number;\n className?: string;\n}\n\nexport function DataTablePagination<TData>({\n table,\n mode = \"pages\",\n pageSizeOptions = [10, 20, 30, 50, 100],\n onLoadMore,\n totalCount,\n className,\n}: DataTablePaginationProps<TData>) {\n const pageSizeId = useId();\n if (mode === \"none\") return null;\n\n const state = table.getState();\n const count = totalCount ?? table.getPrePaginationRowModel().rows.length;\n\n if (mode === \"loadMore\") {\n const hasMore = table.getCanNextPage();\n if (!hasMore) return null;\n return (\n <div className={cn(\"flex justify-center py-4\", className)}>\n <button\n type=\"button\"\n onClick={onLoadMore ?? (() => table.nextPage())}\n className=\"inline-flex items-center justify-center rounded-lg bg-muted/60 px-4 py-2 text-sm font-medium hover:bg-muted transition-colors\"\n >\n Load more\n </button>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-between px-2 py-4\",\n className,\n )}\n >\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {count > 0 && (\n <span>\n Showing {state.pagination.pageIndex * state.pagination.pageSize + 1}\n {\" - \"}\n {Math.min(\n (state.pagination.pageIndex + 1) * state.pagination.pageSize,\n count,\n )}{\" \"}\n of {count}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-6 lg:gap-8\">\n <div className=\"flex items-center gap-2\">\n <label htmlFor={pageSizeId} className=\"text-sm font-medium\">\n Rows per page\n </label>\n <select\n id={pageSizeId}\n value={state.pagination.pageSize}\n onChange={(e) => table.setPageSize(Number(e.target.value))}\n className=\"h-8 w-[70px] rounded-lg bg-muted/60 px-2 text-sm focus-visible:outline-none focus-visible:bg-muted transition-colors\"\n aria-label=\"Rows per page\"\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size}\n </option>\n ))}\n </select>\n </div>\n\n <div className=\"flex items-center gap-1 text-sm font-medium\">\n Page {state.pagination.pageIndex + 1} of {table.getPageCount()}\n </div>\n\n <div className=\"flex items-center gap-1\">\n <PaginationButton\n onClick={() => table.firstPage()}\n disabled={!table.getCanPreviousPage()}\n label=\"First page\"\n >\n <ChevronsLeftIcon className=\"h-4 w-4\" />\n </PaginationButton>\n <PaginationButton\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n label=\"Previous page\"\n >\n <ChevronLeftIcon className=\"h-4 w-4\" />\n </PaginationButton>\n <PaginationButton\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n label=\"Next page\"\n >\n <ChevronRightIcon className=\"h-4 w-4\" />\n </PaginationButton>\n <PaginationButton\n onClick={() => table.lastPage()}\n disabled={!table.getCanNextPage()}\n label=\"Last page\"\n >\n <ChevronsRightIcon className=\"h-4 w-4\" />\n </PaginationButton>\n </div>\n </div>\n </div>\n );\n}\n\nfunction PaginationButton({\n onClick,\n disabled,\n label,\n children,\n}: {\n onClick: () => void;\n disabled: boolean;\n label: string;\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={label}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-lg bg-muted/60 text-muted-foreground hover:bg-muted hover:text-foreground disabled:pointer-events-none disabled:opacity-40 transition-colors\"\n >\n {children}\n <span className=\"sr-only\">{label}</span>\n </button>\n );\n}\n\nfunction ChevronLeftIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Chevron left</title>\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n );\n}\n\nfunction ChevronRightIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Chevron right</title>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n );\n}\n\nfunction ChevronsLeftIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Chevrons left</title>\n <path d=\"m11 17-5-5 5-5\" />\n <path d=\"m18 17-5-5 5-5\" />\n </svg>\n );\n}\n\nfunction ChevronsRightIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Chevrons right</title>\n <path d=\"m6 17 5-5-5-5\" />\n <path d=\"m13 17 5-5-5-5\" />\n </svg>\n );\n}\n","/**\n * ui/empty-state.tsx\n *\n * Configurable empty view component with defaults for\n * both \"no data\" and \"no results match filters\" states.\n */\nimport React from \"react\";\nimport type { EmptyStateConfig } from \"../table/types\";\nimport { cn } from \"./utils\";\n\ninterface EmptyStateProps {\n config?: EmptyStateConfig | React.ReactNode;\n isFiltered?: boolean;\n className?: string;\n}\n\nexport function EmptyState({ config, isFiltered = false, className }: EmptyStateProps) {\n if (React.isValidElement(config)) {\n return <>{config}</>;\n }\n\n const cfg = (config as EmptyStateConfig | undefined) ?? {};\n\n const title = isFiltered\n ? (cfg.filteredTitle ?? \"No results found\")\n : (cfg.title ?? \"No items\");\n const description = isFiltered\n ? (cfg.filteredDescription ?? \"Try adjusting your search or filter criteria.\")\n : (cfg.description ?? \"Get started by creating your first item.\");\n const action = isFiltered ? cfg.filteredAction : cfg.action;\n const IconComponent = cfg.icon;\n\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center py-12 text-center\",\n className,\n )}\n >\n {IconComponent && (\n <div className=\"mb-4 rounded-full bg-muted p-3\">\n <IconComponent className=\"h-8 w-8 text-muted-foreground\" />\n </div>\n )}\n {!IconComponent && (\n <div className=\"mb-4 rounded-full bg-muted p-3\">\n <EmptyBoxIcon className=\"h-8 w-8 text-muted-foreground\" />\n </div>\n )}\n <h3 className=\"mb-1 text-base font-semibold\">{title}</h3>\n <p className=\"mb-4 max-w-sm text-sm text-muted-foreground\">\n {description}\n </p>\n {action && (\n <button\n type=\"button\"\n onClick={action.onClick}\n className=\"inline-flex h-9 items-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground hover:bg-primary/90\"\n >\n {action.label}\n </button>\n )}\n </div>\n );\n}\n\nfunction EmptyBoxIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Empty</title>\n <path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\" />\n <polyline points=\"3.29 7 12 12 20.71 7\" />\n <line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"12\" />\n </svg>\n );\n}\n","/**\n * ui/multi-select-bar.tsx\n *\n * Sticky batch action bar that appears when items are selected.\n * Connected to the SelectionStore — works across all view modes.\n */\nimport React, { useMemo } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type { SelectionStoreState } from \"../table/selection-store\";\nimport { useSelectionStore } from \"../table/selection-store\";\nimport type { BatchActionDef } from \"../table/types\";\nimport { cn } from \"./utils\";\n\ninterface MultiSelectBarProps {\n store: StoreApi<SelectionStoreState>;\n batchActions?: BatchActionDef[];\n onBatchAction?: (actionId: string, selectedIds: string[]) => void;\n totalCount?: number;\n className?: string;\n}\n\nexport function MultiSelectBar({\n store,\n batchActions = [],\n onBatchAction,\n totalCount,\n className,\n}: MultiSelectBarProps) {\n const selectedIdsSet = useSelectionStore(store, (s) => s.selectedIds);\n const selectedCount = selectedIdsSet.size;\n const selectedIds = useMemo(() => Array.from(selectedIdsSet), [selectedIdsSet]);\n const deselectAll = useSelectionStore(store, (s) => s.deselectAll);\n const selectAll = useSelectionStore(store, (s) => s.selectAll);\n\n if (selectedCount === 0) return null;\n\n return (\n <div\n className={cn(\n \"sticky bottom-0 z-40 flex items-center justify-between gap-4 rounded-xl bg-foreground/[0.07] px-4 py-3\",\n className,\n )}\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-semibold\">\n {selectedCount} item{selectedCount !== 1 ? \"s\" : \"\"} selected\n </span>\n {totalCount != null && totalCount > selectedCount && (\n <button\n type=\"button\"\n onClick={() => {}}\n className=\"text-xs font-medium text-primary hover:text-primary/80 transition-colors\"\n >\n Select all {totalCount}\n </button>\n )}\n <button\n type=\"button\"\n onClick={deselectAll}\n className=\"text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n Deselect all\n </button>\n </div>\n\n <div className=\"flex items-center gap-2\">\n {batchActions.map((action) => (\n <button\n key={action.id}\n type=\"button\"\n onClick={() => onBatchAction?.(action.id, selectedIds)}\n className={cn(\n \"inline-flex h-8 items-center gap-1.5 rounded-lg px-3 text-sm font-medium transition-colors\",\n action.destructive\n ? \"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n : \"bg-muted/80 text-foreground hover:bg-muted\",\n )}\n >\n {action.icon && <action.icon className=\"h-3.5 w-3.5\" />}\n {action.label}\n </button>\n ))}\n </div>\n </div>\n );\n}\n","/**\n * ui/preset-picker.tsx\n *\n * Combined popover for selecting, managing, and deleting\n * saved filter and column presets.\n */\nimport { useState, useRef, useEffect } from \"react\";\nimport type { FilterPreset, ColumnPreset } from \"../table/presets/types\";\nimport { cn } from \"./utils\";\n\ninterface PresetPickerProps {\n filterPresets: FilterPreset[];\n columnPresets: ColumnPreset[];\n activeFilterId: string | null;\n activeColumnId: string | null;\n onApplyFilter: (id: string | null) => void;\n onApplyColumn: (id: string | null) => void;\n onEditFilter: (preset: FilterPreset) => void;\n onEditColumn: (preset: ColumnPreset) => void;\n onDeleteFilter: (id: string) => void;\n onDeleteColumn: (id: string) => void;\n onNewFilter: () => void;\n onNewColumn: () => void;\n pendingChangesCount?: number;\n className?: string;\n}\n\nexport function PresetPicker({\n filterPresets,\n columnPresets,\n activeFilterId,\n activeColumnId,\n onApplyFilter,\n onApplyColumn,\n onEditFilter,\n onEditColumn,\n onDeleteFilter,\n onDeleteColumn,\n onNewFilter,\n onNewColumn,\n pendingChangesCount = 0,\n className,\n}: PresetPickerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [activeTab, setActiveTab] = useState<\"filters\" | \"columns\">(\"filters\");\n const popoverRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node) &&\n !triggerRef.current?.contains(e.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n if (isOpen) document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [isOpen]);\n\n return (\n <div className={cn(\"relative inline-block\", className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n aria-label=\"Open presets menu\"\n className={cn(\n \"inline-flex h-9 items-center gap-1 rounded-md border border-input bg-background px-3 text-sm hover:bg-accent\",\n (activeFilterId || activeColumnId) && \"border-primary text-primary\",\n )}\n >\n <BookmarkIcon className=\"h-4 w-4\" />\n Presets\n {pendingChangesCount > 0 && (\n <span className=\"ml-1 inline-flex h-4 w-4 items-center justify-center rounded-full bg-orange-500 text-[10px] text-white\">\n {pendingChangesCount}\n </span>\n )}\n </button>\n\n {isOpen && (\n <div\n ref={popoverRef}\n className=\"absolute right-0 z-50 mt-1 w-[280px] rounded-md border bg-popover shadow-md\"\n >\n <div className=\"flex border-b\">\n <button\n type=\"button\"\n onClick={() => setActiveTab(\"filters\")}\n className={cn(\n \"flex-1 px-4 py-2 text-sm font-medium\",\n activeTab === \"filters\"\n ? \"border-b-2 border-primary text-primary\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n Filters\n </button>\n <button\n type=\"button\"\n onClick={() => setActiveTab(\"columns\")}\n className={cn(\n \"flex-1 px-4 py-2 text-sm font-medium\",\n activeTab === \"columns\"\n ? \"border-b-2 border-primary text-primary\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n Columns\n </button>\n </div>\n\n <div className=\"max-h-[300px] overflow-auto p-2\">\n {activeTab === \"filters\" ? (\n <>\n {activeFilterId && (\n <button\n type=\"button\"\n onClick={() => {\n onApplyFilter(null);\n setIsOpen(false);\n }}\n className=\"flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm text-muted-foreground hover:bg-accent\"\n >\n Clear active filter\n </button>\n )}\n {filterPresets.map((preset) => (\n <PresetItem\n key={preset.id}\n name={preset.name}\n description={preset.description}\n isActive={preset.id === activeFilterId}\n isDefault={preset.isDefault}\n onApply={() => {\n onApplyFilter(preset.id);\n setIsOpen(false);\n }}\n onEdit={() => {\n onEditFilter(preset);\n setIsOpen(false);\n }}\n onDelete={() => onDeleteFilter(preset.id)}\n />\n ))}\n {filterPresets.length === 0 && (\n <p className=\"px-3 py-4 text-center text-xs text-muted-foreground\">\n No saved filter presets\n </p>\n )}\n <button\n type=\"button\"\n onClick={() => {\n onNewFilter();\n setIsOpen(false);\n }}\n className=\"mt-1 flex w-full items-center gap-1 rounded-md border border-dashed px-3 py-2 text-xs text-muted-foreground hover:text-foreground hover:border-foreground\"\n >\n <PlusIcon className=\"h-3 w-3\" /> Save current as preset\n </button>\n </>\n ) : (\n <>\n {activeColumnId && (\n <button\n type=\"button\"\n onClick={() => {\n onApplyColumn(null);\n setIsOpen(false);\n }}\n className=\"flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm text-muted-foreground hover:bg-accent\"\n >\n Clear active column layout\n </button>\n )}\n {columnPresets.map((preset) => (\n <PresetItem\n key={preset.id}\n name={preset.name}\n description={preset.description}\n isActive={preset.id === activeColumnId}\n isDefault={preset.isDefault}\n onApply={() => {\n onApplyColumn(preset.id);\n setIsOpen(false);\n }}\n onEdit={() => {\n onEditColumn(preset);\n setIsOpen(false);\n }}\n onDelete={() => onDeleteColumn(preset.id)}\n />\n ))}\n {columnPresets.length === 0 && (\n <p className=\"px-3 py-4 text-center text-xs text-muted-foreground\">\n No saved column presets\n </p>\n )}\n <button\n type=\"button\"\n onClick={() => {\n onNewColumn();\n setIsOpen(false);\n }}\n className=\"mt-1 flex w-full items-center gap-1 rounded-md border border-dashed px-3 py-2 text-xs text-muted-foreground hover:text-foreground hover:border-foreground\"\n >\n <PlusIcon className=\"h-3 w-3\" /> Save current as preset\n </button>\n </>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Preset list item\n// ---------------------------------------------------------------------------\nfunction PresetItem({\n name,\n description,\n isActive,\n isDefault,\n onApply,\n onEdit,\n onDelete,\n}: {\n name: string;\n description?: string;\n isActive: boolean;\n isDefault?: boolean;\n onApply: () => void;\n onEdit: () => void;\n onDelete: () => void;\n}) {\n const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);\n\n return (\n <div\n className={cn(\n \"group flex items-center gap-2 rounded-md px-3 py-2 hover:bg-accent\",\n isActive && \"bg-primary/10\",\n )}\n >\n <button\n type=\"button\"\n onClick={onApply}\n className=\"flex flex-1 flex-col items-start min-w-0\"\n >\n <span className=\"flex items-center gap-1 text-sm font-medium truncate\">\n {name}\n {isDefault && (\n <span className=\"text-[10px] text-muted-foreground\">(default)</span>\n )}\n {isActive && (\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary\" />\n )}\n </span>\n {description && (\n <span className=\"text-xs text-muted-foreground truncate\">\n {description}\n </span>\n )}\n </button>\n\n <div className=\"hidden items-center gap-0.5 group-hover:flex\">\n <button\n type=\"button\"\n onClick={onEdit}\n title=\"Edit\"\n aria-label=\"Edit preset\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded hover:bg-background\"\n >\n <PencilIcon className=\"h-3 w-3\" />\n </button>\n {showDeleteConfirm ? (\n <button\n type=\"button\"\n onClick={() => {\n onDelete();\n setShowDeleteConfirm(false);\n }}\n className=\"inline-flex h-6 items-center rounded px-1 text-[10px] font-medium text-destructive hover:bg-destructive hover:text-destructive-foreground\"\n >\n Confirm\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => setShowDeleteConfirm(true)}\n title=\"Delete\"\n aria-label=\"Delete preset\"\n className=\"inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:bg-background hover:text-destructive\"\n >\n <TrashIcon className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Icons\n// ---------------------------------------------------------------------------\nfunction BookmarkIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Presets</title>\n <path d=\"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z\" />\n </svg>\n );\n}\n\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Add</title>\n <path d=\"M5 12h14\" /><path d=\"M12 5v14\" />\n </svg>\n );\n}\n\nfunction PencilIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Edit</title>\n <path d=\"M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n </svg>\n );\n}\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Delete</title>\n <path d=\"M3 6h18\" /><path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" /><path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n );\n}\n","/**\n * ui/filter-preset-dialog.tsx\n *\n * Full dialog for building/editing named filter presets.\n * Supports clause add/remove, field picker, operator selector,\n * value input, AND/OR logic, and save/update to storage.\n */\nimport { useState, useId } from \"react\";\nimport type { ColumnDef } from \"../table/types\";\nimport type { FilterPreset } from \"../table/presets/types\";\nimport type { FilterClause, FilterOperator } from \"../view/types\";\nimport { cn } from \"./utils\";\n\ninterface FilterClauseState {\n id: string;\n field: string;\n operator: string;\n value: string;\n}\n\ninterface FilterPresetDialogProps<TData> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n columns: ColumnDef<TData>[];\n preset?: FilterPreset | null;\n onSave: (preset: Omit<FilterPreset, \"id\" | \"createdAt\" | \"updatedAt\">) => void;\n}\n\nconst operators = [\n { value: \"eq\", label: \"equals\" },\n { value: \"neq\", label: \"not equals\" },\n { value: \"contains\", label: \"contains\" },\n { value: \"starts_with\", label: \"starts with\" },\n { value: \"gt\", label: \"greater than\" },\n { value: \"gte\", label: \"greater or equal\" },\n { value: \"lt\", label: \"less than\" },\n { value: \"lte\", label: \"less or equal\" },\n { value: \"in\", label: \"in list\" },\n { value: \"is_null\", label: \"is empty\" },\n { value: \"is_not_null\", label: \"is not empty\" },\n];\n\nlet nextClauseId = 0;\n\nexport function FilterPresetDialog<TData>({\n open,\n onOpenChange,\n columns,\n preset,\n onSave,\n}: FilterPresetDialogProps<TData>) {\n const nameId = useId();\n const descriptionId = useId();\n const [name, setName] = useState(preset?.name ?? \"\");\n const [description, setDescription] = useState(preset?.description ?? \"\");\n const [isDefault, setIsDefault] = useState(preset?.isDefault ?? false);\n const [logic, setLogic] = useState<\"and\" | \"or\">(\"and\");\n const [clauses, setClauses] = useState<FilterClauseState[]>(() => {\n if (!preset?.filter) return [];\n const filterSpec = preset.filter;\n const rawClauses = Array.isArray(filterSpec) ? filterSpec : (filterSpec.clauses ?? []);\n return rawClauses\n .filter((c): c is FilterClause => \"field\" in c)\n .map((c) => ({\n id: `clause_${++nextClauseId}`,\n field: c.field,\n operator: c.op,\n value: String(c.value ?? \"\"),\n }));\n });\n\n const filterableColumns = columns.filter(\n (c) => c.enableFiltering !== false && (c.accessorKey || c.id),\n );\n\n function addClause() {\n setClauses((prev) => [\n ...prev,\n {\n id: `clause_${++nextClauseId}`,\n field: filterableColumns[0]?.accessorKey ?? filterableColumns[0]?.id ?? \"\",\n operator: \"eq\",\n value: \"\",\n },\n ]);\n }\n\n function removeClause(id: string) {\n setClauses((prev) => prev.filter((c) => c.id !== id));\n }\n\n function updateClause(id: string, updates: Partial<FilterClauseState>) {\n setClauses((prev) =>\n prev.map((c) => (c.id === id ? { ...c, ...updates } : c)),\n );\n }\n\n function handleSave() {\n const filterClauses = clauses\n .filter((c) => c.field)\n .map((c) => ({\n field: c.field,\n op: c.operator as FilterOperator,\n value: c.value,\n }));\n\n onSave({\n name,\n description: description || undefined,\n isDefault,\n filter: {\n logic,\n clauses: filterClauses,\n },\n });\n onOpenChange(false);\n }\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\">\n <div className=\"w-full max-w-lg rounded-lg border bg-background shadow-lg\">\n <div className=\"flex items-center justify-between border-b px-6 py-4\">\n <h2 className=\"text-lg font-semibold\">\n {preset ? \"Edit Filter Preset\" : \"New Filter Preset\"}\n </h2>\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"rounded-sm opacity-70 hover:opacity-100\"\n aria-label=\"Close dialog\"\n >\n <XIcon className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"space-y-4 px-6 py-4\">\n <div className=\"space-y-2\">\n <label htmlFor={nameId} className=\"text-sm font-medium\">\n Name\n </label>\n <input\n id={nameId}\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"My filter\"\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor={descriptionId} className=\"text-sm font-medium\">\n Description\n </label>\n <input\n id={descriptionId}\n type=\"text\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Optional description\"\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm\"\n />\n </div>\n\n <fieldset className=\"space-y-2 border-0 p-0\">\n <legend className=\"sr-only\">Filter conditions</legend>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Conditions</span>\n <div className=\"flex items-center gap-1 rounded-md border p-0.5\">\n <button\n type=\"button\"\n onClick={() => setLogic(\"and\")}\n className={cn(\n \"rounded px-2 py-0.5 text-xs font-medium\",\n logic === \"and\"\n ? \"bg-primary text-primary-foreground\"\n : \"text-muted-foreground\",\n )}\n >\n AND\n </button>\n <button\n type=\"button\"\n onClick={() => setLogic(\"or\")}\n className={cn(\n \"rounded px-2 py-0.5 text-xs font-medium\",\n logic === \"or\"\n ? \"bg-primary text-primary-foreground\"\n : \"text-muted-foreground\",\n )}\n >\n OR\n </button>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n {clauses.map((clause, idx) => (\n <div key={clause.id} className=\"flex items-center gap-2\">\n {idx > 0 && (\n <span className=\"text-xs text-muted-foreground w-8 text-center\">\n {logic.toUpperCase()}\n </span>\n )}\n {idx === 0 && <span className=\"w-8 text-center text-xs text-muted-foreground\">Where</span>}\n <select\n value={clause.field}\n onChange={(e) => updateClause(clause.id, { field: e.target.value })}\n className=\"h-8 flex-1 rounded-md border border-input bg-background px-2 text-sm\"\n aria-label={`Field for condition ${idx + 1}`}\n >\n {filterableColumns.map((col) => (\n <option key={col.accessorKey ?? col.id} value={col.accessorKey ?? col.id}>\n {typeof col.header === \"string\" ? col.header : (col.accessorKey ?? col.id)}\n </option>\n ))}\n </select>\n <select\n value={clause.operator}\n onChange={(e) => updateClause(clause.id, { operator: e.target.value })}\n className=\"h-8 w-[130px] rounded-md border border-input bg-background px-2 text-sm\"\n aria-label={`Operator for condition ${idx + 1}`}\n >\n {operators.map((op) => (\n <option key={op.value} value={op.value}>\n {op.label}\n </option>\n ))}\n </select>\n <input\n type=\"text\"\n value={clause.value}\n onChange={(e) => updateClause(clause.id, { value: e.target.value })}\n placeholder=\"Value\"\n className=\"h-8 flex-1 rounded-md border border-input bg-background px-2 text-sm\"\n aria-label={`Value for condition ${idx + 1}`}\n />\n <button\n type=\"button\"\n onClick={() => removeClause(clause.id)}\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent text-muted-foreground\"\n aria-label={`Remove condition ${idx + 1}`}\n >\n <XIcon className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n ))}\n </div>\n\n <button\n type=\"button\"\n onClick={addClause}\n className=\"inline-flex h-8 items-center gap-1 rounded-md border border-dashed border-input px-3 text-xs text-muted-foreground hover:text-foreground hover:border-foreground\"\n >\n <PlusIcon className=\"h-3 w-3\" />\n Add condition\n </button>\n </fieldset>\n\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={isDefault}\n onChange={(e) => setIsDefault(e.target.checked)}\n className=\"h-4 w-4 rounded border-primary text-primary focus:ring-ring\"\n />\n Set as default filter\n </label>\n </div>\n\n <div className=\"flex justify-end gap-2 border-t px-6 py-4\">\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"inline-flex h-9 items-center rounded-md border border-input bg-background px-4 text-sm font-medium hover:bg-accent\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={!name.trim()}\n className=\"inline-flex h-9 items-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {preset ? \"Update\" : \"Save\"} Preset\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nfunction XIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Close</title>\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Add</title>\n <path d=\"M5 12h14\" /><path d=\"M12 5v14\" />\n </svg>\n );\n}\n","/**\n * ui/column-preset-dialog.tsx\n *\n * Full dialog for building/editing named column presets.\n * Column picker, drag-to-reorder, width controls, pinning toggles,\n * visibility checkboxes, and save/update to storage.\n */\nimport { useState } from \"react\";\nimport type { DragEvent } from \"react\";\nimport type { ColumnDef } from \"../table/types\";\nimport type { ColumnPreset, ColumnPresetEntry } from \"../table/presets/types\";\nimport { cn } from \"./utils\";\n\ninterface ColumnPresetDialogProps<TData> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n columns: ColumnDef<TData>[];\n preset?: ColumnPreset | null;\n onSave: (preset: Omit<ColumnPreset, \"id\" | \"createdAt\" | \"updatedAt\">) => void;\n}\n\nexport function ColumnPresetDialog<TData>({\n open,\n onOpenChange,\n columns,\n preset,\n onSave,\n}: ColumnPresetDialogProps<TData>) {\n const [name, setName] = useState(preset?.name ?? \"\");\n const [description, setDescription] = useState(preset?.description ?? \"\");\n const [isDefault, setIsDefault] = useState(preset?.isDefault ?? false);\n\n const [entries, setEntries] = useState<ColumnPresetEntry[]>(() => {\n if (preset?.columns) return [...preset.columns];\n return columns.map((col, idx) => ({\n id: col.accessorKey ?? col.id ?? `col_${idx}`,\n visible: true,\n width: col.size ?? 150,\n order: idx,\n pinned: false,\n }));\n });\n\n const [dragIdx, setDragIdx] = useState<number | null>(null);\n\n function updateEntry(id: string, updates: Partial<ColumnPresetEntry>) {\n setEntries((prev) =>\n prev.map((e) => (e.id === id ? { ...e, ...updates } : e)),\n );\n }\n\n function handleDragStart(idx: number) {\n setDragIdx(idx);\n }\n\n function handleDragOver(e: DragEvent, idx: number) {\n e.preventDefault();\n if (dragIdx === null || dragIdx === idx) return;\n setEntries((prev) => {\n const items = [...prev];\n const [dragged] = items.splice(dragIdx, 1);\n items.splice(idx, 0, dragged);\n return items.map((item, i) => ({ ...item, order: i }));\n });\n setDragIdx(idx);\n }\n\n function handleDragEnd() {\n setDragIdx(null);\n }\n\n function getColumnLabel(id: string): string {\n const col = columns.find((c) => (c.accessorKey ?? c.id) === id);\n if (col && typeof col.header === \"string\") return col.header;\n return id;\n }\n\n function handleSave() {\n onSave({\n name,\n description: description || undefined,\n isDefault,\n columns: entries,\n });\n onOpenChange(false);\n }\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\">\n <div className=\"w-full max-w-lg rounded-lg border bg-background shadow-lg\">\n <div className=\"flex items-center justify-between border-b px-6 py-4\">\n <h2 className=\"text-lg font-semibold\">\n {preset ? \"Edit Column Preset\" : \"New Column Preset\"}\n </h2>\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"rounded-sm opacity-70 hover:opacity-100\"\n aria-label=\"Close dialog\"\n >\n <XIcon className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"space-y-4 px-6 py-4\">\n <div className=\"space-y-2\">\n <label htmlFor=\"column-preset-name\" className=\"text-sm font-medium\">\n Name\n </label>\n <input\n id=\"column-preset-name\"\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"My column layout\"\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"column-preset-description\" className=\"text-sm font-medium\">\n Description\n </label>\n <input\n id=\"column-preset-description\"\n type=\"text\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n placeholder=\"Optional description\"\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-sm\"\n />\n </div>\n\n <fieldset className=\"space-y-2 border-0 p-0\">\n <legend className=\"text-sm font-medium\">Columns</legend>\n <ul\n className=\"max-h-[300px] list-none overflow-auto rounded-md border p-0\"\n aria-label=\"Column order and visibility\"\n >\n {entries.map((entry, idx) => (\n <li\n key={entry.id}\n onDragOver={(e) => handleDragOver(e, idx)}\n className={cn(\n \"flex items-center gap-3 border-b px-3 py-2 last:border-b-0\",\n dragIdx === idx && \"bg-muted\",\n )}\n >\n <button\n type=\"button\"\n draggable\n onDragStart={() => handleDragStart(idx)}\n onDragEnd={handleDragEnd}\n className=\"inline-flex flex-shrink-0 cursor-grab touch-none rounded p-0.5 text-muted-foreground hover:bg-muted\"\n aria-label={`Reorder column ${getColumnLabel(entry.id)}`}\n >\n <GripIcon className=\"h-4 w-4\" />\n </button>\n\n <input\n type=\"checkbox\"\n checked={entry.visible}\n onChange={(e) =>\n updateEntry(entry.id, { visible: e.target.checked })\n }\n className=\"h-4 w-4 flex-shrink-0 rounded border-primary text-primary focus:ring-ring\"\n aria-label={`Show column ${getColumnLabel(entry.id)}`}\n />\n\n <span className=\"flex-1 text-sm font-medium truncate\">\n {getColumnLabel(entry.id)}\n </span>\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"number\"\n value={entry.width ?? 150}\n onChange={(e) =>\n updateEntry(entry.id, {\n width: Number(e.target.value) || 150,\n })\n }\n className=\"h-7 w-16 rounded border border-input bg-background px-1 text-xs text-center\"\n aria-label={`Width in pixels for ${getColumnLabel(entry.id)}`}\n />\n <select\n value={entry.pinned || \"none\"}\n onChange={(e) =>\n updateEntry(entry.id, {\n pinned:\n e.target.value === \"none\"\n ? false\n : (e.target.value as \"left\" | \"right\"),\n })\n }\n className=\"h-7 w-[70px] rounded border border-input bg-background px-1 text-xs\"\n aria-label={`Pin ${getColumnLabel(entry.id)}`}\n >\n <option value=\"none\">None</option>\n <option value=\"left\">Left</option>\n <option value=\"right\">Right</option>\n </select>\n </div>\n </li>\n ))}\n </ul>\n </fieldset>\n\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={isDefault}\n onChange={(e) => setIsDefault(e.target.checked)}\n className=\"h-4 w-4 rounded border-primary text-primary focus:ring-ring\"\n />\n Set as default column layout\n </label>\n </div>\n\n <div className=\"flex justify-end gap-2 border-t px-6 py-4\">\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n className=\"inline-flex h-9 items-center rounded-md border border-input bg-background px-4 text-sm font-medium hover:bg-accent\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={!name.trim()}\n className=\"inline-flex h-9 items-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {preset ? \"Update\" : \"Save\"} Preset\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nfunction XIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <title>Close</title>\n <path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nfunction GripIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden\n >\n <title>Drag handle</title>\n <circle cx=\"9\" cy=\"12\" r=\"1\" /><circle cx=\"9\" cy=\"5\" r=\"1\" /><circle cx=\"9\" cy=\"19\" r=\"1\" />\n <circle cx=\"15\" cy=\"12\" r=\"1\" /><circle cx=\"15\" cy=\"5\" r=\"1\" /><circle cx=\"15\" cy=\"19\" r=\"1\" />\n </svg>\n );\n}\n","/**\n * ui/entity-list-view.tsx\n *\n * Top-level orchestrator component — manages view mode, shared\n * selection store, toolbar/pagination shell, and delegates\n * to the active view renderer (table, gallery, or list).\n */\nimport React, { useRef, useState, useMemo, useCallback } from \"react\";\nimport type { StoreApi } from \"zustand\";\nimport type {\n ColumnDef,\n TableOptions,\n ViewMode,\n ActionDef,\n ItemDescriptor,\n ItemRenderContext,\n EmptyStateConfig,\n BatchActionDef,\n GalleryColumns,\n} from \"../table/types\";\nimport { useTable } from \"../table/use-table\";\nimport {\n createSelectionStore,\n SelectionContext,\n type SelectionStoreState,\n} from \"../table/selection-store\";\nimport {\n useTablePresets,\n type UseTablePresetsOptions,\n} from \"../table/presets/use-table-presets\";\nimport {\n useTableStorageAdapter,\n useTableRealtimeMode,\n} from \"../table/presets/table-storage-provider\";\nimport type { FilterPreset, ColumnPreset } from \"../table/presets/types\";\n\nimport { DataTable } from \"./data-table\";\nimport { GalleryView } from \"./gallery-view\";\nimport { ListView } from \"./list-view\";\nimport { DataTableToolbar } from \"./data-table-toolbar\";\nimport { DataTablePagination } from \"./data-table-pagination\";\nimport { EmptyState } from \"./empty-state\";\nimport { MultiSelectBar } from \"./multi-select-bar\";\nimport { PresetPicker } from \"./preset-picker\";\nimport { FilterPresetDialog } from \"./filter-preset-dialog\";\nimport { ColumnPresetDialog } from \"./column-preset-dialog\";\nimport { cn } from \"./utils\";\n\nexport interface EntityListViewProps<TData extends Record<string, unknown>> {\n data?: TData[];\n viewResult?: { items: TData[]; isFetching?: boolean; total?: number };\n\n columns: ColumnDef<TData>[];\n itemDescriptor?: ItemDescriptor<TData>;\n renderCard?: (item: TData, context: ItemRenderContext<TData>) => React.ReactNode;\n renderItem?: (item: TData, context: ItemRenderContext<TData>) => React.ReactNode;\n\n defaultViewMode?: ViewMode;\n enabledViewModes?: ViewMode[];\n\n actions?: ActionDef<TData>[];\n onAction?: (action: string, item: TData) => void;\n\n enableMultiSelect?: boolean;\n onBatchAction?: (action: string, selectedItems: TData[]) => void;\n batchActions?: BatchActionDef[];\n\n enableInlineEdit?: boolean;\n onInlineEdit?: (item: TData, field: string, value: unknown) => void | Promise<void>;\n onInlineSave?: (item: TData, changes: Partial<TData>) => void | Promise<void>;\n\n emptyState?: React.ReactNode | EmptyStateConfig;\n\n tableId?: string;\n enablePresets?: boolean;\n\n getRowId?: (row: TData) => string;\n\n paginationMode?: \"none\" | \"loadMore\" | \"pages\";\n pageSize?: number;\n\n galleryColumns?: GalleryColumns;\n\n enableColumnResizing?: boolean;\n enableColumnPinning?: boolean;\n enableGrouping?: boolean;\n enableSearch?: boolean;\n\n onRefresh?: () => void;\n\n className?: string;\n}\n\nexport function EntityListView<TData extends Record<string, unknown>>(\n props: EntityListViewProps<TData>,\n) {\n const {\n data: dataProp,\n viewResult,\n columns,\n itemDescriptor,\n renderCard,\n renderItem,\n defaultViewMode = \"table\",\n enabledViewModes = [\"table\", \"gallery\", \"list\"],\n actions,\n enableMultiSelect = false,\n onBatchAction,\n batchActions,\n enableInlineEdit = false,\n onInlineEdit,\n onInlineSave,\n emptyState,\n tableId,\n enablePresets = false,\n getRowId,\n paginationMode = \"pages\",\n pageSize = 10,\n galleryColumns,\n enableColumnResizing = false,\n enableColumnPinning = false,\n enableGrouping = false,\n enableSearch = true,\n onRefresh,\n className,\n } = props;\n\n const data = useMemo(\n () => viewResult?.items ?? dataProp ?? [],\n [viewResult?.items, dataProp],\n );\n\n // Selection store — one per component instance\n const selectionStoreRef = useRef<StoreApi<SelectionStoreState>>(null!);\n if (!selectionStoreRef.current) {\n selectionStoreRef.current = createSelectionStore();\n }\n\n // View mode state\n const [viewMode, setViewMode] = useState<ViewMode>(defaultViewMode);\n\n // Preset system\n const adapter = useTableStorageAdapter();\n const realtimeMode = useTableRealtimeMode();\n\n const presets = useTablePresets(tableId ?? \"__no_table_id__\", {\n adapter,\n realtimeMode,\n enabled: enablePresets && !!tableId,\n });\n\n // Preset dialogs\n const [filterDialogOpen, setFilterDialogOpen] = useState(false);\n const [columnDialogOpen, setColumnDialogOpen] = useState(false);\n const [editingFilterPreset, setEditingFilterPreset] = useState<FilterPreset | null>(null);\n const [editingColumnPreset, setEditingColumnPreset] = useState<ColumnPreset | null>(null);\n\n // Table engine\n const table = useTable<TData>({\n data,\n columns,\n getRowId: getRowId\n ? (row, idx) => getRowId(row)\n : undefined,\n enableSorting: true,\n enableFiltering: true,\n enableColumnResizing,\n enablePinning: enableColumnPinning,\n enableGrouping,\n enableRowSelection: enableMultiSelect,\n manualPagination: !!viewResult,\n pageCount: viewResult?.total\n ? Math.ceil(viewResult.total / pageSize)\n : undefined,\n initialState: {\n pagination: { pageIndex: 0, pageSize },\n },\n });\n\n const rowModel = table.getRowModel();\n const prePagRows = table.getPrePaginationRowModel();\n const isEmpty = data.length === 0;\n const isFilteredEmpty = !isEmpty && prePagRows.rows.length === 0;\n\n // View mode change handler\n const handleViewModeChange = useCallback(\n (mode: ViewMode) => {\n setViewMode(mode);\n if (enablePresets && tableId) {\n presets.setViewMode(mode);\n }\n },\n [enablePresets, tableId, presets],\n );\n\n // Inline save handler that dispatches to the correct prop\n const handleInlineSaveTable = useCallback(\n (item: TData, field: string, value: unknown) => {\n onInlineEdit?.(item, field, value);\n },\n [onInlineEdit],\n );\n\n const handleInlineSaveItem = useCallback(\n (item: TData, changes: Partial<TData>) => {\n onInlineSave?.(item, changes);\n },\n [onInlineSave],\n );\n\n // Batch action handler\n const handleBatchAction = useCallback(\n (actionId: string, selectedIds: string[]) => {\n if (!onBatchAction) return;\n const selectedItems = data.filter((item) => {\n const id = getRowId?.(item) ?? String(data.indexOf(item));\n return selectedIds.includes(id);\n });\n onBatchAction(actionId, selectedItems);\n },\n [onBatchAction, data, getRowId],\n );\n\n return (\n <SelectionContext.Provider value={selectionStoreRef.current}>\n <div className={cn(\"flex flex-col gap-3\", className)}>\n <DataTableToolbar\n table={table}\n viewMode={viewMode}\n onViewModeChange={handleViewModeChange}\n enabledViewModes={enabledViewModes}\n enableSearch={enableSearch}\n onRefresh={onRefresh}\n showColumnVisibility={viewMode === \"table\"}\n >\n {enablePresets && tableId && (\n <PresetPicker\n filterPresets={presets.filterPresets}\n columnPresets={presets.columnPresets}\n activeFilterId={presets.activeFilterPreset?.id ?? null}\n activeColumnId={presets.activeColumnPreset?.id ?? null}\n onApplyFilter={presets.applyFilterPreset}\n onApplyColumn={presets.applyColumnPreset}\n onEditFilter={(p) => {\n setEditingFilterPreset(p);\n setFilterDialogOpen(true);\n }}\n onEditColumn={(p) => {\n setEditingColumnPreset(p);\n setColumnDialogOpen(true);\n }}\n onDeleteFilter={presets.deleteFilterPreset}\n onDeleteColumn={presets.deleteColumnPreset}\n onNewFilter={() => {\n setEditingFilterPreset(null);\n setFilterDialogOpen(true);\n }}\n onNewColumn={() => {\n setEditingColumnPreset(null);\n setColumnDialogOpen(true);\n }}\n pendingChangesCount={presets.pendingChanges.length}\n />\n )}\n </DataTableToolbar>\n\n {(isEmpty || isFilteredEmpty) ? (\n <EmptyState\n config={emptyState}\n isFiltered={isFilteredEmpty}\n />\n ) : (\n <>\n {viewMode === \"table\" && (\n <DataTable\n table={table}\n actions={actions}\n enableInlineEdit={enableInlineEdit}\n onInlineSave={handleInlineSaveTable}\n selectionStore={\n enableMultiSelect ? selectionStoreRef.current : undefined\n }\n enableMultiSelect={enableMultiSelect}\n getRowId={getRowId}\n />\n )}\n\n {viewMode === \"gallery\" && (\n <GalleryView\n rows={rowModel.rows}\n columns={columns}\n itemDescriptor={itemDescriptor}\n renderCard={renderCard}\n actions={actions}\n enableInlineEdit={enableInlineEdit}\n onInlineSave={handleInlineSaveItem}\n selectionStore={\n enableMultiSelect ? selectionStoreRef.current : undefined\n }\n enableMultiSelect={enableMultiSelect}\n getRowId={getRowId}\n galleryColumns={galleryColumns}\n />\n )}\n\n {viewMode === \"list\" && (\n <ListView\n rows={rowModel.rows}\n columns={columns}\n itemDescriptor={itemDescriptor}\n renderItem={renderItem}\n actions={actions}\n enableInlineEdit={enableInlineEdit}\n onInlineSave={handleInlineSaveItem}\n selectionStore={\n enableMultiSelect ? selectionStoreRef.current : undefined\n }\n enableMultiSelect={enableMultiSelect}\n getRowId={getRowId}\n />\n )}\n </>\n )}\n\n {enableMultiSelect && (\n <MultiSelectBar\n store={selectionStoreRef.current}\n batchActions={batchActions}\n onBatchAction={handleBatchAction}\n totalCount={prePagRows.rows.length}\n />\n )}\n\n <DataTablePagination\n table={table}\n mode={paginationMode}\n />\n\n {enablePresets && (\n <>\n <FilterPresetDialog\n open={filterDialogOpen}\n onOpenChange={setFilterDialogOpen}\n columns={columns}\n preset={editingFilterPreset}\n onSave={presets.saveFilterPreset}\n />\n <ColumnPresetDialog\n open={columnDialogOpen}\n onOpenChange={setColumnDialogOpen}\n columns={columns}\n preset={editingColumnPreset}\n onSave={presets.saveColumnPreset}\n />\n </>\n )}\n </div>\n </SelectionContext.Provider>\n );\n}\n","/**\n * ui/data-table-filter.tsx\n *\n * Per-column filter popover controls. Renders the appropriate\n * filter input based on column meta filterType.\n */\nimport { useState, useRef, useEffect, useId } from \"react\";\nimport type { Column } from \"../table/types\";\nimport { cn } from \"./utils\";\n\ninterface DataTableFilterProps<TData> {\n column: Column<TData>;\n className?: string;\n}\n\nexport function DataTableFilter<TData>({\n column,\n className,\n}: DataTableFilterProps<TData>) {\n const [isOpen, setIsOpen] = useState(false);\n const popoverRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const filterType = column.columnDef.meta?.entityMeta?.filterType ?? \"text\";\n const isFiltered = column.getIsFiltered();\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node) &&\n !triggerRef.current?.contains(e.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n if (isOpen) document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [isOpen]);\n\n return (\n <div className={cn(\"relative inline-block\", className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n \"inline-flex h-7 items-center rounded-md border px-2 text-xs\",\n isFiltered\n ? \"border-primary bg-primary/10 text-primary\"\n : \"border-input bg-background text-muted-foreground hover:bg-accent\",\n )}\n >\n <FilterIcon className=\"mr-1 h-3 w-3\" />\n Filter\n </button>\n\n {isOpen && (\n <div\n ref={popoverRef}\n className=\"absolute z-50 mt-1 min-w-[200px] rounded-md border bg-popover p-3 shadow-md\"\n >\n <FilterControl column={column} filterType={filterType} onClose={() => setIsOpen(false)} />\n </div>\n )}\n </div>\n );\n}\n\nfunction FilterControl<TData>({\n column,\n filterType,\n onClose: _onClose,\n}: {\n column: Column<TData>;\n filterType: string;\n onClose: () => void;\n}) {\n switch (filterType) {\n case \"text\":\n return <TextFilter column={column} />;\n case \"number\":\n return <NumberFilter column={column} />;\n case \"boolean\":\n return <BooleanFilter column={column} />;\n case \"enum\":\n return <EnumFilter column={column} />;\n case \"date\":\n case \"dateRange\":\n return <DateFilter column={column} />;\n default:\n return <TextFilter column={column} />;\n }\n}\n\nfunction TextFilter<TData>({ column }: { column: Column<TData> }) {\n const id = useId();\n const value = (column.getFilterValue() as string) ?? \"\";\n return (\n <div className=\"space-y-2\">\n <label htmlFor={id} className=\"text-xs font-medium\">\n Contains\n </label>\n <input\n id={id}\n type=\"text\"\n value={value}\n onChange={(e) => column.setFilterValue(e.target.value || undefined)}\n placeholder=\"Filter...\"\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-3 py-1 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n />\n {value && (\n <button\n type=\"button\"\n onClick={() => column.setFilterValue(undefined)}\n className=\"text-xs text-muted-foreground hover:text-foreground\"\n >\n Clear\n </button>\n )}\n </div>\n );\n}\n\nfunction NumberFilter<TData>({ column }: { column: Column<TData> }) {\n const minId = useId();\n const maxId = useId();\n const value = (column.getFilterValue() as [number?, number?]) ?? [undefined, undefined];\n return (\n <div className=\"space-y-2\">\n <span className=\"text-xs font-medium\">Range</span>\n <div className=\"flex items-center gap-2\">\n <input\n id={minId}\n type=\"number\"\n value={value[0] ?? \"\"}\n onChange={(e) => {\n const v = e.target.value === \"\" ? undefined : Number(e.target.value);\n column.setFilterValue([v, value[1]]);\n }}\n placeholder=\"Min\"\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 py-1 text-sm\"\n aria-label=\"Minimum value\"\n />\n <span className=\"text-muted-foreground\">–</span>\n <input\n id={maxId}\n type=\"number\"\n value={value[1] ?? \"\"}\n onChange={(e) => {\n const v = e.target.value === \"\" ? undefined : Number(e.target.value);\n column.setFilterValue([value[0], v]);\n }}\n placeholder=\"Max\"\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 py-1 text-sm\"\n aria-label=\"Maximum value\"\n />\n </div>\n </div>\n );\n}\n\nfunction BooleanFilter<TData>({ column }: { column: Column<TData> }) {\n const value = column.getFilterValue() as boolean | undefined;\n return (\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium\">Value</p>\n <div className=\"flex gap-2\">\n {[\n { label: \"All\", val: undefined },\n { label: \"True\", val: true },\n { label: \"False\", val: false },\n ].map(({ label, val }) => (\n <button\n key={label}\n type=\"button\"\n onClick={() => column.setFilterValue(val)}\n className={cn(\n \"inline-flex h-7 items-center rounded-md border px-3 text-xs font-medium transition-colors\",\n value === val\n ? \"border-primary bg-primary text-primary-foreground\"\n : \"border-input bg-background hover:bg-accent\",\n )}\n >\n {label}\n </button>\n ))}\n </div>\n </div>\n );\n}\n\nfunction EnumFilter<TData>({ column }: { column: Column<TData> }) {\n const options = column.columnDef.meta?.entityMeta?.enumOptions ?? [];\n const selected = new Set<string>(\n (column.getFilterValue() as string[] | undefined) ?? [],\n );\n\n function toggle(val: string) {\n const next = new Set(selected);\n if (next.has(val)) next.delete(val);\n else next.add(val);\n column.setFilterValue(next.size > 0 ? Array.from(next) : undefined);\n }\n\n return (\n <fieldset className=\"space-y-2 border-0 p-0\">\n <legend className=\"text-xs font-medium\">Select values</legend>\n <div className=\"max-h-[200px] space-y-1 overflow-auto\">\n {options.map((opt) => (\n <label\n key={opt.value}\n className=\"flex items-center gap-2 rounded px-2 py-1 text-sm hover:bg-accent cursor-pointer\"\n >\n <input\n type=\"checkbox\"\n checked={selected.has(opt.value)}\n onChange={() => toggle(opt.value)}\n className=\"h-4 w-4 rounded border-primary text-primary focus:ring-ring\"\n />\n {opt.color && (\n <span\n className=\"h-2 w-2 rounded-full\"\n style={{ backgroundColor: opt.color }}\n />\n )}\n {opt.label}\n </label>\n ))}\n </div>\n </fieldset>\n );\n}\n\nfunction DateFilter<TData>({ column }: { column: Column<TData> }) {\n const startId = useId();\n const endId = useId();\n const value = (column.getFilterValue() as [string?, string?]) ?? [undefined, undefined];\n return (\n <div className=\"space-y-2\">\n <span className=\"text-xs font-medium\">Date range</span>\n <div className=\"space-y-1\">\n <input\n id={startId}\n type=\"date\"\n value={value[0] ?? \"\"}\n onChange={(e) =>\n column.setFilterValue([e.target.value || undefined, value[1]])\n }\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 py-1 text-sm\"\n aria-label=\"Start date\"\n />\n <input\n id={endId}\n type=\"date\"\n value={value[1] ?? \"\"}\n onChange={(e) =>\n column.setFilterValue([value[0], e.target.value || undefined])\n }\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 py-1 text-sm\"\n aria-label=\"End date\"\n />\n </div>\n </div>\n );\n}\n\nfunction FilterIcon({ className }: { className?: string }) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" className={className} aria-hidden>\n <title>Filter</title>\n <polygon points=\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\" />\n </svg>\n );\n}\n","/**\n * ui/pure-columns.tsx\n *\n * Column builder functions that return the pure ColumnDef type\n * from src/table/types.ts — parallel to existing TanStack-based columns.tsx.\n */\nimport React from \"react\";\nimport type { ColumnDef, ColumnMeta, CellContext } from \"../table/types\";\n\n// ---------------------------------------------------------------------------\n// Builder options\n// ---------------------------------------------------------------------------\ninterface BaseColumnOptions<TData> {\n field: keyof TData & string;\n header: string;\n size?: number;\n minSize?: number;\n maxSize?: number;\n enableSorting?: boolean;\n enableFiltering?: boolean;\n enableHiding?: boolean;\n enableResizing?: boolean;\n enablePinning?: boolean;\n editable?: boolean;\n cell?: (context: CellContext<TData>) => React.ReactNode;\n}\n\ninterface EnumOption {\n label: string;\n value: string;\n /** Hex color — legacy bordered-badge approach (outline only). */\n color?: string;\n /** Full Tailwind class string — renders a solid flat badge with no border. */\n badgeClassName?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Selection column\n// ---------------------------------------------------------------------------\nexport function selectionColumn<TData>(): ColumnDef<TData> {\n return {\n id: \"_select\",\n size: 40,\n enableSorting: false,\n enableFiltering: false,\n enableHiding: false,\n enableResizing: false,\n header: ({ table }) =>\n React.createElement(\"input\", {\n type: \"checkbox\",\n checked: table.getIsAllPageRowsSelected(),\n onChange: table.getToggleAllPageRowsSelectedHandler(),\n className: \"h-4 w-4 rounded border-primary text-primary focus:ring-ring\",\n }),\n cell: ({ row }) =>\n React.createElement(\"input\", {\n type: \"checkbox\",\n checked: row.getIsSelected(),\n onChange: row.getToggleSelectedHandler(),\n className: \"h-4 w-4 rounded border-primary text-primary focus:ring-ring\",\n }),\n meta: {\n entityMeta: {\n field: \"_select\" as keyof TData,\n filterType: \"none\",\n },\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Text column\n// ---------------------------------------------------------------------------\nexport function textColumn<TData>(\n options: BaseColumnOptions<TData>,\n): ColumnDef<TData> {\n return {\n id: options.field,\n accessorKey: options.field,\n header: options.header,\n size: options.size ?? 200,\n minSize: options.minSize ?? 80,\n maxSize: options.maxSize,\n enableSorting: options.enableSorting ?? true,\n enableFiltering: options.enableFiltering ?? true,\n enableHiding: options.enableHiding ?? true,\n enableResizing: options.enableResizing ?? true,\n enablePinning: options.enablePinning,\n cell: options.cell,\n meta: {\n entityMeta: {\n field: options.field,\n filterType: \"text\",\n editable: options.editable,\n },\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Number column\n// ---------------------------------------------------------------------------\nexport function numberColumn<TData>(\n options: BaseColumnOptions<TData>,\n): ColumnDef<TData> {\n return {\n id: options.field,\n accessorKey: options.field,\n header: options.header,\n size: options.size ?? 120,\n minSize: options.minSize ?? 60,\n maxSize: options.maxSize,\n enableSorting: options.enableSorting ?? true,\n enableFiltering: options.enableFiltering ?? true,\n enableHiding: options.enableHiding ?? true,\n enableResizing: options.enableResizing ?? true,\n enablePinning: options.enablePinning,\n cell:\n options.cell ??\n (({ getValue }) => {\n const val = getValue<number>();\n return val != null ? String(val) : \"\";\n }),\n meta: {\n entityMeta: {\n field: options.field,\n filterType: \"number\",\n editable: options.editable,\n },\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Date column\n// ---------------------------------------------------------------------------\nexport function dateColumn<TData>(\n options: BaseColumnOptions<TData> & { format?: (date: Date) => string },\n): ColumnDef<TData> {\n const formatDate = options.format ?? ((d: Date) => d.toLocaleDateString());\n\n return {\n id: options.field,\n accessorKey: options.field,\n header: options.header,\n size: options.size ?? 150,\n minSize: options.minSize ?? 100,\n maxSize: options.maxSize,\n enableSorting: options.enableSorting ?? true,\n enableFiltering: options.enableFiltering ?? true,\n enableHiding: options.enableHiding ?? true,\n enableResizing: options.enableResizing ?? true,\n enablePinning: options.enablePinning,\n cell:\n options.cell ??\n (({ getValue }) => {\n const val = getValue<string | Date>();\n if (!val) return \"\";\n const date = val instanceof Date ? val : new Date(val);\n return formatDate(date);\n }),\n meta: {\n entityMeta: {\n field: options.field,\n filterType: \"date\",\n editable: options.editable,\n },\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Boolean column\n// ---------------------------------------------------------------------------\nexport function booleanColumn<TData>(\n options: BaseColumnOptions<TData> & { trueLabel?: string; falseLabel?: string },\n): ColumnDef<TData> {\n return {\n id: options.field,\n accessorKey: options.field,\n header: options.header,\n size: options.size ?? 100,\n minSize: options.minSize ?? 60,\n maxSize: options.maxSize,\n enableSorting: options.enableSorting ?? true,\n enableFiltering: options.enableFiltering ?? true,\n enableHiding: options.enableHiding ?? true,\n enableResizing: options.enableResizing ?? true,\n enablePinning: options.enablePinning,\n cell:\n options.cell ??\n (({ getValue }) => {\n const val = getValue<boolean>();\n return val\n ? (options.trueLabel ?? \"Yes\")\n : (options.falseLabel ?? \"No\");\n }),\n meta: {\n entityMeta: {\n field: options.field,\n filterType: \"boolean\",\n editable: options.editable,\n },\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Enum column\n// ---------------------------------------------------------------------------\nexport function enumColumn<TData>(\n options: BaseColumnOptions<TData> & { options: EnumOption[] },\n): ColumnDef<TData> {\n return {\n id: options.field,\n accessorKey: options.field,\n header: options.header,\n size: options.size ?? 150,\n minSize: options.minSize ?? 80,\n maxSize: options.maxSize,\n enableSorting: options.enableSorting ?? true,\n enableFiltering: options.enableFiltering ?? true,\n enableHiding: options.enableHiding ?? true,\n enableResizing: options.enableResizing ?? true,\n enablePinning: options.enablePinning,\n cell:\n options.cell ??\n (({ getValue }) => {\n const val = String(getValue<string>() ?? \"\");\n const opt = options.options.find((o) => o.value === val);\n if (!opt) return val;\n if (opt.badgeClassName) {\n return React.createElement(\n \"span\",\n {\n className: `inline-flex items-center rounded px-1.5 py-0.5 text-[11px] font-medium capitalize ${opt.badgeClassName}`,\n },\n opt.label,\n );\n }\n return React.createElement(\n \"span\",\n {\n className: \"inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium\",\n style: opt.color ? { backgroundColor: `${opt.color}26`, color: opt.color } : undefined,\n },\n opt.label,\n );\n }),\n meta: {\n entityMeta: {\n field: options.field,\n filterType: \"enum\",\n enumOptions: options.options,\n editable: options.editable,\n },\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Actions column (stub — actual rendering handled by ActionDropdown)\n// ---------------------------------------------------------------------------\nexport function actionsColumn<TData>(): ColumnDef<TData> {\n return {\n id: \"_actions\",\n header: \"\",\n size: 50,\n enableSorting: false,\n enableFiltering: false,\n enableHiding: false,\n enableResizing: false,\n meta: {\n entityMeta: {\n field: \"_actions\" as keyof TData,\n filterType: \"none\",\n },\n },\n };\n}\n"]}