@prometheus-ags/prometheus-entity-management 1.2.2 → 2.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.
- package/CHANGELOG.md +263 -0
- package/README.md +85 -6
- package/dist/index.d.mts +1004 -163
- package/dist/index.d.ts +1004 -163
- package/dist/index.js +2596 -1592
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2580 -1594
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graph.ts","../src/graph-query.ts","../src/graph-actions.ts","../src/graph-effects.ts","../src/object-path.ts","../src/schema.tsx","../src/ai-interop.ts","../src/local-first-runtime.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":["create","subscribeWithSelector","immer","useMemo","jsx","jsxs","fetch","useSyncExternalStore","useStore","useRef","useCallback","useShallow","useEffect","useState","schemaRegistry","list","id","document","twMerge","clsx","useReactTable","getCoreRowModel","getSortedRowModel","Search","X","Loader2","Fragment","RefreshCw","flexRender","_","ChevronLeft","ChevronRight","React","Pencil","Trash2","rows","s","newSort","createStore","persist","createContext","useContext","InlineCellEditor","useId","PencilIcon","TrashIcon","XIcon","PlusIcon","selectionColumn","textColumn","numberColumn","dateColumn","booleanColumn","enumColumn","actionsColumn"],"mappings":"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","file":"index.js","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/** Provenance of the latest known entity state. */\nexport type SyncOrigin = \"server\" | \"client\" | \"optimistic\";\n\n/** Optional sync-facing metadata kept outside canonical entity payloads. */\nexport interface EntitySyncMetadata {\n synced: boolean;\n origin: SyncOrigin;\n updatedAt: number | null;\n}\n\n/** Snapshot shape returned by sync-aware reads and graph-native query helpers. */\nexport type EntitySnapshot<T extends Record<string, unknown>> = T & {\n $synced: boolean;\n $origin: SyncOrigin;\n $updatedAt: number | null;\n};\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_SYNC_METADATA: EntitySyncMetadata = {\n synced: true,\n origin: \"server\",\n updatedAt: null,\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 /** Optional sync/provenance state layered beside the canonical entity payload. */\n syncMetadata: Record<string, EntitySyncMetadata>;\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 /** Merge sync metadata for one entity without polluting canonical server fields. */\n setEntitySyncMetadata: (type: EntityType, id: EntityId, metadata: Partial<EntitySyncMetadata>) => void;\n /** Clear sync metadata for one entity. */\n clearEntitySyncMetadata: (type: EntityType, id: EntityId) => 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 * Sync-aware read path: canonical entity + patches + virtual sync metadata (`$synced`, `$origin`, `$updatedAt`).\n */\n readEntitySnapshot: <T = Record<string, unknown>>(type: EntityType, id: EntityId) => EntitySnapshot<T & Record<string, unknown>> | null;\n}\n\nfunction defaultEntityState(): EntityState {\n return { ...EMPTY_ENTITY_STATE };\n}\n\nfunction defaultSyncMetadata(): EntitySyncMetadata {\n return { ...EMPTY_SYNC_METADATA };\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: {}, syncMetadata: {}, 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 const key = ek(type, id);\n if (!s.syncMetadata[key]) s.syncMetadata[key] = defaultSyncMetadata();\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 const key = ek(type, id);\n if (!s.syncMetadata[key]) s.syncMetadata[key] = defaultSyncMetadata();\n }\n }),\n replaceEntity: (type, id, data) => set((s) => {\n if (!s.entities[type]) s.entities[type] = {};\n s.entities[type][id] = data;\n const key = ek(type, id);\n if (!s.syncMetadata[key]) s.syncMetadata[key] = defaultSyncMetadata();\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 delete s.syncMetadata[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 s.syncMetadata[k] = { ...(s.syncMetadata[k] ?? defaultSyncMetadata()), synced: true, origin: \"server\", updatedAt: Date.now() };\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 setEntitySyncMetadata: (type, id, metadata) => set((s) => {\n const k = ek(type, id);\n s.syncMetadata[k] = { ...(s.syncMetadata[k] ?? defaultSyncMetadata()), ...metadata };\n }),\n clearEntitySyncMetadata: (type, id) => set((s) => {\n delete s.syncMetadata[ek(type, id)];\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 readEntitySnapshot: <T>(type: EntityType, id: EntityId): EntitySnapshot<T & Record<string, unknown>> | null => {\n const s = get();\n const base = s.entities[type]?.[id];\n if (!base) return null;\n const patch = s.patches[type]?.[id];\n const metadata = s.syncMetadata[ek(type, id)] ?? EMPTY_SYNC_METADATA;\n return {\n ...(patch ? { ...base, ...patch } : base),\n $synced: metadata.synced,\n $origin: metadata.origin,\n $updatedAt: metadata.updatedAt,\n } as EntitySnapshot<T & Record<string, unknown>>;\n },\n }))\n )\n);\n","import { useGraphStore } from \"./graph\";\nimport type { EntityId, EntitySnapshot, EntityType, QueryKey } from \"./graph\";\n\ntype GraphStore = ReturnType<typeof useGraphStore.getState>;\n\nexport type GraphIncludeMap = Record<string, GraphIncludeRelation>;\n\nexport type GraphIncludeRelation =\n | {\n type: EntityType;\n via: { kind: \"field\"; field: string };\n include?: GraphIncludeMap;\n }\n | {\n type: EntityType;\n via: { kind: \"array\"; field: string };\n include?: GraphIncludeMap;\n }\n | {\n type: EntityType;\n via: { kind: \"list\"; key: QueryKey | ((entity: Record<string, unknown>) => QueryKey | null | undefined) };\n include?: GraphIncludeMap;\n }\n | {\n type: EntityType;\n via: {\n kind: \"resolver\";\n resolve: (entity: Record<string, unknown>, store: GraphStore) => EntityId | EntityId[] | null | undefined;\n };\n include?: GraphIncludeMap;\n };\n\nexport interface GraphQueryOptions<TEntity extends Record<string, unknown>> {\n type: EntityType;\n id?: EntityId;\n ids?: EntityId[];\n listKey?: QueryKey;\n where?: (entity: EntitySnapshot<TEntity>) => boolean;\n sort?: (a: EntitySnapshot<TEntity>, b: EntitySnapshot<TEntity>) => number;\n include?: GraphIncludeMap;\n select?: ((entity: Record<string, unknown>) => unknown) | string[];\n}\n\ntype ProjectedRow = Record<string, unknown>;\n\nexport function queryOnce<TEntity extends Record<string, unknown>>(\n opts: GraphQueryOptions<TEntity> & { id: EntityId },\n): ProjectedRow | null;\nexport function queryOnce<TEntity extends Record<string, unknown>>(\n opts: GraphQueryOptions<TEntity>,\n): ProjectedRow[];\nexport function queryOnce<TEntity extends Record<string, unknown>>(\n opts: GraphQueryOptions<TEntity>,\n): ProjectedRow[] | ProjectedRow | null {\n const store = useGraphStore.getState();\n const ids = resolveCandidateIds(store, opts);\n let rows = ids\n .map((id) => store.readEntitySnapshot<TEntity>(opts.type, id))\n .filter((row): row is EntitySnapshot<TEntity> => row !== null);\n\n if (opts.where) rows = rows.filter(opts.where);\n if (opts.sort) rows = [...rows].sort(opts.sort);\n\n const projected = rows.map((row) => applySelection(projectRow(row, opts.include, store), opts.select));\n if (opts.id) return projected[0] ?? null;\n return projected;\n}\n\nexport const selectGraph = queryOnce;\n\nfunction resolveCandidateIds<TEntity extends Record<string, unknown>>(store: GraphStore, opts: GraphQueryOptions<TEntity>): EntityId[] {\n if (opts.id) return [opts.id];\n if (opts.ids) return opts.ids;\n if (opts.listKey) return store.lists[opts.listKey]?.ids ?? [];\n return Object.keys(store.entities[opts.type] ?? {});\n}\n\nfunction projectRow(\n row: EntitySnapshot<Record<string, unknown>>,\n include: GraphIncludeMap | undefined,\n store: GraphStore,\n): ProjectedRow {\n if (!include) return row;\n\n const projected: ProjectedRow = { ...row };\n for (const [key, relation] of Object.entries(include)) {\n const related = resolveRelation(row, relation, store);\n projected[key] = related;\n }\n return projected;\n}\n\nfunction resolveRelation(\n entity: Record<string, unknown>,\n relation: GraphIncludeRelation,\n store: GraphStore,\n): ProjectedRow | ProjectedRow[] | null {\n const include = relation.include;\n\n switch (relation.via.kind) {\n case \"field\": {\n const relatedId = entity[relation.via.field];\n if (typeof relatedId !== \"string\") return null;\n const related = store.readEntitySnapshot<Record<string, unknown>>(relation.type, relatedId);\n return related ? projectRow(related, include, store) : null;\n }\n case \"array\": {\n const ids = entity[relation.via.field];\n if (!Array.isArray(ids)) return [];\n return ids\n .map((id) => (typeof id === \"string\" ? store.readEntitySnapshot<Record<string, unknown>>(relation.type, id) : null))\n .filter((row): row is EntitySnapshot<Record<string, unknown>> => row !== null)\n .map((row) => projectRow(row, include, store));\n }\n case \"list\": {\n const key =\n typeof relation.via.key === \"function\"\n ? relation.via.key(entity)\n : relation.via.key;\n if (!key) return [];\n const ids = store.lists[key]?.ids ?? [];\n return ids\n .map((id) => store.readEntitySnapshot<Record<string, unknown>>(relation.type, id))\n .filter((row): row is EntitySnapshot<Record<string, unknown>> => row !== null)\n .map((row) => projectRow(row, include, store));\n }\n case \"resolver\": {\n const resolved = relation.via.resolve(entity, store);\n if (Array.isArray(resolved)) {\n return resolved\n .map((id) => store.readEntitySnapshot<Record<string, unknown>>(relation.type, id))\n .filter((row): row is EntitySnapshot<Record<string, unknown>> => row !== null)\n .map((row) => projectRow(row, include, store));\n }\n if (typeof resolved !== \"string\") return null;\n const related = store.readEntitySnapshot<Record<string, unknown>>(relation.type, resolved);\n return related ? projectRow(related, include, store) : null;\n }\n }\n}\n\nfunction applySelection(\n row: ProjectedRow,\n select: GraphQueryOptions<Record<string, unknown>>[\"select\"],\n): ProjectedRow {\n if (!select) return row;\n if (typeof select === \"function\") {\n const result = select(row as EntitySnapshot<Record<string, unknown>> & Record<string, unknown>);\n return (result && typeof result === \"object\" ? result : { value: result }) as ProjectedRow;\n }\n\n const picked: ProjectedRow = {};\n for (const key of select) {\n if (key in row) picked[key] = row[key];\n }\n return picked;\n}\n","import { useGraphStore } from \"./graph\";\nimport type { EntityId, EntitySyncMetadata, EntityType, QueryKey, SyncOrigin } from \"./graph\";\n\ninterface GraphDataSnapshot {\n entities: ReturnType<typeof useGraphStore.getState>[\"entities\"];\n patches: ReturnType<typeof useGraphStore.getState>[\"patches\"];\n entityStates: ReturnType<typeof useGraphStore.getState>[\"entityStates\"];\n syncMetadata: ReturnType<typeof useGraphStore.getState>[\"syncMetadata\"];\n lists: ReturnType<typeof useGraphStore.getState>[\"lists\"];\n}\n\nexport interface GraphTransaction {\n upsertEntity: (type: EntityType, id: EntityId, data: Record<string, unknown>) => GraphTransaction;\n replaceEntity: (type: EntityType, id: EntityId, data: Record<string, unknown>) => GraphTransaction;\n removeEntity: (type: EntityType, id: EntityId) => GraphTransaction;\n patchEntity: (type: EntityType, id: EntityId, patch: Record<string, unknown>) => GraphTransaction;\n clearPatch: (type: EntityType, id: EntityId) => GraphTransaction;\n insertIdInList: (key: QueryKey, id: EntityId, position: \"start\" | \"end\" | number) => GraphTransaction;\n removeIdFromAllLists: (type: EntityType, id: EntityId) => GraphTransaction;\n setEntitySyncMetadata: (type: EntityType, id: EntityId, metadata: Partial<EntitySyncMetadata>) => GraphTransaction;\n markEntityPending: (type: EntityType, id: EntityId, origin?: SyncOrigin) => GraphTransaction;\n markEntitySynced: (type: EntityType, id: EntityId, origin?: SyncOrigin) => GraphTransaction;\n commit: () => void;\n rollback: () => void;\n snapshot: () => GraphDataSnapshot;\n}\n\nexport interface GraphActionOptions<TInput, TResult> {\n key?: string;\n optimistic?: (tx: GraphTransaction, input: TInput) => void;\n run: (tx: GraphTransaction, input: TInput) => Promise<TResult> | TResult;\n onSuccess?: (result: TResult, input: TInput, tx: GraphTransaction) => void;\n onError?: (error: Error, input: TInput) => void;\n}\n\nexport interface GraphActionRecord {\n id: string;\n key: string;\n input: unknown;\n enqueuedAt: string;\n}\n\nexport type GraphActionEvent =\n | { type: \"enqueued\"; record: GraphActionRecord }\n | { type: \"settled\"; record: GraphActionRecord };\n\nconst graphActionListeners = new Set<(event: GraphActionEvent) => void>();\nconst graphActionReplayers = new Map<string, (record: GraphActionRecord) => Promise<unknown>>();\n\nexport function createGraphTransaction(): GraphTransaction {\n const baseline = cloneGraphData();\n let closed = false;\n\n const tx: GraphTransaction = {\n upsertEntity(type, id, data) {\n useGraphStore.getState().upsertEntity(type, id, data);\n return tx;\n },\n replaceEntity(type, id, data) {\n useGraphStore.getState().replaceEntity(type, id, data);\n return tx;\n },\n removeEntity(type, id) {\n useGraphStore.getState().removeEntity(type, id);\n return tx;\n },\n patchEntity(type, id, patch) {\n useGraphStore.getState().patchEntity(type, id, patch);\n return tx;\n },\n clearPatch(type, id) {\n useGraphStore.getState().clearPatch(type, id);\n return tx;\n },\n insertIdInList(key, id, position) {\n useGraphStore.getState().insertIdInList(key, id, position);\n return tx;\n },\n removeIdFromAllLists(type, id) {\n useGraphStore.getState().removeIdFromAllLists(type, id);\n return tx;\n },\n setEntitySyncMetadata(type, id, metadata) {\n useGraphStore.getState().setEntitySyncMetadata(type, id, metadata);\n return tx;\n },\n markEntityPending(type, id, origin = \"optimistic\") {\n useGraphStore.getState().setEntitySyncMetadata(type, id, {\n synced: false,\n origin,\n updatedAt: Date.now(),\n });\n return tx;\n },\n markEntitySynced(type, id, origin = \"server\") {\n useGraphStore.getState().setEntitySyncMetadata(type, id, {\n synced: true,\n origin,\n updatedAt: Date.now(),\n });\n return tx;\n },\n commit() {\n closed = true;\n },\n rollback() {\n if (closed) return;\n useGraphStore.setState(cloneGraphData(baseline) as Partial<ReturnType<typeof useGraphStore.getState>>);\n closed = true;\n },\n snapshot() {\n return cloneGraphData();\n },\n };\n\n return tx;\n}\n\nexport function createGraphAction<TInput, TResult>(opts: GraphActionOptions<TInput, TResult>) {\n if (opts.key) {\n graphActionReplayers.set(opts.key, async (record) => {\n const tx = createGraphTransaction();\n try {\n const result = await opts.run(tx, record.input as TInput);\n tx.commit();\n return result;\n } catch (error) {\n tx.rollback();\n throw error;\n }\n });\n }\n\n return async (input: TInput): Promise<TResult> => {\n const tx = createGraphTransaction();\n const record = opts.key\n ? {\n id: `${opts.key}:${Date.now()}`,\n key: opts.key,\n input: structuredClone(input),\n enqueuedAt: new Date().toISOString(),\n }\n : null;\n\n try {\n if (record) emitGraphActionEvent({ type: \"enqueued\", record });\n opts.optimistic?.(tx, input);\n const result = await opts.run(tx, input);\n opts.onSuccess?.(result, input, tx);\n tx.commit();\n if (record) emitGraphActionEvent({ type: \"settled\", record });\n return result;\n } catch (error) {\n tx.rollback();\n const normalized = error instanceof Error ? error : new Error(String(error));\n if (record) emitGraphActionEvent({ type: \"settled\", record });\n opts.onError?.(normalized, input);\n throw normalized;\n }\n };\n}\n\nexport function subscribeGraphActionEvents(listener: (event: GraphActionEvent) => void) {\n graphActionListeners.add(listener);\n return () => graphActionListeners.delete(listener);\n}\n\nexport async function replayRegisteredGraphAction(record: GraphActionRecord) {\n const replayer = graphActionReplayers.get(record.key);\n if (!replayer) throw new Error(`No graph action registered for key \"${record.key}\"`);\n return replayer(record);\n}\n\nfunction cloneGraphData(\n source: Pick<ReturnType<typeof useGraphStore.getState>, \"entities\" | \"patches\" | \"entityStates\" | \"syncMetadata\" | \"lists\"> = useGraphStore.getState(),\n): GraphDataSnapshot {\n return {\n entities: structuredClone(source.entities),\n patches: structuredClone(source.patches),\n entityStates: structuredClone(source.entityStates),\n syncMetadata: structuredClone(source.syncMetadata),\n lists: structuredClone(source.lists),\n };\n}\n\nfunction emitGraphActionEvent(event: GraphActionEvent) {\n for (const listener of graphActionListeners) listener(event);\n}\n","import { useGraphStore } from \"./graph\";\n\nexport interface GraphEffectEvent<T> {\n key: string;\n value: T;\n previousValue: T;\n}\n\nexport interface GraphEffectOptions<T> {\n query: () => T[] | T | null;\n getKey?: (value: T, index: number) => string;\n skipInitial?: boolean;\n isEqual?: (previousValue: T, nextValue: T) => boolean;\n onEnter?: (event: { key: string; value: T }) => void;\n onUpdate?: (event: GraphEffectEvent<T>) => void;\n onExit?: (event: { key: string; previousValue: T }) => void;\n}\n\nexport interface GraphEffectHandle {\n dispose: () => void;\n}\n\nexport function createGraphEffect<T>(opts: GraphEffectOptions<T>): GraphEffectHandle {\n const getKey = opts.getKey ?? defaultGetKey;\n const isEqual = opts.isEqual ?? defaultIsEqual;\n\n let initialized = false;\n let previous = new Map<string, T>();\n\n const evaluate = () => {\n const nextValues = normalizeQueryResult(opts.query());\n const next = new Map<string, T>();\n\n nextValues.forEach((value, index) => {\n next.set(getKey(value, index), value);\n });\n\n if (!initialized) {\n initialized = true;\n previous = next;\n if (opts.skipInitial) return;\n }\n\n for (const [key, value] of next.entries()) {\n const previousValue = previous.get(key);\n if (previousValue === undefined) {\n opts.onEnter?.({ key, value });\n continue;\n }\n if (!isEqual(previousValue, value)) {\n opts.onUpdate?.({ key, value, previousValue });\n }\n }\n\n for (const [key, previousValue] of previous.entries()) {\n if (!next.has(key)) opts.onExit?.({ key, previousValue });\n }\n\n previous = next;\n };\n\n evaluate();\n const unsubscribe = useGraphStore.subscribe(() => {\n evaluate();\n });\n\n return {\n dispose: () => {\n unsubscribe();\n },\n };\n}\n\nfunction normalizeQueryResult<T>(value: T[] | T | null): T[] {\n if (value == null) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction defaultGetKey<T>(value: T, index: number): string {\n if (value && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n if (typeof record.id === \"string\") return record.id;\n if (typeof record.$key === \"string\") return record.$key;\n }\n return String(index);\n}\n\nfunction defaultIsEqual<T>(previousValue: T, nextValue: T): boolean {\n return JSON.stringify(previousValue) === JSON.stringify(nextValue);\n}\n","function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function getValueAtPath<T = unknown>(source: unknown, path: string): T | undefined {\n if (!path) return source as T;\n const segments = path.split(\".\").filter(Boolean);\n let current: unknown = source;\n for (const segment of segments) {\n if (!isObject(current) && !Array.isArray(current)) return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n return current as T | undefined;\n}\n\nexport function setValueAtPath<T extends Record<string, unknown>>(source: T, path: string, value: unknown): T {\n const segments = path.split(\".\").filter(Boolean);\n if (segments.length === 0) return source;\n\n const clone = structuredClone(source) as Record<string, unknown>;\n let current: Record<string, unknown> = clone;\n\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n const next = current[segment];\n if (!isObject(next)) current[segment] = {};\n current = current[segment] as Record<string, unknown>;\n }\n\n current[segments[segments.length - 1]] = value;\n return clone as T;\n}\n\nexport function collectDirtyPaths(current: unknown, original: unknown, prefix = \"\", acc = new Set<string>()): Set<string> {\n if (isObject(current) && isObject(original)) {\n const keys = new Set([...Object.keys(current), ...Object.keys(original)]);\n for (const key of keys) {\n const nextPrefix = prefix ? `${prefix}.${key}` : key;\n collectDirtyPaths(current[key], original[key], nextPrefix, acc);\n }\n return acc;\n }\n\n if (JSON.stringify(current) !== JSON.stringify(original) && prefix) acc.add(prefix);\n return acc;\n}\n","import React, { useMemo } from \"react\";\nimport type { FieldDescriptor, FieldType } from \"./ui/entity-sheets\";\nimport { getValueAtPath } from \"./object-path\";\n\nexport interface JsonSchemaObject {\n $id?: string;\n title?: string;\n description?: string;\n type?: string | string[];\n format?: string;\n enum?: unknown[];\n default?: unknown;\n properties?: Record<string, JsonSchemaObject>;\n items?: JsonSchemaObject;\n required?: string[];\n [\"x-a2ui-component\"]?: string;\n [\"x-display-order\"]?: number;\n [\"x-field-type\"]?: string;\n [\"x-hidden\"]?: boolean;\n}\n\nexport interface EntityJsonSchemaConfig {\n entityType: string;\n schemaId?: string;\n field?: string;\n version?: string;\n source?: \"static\" | \"runtime\" | \"ai\";\n schema: JsonSchemaObject;\n}\n\nexport interface GetEntityJsonSchemaOptions {\n entityType: string;\n schemaId?: string;\n field?: string;\n}\n\nexport interface SchemaFieldDescriptor<TEntity extends Record<string, unknown> = Record<string, unknown>>\n extends FieldDescriptor<TEntity> {\n schemaPath: string;\n schema: JsonSchemaObject;\n componentHint?: string;\n}\n\nexport interface BuildEntityFieldsFromSchemaOptions {\n schema: JsonSchemaObject;\n rootField?: string;\n}\n\nexport interface GraphSnapshotWithSchemasOptions {\n scope: string;\n data: unknown;\n schemas: Array<EntityJsonSchemaConfig | null | undefined>;\n pretty?: boolean;\n}\n\nconst schemaRegistry = new Map<string, EntityJsonSchemaConfig>();\n\nexport function registerEntityJsonSchema(config: EntityJsonSchemaConfig) {\n const key = registryKey(config.entityType, config.field, config.schemaId);\n schemaRegistry.set(key, config);\n}\n\nexport function registerRuntimeSchema(config: EntityJsonSchemaConfig) {\n registerEntityJsonSchema(config);\n}\n\nexport function getEntityJsonSchema(opts: GetEntityJsonSchemaOptions): EntityJsonSchemaConfig | null {\n const exact = schemaRegistry.get(registryKey(opts.entityType, opts.field, opts.schemaId));\n if (exact) return exact;\n if (opts.field) {\n const byField = schemaRegistry.get(registryKey(opts.entityType, opts.field));\n if (byField) return byField;\n }\n if (opts.schemaId) {\n const byId = schemaRegistry.get(registryKey(opts.entityType, undefined, opts.schemaId));\n if (byId) return byId;\n }\n\n for (const schema of schemaRegistry.values()) {\n if (schema.entityType !== opts.entityType) continue;\n if (opts.field && schema.field !== opts.field) continue;\n return schema;\n }\n\n return null;\n}\n\nexport function useSchemaEntityFields<TEntity extends Record<string, unknown> = Record<string, unknown>>(\n opts: GetEntityJsonSchemaOptions & { schema?: JsonSchemaObject; rootField?: string },\n) {\n return useMemo(() => {\n const schema = opts.schema ?? getEntityJsonSchema(opts)?.schema;\n if (!schema) return [];\n return buildEntityFieldsFromSchema<TEntity>({ schema, rootField: opts.rootField ?? opts.field });\n }, [opts.entityType, opts.field, opts.rootField, opts.schemaId, opts.schema]);\n}\n\nexport function buildEntityFieldsFromSchema<TEntity extends Record<string, unknown> = Record<string, unknown>>(\n opts: BuildEntityFieldsFromSchemaOptions,\n): SchemaFieldDescriptor<TEntity>[] {\n return buildSchemaFields<TEntity>(opts.schema, opts.rootField ?? \"\", \"\");\n}\n\nexport function exportGraphSnapshotWithSchemas(opts: GraphSnapshotWithSchemasOptions): string {\n return JSON.stringify(\n {\n scope: opts.scope,\n generatedAt: new Date().toISOString(),\n data: opts.data,\n schemas: opts.schemas.filter(Boolean),\n },\n null,\n opts.pretty === false ? 0 : 2,\n );\n}\n\nexport function escapeHtml(input: string): string {\n return input\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\");\n}\n\nexport function renderMarkdownToHtml(value: string): string {\n const escaped = escapeHtml(value);\n const blocks = escaped.split(/\\n{2,}/).map((block) => block.trim()).filter(Boolean);\n return blocks.map((block) => renderMarkdownBlock(block)).join(\"\");\n}\n\nexport function MarkdownFieldRenderer({ value, className }: { value: string; className?: string }) {\n return (\n <div\n className={className}\n dangerouslySetInnerHTML={{ __html: renderMarkdownToHtml(value ?? \"\") }}\n />\n );\n}\n\nexport function MarkdownFieldEditor({\n value,\n onChange,\n placeholder,\n}: {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n}) {\n return (\n <div className=\"flex flex-col gap-2\">\n <textarea\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder={placeholder}\n className=\"w-full min-h-[120px] rounded-md border bg-muted/50 px-3 py-2 text-sm resize-y focus:outline-none focus:ring-1 focus:ring-ring transition-colors\"\n />\n <div className=\"rounded-md border bg-background px-3 py-2\">\n <MarkdownFieldRenderer value={value} className=\"prose prose-sm max-w-none\" />\n </div>\n </div>\n );\n}\n\nexport function createMarkdownDetailRenderer<TEntity extends Record<string, unknown>>(field: string) {\n return (value: unknown, entity: TEntity) => (\n <MarkdownFieldRenderer value={String(value ?? getValueAtPath(entity, field) ?? \"\")} className=\"prose prose-sm max-w-none\" />\n );\n}\n\nfunction buildSchemaFields<TEntity extends Record<string, unknown>>(\n schema: JsonSchemaObject,\n pathPrefix: string,\n schemaPathPrefix: string,\n): SchemaFieldDescriptor<TEntity>[] {\n if (schema.type === \"object\" && schema.properties) {\n const entries = Object.entries(schema.properties).sort(([, left], [, right]) => {\n const l = left[\"x-display-order\"] ?? Number.MAX_SAFE_INTEGER;\n const r = right[\"x-display-order\"] ?? Number.MAX_SAFE_INTEGER;\n return l - r;\n });\n\n return entries.flatMap(([key, childSchema]) => {\n if (childSchema[\"x-hidden\"]) return [];\n const field = pathPrefix ? `${pathPrefix}.${key}` : key;\n const schemaPath = schemaPathPrefix ? `${schemaPathPrefix}.${key}` : key;\n if (childSchema.type === \"object\" && childSchema.properties) {\n return buildSchemaFields<TEntity>(childSchema, field, schemaPath);\n }\n return [schemaField<TEntity>(field, schemaPath, childSchema, schema.required?.includes(key) ?? false)];\n });\n }\n\n return [];\n}\n\nfunction schemaField<TEntity extends Record<string, unknown>>(\n field: string,\n schemaPath: string,\n schema: JsonSchemaObject,\n required: boolean,\n): SchemaFieldDescriptor<TEntity> {\n const type = inferFieldType(schema);\n const descriptor: SchemaFieldDescriptor<TEntity> = {\n field,\n label: schema.title ?? humanize(field.split(\".\").pop() ?? field),\n type,\n required,\n hint: schema.description,\n schemaPath,\n schema,\n componentHint: schema[\"x-a2ui-component\"],\n };\n\n if (schema.enum) {\n descriptor.options = schema.enum.map((value) => ({\n value: String(value),\n label: String(value),\n }));\n }\n\n if (type === \"markdown\") {\n descriptor.render = createMarkdownDetailRenderer(field);\n }\n\n return descriptor;\n}\n\nfunction inferFieldType(schema: JsonSchemaObject): FieldType {\n const forced = schema[\"x-field-type\"];\n if (forced === \"markdown\") return \"markdown\";\n if (schema.format === \"markdown\") return \"markdown\";\n if (schema.enum) return \"enum\";\n\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n switch (type) {\n case \"boolean\":\n return \"boolean\";\n case \"integer\":\n case \"number\":\n return \"number\";\n case \"string\":\n if (schema.format === \"email\") return \"email\";\n if (schema.format === \"uri\" || schema.format === \"url\") return \"url\";\n if (schema.format === \"date\" || schema.format === \"date-time\") return \"date\";\n return \"text\";\n case \"array\":\n case \"object\":\n return \"json\";\n default:\n return \"text\";\n }\n}\n\nfunction registryKey(entityType: string, field?: string, schemaId?: string) {\n return `${entityType}::${field ?? \"*\"}::${schemaId ?? \"*\"}`;\n}\n\nfunction humanize(value: string) {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nfunction renderMarkdownBlock(block: string): string {\n if (block.startsWith(\"# \")) return `<h1>${renderInlineMarkdown(block.slice(2))}</h1>`;\n if (block.startsWith(\"## \")) return `<h2>${renderInlineMarkdown(block.slice(3))}</h2>`;\n return `<p>${renderInlineMarkdown(block).replaceAll(\"\\n\", \"<br/>\")}</p>`;\n}\n\nfunction renderInlineMarkdown(block: string): string {\n return block.replace(/\\*\\*(.+?)\\*\\*/g, \"<strong>$1</strong>\");\n}\n","import { useGraphStore } from \"./graph\";\nimport { queryOnce } from \"./graph-query\";\nimport { exportGraphSnapshotWithSchemas, getEntityJsonSchema } from \"./schema\";\n\nexport interface GraphSnapshotExportOptions {\n scope: string;\n data: unknown;\n pretty?: boolean;\n}\n\nexport interface GraphToolContext {\n store: ReturnType<typeof useGraphStore.getState>;\n queryOnce: typeof queryOnce;\n exportGraphSnapshot: typeof exportGraphSnapshot;\n}\n\nexport interface SchemaGraphToolContext extends GraphToolContext {\n getEntityJsonSchema: typeof getEntityJsonSchema;\n exportGraphSnapshotWithSchemas: typeof exportGraphSnapshotWithSchemas;\n}\n\nexport function exportGraphSnapshot(opts: GraphSnapshotExportOptions): string {\n const payload = {\n scope: opts.scope,\n generatedAt: new Date().toISOString(),\n data: opts.data,\n };\n return JSON.stringify(payload, null, opts.pretty === false ? 0 : 2);\n}\n\nexport function createGraphTool<TInput, TResult>(\n handler: (input: TInput, ctx: GraphToolContext) => Promise<TResult> | TResult,\n) {\n return (input: TInput) =>\n handler(input, {\n store: useGraphStore.getState(),\n queryOnce,\n exportGraphSnapshot,\n });\n}\n\nexport function createSchemaGraphTool<TInput, TResult>(\n handler: (input: TInput, ctx: SchemaGraphToolContext) => Promise<TResult> | TResult,\n) {\n return (input: TInput) =>\n handler(input, {\n store: useGraphStore.getState(),\n queryOnce,\n exportGraphSnapshot,\n getEntityJsonSchema,\n exportGraphSnapshotWithSchemas,\n });\n}\n","import { create } from \"zustand\";\nimport { useGraphStore } from \"./graph\";\nimport { replayRegisteredGraphAction, subscribeGraphActionEvents } from \"./graph-actions\";\n\nexport interface GraphPersistenceAdapter {\n get: (key: string) => Promise<string | null> | string | null;\n set: (key: string, value: string) => Promise<void> | void;\n remove?: (key: string) => Promise<void> | void;\n}\n\nexport interface GraphActionRecord {\n id: string;\n key: string;\n input: unknown;\n enqueuedAt: string;\n}\n\nexport interface GraphSyncStatus {\n phase: \"idle\" | \"hydrating\" | \"syncing\" | \"ready\" | \"offline\" | \"error\";\n isOnline: boolean;\n isSynced: boolean;\n pendingActions: number;\n lastHydratedAt: string | null;\n lastPersistedAt: string | null;\n storageKey: string | null;\n error: string | null;\n}\n\nexport interface GraphSnapshotPayload {\n version: 1;\n snapshot: {\n entities: ReturnType<typeof useGraphStore.getState>[\"entities\"];\n patches: ReturnType<typeof useGraphStore.getState>[\"patches\"];\n entityStates: ReturnType<typeof useGraphStore.getState>[\"entityStates\"];\n syncMetadata: ReturnType<typeof useGraphStore.getState>[\"syncMetadata\"];\n lists: ReturnType<typeof useGraphStore.getState>[\"lists\"];\n };\n pendingActions: GraphActionRecord[];\n}\n\nexport interface PersistGraphToStorageOptions {\n storage: GraphPersistenceAdapter;\n key: string;\n pendingActions?: GraphActionRecord[];\n}\n\nexport interface HydrateGraphFromStorageOptions {\n storage: GraphPersistenceAdapter;\n key: string;\n}\n\nexport interface StartLocalFirstGraphOptions {\n storage: GraphPersistenceAdapter;\n key?: string;\n replayPendingActions?: boolean;\n onlineSource?: {\n getIsOnline: () => boolean;\n subscribe: (listener: (online: boolean) => void) => () => void;\n };\n persistDebounceMs?: number;\n}\n\nexport interface LocalFirstGraphRuntime {\n ready: Promise<void>;\n dispose: () => void;\n persistNow: () => Promise<void>;\n hydrate: () => Promise<Awaited<ReturnType<typeof hydrateGraphFromStorage>>>;\n getStatus: () => GraphSyncStatus;\n}\n\nconst DEFAULT_STORAGE_KEY = \"prometheus:graph\";\n\nconst useGraphSyncStatusStore = create<{ status: GraphSyncStatus; setStatus: (status: Partial<GraphSyncStatus>) => void }>((set) => ({\n status: {\n phase: \"idle\",\n isOnline: true,\n isSynced: true,\n pendingActions: 0,\n lastHydratedAt: null,\n lastPersistedAt: null,\n storageKey: null,\n error: null,\n },\n setStatus: (status) =>\n set((state) => ({\n status: {\n ...state.status,\n ...status,\n },\n })),\n}));\n\nconst pendingActions = new Map<string, GraphActionRecord>();\n\nexport function useGraphSyncStatus() {\n return useGraphSyncStatusStore((state) => state.status);\n}\n\nexport async function persistGraphToStorage(opts: PersistGraphToStorageOptions) {\n const payload: GraphSnapshotPayload = {\n version: 1,\n snapshot: cloneGraphSnapshot(),\n pendingActions: opts.pendingActions ?? Array.from(pendingActions.values()),\n };\n const json = JSON.stringify(payload);\n await opts.storage.set(opts.key, json);\n const persistedAt = new Date().toISOString();\n useGraphSyncStatusStore.getState().setStatus({\n lastPersistedAt: persistedAt,\n storageKey: opts.key,\n pendingActions: payload.pendingActions.length,\n });\n return {\n ok: true as const,\n key: opts.key,\n bytes: json.length,\n persistedAt,\n };\n}\n\nexport async function hydrateGraphFromStorage(opts: HydrateGraphFromStorageOptions) {\n const raw = await opts.storage.get(opts.key);\n if (!raw) {\n return {\n ok: false as const,\n key: opts.key,\n hydratedAt: null,\n entityCounts: {},\n error: \"No persisted graph snapshot found\",\n };\n }\n\n try {\n const parsed = JSON.parse(raw) as GraphSnapshotPayload;\n useGraphStore.setState(parsed.snapshot as Partial<ReturnType<typeof useGraphStore.getState>>);\n pendingActions.clear();\n for (const action of parsed.pendingActions ?? []) pendingActions.set(action.id, action);\n const hydratedAt = new Date().toISOString();\n useGraphSyncStatusStore.getState().setStatus({\n lastHydratedAt: hydratedAt,\n storageKey: opts.key,\n pendingActions: pendingActions.size,\n error: null,\n });\n return {\n ok: true as const,\n key: opts.key,\n hydratedAt,\n entityCounts: Object.fromEntries(\n Object.entries(parsed.snapshot.entities).map(([type, entities]) => [type, Object.keys(entities).length]),\n ),\n pendingActions: Array.from(pendingActions.values()),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n useGraphSyncStatusStore.getState().setStatus({\n phase: \"error\",\n error: message,\n storageKey: opts.key,\n });\n return {\n ok: false as const,\n key: opts.key,\n hydratedAt: null,\n entityCounts: {},\n error: message,\n };\n }\n}\n\nexport function startLocalFirstGraph(opts: StartLocalFirstGraphOptions): LocalFirstGraphRuntime {\n const key = opts.key ?? DEFAULT_STORAGE_KEY;\n const persistDebounceMs = opts.persistDebounceMs ?? 50;\n const statusStore = useGraphSyncStatusStore.getState();\n statusStore.setStatus({\n phase: \"hydrating\",\n storageKey: key,\n isOnline: opts.onlineSource?.getIsOnline() ?? getDefaultOnlineSource().getIsOnline(),\n isSynced: pendingActions.size === 0,\n error: null,\n });\n\n let persistTimer: ReturnType<typeof setTimeout> | null = null;\n const schedulePersist = () => {\n if (persistTimer) clearTimeout(persistTimer);\n persistTimer = setTimeout(() => {\n void persistGraphToStorage({ storage: opts.storage, key });\n }, persistDebounceMs);\n };\n\n const graphUnsub = useGraphStore.subscribe(() => {\n schedulePersist();\n });\n\n const actionUnsub = subscribeGraphActionEvents((event) => {\n if (event.type === \"enqueued\") pendingActions.set(event.record.id, event.record);\n if (event.type === \"settled\") pendingActions.delete(event.record.id);\n useGraphSyncStatusStore.getState().setStatus({\n pendingActions: pendingActions.size,\n isSynced: pendingActions.size === 0,\n });\n schedulePersist();\n });\n\n const onlineSource = opts.onlineSource ?? getDefaultOnlineSource();\n const onlineUnsub = onlineSource.subscribe((online) => {\n useGraphSyncStatusStore.getState().setStatus({\n isOnline: online,\n phase: online ? \"ready\" : \"offline\",\n });\n });\n\n const ready = (async () => {\n const hydrated = await hydrateGraphFromStorage({ storage: opts.storage, key });\n if (opts.replayPendingActions && hydrated.ok && pendingActions.size > 0) {\n useGraphSyncStatusStore.getState().setStatus({\n phase: \"syncing\",\n isSynced: false,\n });\n for (const action of Array.from(pendingActions.values())) {\n await replayRegisteredGraphAction(action);\n pendingActions.delete(action.id);\n }\n await persistGraphToStorage({ storage: opts.storage, key });\n }\n\n const online = onlineSource.getIsOnline();\n useGraphSyncStatusStore.getState().setStatus({\n phase: online ? \"ready\" : \"offline\",\n isOnline: online,\n isSynced: pendingActions.size === 0,\n pendingActions: pendingActions.size,\n });\n })();\n\n return {\n ready,\n dispose() {\n graphUnsub();\n actionUnsub();\n onlineUnsub();\n if (persistTimer) clearTimeout(persistTimer);\n },\n async persistNow() {\n await persistGraphToStorage({ storage: opts.storage, key });\n },\n hydrate() {\n return hydrateGraphFromStorage({ storage: opts.storage, key });\n },\n getStatus() {\n return useGraphSyncStatusStore.getState().status;\n },\n };\n}\n\nfunction cloneGraphSnapshot() {\n const state = useGraphStore.getState();\n return {\n entities: structuredClone(state.entities),\n patches: structuredClone(state.patches),\n entityStates: structuredClone(state.entityStates),\n syncMetadata: structuredClone(state.syncMetadata),\n lists: structuredClone(state.lists),\n };\n}\n\nfunction getDefaultOnlineSource() {\n if (typeof window !== \"undefined\" && typeof window.addEventListener === \"function\") {\n return {\n getIsOnline: () => window.navigator.onLine,\n subscribe: (listener: (online: boolean) => void) => {\n const onlineHandler = () => listener(true);\n const offlineHandler = () => listener(false);\n window.addEventListener(\"online\", onlineHandler);\n window.addEventListener(\"offline\", offlineHandler);\n return () => {\n window.removeEventListener(\"online\", onlineHandler);\n window.removeEventListener(\"offline\", offlineHandler);\n };\n },\n };\n }\n\n return {\n getIsOnline: () => true,\n subscribe: () => () => {},\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 dataSelector = useCallback((state: ReturnType<typeof useGraphStore.getState>) => {\n if (!id) return null;\n return state.readEntitySnapshot<TEntity>(type, id) as TEntity | null;\n }, [id, type]);\n const data = useStore(useGraphStore, useShallow(dataSelector));\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 itemsSelector = useCallback((state: ReturnType<typeof useGraphStore.getState>) => {\n const ids = state.lists[key]?.ids ?? EMPTY_IDS;\n return ids\n .map((id) => state.readEntitySnapshot<TEntity>(type, id))\n .filter((x) => x !== null) as TEntity[];\n }, [key, type]);\n const items = useStore(useGraphStore, useShallow(itemsSelector));\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 const previousSync = store.syncMetadata[`${type}:${id}`];\n store.patchEntity(type, id, patch as Record<string, unknown>);\n store.setEntitySyncMetadata(type, id, { synced: false, origin: \"optimistic\", updatedAt: Date.now() });\n rollback = () => {\n const currentStore = useGraphStore.getState();\n if (Object.keys(previous).length > 0) currentStore.patchEntity(type, id, previous);\n else currentStore.clearPatch(type, id);\n if (previousSync) currentStore.setEntitySyncMetadata(type, id, previousSync);\n else currentStore.clearEntitySyncMetadata(type, id);\n };\n }\n }\n try {\n const result = await apiFn(input);\n if (normalize) {\n const { id, data } = normalize(result, input);\n const store = useGraphStore.getState();\n store.upsertEntity(type, id, data);\n store.setEntitySyncMetadata(type, id, { synced: true, origin: \"server\", updatedAt: Date.now() });\n if (optimistic) { const opt = optimistic(input); if (opt) store.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 => state.readEntitySnapshot(type, id);\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) => state.readEntitySnapshot<TEntity>(type, id))\n .filter((item) => item !== null) as TEntity[],\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>;\n const merged = store.readEntitySnapshot(type, id) ?? 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) => store.readEntitySnapshot(type, eid), 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\";\nimport { collectDirtyPaths, setValueAtPath } from \"../object-path\";\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/** Public field input for CRUD setters: supports classic `keyof T` calls and dotted nested paths for JSON-backed forms. */\nexport type EntityFieldPath<TEntity extends Record<string, unknown>> = keyof TEntity | string;\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 extends Record<string, unknown>> {\n changed: ReadonlySet<EntityFieldPath<TEntity>>;\n isDirty: boolean;\n}\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: (field: EntityFieldPath<TEntity>, value: unknown) => 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: (field: EntityFieldPath<TEntity>, value: unknown) => 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((field: EntityFieldPath<TEntity>, value: unknown) => setEditBuffer((prev) => setValueAtPath(prev as Record<string, unknown>, String(field), value) as Partial<TEntity>), []);\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 = collectDirtyPaths(editBuffer, detail);\n return { changed: changed as ReadonlySet<EntityFieldPath<TEntity>>, 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(() => {\n if (!selectedId) return;\n const store = useGraphStore.getState();\n store.patchEntity(type, selectedId, editBuffer as Record<string, unknown>);\n store.setEntitySyncMetadata(type, selectedId, { synced: false, origin: \"optimistic\", updatedAt: Date.now() });\n }, [type, selectedId, editBuffer]);\n const save = useCallback(async (): Promise<TEntity | null> => {\n if (!selectedId || !onUpdate) return null;\n setIsSaving(true); setSaveError(null);\n const store = useGraphStore.getState();\n const previous = store.readEntity<TEntity>(type, selectedId);\n const previousSync = store.syncMetadata[`${type}:${selectedId}`];\n store.upsertEntity(type, selectedId, editBuffer as Record<string, unknown>);\n store.setEntitySyncMetadata(type, selectedId, { synced: false, origin: \"optimistic\", updatedAt: Date.now() });\n try {\n const result = await onUpdate(selectedId, editBuffer);\n const { id, data } = normalize(result);\n store.replaceEntity(type, id, data as Record<string, unknown>);\n store.clearPatch(type, id);\n store.setEntitySyncMetadata(type, id, { synced: true, origin: \"server\", updatedAt: Date.now() });\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) store.replaceEntity(type, selectedId, previous as Record<string, unknown>);\n if (previousSync) store.setEntitySyncMetadata(type, selectedId, previousSync);\n else store.clearEntitySyncMetadata(type, selectedId);\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((field: EntityFieldPath<TEntity>, value: unknown) => setCreateBuffer((prev) => setValueAtPath(prev as Record<string, unknown>, String(field), value) as Partial<TEntity>), []);\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 const store = useGraphStore.getState();\n store.upsertEntity(type, tempId, optimisticData as Record<string, unknown>);\n store.setEntitySyncMetadata(type, tempId, { synced: false, origin: \"optimistic\", updatedAt: Date.now() });\n store.insertIdInList(serializeKey(listQueryKey), tempId, \"start\");\n try {\n const result = await onCreate(createBuffer);\n const { id: realId, data } = normalize(result);\n store.removeEntity(type, tempId);\n store.upsertEntity(type, realId, data as Record<string, unknown>);\n store.setEntityFetched(type, realId);\n store.setEntitySyncMetadata(type, realId, { synced: true, origin: \"server\", updatedAt: Date.now() });\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 store.removeEntity(type, tempId); store.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 return s.readEntitySnapshot<TEntity>(type, id) as TEntity | null;\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\n .map((id) => s.readEntitySnapshot<TEntity>(type, id))\n .filter((x) => x !== null) as TEntity[];\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\";\nimport { getValueAtPath } from \"../object-path\";\nimport { MarkdownFieldEditor, MarkdownFieldRenderer } from \"../schema\";\n\n// ---------------------------------------------------------------------------\n// Field descriptors\n// ---------------------------------------------------------------------------\nexport type FieldType = \"text\" | \"textarea\" | \"number\" | \"email\" | \"url\" | \"date\" | \"boolean\" | \"enum\" | \"json\" | \"markdown\" | \"custom\";\n\nexport interface FieldDescriptor<TEntity> {\n field: 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 \"markdown\":\n return <MarkdownFieldEditor value={String(value ?? \"\")} onChange={(nextValue) => onChange(nextValue)} placeholder={descriptor.placeholder} />;\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 case \"json\":\n return (\n <textarea\n value={value != null ? JSON.stringify(value, null, 2) : \"\"}\n onChange={(event) => {\n const nextValue = event.target.value;\n try {\n onChange(nextValue ? JSON.parse(nextValue) : null);\n } catch {\n onChange(nextValue);\n }\n }}\n placeholder={descriptor.placeholder}\n className=\"w-full min-h-[120px] rounded-md border bg-muted/50 px-3 py-2 text-sm font-mono resize-y focus:outline-none focus:ring-1 focus:ring-ring transition-colors\"\n />\n );\n default:\n return <input value={String(value ?? \"\")} onChange={e => onChange(e.target.value)} className={base} />;\n }\n}\n\nfunction FieldReadonlyValue<TEntity extends Record<string, unknown>>({ descriptor, value, entity }: { descriptor: FieldDescriptor<TEntity>; value: unknown; entity: TEntity }) {\n if (descriptor.render) return <>{descriptor.render(value, entity)}</>;\n if (descriptor.type === \"markdown\") return <MarkdownFieldRenderer value={String(value ?? \"\")} className=\"prose prose-sm max-w-none py-1\" />;\n if (descriptor.type === \"json\") return <pre className=\"text-xs py-1 whitespace-pre-wrap break-words\">{JSON.stringify(value ?? null, null, 2)}</pre>;\n return <p className=\"text-sm py-1\">{value != null && value !== \"\" ? String(value) : \"—\"}</p>;\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 <FieldReadonlyValue descriptor={f} value={getValueAtPath(entity, f.field)} entity={entity} />\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);\n const currentValue = getValueAtPath(buf, f.field);\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={currentValue} onChange={v => setField(f.field, v)} 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"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/transport/registry.ts","../src/view/prisma-compile.ts","../src/view/types.ts","../src/transport/rest.ts","../src/graph.ts","../src/engine.ts","../src/hooks/use-entities.ts","../src/view/evaluator.ts","../src/hooks/use-entity-query.ts","../src/graph-query.ts","../src/graph-actions.ts","../src/graph-effects.ts","../src/object-path.ts","../src/schema.tsx","../src/ai-interop.ts","../src/local-first-runtime.ts","../src/devtools.ts","../src/hooks.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/adapters/electricsql-tenant.ts","../src/adapters/pglite-persistence.ts","../src/schema-from-sql.ts","../src/table/use-entity-list-as-table.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":["message","create","subscribeWithSelector","immer","fetch","sleep","useMemo","useRef","useState","useStore","useCallback","useEffect","useShallow","jsx","jsxs","useSyncExternalStore","EMPTY_ENTITY_BUCKET","schemaRegistry","list","id","document","twMerge","clsx","useReactTable","getCoreRowModel","getSortedRowModel","Search","X","Loader2","Fragment","RefreshCw","flexRender","_","ChevronLeft","ChevronRight","React","Pencil","Trash2","rows","s","newSort","createStore","persist","createContext","useContext","InlineCellEditor","useId","PencilIcon","TrashIcon","XIcon","PlusIcon","selectionColumn","textColumn","numberColumn","dateColumn","booleanColumn","enumColumn","actionsColumn"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Typed errors used throughout 2.0 to drive retry policy and consumer\n * UI decisions.\n *\n * Why two classes (not a discriminator field):\n * - `instanceof` checks are zero-cost at runtime and survive bundler\n * minification of property names.\n * - Consumers can write `if (error instanceof TerminalError) renderInline()`\n * without importing a type-narrowing helper.\n * - The engine's retry policy is one `instanceof TransientError` check.\n *\n * 4xx → `TerminalError` (no retry — the request is structurally wrong:\n * unauthorized, not-found, schema mismatch, validation failure).\n *\n * 5xx + network failures → `TransientError` (engine retries with\n * exponential backoff up to `maxRetries`).\n *\n * Custom transports can throw either class. The default REST helper\n * (`makeRestTransport`) maps HTTP status codes to the appropriate\n * class automatically.\n *\n * Both classes preserve the original error via the standard\n * `cause` option so stack traces survive the boundary.\n */\n\nexport interface EntityErrorOptions {\n /** HTTP status if the underlying transport was HTTP. */\n status?: number;\n /** Original thrown value (`Error`, `Response`, anything). */\n cause?: unknown;\n}\n\n/**\n * Permanent failure — do not retry. The request will not succeed by\n * trying again with the same inputs.\n *\n * Typical sources: HTTP 4xx, missing tables, validation errors,\n * permission denied, schema mismatches.\n */\nexport class TerminalError extends Error {\n readonly kind = \"terminal\" as const;\n readonly status?: number;\n\n constructor(message: string, opts: EntityErrorOptions = {}) {\n super(message, { cause: opts.cause });\n this.name = \"TerminalError\";\n this.status = opts.status;\n // Preserve stack across minification / older runtimes.\n if (typeof (Error as { captureStackTrace?: unknown }).captureStackTrace === \"function\") {\n (Error as unknown as { captureStackTrace: (target: object, ctor: unknown) => void })\n .captureStackTrace(this, TerminalError);\n }\n }\n}\n\n/**\n * Temporary failure — safe to retry. The engine will retry with\n * exponential backoff up to the configured `maxRetries`.\n *\n * Typical sources: HTTP 5xx, network timeouts, fetch rejections,\n * dropped sockets.\n */\nexport class TransientError extends Error {\n readonly kind = \"transient\" as const;\n readonly status?: number;\n\n constructor(message: string, opts: EntityErrorOptions = {}) {\n super(message, { cause: opts.cause });\n this.name = \"TransientError\";\n this.status = opts.status;\n if (typeof (Error as { captureStackTrace?: unknown }).captureStackTrace === \"function\") {\n (Error as unknown as { captureStackTrace: (target: object, ctor: unknown) => void })\n .captureStackTrace(this, TransientError);\n }\n }\n}\n\n/**\n * Union of every typed error the library raises. Use on consumer-side\n * `error` props when both classes are possible.\n */\nexport type EntityError = TerminalError | TransientError;\n\n/**\n * Convert an unknown thrown value into a typed entity error.\n *\n * - Already-typed errors pass through.\n * - HTTP-status-bearing errors become Terminal (4xx) or Transient (5xx).\n * - `AbortError` / `DOMException` \"AbortError\" → Terminal (caller\n * cancelled; not worth retrying).\n * - Everything else → Transient (assume retryable; better than\n * accidentally permanently failing on a one-off network blip).\n */\nexport function toEntityError(err: unknown): EntityError {\n if (err instanceof TerminalError) return err;\n if (err instanceof TransientError) return err;\n\n // Abort surfaces as DOMException(\"AbortError\") in browsers and as\n // `Error` with name \"AbortError\" in node — treat both as terminal.\n if (err && typeof err === \"object\" && \"name\" in err && (err as { name?: unknown }).name === \"AbortError\") {\n return new TerminalError(\"Aborted\", { cause: err });\n }\n\n // Plain object with a `status` field (e.g. a thrown Response or\n // PostgrestError shape).\n if (err && typeof err === \"object\" && \"status\" in err) {\n const status = Number((err as { status?: unknown }).status);\n const message = (err && typeof err === \"object\" && \"message\" in err)\n ? String((err as { message?: unknown }).message ?? `HTTP ${status}`)\n : `HTTP ${status}`;\n if (Number.isFinite(status) && status >= 400 && status < 500) {\n return new TerminalError(message, { status, cause: err });\n }\n if (Number.isFinite(status) && status >= 500) {\n return new TransientError(message, { status, cause: err });\n }\n }\n\n const message = err instanceof Error ? err.message : String(err);\n return new TransientError(message, { cause: err });\n}\n","/**\n * Process-global registry of `EntityTransport` instances by entity type.\n *\n * Why global state: every consumer of `useEntities(\"Client\")` must\n * resolve the SAME transport. Threading a registry through React\n * context would require every test, every isolated story, every\n * non-React caller (engine internals) to plumb the context — a tax\n * that buys nothing. The 1.x library already used module-global state\n * for the `useGraphStore` Zustand store; this follows the same shape.\n *\n * The registry is mutable: re-registering a type silently replaces the\n * prior transport (tests rely on this; production code should only\n * register once at app boot).\n */\n\nimport type { EntityType } from \"../graph\";\nimport type { EntityTransport } from \"./types\";\n\n// Keyed by entity type. `unknown` because each entity has a different\n// row shape; consumers cast at the `getEntityTransport<T>(type)` call site.\nconst transports = new Map<EntityType, EntityTransport<object>>();\n\n/**\n * Register the transport for an entity type. Called once per type at\n * app boot, typically from `src/shared/db/entity-transports.ts` in the\n * consuming application.\n *\n * Re-registering REPLACES the prior transport — useful for tests, a\n * footgun for production code. If you find yourself re-registering at\n * runtime, you almost certainly want a different design.\n */\nexport function registerEntityTransport<T extends object>(\n type: EntityType,\n transport: EntityTransport<T>,\n): void {\n transports.set(type, transport as unknown as EntityTransport<object>);\n}\n\n/**\n * Look up the transport for an entity type. Throws if none is\n * registered — there is no \"default\" transport, by design.\n *\n * The cast to `EntityTransport<T>` is the API ergonomic\n * compromise that lets call sites stay generic; the registry stores\n * `EntityTransport<object>` because TypeScript can't otherwise unify\n * heterogeneous rows in one map.\n */\nexport function getEntityTransport<T extends object>(\n type: EntityType,\n): EntityTransport<T> {\n const t = transports.get(type);\n if (!t) {\n throw new Error(\n `[entity-management] No transport registered for entity type \"${type}\". ` +\n `Call registerEntityTransport(\"${type}\", ...) at app boot.`,\n );\n }\n return t as unknown as EntityTransport<T>;\n}\n\n/**\n * Test-only: clear ALL registered transports. Production code should\n * never need this; tests use it to reset between specs.\n */\nexport function __resetEntityTransports(): void {\n transports.clear();\n}\n\n/**\n * Introspection: how many transports are currently registered.\n * Useful for asserting in tests that boot wiring ran exactly once.\n */\nexport function getRegisteredEntityTypes(): EntityType[] {\n return Array.from(transports.keys());\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","/**\n * `makeRestTransport` — built-in helper for the most common case: a\n * Supabase / PostgREST backend reached through a `SupabaseClient`-like\n * object.\n *\n * Why a helper (not a class): consumers stay declarative —\n * registerEntityTransport(\"Client\",\n * makeRestTransport<Client>({ supabase, table: \"client\" }));\n * — and the library never imports `@supabase/supabase-js` directly\n * (peer-dep-free).\n *\n * The transport:\n * - Compiles `ListQuery` (filter / sort / search / cursor / limit)\n * into a PostgREST query via the supabase-js builder.\n * - Maps HTTP status to `TerminalError` (4xx) or `TransientError`\n * (5xx / network).\n * - Honours `AbortSignal` via supabase-js `.abortSignal(signal)`.\n * - Returns `total` from PostgREST `count: 'exact'` when requested.\n */\n\nimport { TerminalError, TransientError, toEntityError } from \"../errors\";\nimport type { FilterClause, FilterGroup, FilterSpec, SortClause } from \"../view/types\";\nimport { flattenClauses } from \"../view/types\";\nimport type { ChangeEvent, EntityTransport, ListQuery, ListResult } from \"./types\";\n\n/**\n * Minimal slice of the `@supabase/supabase-js` `SupabaseClient` we use.\n * Declared structurally so the library does not need to import the\n * package as a dependency (peer-dep-free).\n */\nexport interface SupabaseLike {\n from: (table: string) => SupabaseQueryBuilderLike;\n}\n\n/**\n * Subset of the supabase-js builder we exercise. Each call returns the\n * same builder for chaining; `then`-able at the end resolves to\n * `{ data, error, count, status }`.\n */\nexport interface SupabaseQueryBuilderLike {\n select: (columns: string, opts?: { count?: \"exact\" | \"planned\" | \"estimated\"; head?: boolean }) => SupabaseQueryBuilderLike;\n eq: (col: string, val: unknown) => SupabaseQueryBuilderLike;\n neq: (col: string, val: unknown) => SupabaseQueryBuilderLike;\n gt: (col: string, val: unknown) => SupabaseQueryBuilderLike;\n gte: (col: string, val: unknown) => SupabaseQueryBuilderLike;\n lt: (col: string, val: unknown) => SupabaseQueryBuilderLike;\n lte: (col: string, val: unknown) => SupabaseQueryBuilderLike;\n in: (col: string, vals: readonly unknown[]) => SupabaseQueryBuilderLike;\n ilike: (col: string, pattern: string) => SupabaseQueryBuilderLike;\n is: (col: string, val: null | boolean) => SupabaseQueryBuilderLike;\n or: (filter: string) => SupabaseQueryBuilderLike;\n order: (col: string, opts?: { ascending?: boolean; nullsFirst?: boolean }) => SupabaseQueryBuilderLike;\n range: (from: number, to: number) => SupabaseQueryBuilderLike;\n limit: (n: number) => SupabaseQueryBuilderLike;\n abortSignal?: (signal: AbortSignal) => SupabaseQueryBuilderLike;\n then: <TResult1 = unknown, TResult2 = never>(\n onfulfilled?: ((value: { data: unknown; error: unknown; count?: number | null; status?: number }) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null,\n ) => Promise<TResult1 | TResult2>;\n}\n\n/** Options for `makeRestTransport`. */\nexport interface MakeRestTransportOptions<T extends object> {\n /** A `@supabase/supabase-js` client (or any structurally-compatible thing). */\n supabase: SupabaseLike;\n /** PostgREST table name. */\n table: string;\n /** Columns to select (default `\"*\"`). */\n select?: string;\n /** Stable id derivation. Defaults to `(row) => String(row.id)`. */\n identify?: (row: T) => string;\n /** Whether the local cache is treated as authoritative. */\n authoritative?: boolean;\n /** Stale-time hint in ms. */\n staleTime?: number;\n /** Free-text search column list (compiled to `or=col.ilike.*query*,…`). */\n searchColumns?: string[];\n /** Default page size when `ListQuery.limit` is absent. */\n defaultLimit?: number;\n}\n\n/**\n * Build an `EntityTransport<T>` from a Supabase client + a table name.\n *\n * The returned transport:\n * - Maps `ListQuery.filter` clauses to PostgREST operators (`eq`, `gt`,\n * `in`, `ilike`, `is null`, etc.).\n * - Compiles `ListQuery.search` into an `or=` clause across\n * `searchColumns`.\n * - Uses `count: 'exact'` on first page to surface `total`.\n * - Throws `TerminalError` on 4xx (no retry); `TransientError` on 5xx\n * or network failure.\n * - Honours `signal` via `.abortSignal(signal)` (supabase-js >= 2.39).\n */\nexport function makeRestTransport<T extends object>(\n opts: MakeRestTransportOptions<T>,\n): EntityTransport<T> {\n const {\n supabase,\n table,\n select = \"*\",\n identify = (row: T) => String((row as { id?: unknown }).id),\n authoritative = false,\n staleTime,\n searchColumns = [],\n defaultLimit = 200,\n } = opts;\n\n return {\n identify,\n authoritative,\n staleTime,\n\n async list(q: ListQuery): Promise<ListResult<T>> {\n const limit = q.limit ?? defaultLimit;\n const offset = typeof q.cursor === \"number\" ? q.cursor : 0;\n\n let builder = supabase\n .from(table)\n .select(select, { count: offset === 0 ? \"exact\" : undefined });\n\n // Apply filter\n if (q.filter) builder = applyFilter(builder, q.filter);\n\n // Apply search across configured columns\n if (q.search && searchColumns.length > 0) {\n const escaped = q.search.replace(/[%,()]/g, \"\"); // PostgREST safety\n const orClause = searchColumns\n .map((c) => `${c}.ilike.*${escaped}*`)\n .join(\",\");\n builder = builder.or(orClause);\n }\n\n // Apply sort\n if (q.sort) {\n for (const s of q.sort as SortClause[]) {\n builder = builder.order(s.field, {\n ascending: s.direction === \"asc\",\n nullsFirst: s.nulls === \"first\",\n });\n }\n }\n\n // Page\n builder = builder.range(offset, offset + limit - 1);\n\n // Abort\n if (q.signal && builder.abortSignal) builder = builder.abortSignal(q.signal);\n\n const result = (await builder) as { data: unknown; error: unknown; count?: number | null; status?: number };\n\n if (result.error) {\n throw mapPostgrestError(result.error, result.status);\n }\n\n const rows = (result.data as T[] | null) ?? [];\n const total = typeof result.count === \"number\" ? result.count : null;\n const nextCursor = rows.length === limit ? offset + limit : null;\n return { rows, total, nextCursor };\n },\n };\n}\n\n/** Compile a `FilterSpec` against a supabase-js builder. */\nfunction applyFilter(\n builder: SupabaseQueryBuilderLike,\n filter: FilterSpec,\n): SupabaseQueryBuilderLike {\n // PostgREST does not have nested OR/AND of arbitrary depth in the\n // builder API, so we flatten and concatenate top-level AND clauses.\n // Nested OR groups become an `.or()` string clause.\n if (!Array.isArray(filter) && (filter as FilterGroup).logic === \"or\") {\n const parts = (filter as FilterGroup).clauses\n .filter((c): c is FilterClause => !(\"logic\" in c))\n .map((c) => clauseToOrFragment(c))\n .filter((s): s is string => !!s);\n if (parts.length > 0) return builder.or(parts.join(\",\"));\n return builder;\n }\n const clauses = flattenClauses(filter);\n let b = builder;\n for (const c of clauses) {\n b = applyClause(b, c);\n }\n return b;\n}\n\nfunction applyClause(\n builder: SupabaseQueryBuilderLike,\n c: FilterClause,\n): SupabaseQueryBuilderLike {\n switch (c.op) {\n case \"eq\": return builder.eq(c.field, c.value);\n case \"neq\": return builder.neq(c.field, c.value);\n case \"gt\": return builder.gt(c.field, c.value);\n case \"gte\": return builder.gte(c.field, c.value);\n case \"lt\": return builder.lt(c.field, c.value);\n case \"lte\": return builder.lte(c.field, c.value);\n case \"in\": return builder.in(c.field, c.value as readonly unknown[]);\n case \"isNull\": return builder.is(c.field, null);\n case \"isNotNull\": return builder.neq(c.field, null);\n case \"contains\": return builder.ilike(c.field, `%${String(c.value)}%`);\n case \"startsWith\": return builder.ilike(c.field, `${String(c.value)}%`);\n case \"endsWith\": return builder.ilike(c.field, `%${String(c.value)}`);\n case \"matches\": return builder.ilike(c.field, String(c.value));\n case \"custom\": return builder; // local-only predicate; skip on server\n default: return builder;\n }\n}\n\n/** Map a single clause to a PostgREST `or=` fragment (e.g. `name.eq.foo`). */\nfunction clauseToOrFragment(c: FilterClause): string | null {\n const v = encodeURIComponent(String(c.value ?? \"\"));\n switch (c.op) {\n case \"eq\": return `${c.field}.eq.${v}`;\n case \"neq\": return `${c.field}.neq.${v}`;\n case \"gt\": return `${c.field}.gt.${v}`;\n case \"gte\": return `${c.field}.gte.${v}`;\n case \"lt\": return `${c.field}.lt.${v}`;\n case \"lte\": return `${c.field}.lte.${v}`;\n case \"isNull\": return `${c.field}.is.null`;\n case \"isNotNull\": return `${c.field}.not.is.null`;\n case \"contains\": return `${c.field}.ilike.*${v}*`;\n case \"startsWith\": return `${c.field}.ilike.${v}*`;\n case \"endsWith\": return `${c.field}.ilike.*${v}`;\n default: return null;\n }\n}\n\n/** Convert a PostgREST error envelope into one of our typed errors. */\nfunction mapPostgrestError(error: unknown, status?: number): TerminalError | TransientError {\n // Already a typed entity error (a custom transport could rethrow these)\n if (error instanceof TerminalError || error instanceof TransientError) return error;\n\n // PostgrestError has `.code`, `.message`, `.details`, `.hint`.\n const message = (error && typeof error === \"object\" && \"message\" in error)\n ? String((error as { message?: unknown }).message ?? \"Unknown REST error\")\n : String(error);\n\n // Some PostgREST errors carry their HTTP status only on the outer\n // response. If `status` is provided we trust it.\n if (typeof status === \"number\") {\n if (status >= 400 && status < 500) {\n return new TerminalError(message, { status, cause: error });\n }\n if (status >= 500) {\n return new TransientError(message, { status, cause: error });\n }\n }\n\n // Postgres \"relation does not exist\" → 42P01 → terminal.\n const code = (error && typeof error === \"object\" && \"code\" in error)\n ? String((error as { code?: unknown }).code ?? \"\")\n : \"\";\n if (code === \"42P01\" || code === \"PGRST116\" || code === \"PGRST106\") {\n return new TerminalError(message, { cause: error });\n }\n\n return toEntityError(error);\n}\n\nexport type { ChangeEvent };\n","import { create } from \"zustand\";\nimport { subscribeWithSelector } from \"zustand/middleware\";\nimport { immer } from \"zustand/middleware/immer\";\nimport type { EntityError } from \"./errors\";\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/** Provenance of the latest known entity state. */\nexport type SyncOrigin = \"server\" | \"client\" | \"optimistic\";\n\n/** Optional sync-facing metadata kept outside canonical entity payloads. */\nexport interface EntitySyncMetadata {\n synced: boolean;\n origin: SyncOrigin;\n updatedAt: number | null;\n}\n\n/** Snapshot shape returned by sync-aware reads and graph-native query helpers. */\nexport type EntitySnapshot<T extends object> = T & {\n $synced: boolean;\n $origin: SyncOrigin;\n $updatedAt: number | null;\n};\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 /**\n * Typed error instance for 2.0 hooks (`useEntities`, `useEntityQuery`).\n * Carries `TerminalError` / `TransientError` so consumers can\n * `instanceof`-check the failure mode without parsing the string in\n * `error`. Both fields are written together by `setListError`; the\n * string `error` field remains for back-compat with 1.x consumers.\n */\n lastError: EntityError | 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_SYNC_METADATA: EntitySyncMetadata = {\n synced: true,\n origin: \"server\",\n updatedAt: null,\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 lastError: 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 /** Optional sync/provenance state layered beside the canonical entity payload. */\n syncMetadata: Record<string, EntitySyncMetadata>;\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 /** Merge sync metadata for one entity without polluting canonical server fields. */\n setEntitySyncMetadata: (type: EntityType, id: EntityId, metadata: Partial<EntitySyncMetadata>) => void;\n /** Clear sync metadata for one entity. */\n clearEntitySyncMetadata: (type: EntityType, id: EntityId) => 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 /**\n * Record list fetch failure; clears both fetching flags.\n * The optional `typed` argument is the typed `EntityError` instance\n * (used by 2.0 hooks); when omitted only the string `error` field is\n * populated (back-compat with 1.x callers).\n */\n setListError: (key: QueryKey, error: string | null, typed?: EntityError | 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 * Sync-aware read path: canonical entity + patches + virtual sync metadata (`$synced`, `$origin`, `$updatedAt`).\n */\n readEntitySnapshot: <T = Record<string, unknown>>(type: EntityType, id: EntityId) => EntitySnapshot<T & Record<string, unknown>> | null;\n}\n\nfunction defaultEntityState(): EntityState {\n return { ...EMPTY_ENTITY_STATE };\n}\n\nfunction defaultSyncMetadata(): EntitySyncMetadata {\n return { ...EMPTY_SYNC_METADATA };\n}\n\nfunction defaultListState(): ListState {\n return { ...EMPTY_LIST_STATE, ids: [] };\n}\n\nfunction ek(type: EntityType, id: EntityId) { return `${type}:${id}`; }\n\ninterface SnapshotCacheEntry {\n base: Record<string, unknown>;\n patch: Record<string, unknown> | undefined;\n metadata: EntitySyncMetadata;\n snapshot: EntitySnapshot<Record<string, unknown>>;\n}\n\nconst snapshotCache = new Map<string, SnapshotCacheEntry>();\n\nfunction readCachedEntitySnapshot<T extends Record<string, unknown>>(\n type: EntityType,\n id: EntityId,\n base: Record<string, unknown>,\n patch: Record<string, unknown> | undefined,\n metadata: EntitySyncMetadata,\n): EntitySnapshot<T> {\n const key = ek(type, id);\n const cached = snapshotCache.get(key);\n if (\n cached &&\n cached.base === base &&\n cached.patch === patch &&\n cached.metadata === metadata\n ) {\n return cached.snapshot as EntitySnapshot<T>;\n }\n\n const snapshot = {\n ...(patch ? { ...base, ...patch } : base),\n $synced: metadata.synced,\n $origin: metadata.origin,\n $updatedAt: metadata.updatedAt,\n } as EntitySnapshot<T>;\n\n snapshotCache.set(key, { base, patch, metadata, snapshot });\n return snapshot;\n}\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: {}, syncMetadata: {}, 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 const key = ek(type, id);\n if (!s.syncMetadata[key]) s.syncMetadata[key] = defaultSyncMetadata();\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 const key = ek(type, id);\n if (!s.syncMetadata[key]) s.syncMetadata[key] = defaultSyncMetadata();\n }\n }),\n replaceEntity: (type, id, data) => set((s) => {\n if (!s.entities[type]) s.entities[type] = {};\n s.entities[type][id] = data;\n const key = ek(type, id);\n if (!s.syncMetadata[key]) s.syncMetadata[key] = defaultSyncMetadata();\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 delete s.syncMetadata[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 s.syncMetadata[k] = { ...(s.syncMetadata[k] ?? defaultSyncMetadata()), synced: true, origin: \"server\", updatedAt: Date.now() };\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 setEntitySyncMetadata: (type, id, metadata) => set((s) => {\n const k = ek(type, id);\n s.syncMetadata[k] = { ...(s.syncMetadata[k] ?? defaultSyncMetadata()), ...metadata };\n }),\n clearEntitySyncMetadata: (type, id) => set((s) => {\n delete s.syncMetadata[ek(type, id)];\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, lastError: 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, lastError: 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, lastError: 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, typed) => set((s) => {\n if (!s.lists[key]) s.lists[key] = defaultListState();\n s.lists[key].error = error;\n s.lists[key].lastError = typed ?? (error === null ? null : s.lists[key].lastError);\n s.lists[key].isFetching = false;\n s.lists[key].isFetchingMore = false;\n // Stamp lastFetched on failure too. Without this, the SWR\n // staleness check (`Date.now() - (lastFetched ?? 0) > staleTime`)\n // would return true on the next render and refire the fetcher\n // immediately — a 404/permanent error becomes an infinite\n // retry loop. With lastFetched stamped, the failure is treated\n // as a complete attempt and consumers see a stable `error` +\n // `isFetching: false`. They can manually `refetch()` if they\n // want to retry. Clearing `stale` also makes invalidateLists\n // the explicit retry mechanism, which is the contract we want.\n s.lists[key].lastFetched = Date.now();\n s.lists[key].stale = 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 readEntitySnapshot: <T>(type: EntityType, id: EntityId): EntitySnapshot<T & Record<string, unknown>> | null => {\n const s = get();\n const base = s.entities[type]?.[id];\n if (!base) {\n snapshotCache.delete(ek(type, id));\n return null;\n }\n const patch = s.patches[type]?.[id];\n const metadata = s.syncMetadata[ek(type, id)] ?? EMPTY_SYNC_METADATA;\n return readCachedEntitySnapshot<T & Record<string, unknown>>(\n type,\n id,\n base,\n patch,\n metadata,\n );\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 object> {\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 | null;\n nextCursor?: string | null;\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 object> {\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 object>(\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 as Record<string, unknown>);\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 object>(\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: data as Record<string, unknown> })));\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","/**\n * `useEntities` — thin 2.0 hook (5-field API).\n *\n * Replaces the `useEntityList(opts)` pattern where each call site carried\n * its own `fetch` closure, query-key shape, and retry logic. Instead:\n *\n * 1. Register a transport once at app boot:\n * `registerEntityTransport(\"Invoice\", makeRestTransport({ supabase, table: \"invoice\" }))`\n *\n * 2. Consume anywhere:\n * `const { items, isLoading, isError, error } = useEntities<Invoice>(\"Invoice\")`\n *\n * - 4xx from transport → `TerminalError`, no retry, `isError: true`, `isLoading: false`\n * - 5xx/network → `TransientError`, up to `maxRetries` with exponential back-off\n * - `enabled: false` → no fetch, `isLoading: false` immediately\n * - SWR: within `staleTime` (from transport or engine default) → cached rows, no refetch\n * - AbortController per fetch; aborted on unmount, key change, or `refetch()`\n * - Transport `subscribe` wired on mount, torn down on unmount\n */\n\nimport { useState, useEffect, useRef, useCallback, useMemo } from \"react\";\nimport { useStore } from \"zustand\";\nimport { useGraphStore, EMPTY_LIST_STATE } from \"../graph\";\nimport { serializeKey, getEngineOptions } from \"../engine\";\nimport { getEntityTransport } from \"../transport/registry\";\nimport { TerminalError, TransientError, toEntityError } from \"../errors\";\nimport type { EntityType } from \"../graph\";\nimport type { ListQuery } from \"../transport/types\";\nimport type { FilterSpec, SortSpec } from \"../view/types\";\n\n/** Subset of `ListQuery` that callers may pass alongside `enabled`. */\nexport interface UseEntitiesOptions {\n filter?: FilterSpec | null;\n sort?: SortSpec | null;\n search?: string;\n limit?: number;\n cursor?: string | number | null;\n enabled?: boolean;\n}\n\n/** Five-field return — the entirety of what a list consumer needs for the common case. */\nexport interface UseEntitiesResult<T> {\n /** Resolved entity rows in the graph for this query, in server order. */\n items: T[];\n /** True only while the very first attempt is in-flight with no cached rows yet. */\n isLoading: boolean;\n /** True when the last attempt ended with any error (terminal or transient). */\n isError: boolean;\n /** Typed error instance — `instanceof TerminalError` (4xx) or `instanceof TransientError` (5xx/network). */\n error: TerminalError | TransientError | null;\n /** Manually trigger a fresh fetch (bypasses staleTime). */\n refetch: () => void;\n}\n\nfunction sleep(ms: number) { return new Promise((r) => setTimeout(r, ms)); }\n\n/**\n * Thin replacement for `useEntityList`.\n * Looks up the registered `EntityTransport<T>` for `type` and drives a\n * Zustand-backed SWR cycle. Returns `{ items, isLoading, isError, error, refetch }`.\n */\nexport function useEntities<T extends object>(\n type: EntityType,\n options: UseEntitiesOptions = {},\n): UseEntitiesResult<T> {\n const {\n filter,\n sort,\n search,\n limit,\n cursor,\n enabled = true,\n } = options;\n\n // --- stable query key (re-computes only when deps change) ----------------\n const queryKey = useMemo(\n () => serializeKey([type, { filter, sort, search, limit, cursor }]),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [type, JSON.stringify({ filter, sort, search, limit, cursor })],\n );\n\n // --- abort controller ref (one per in-flight fetch) ----------------------\n const abortRef = useRef<AbortController | null>(null);\n\n // --- fetch counter to coordinate between effect re-runs ------------------\n const fetchCountRef = useRef(0);\n\n // --- retrigger state (incremented by refetch()) --------------------------\n const [fetchTick, setFetchTick] = useState(0);\n\n // --- read list state from graph ------------------------------------------\n const listState = useStore(\n useGraphStore,\n useCallback((s) => s.lists[queryKey] ?? EMPTY_LIST_STATE, [queryKey]),\n );\n\n // --- resolve entity rows from graph in render ----------------------------\n const items = useMemo((): T[] => {\n const state = useGraphStore.getState();\n return listState.ids\n .map((id) => state.readEntity<T>(type, id))\n .filter((item): item is T => item !== null);\n }, [listState.ids, type]);\n\n // --- main fetch effect ---------------------------------------------------\n useEffect(() => {\n if (!enabled) return;\n\n const store = useGraphStore.getState();\n const existing = store.lists[queryKey];\n const engineOpts = getEngineOptions();\n\n // Respect staleTime: skip if fresh\n let transport: ReturnType<typeof getEntityTransport<T>>;\n try {\n transport = getEntityTransport<T>(type);\n } catch {\n // No transport registered — treat as permanent terminal error\n const err = new TerminalError(`No transport registered for entity type \"${type}\"`);\n store.setListError(queryKey, err.message, err);\n return;\n }\n\n const effectiveStaleTime = transport.staleTime ?? engineOpts.defaultStaleTime;\n if (\n existing?.lastFetched !== null &&\n existing?.lastFetched !== undefined &&\n !existing.stale &&\n Date.now() - existing.lastFetched < effectiveStaleTime\n ) {\n return;\n }\n\n // Abort any previous in-flight request for this key\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n\n const thisCount = ++fetchCountRef.current;\n\n const query: ListQuery = {\n filter: filter ?? undefined,\n sort: sort ?? undefined,\n search,\n limit,\n cursor: cursor ?? undefined,\n signal: controller.signal,\n };\n\n const maxRetries = engineOpts.maxRetries ?? 3;\n const retryBaseDelay = engineOpts.retryBaseDelay ?? 1_000;\n\n store.setListFetching(queryKey, true);\n\n const attempt = async (retries: number): Promise<void> => {\n try {\n const result = await transport.list(query);\n\n // Stale check — if a newer effect replaced us, discard\n if (thisCount !== fetchCountRef.current) return;\n if (controller.signal.aborted) return;\n\n // Upsert rows into graph\n const graphStore = useGraphStore.getState();\n const entries = result.rows.map((row) => ({\n id: transport.identify(row),\n data: row as Record<string, unknown>,\n }));\n graphStore.upsertEntities(type, entries);\n for (const { id } of entries) graphStore.setEntityFetched(type, id);\n\n const ids = entries.map(({ id }) => id);\n graphStore.setListResult(queryKey, ids, {\n total: result.total,\n nextCursor: typeof result.nextCursor === \"string\" ? result.nextCursor : null,\n hasNextPage: result.nextCursor !== null && result.nextCursor !== undefined,\n });\n } catch (err) {\n if (thisCount !== fetchCountRef.current) return;\n if (controller.signal.aborted) return;\n\n const typed = toEntityError(err);\n\n // Only retry TransientError; TerminalError is non-retriable by definition\n if (typed instanceof TransientError && retries < maxRetries) {\n await sleep(retryBaseDelay * Math.pow(2, retries));\n if (controller.signal.aborted) return;\n return attempt(retries + 1);\n }\n\n useGraphStore.getState().setListError(queryKey, typed.message, typed);\n }\n };\n\n attempt(0);\n\n return () => {\n abortRef.current?.abort();\n };\n // fetchTick is intentionally included to trigger refetch() calls\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [queryKey, enabled, fetchTick]);\n\n // --- subscribe to realtime changes (optional transport capability) --------\n useEffect(() => {\n let transport: ReturnType<typeof getEntityTransport<T>>;\n try { transport = getEntityTransport<T>(type); } catch { return; }\n if (!transport.subscribe || !enabled) return;\n\n const unsub = transport.subscribe((ev) => {\n const store = useGraphStore.getState();\n if (ev.op === \"delete\") {\n store.removeIdFromAllLists(type, ev.id);\n store.removeEntity(type, ev.id);\n } else if (ev.row) {\n store.upsertEntity(type, ev.id, ev.row as Record<string, unknown>);\n store.setEntityFetched(type, ev.id);\n }\n });\n\n return () => unsub();\n }, [type, enabled]);\n\n // --- refetch (bumps tick, aborts current in-flight) ----------------------\n const refetch = useCallback(() => {\n abortRef.current?.abort();\n // Invalidate the list so the effect re-runs even within staleTime\n useGraphStore.getState().setListStale(queryKey, true);\n setFetchTick((n) => n + 1);\n }, [queryKey]);\n\n // --- compute final booleans ----------------------------------------------\n const typedError = (listState.lastError as TerminalError | TransientError | null) ?? null;\n\n return {\n items,\n // isLoading = first attempt in-flight with zero cached rows\n isLoading: !enabled ? false : listState.lastFetched === null && listState.isFetching,\n isError: typedError !== null,\n error: typedError,\n refetch,\n };\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","/**\n * `useEntityQuery` — rich 2.0 hook (replaces `useEntityView`).\n *\n * Same feature surface as `useEntityView` (view descriptor, hybrid mode,\n * pagination, realtime sorted insertion, toolbar setters) but transport is\n * looked up from the registry — callers no longer pass `remoteFetch`.\n *\n * Usage:\n * registerEntityTransport(\"Client\", makeRestTransport({ supabase, table: \"client\" }));\n *\n * const { items, setFilter, setSort, setSearch, fetchNextPage, error } =\n * useEntityQuery<Client>(\"Client\", { view: defaultView });\n */\n\nimport { 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 { getEntityTransport } from \"../transport/registry\";\nimport { TerminalError, TransientError, toEntityError } from \"../errors\";\nimport { applyView, checkCompleteness, matchesFilter, matchesSearch, findInsertionIndex } from \"../view/evaluator\";\nimport { hasCustomPredicates } from \"../view/types\";\nimport type { EntityType, EntityId } from \"../graph\";\nimport type { ViewDescriptor, FilterSpec, SortSpec, CompletenessMode } from \"../view/types\";\nimport type { ListQuery } from \"../transport/types\";\n\nexport interface UseEntityQueryOptions {\n /** Initial view descriptor (filter/sort/search). */\n view?: ViewDescriptor;\n /** Force a completeness mode instead of auto-detecting. */\n mode?: CompletenessMode;\n /** Skip all fetching when false. `isLoading` is immediately `false`. */\n enabled?: boolean;\n /** SSR-seed ids for the base list slot (avoids flash-of-empty-state). */\n initialIds?: EntityId[];\n /** SSR-seed total for completeness heuristics. */\n initialTotal?: number;\n /** Debounce delay (ms) for view changes before a remote re-fetch fires. */\n remoteDebounce?: number;\n}\n\nexport interface UseEntityQueryResult<T> {\n /** Projected entity rows visible through the current view. */\n items: T[];\n /** All ids in the projected view (for virtualised renderers). */\n viewIds: EntityId[];\n /** Server-reported total or local count if complete, else null. */\n viewTotal: number | null;\n\n /** True while the very first page is loading with zero cached rows. */\n isLoading: boolean;\n /** True while any fetch (initial or page) is in-flight. */\n isFetching: boolean;\n /** True while a paginated \"load more\" fetch is in-flight. */\n isFetchingMore: boolean;\n /** True when the last attempt ended with any error. */\n isError: boolean;\n /**\n * Typed error — `instanceof TerminalError` (4xx) or\n * `instanceof TransientError` (5xx/network). `null` on success.\n */\n error: TerminalError | TransientError | null;\n\n /** True when there are more pages to load. */\n hasNextPage: boolean;\n /** Load the next page of results. */\n fetchNextPage: () => void;\n\n /** True when `completenessMode === \"hybrid\"` and remote is still in-flight while local rows are displayed. */\n isShowingLocalPending: boolean;\n /** Whether local graph data is complete for the current view. */\n isLocallyComplete: boolean;\n /** Resolved completeness mode for the current view. */\n completenessMode: CompletenessMode;\n\n /** Merge partial view descriptor updates. */\n setView: (v: Partial<ViewDescriptor>) => void;\n /** Replace the active filter spec. */\n setFilter: (f: FilterSpec | null) => void;\n /** Replace the active sort spec. */\n setSort: (s: SortSpec | null) => void;\n /** Update free-text search query. */\n setSearch: (q: string) => void;\n /** Reset view to the initial descriptor. */\n clearView: () => void;\n /** Force a fresh fetch (bypasses staleTime). */\n refetch: () => void;\n}\n\nfunction sleep(ms: number) { return new Promise((r) => setTimeout(r, ms)); }\n\nconst EMPTY_ENTITY_BUCKET: Record<EntityId, Record<string, unknown>> = {};\n\n/**\n * Rich list hook: view descriptor, local/remote/hybrid completeness, pagination,\n * realtime sorted insertion, typed errors — all backed by the transport registry.\n *\n * @param type - Registered entity type key (e.g. `\"Client\"`)\n * @param opts - View descriptor, mode override, SSR seeds, enabled gate\n */\nexport function useEntityQuery<T extends object>(\n type: EntityType,\n opts: UseEntityQueryOptions = {},\n): UseEntityQueryResult<T> {\n const {\n view: initialView = {},\n mode: forcedMode,\n enabled = true,\n initialIds,\n initialTotal,\n remoteDebounce = 300,\n } = opts;\n\n const engineOpts = getEngineOptions();\n const optsRef = useRef(opts); optsRef.current = opts;\n\n // --- live view descriptor (mutated by toolbar setters) -------------------\n const [liveView, setLiveView] = useState<ViewDescriptor>(initialView);\n const liveViewRef = useRef(liveView); liveViewRef.current = liveView;\n\n // --- abort / fetch machinery ---------------------------------------------\n const abortRef = useRef<AbortController | null>(null);\n const fetchCountRef = useRef(0);\n const [fetchTick, setFetchTick] = useState(0);\n\n // --- remote sub-key for view-specific page results -----------------------\n const [remoteResultKey, setRemoteResultKey] = useState<string | null>(null);\n const [isFetchingState, setIsFetchingState] = useState(false);\n\n // --- stable base key (does NOT include view — base holds raw server page) -\n const baseKey = useMemo(\n () => serializeKey([type, \"__base__\"]),\n [type],\n );\n\n // --- SSR seed (once, before first render) --------------------------------\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\n // --- subscribe to base list state ----------------------------------------\n const listState = useStore(\n useGraphStore,\n useCallback((s) => s.lists[baseKey] ?? EMPTY_LIST_STATE, [baseKey]),\n );\n\n // --- subscribe to remote-view list state (pagination, total) ------------\n const remoteListState = useStore(\n useGraphStore,\n useCallback(\n (s) => (remoteResultKey ? s.lists[remoteResultKey] ?? null : null),\n [remoteResultKey],\n ),\n );\n\n // --- completeness detection ----------------------------------------------\n const { isComplete } = useMemo(() => {\n if (!listState) return { isComplete: false };\n return checkCompleteness(listState.ids.length, listState.total, listState.hasNextPage);\n }, [listState]);\n\n let transport: ReturnType<typeof getEntityTransport<T>> | null = null;\n try { transport = getEntityTransport<T>(type); } catch { /* handled below */ }\n\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 no transport, fall back to local (will show empty)\n if (!transport) return \"local\";\n return \"hybrid\";\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [forcedMode, isComplete, liveView.filter, transport?.authoritative]);\n\n // --- local JS view projection --------------------------------------------\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 state.readEntitySnapshot(type, id);\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\n const items = useMemo(\n () =>\n localViewIds\n .map((id) => useGraphStore.getState().readEntitySnapshot<T>(type, id))\n .filter((item) => item !== null) as T[],\n [localViewIds, type],\n );\n\n // --- remote fetch implementation ----------------------------------------\n const fireRemoteFetch = useCallback(\n async (view: ViewDescriptor, cursor?: string | number) => {\n let tp: ReturnType<typeof getEntityTransport<T>>;\n try { tp = getEntityTransport<T>(type); }\n catch (e) {\n const err = toEntityError(e);\n useGraphStore.getState().setListError(baseKey, err.message, err);\n return;\n }\n\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n const thisCount = ++fetchCountRef.current;\n\n const rKey = serializeKey([type, \"__view__\", view, cursor]);\n setRemoteResultKey(rKey);\n setIsFetchingState(true);\n\n const store = useGraphStore.getState();\n store.setListFetching(rKey, true);\n store.setListFetching(baseKey, true);\n\n const effectiveStaleTime = tp.staleTime ?? engineOpts.defaultStaleTime;\n const maxRetries = engineOpts.maxRetries ?? 3;\n const retryBaseDelay = engineOpts.retryBaseDelay ?? 1_000;\n\n const query: ListQuery = {\n filter: view.filter,\n sort: view.sort,\n search: view.search?.query,\n cursor,\n signal: controller.signal,\n };\n\n const attempt = async (retries: number): Promise<void> => {\n try {\n const result = await tp.list(query);\n\n if (thisCount !== fetchCountRef.current) return;\n if (controller.signal.aborted) return;\n\n const graphStore = useGraphStore.getState();\n const entries = result.rows.map((row) => ({\n id: tp.identify(row),\n data: row as Record<string, unknown>,\n }));\n graphStore.upsertEntities(type, entries);\n for (const { id } of entries) graphStore.setEntityFetched(type, id);\n\n const ids = entries.map(({ id }) => id);\n\n // Pagination: if cursor provided, append to view key; otherwise replace\n if (cursor !== undefined) {\n graphStore.appendListResult(rKey, ids, {\n total: result.total,\n nextCursor: typeof result.nextCursor === \"string\" ? result.nextCursor : null,\n hasNextPage: result.nextCursor !== null && result.nextCursor !== undefined,\n });\n } else {\n graphStore.setListResult(rKey, ids, {\n total: result.total,\n nextCursor: typeof result.nextCursor === \"string\" ? result.nextCursor : null,\n hasNextPage: result.nextCursor !== null && result.nextCursor !== undefined,\n });\n // Also stamp the base key as fresh\n graphStore.setListFetching(baseKey, false);\n }\n } catch (err) {\n if (thisCount !== fetchCountRef.current) return;\n if (controller.signal.aborted) return;\n\n const typed = toEntityError(err);\n\n if (typed instanceof TransientError && retries < maxRetries) {\n await sleep(retryBaseDelay * Math.pow(2, retries));\n if (controller.signal.aborted) return;\n return attempt(retries + 1);\n }\n\n const gs = useGraphStore.getState();\n gs.setListError(rKey, typed.message, typed);\n gs.setListError(baseKey, typed.message, typed);\n } finally {\n if (thisCount === fetchCountRef.current) setIsFetchingState(false);\n }\n };\n\n void attempt(0);\n\n void effectiveStaleTime; // keep reference stable for future SWR check\n },\n [type, baseKey, engineOpts.defaultStaleTime, engineOpts.maxRetries, engineOpts.retryBaseDelay],\n );\n\n // --- view-change debounce effect -----------------------------------------\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => {\n if (!enabled || completenessMode === \"local\" || !transport) return;\n\n const searchQuery = liveView.search?.query ?? \"\";\n const minChars = liveView.search?.minChars ?? 2;\n if (searchQuery.length > 0 && searchQuery.length < minChars) return;\n\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n debounceTimer.current = setTimeout(\n () => fireRemoteFetch(liveViewRef.current),\n remoteDebounce,\n );\n return () => { if (debounceTimer.current) clearTimeout(debounceTimer.current); };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [liveView, completenessMode, enabled, remoteDebounce]);\n\n // --- mount / stale-check effect ------------------------------------------\n useEffect(() => {\n if (!enabled || !transport) return;\n\n const store = useGraphStore.getState();\n const existing = store.lists[baseKey];\n const effectiveStaleTime = transport.staleTime ?? engineOpts.defaultStaleTime;\n const isStale =\n !existing?.lastFetched ||\n existing.stale ||\n Date.now() - (existing.lastFetched ?? 0) > effectiveStaleTime;\n\n if (!existing || isStale) {\n void fireRemoteFetch(liveViewRef.current);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [baseKey, enabled, fetchTick]);\n\n // --- realtime sorted insertion -------------------------------------------\n useEffect(() => {\n const unsub = useGraphStore.subscribe(\n (state) => state.entities[type] ?? EMPTY_ENTITY_BUCKET,\n (newEntities, prevEntities) => {\n const view = liveViewRef.current;\n const store = useGraphStore.getState();\n const list = store.lists[baseKey];\n if (!list) return;\n\n for (const id of new Set([\n ...Object.keys(newEntities),\n ...Object.keys(prevEntities),\n ])) {\n const isPresent = id in newEntities;\n if (!isPresent) continue;\n\n const entity = newEntities[id] as Record<string, unknown>;\n const merged = store.readEntitySnapshot(type, id) ?? entity;\n\n const matchesCurrentView =\n (!view.filter || matchesFilter(merged, view.filter)) &&\n (!view.search?.query ||\n matchesSearch(merged, view.search.query, view.search.fields));\n\n if (matchesCurrentView && !list.ids.includes(id)) {\n if (view.sort && view.sort.length > 0) {\n const idx = findInsertionIndex(\n merged,\n list.ids,\n (eid) => store.readEntitySnapshot(type, eid),\n view.sort,\n );\n store.insertIdInList(baseKey, id, idx);\n } else {\n store.insertIdInList(baseKey, id, \"start\");\n }\n }\n }\n },\n );\n return unsub;\n }, [type, baseKey]);\n\n // --- realtime subscription -----------------------------------------------\n useEffect(() => {\n let tp: ReturnType<typeof getEntityTransport<T>>;\n try { tp = getEntityTransport<T>(type); } catch { return; }\n if (!tp.subscribe || !enabled) return;\n\n const unsub = tp.subscribe((ev) => {\n const store = useGraphStore.getState();\n if (ev.op === \"delete\") {\n store.removeIdFromAllLists(type, ev.id);\n store.removeEntity(type, ev.id);\n } else if (ev.row) {\n store.upsertEntity(type, ev.id, ev.row as Record<string, unknown>);\n store.setEntityFetched(type, ev.id);\n }\n });\n return () => unsub();\n }, [type, enabled]);\n\n // --- toolbar setters -----------------------------------------------------\n const setView = useCallback(\n (partial: Partial<ViewDescriptor>) => setLiveView((prev) => ({ ...prev, ...partial })),\n [],\n );\n const setFilter = useCallback(\n (filter: FilterSpec | null) =>\n setLiveView((prev) => ({ ...prev, filter: filter ?? undefined })),\n [],\n );\n const setSort = useCallback(\n (sort: SortSpec | null) =>\n setLiveView((prev) => ({ ...prev, sort: sort ?? undefined })),\n [],\n );\n const setSearch = useCallback(\n (query: string) =>\n setLiveView((prev) => ({\n ...prev,\n search: prev.search ? { ...prev.search, query } : { query, fields: [] },\n })),\n [],\n );\n const clearView = useCallback(() => setLiveView(initialView), [initialView]);\n\n const fetchNextPage = useCallback(() => {\n if (completenessMode === \"local\" || isFetchingState) return;\n const cursor = remoteListState?.nextCursor ?? undefined;\n void fireRemoteFetch(liveViewRef.current, cursor ?? undefined);\n }, [completenessMode, isFetchingState, remoteListState?.nextCursor, fireRemoteFetch]);\n\n const refetch = useCallback(() => {\n abortRef.current?.abort();\n useGraphStore.getState().setListStale(baseKey, true);\n setFetchTick((n) => n + 1);\n }, [baseKey]);\n\n // --- derived values ------------------------------------------------------\n const viewTotal =\n remoteListState?.total ??\n (isComplete ? localViewIds.length : listState?.total ?? null);\n\n const baseError = listState?.lastError ?? null;\n const remoteError = remoteListState?.lastError ?? null;\n const typedError =\n ((remoteError ?? baseError) as TerminalError | TransientError | null) ?? null;\n\n return {\n items,\n viewIds: localViewIds,\n viewTotal,\n isLoading:\n !enabled\n ? false\n : items.length === 0 &&\n ((listState?.isFetching ?? false) || isFetchingState),\n isFetching: (listState?.isFetching ?? false) || isFetchingState,\n isFetchingMore: remoteListState?.isFetching ?? false,\n isError: typedError !== null,\n error: typedError,\n hasNextPage:\n completenessMode === \"local\"\n ? false\n : (remoteListState?.hasNextPage ?? listState?.hasNextPage ?? false),\n fetchNextPage,\n isShowingLocalPending:\n completenessMode === \"hybrid\" && isFetchingState && items.length > 0,\n isLocallyComplete: isComplete,\n completenessMode,\n setView,\n setFilter,\n setSort,\n setSearch,\n clearView,\n refetch,\n };\n}\n","import { useGraphStore } from \"./graph\";\nimport type { EntityId, EntitySnapshot, EntityType, QueryKey } from \"./graph\";\n\ntype GraphStore = ReturnType<typeof useGraphStore.getState>;\n\nexport type GraphIncludeMap = Record<string, GraphIncludeRelation>;\n\nexport type GraphIncludeRelation =\n | {\n type: EntityType;\n via: { kind: \"field\"; field: string };\n include?: GraphIncludeMap;\n }\n | {\n type: EntityType;\n via: { kind: \"array\"; field: string };\n include?: GraphIncludeMap;\n }\n | {\n type: EntityType;\n via: { kind: \"list\"; key: QueryKey | ((entity: Record<string, unknown>) => QueryKey | null | undefined) };\n include?: GraphIncludeMap;\n }\n | {\n type: EntityType;\n via: {\n kind: \"resolver\";\n resolve: (entity: Record<string, unknown>, store: GraphStore) => EntityId | EntityId[] | null | undefined;\n };\n include?: GraphIncludeMap;\n };\n\nexport interface GraphQueryOptions<TEntity extends object> {\n type: EntityType;\n id?: EntityId;\n ids?: EntityId[];\n listKey?: QueryKey;\n where?: (entity: EntitySnapshot<TEntity>) => boolean;\n sort?: (a: EntitySnapshot<TEntity>, b: EntitySnapshot<TEntity>) => number;\n include?: GraphIncludeMap;\n select?: ((entity: Record<string, unknown>) => unknown) | string[];\n}\n\ntype ProjectedRow = Record<string, unknown>;\n\nexport function queryOnce<TEntity extends object>(\n opts: GraphQueryOptions<TEntity> & { id: EntityId },\n): ProjectedRow | null;\nexport function queryOnce<TEntity extends object>(\n opts: GraphQueryOptions<TEntity>,\n): ProjectedRow[];\nexport function queryOnce<TEntity extends object>(\n opts: GraphQueryOptions<TEntity>,\n): ProjectedRow[] | ProjectedRow | null {\n const store = useGraphStore.getState();\n const ids = resolveCandidateIds(store, opts);\n let rows = ids\n .map((id) => store.readEntitySnapshot<TEntity>(opts.type, id))\n .filter((row): row is EntitySnapshot<TEntity> => row !== null);\n\n if (opts.where) rows = rows.filter(opts.where);\n if (opts.sort) rows = [...rows].sort(opts.sort);\n\n const projected = rows.map((row) => applySelection(projectRow(row, opts.include, store), opts.select));\n if (opts.id) return projected[0] ?? null;\n return projected;\n}\n\nexport const selectGraph = queryOnce;\n\nfunction resolveCandidateIds<TEntity extends object>(store: GraphStore, opts: GraphQueryOptions<TEntity>): EntityId[] {\n if (opts.id) return [opts.id];\n if (opts.ids) return opts.ids;\n if (opts.listKey) return store.lists[opts.listKey]?.ids ?? [];\n return Object.keys(store.entities[opts.type] ?? {});\n}\n\nfunction projectRow(\n row: EntitySnapshot<Record<string, unknown>>,\n include: GraphIncludeMap | undefined,\n store: GraphStore,\n): ProjectedRow {\n if (!include) return row;\n\n const projected: ProjectedRow = { ...row };\n for (const [key, relation] of Object.entries(include)) {\n const related = resolveRelation(row, relation, store);\n projected[key] = related;\n }\n return projected;\n}\n\nfunction resolveRelation(\n entity: Record<string, unknown>,\n relation: GraphIncludeRelation,\n store: GraphStore,\n): ProjectedRow | ProjectedRow[] | null {\n const include = relation.include;\n\n switch (relation.via.kind) {\n case \"field\": {\n const relatedId = entity[relation.via.field];\n if (typeof relatedId !== \"string\") return null;\n const related = store.readEntitySnapshot<Record<string, unknown>>(relation.type, relatedId);\n return related ? projectRow(related, include, store) : null;\n }\n case \"array\": {\n const ids = entity[relation.via.field];\n if (!Array.isArray(ids)) return [];\n return ids\n .map((id) => (typeof id === \"string\" ? store.readEntitySnapshot<Record<string, unknown>>(relation.type, id) : null))\n .filter((row): row is EntitySnapshot<Record<string, unknown>> => row !== null)\n .map((row) => projectRow(row, include, store));\n }\n case \"list\": {\n const key =\n typeof relation.via.key === \"function\"\n ? relation.via.key(entity)\n : relation.via.key;\n if (!key) return [];\n const ids = store.lists[key]?.ids ?? [];\n return ids\n .map((id) => store.readEntitySnapshot<Record<string, unknown>>(relation.type, id))\n .filter((row): row is EntitySnapshot<Record<string, unknown>> => row !== null)\n .map((row) => projectRow(row, include, store));\n }\n case \"resolver\": {\n const resolved = relation.via.resolve(entity, store);\n if (Array.isArray(resolved)) {\n return resolved\n .map((id) => store.readEntitySnapshot<Record<string, unknown>>(relation.type, id))\n .filter((row): row is EntitySnapshot<Record<string, unknown>> => row !== null)\n .map((row) => projectRow(row, include, store));\n }\n if (typeof resolved !== \"string\") return null;\n const related = store.readEntitySnapshot<Record<string, unknown>>(relation.type, resolved);\n return related ? projectRow(related, include, store) : null;\n }\n }\n}\n\nfunction applySelection(\n row: ProjectedRow,\n select: GraphQueryOptions<Record<string, unknown>>[\"select\"],\n): ProjectedRow {\n if (!select) return row;\n if (typeof select === \"function\") {\n const result = select(row as EntitySnapshot<Record<string, unknown>> & Record<string, unknown>);\n return (result && typeof result === \"object\" ? result : { value: result }) as ProjectedRow;\n }\n\n const picked: ProjectedRow = {};\n for (const key of select) {\n if (key in row) picked[key] = row[key];\n }\n return picked;\n}\n","import { useGraphStore } from \"./graph\";\nimport type { EntityId, EntitySyncMetadata, EntityType, QueryKey, SyncOrigin } from \"./graph\";\n\ninterface GraphDataSnapshot {\n entities: ReturnType<typeof useGraphStore.getState>[\"entities\"];\n patches: ReturnType<typeof useGraphStore.getState>[\"patches\"];\n entityStates: ReturnType<typeof useGraphStore.getState>[\"entityStates\"];\n syncMetadata: ReturnType<typeof useGraphStore.getState>[\"syncMetadata\"];\n lists: ReturnType<typeof useGraphStore.getState>[\"lists\"];\n}\n\nexport interface GraphTransaction {\n upsertEntity: (type: EntityType, id: EntityId, data: Record<string, unknown>) => GraphTransaction;\n replaceEntity: (type: EntityType, id: EntityId, data: Record<string, unknown>) => GraphTransaction;\n removeEntity: (type: EntityType, id: EntityId) => GraphTransaction;\n patchEntity: (type: EntityType, id: EntityId, patch: Record<string, unknown>) => GraphTransaction;\n clearPatch: (type: EntityType, id: EntityId) => GraphTransaction;\n insertIdInList: (key: QueryKey, id: EntityId, position: \"start\" | \"end\" | number) => GraphTransaction;\n removeIdFromAllLists: (type: EntityType, id: EntityId) => GraphTransaction;\n setEntitySyncMetadata: (type: EntityType, id: EntityId, metadata: Partial<EntitySyncMetadata>) => GraphTransaction;\n markEntityPending: (type: EntityType, id: EntityId, origin?: SyncOrigin) => GraphTransaction;\n markEntitySynced: (type: EntityType, id: EntityId, origin?: SyncOrigin) => GraphTransaction;\n commit: () => void;\n rollback: () => void;\n snapshot: () => GraphDataSnapshot;\n}\n\nexport interface GraphActionOptions<TInput, TResult> {\n key?: string;\n optimistic?: (tx: GraphTransaction, input: TInput) => void;\n run: (tx: GraphTransaction, input: TInput) => Promise<TResult> | TResult;\n onSuccess?: (result: TResult, input: TInput, tx: GraphTransaction) => void;\n onError?: (error: Error, input: TInput) => void;\n}\n\nexport interface GraphActionRecord {\n id: string;\n key: string;\n input: unknown;\n enqueuedAt: string;\n}\n\nexport type GraphActionEvent =\n | { type: \"enqueued\"; record: GraphActionRecord }\n | { type: \"settled\"; record: GraphActionRecord };\n\nconst graphActionListeners = new Set<(event: GraphActionEvent) => void>();\nconst graphActionReplayers = new Map<string, (record: GraphActionRecord) => Promise<unknown>>();\n\nexport function createGraphTransaction(): GraphTransaction {\n const baseline = cloneGraphData();\n let closed = false;\n\n const tx: GraphTransaction = {\n upsertEntity(type, id, data) {\n useGraphStore.getState().upsertEntity(type, id, data);\n return tx;\n },\n replaceEntity(type, id, data) {\n useGraphStore.getState().replaceEntity(type, id, data);\n return tx;\n },\n removeEntity(type, id) {\n useGraphStore.getState().removeEntity(type, id);\n return tx;\n },\n patchEntity(type, id, patch) {\n useGraphStore.getState().patchEntity(type, id, patch);\n return tx;\n },\n clearPatch(type, id) {\n useGraphStore.getState().clearPatch(type, id);\n return tx;\n },\n insertIdInList(key, id, position) {\n useGraphStore.getState().insertIdInList(key, id, position);\n return tx;\n },\n removeIdFromAllLists(type, id) {\n useGraphStore.getState().removeIdFromAllLists(type, id);\n return tx;\n },\n setEntitySyncMetadata(type, id, metadata) {\n useGraphStore.getState().setEntitySyncMetadata(type, id, metadata);\n return tx;\n },\n markEntityPending(type, id, origin = \"optimistic\") {\n useGraphStore.getState().setEntitySyncMetadata(type, id, {\n synced: false,\n origin,\n updatedAt: Date.now(),\n });\n return tx;\n },\n markEntitySynced(type, id, origin = \"server\") {\n useGraphStore.getState().setEntitySyncMetadata(type, id, {\n synced: true,\n origin,\n updatedAt: Date.now(),\n });\n return tx;\n },\n commit() {\n closed = true;\n },\n rollback() {\n if (closed) return;\n useGraphStore.setState(cloneGraphData(baseline) as Partial<ReturnType<typeof useGraphStore.getState>>);\n closed = true;\n },\n snapshot() {\n return cloneGraphData();\n },\n };\n\n return tx;\n}\n\nexport function createGraphAction<TInput, TResult>(opts: GraphActionOptions<TInput, TResult>) {\n if (opts.key) {\n graphActionReplayers.set(opts.key, async (record) => {\n const tx = createGraphTransaction();\n try {\n const result = await opts.run(tx, record.input as TInput);\n tx.commit();\n return result;\n } catch (error) {\n tx.rollback();\n throw error;\n }\n });\n }\n\n return async (input: TInput): Promise<TResult> => {\n const tx = createGraphTransaction();\n const record = opts.key\n ? {\n id: `${opts.key}:${Date.now()}`,\n key: opts.key,\n input: structuredClone(input),\n enqueuedAt: new Date().toISOString(),\n }\n : null;\n\n try {\n if (record) emitGraphActionEvent({ type: \"enqueued\", record });\n opts.optimistic?.(tx, input);\n const result = await opts.run(tx, input);\n opts.onSuccess?.(result, input, tx);\n tx.commit();\n if (record) emitGraphActionEvent({ type: \"settled\", record });\n return result;\n } catch (error) {\n tx.rollback();\n const normalized = error instanceof Error ? error : new Error(String(error));\n if (record) emitGraphActionEvent({ type: \"settled\", record });\n opts.onError?.(normalized, input);\n throw normalized;\n }\n };\n}\n\nexport function subscribeGraphActionEvents(listener: (event: GraphActionEvent) => void) {\n graphActionListeners.add(listener);\n return () => graphActionListeners.delete(listener);\n}\n\nexport async function replayRegisteredGraphAction(record: GraphActionRecord) {\n const replayer = graphActionReplayers.get(record.key);\n if (!replayer) throw new Error(`No graph action registered for key \"${record.key}\"`);\n return replayer(record);\n}\n\nfunction cloneGraphData(\n source: Pick<ReturnType<typeof useGraphStore.getState>, \"entities\" | \"patches\" | \"entityStates\" | \"syncMetadata\" | \"lists\"> = useGraphStore.getState(),\n): GraphDataSnapshot {\n return {\n entities: structuredClone(source.entities),\n patches: structuredClone(source.patches),\n entityStates: structuredClone(source.entityStates),\n syncMetadata: structuredClone(source.syncMetadata),\n lists: structuredClone(source.lists),\n };\n}\n\nfunction emitGraphActionEvent(event: GraphActionEvent) {\n for (const listener of graphActionListeners) listener(event);\n}\n","import { useGraphStore } from \"./graph\";\n\nexport interface GraphEffectEvent<T> {\n key: string;\n value: T;\n previousValue: T;\n}\n\nexport interface GraphEffectOptions<T> {\n query: () => T[] | T | null;\n getKey?: (value: T, index: number) => string;\n skipInitial?: boolean;\n isEqual?: (previousValue: T, nextValue: T) => boolean;\n onEnter?: (event: { key: string; value: T }) => void;\n onUpdate?: (event: GraphEffectEvent<T>) => void;\n onExit?: (event: { key: string; previousValue: T }) => void;\n}\n\nexport interface GraphEffectHandle {\n dispose: () => void;\n}\n\nexport function createGraphEffect<T>(opts: GraphEffectOptions<T>): GraphEffectHandle {\n const getKey = opts.getKey ?? defaultGetKey;\n const isEqual = opts.isEqual ?? defaultIsEqual;\n\n let initialized = false;\n let previous = new Map<string, T>();\n\n const evaluate = () => {\n const nextValues = normalizeQueryResult(opts.query());\n const next = new Map<string, T>();\n\n nextValues.forEach((value, index) => {\n next.set(getKey(value, index), value);\n });\n\n if (!initialized) {\n initialized = true;\n previous = next;\n if (opts.skipInitial) return;\n }\n\n for (const [key, value] of next.entries()) {\n const previousValue = previous.get(key);\n if (previousValue === undefined) {\n opts.onEnter?.({ key, value });\n continue;\n }\n if (!isEqual(previousValue, value)) {\n opts.onUpdate?.({ key, value, previousValue });\n }\n }\n\n for (const [key, previousValue] of previous.entries()) {\n if (!next.has(key)) opts.onExit?.({ key, previousValue });\n }\n\n previous = next;\n };\n\n evaluate();\n const unsubscribe = useGraphStore.subscribe(() => {\n evaluate();\n });\n\n return {\n dispose: () => {\n unsubscribe();\n },\n };\n}\n\nfunction normalizeQueryResult<T>(value: T[] | T | null): T[] {\n if (value == null) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction defaultGetKey<T>(value: T, index: number): string {\n if (value && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n if (typeof record.id === \"string\") return record.id;\n if (typeof record.$key === \"string\") return record.$key;\n }\n return String(index);\n}\n\nfunction defaultIsEqual<T>(previousValue: T, nextValue: T): boolean {\n return JSON.stringify(previousValue) === JSON.stringify(nextValue);\n}\n","function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function getValueAtPath<T = unknown>(source: unknown, path: string): T | undefined {\n if (!path) return source as T;\n const segments = path.split(\".\").filter(Boolean);\n let current: unknown = source;\n for (const segment of segments) {\n if (!isObject(current) && !Array.isArray(current)) return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n return current as T | undefined;\n}\n\nexport function setValueAtPath<T extends object>(source: T, path: string, value: unknown): T {\n const segments = path.split(\".\").filter(Boolean);\n if (segments.length === 0) return source;\n\n const clone = structuredClone(source) as Record<string, unknown>;\n let current: Record<string, unknown> = clone;\n\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n const next = current[segment];\n if (!isObject(next)) current[segment] = {};\n current = current[segment] as Record<string, unknown>;\n }\n\n current[segments[segments.length - 1]] = value;\n return clone as T;\n}\n\nexport function collectDirtyPaths(current: unknown, original: unknown, prefix = \"\", acc = new Set<string>()): Set<string> {\n if (isObject(current) && isObject(original)) {\n const keys = new Set([...Object.keys(current), ...Object.keys(original)]);\n for (const key of keys) {\n const nextPrefix = prefix ? `${prefix}.${key}` : key;\n collectDirtyPaths(current[key], original[key], nextPrefix, acc);\n }\n return acc;\n }\n\n if (JSON.stringify(current) !== JSON.stringify(original) && prefix) acc.add(prefix);\n return acc;\n}\n","import React, { useMemo } from \"react\";\nimport type { FieldDescriptor, FieldType } from \"./ui/entity-sheets\";\nimport { getValueAtPath } from \"./object-path\";\n\nexport interface JsonSchemaObject {\n $id?: string;\n title?: string;\n description?: string;\n type?: string | string[];\n format?: string;\n enum?: readonly unknown[];\n default?: unknown;\n properties?: Record<string, JsonSchemaObject>;\n items?: JsonSchemaObject;\n required?: string[];\n additionalProperties?: boolean | JsonSchemaObject;\n [\"x-a2ui-component\"]?: string;\n [\"x-display-order\"]?: number;\n [\"x-field-type\"]?: string;\n [\"x-hidden\"]?: boolean;\n}\n\nexport interface EntityJsonSchemaConfig {\n entityType: string;\n schemaId?: string;\n field?: string;\n version?: string;\n source?: \"static\" | \"runtime\" | \"ai\";\n schema: JsonSchemaObject;\n}\n\nexport interface GetEntityJsonSchemaOptions {\n entityType: string;\n schemaId?: string;\n field?: string;\n}\n\nexport interface SchemaFieldDescriptor<TEntity extends object = Record<string, unknown>>\n extends FieldDescriptor<TEntity> {\n schemaPath: string;\n schema: JsonSchemaObject;\n componentHint?: string;\n}\n\nexport interface BuildEntityFieldsFromSchemaOptions {\n schema: JsonSchemaObject;\n rootField?: string;\n}\n\nexport interface GraphSnapshotWithSchemasOptions {\n scope: string;\n data: unknown;\n schemas: Array<EntityJsonSchemaConfig | null | undefined>;\n pretty?: boolean;\n}\n\nconst schemaRegistry = new Map<string, EntityJsonSchemaConfig>();\n\nexport function registerEntityJsonSchema(config: EntityJsonSchemaConfig) {\n const key = registryKey(config.entityType, config.field, config.schemaId);\n schemaRegistry.set(key, config);\n}\n\nexport function registerRuntimeSchema(config: EntityJsonSchemaConfig) {\n registerEntityJsonSchema(config);\n}\n\nexport function getEntityJsonSchema(opts: GetEntityJsonSchemaOptions): EntityJsonSchemaConfig | null {\n const exact = schemaRegistry.get(registryKey(opts.entityType, opts.field, opts.schemaId));\n if (exact) return exact;\n if (opts.field) {\n const byField = schemaRegistry.get(registryKey(opts.entityType, opts.field));\n if (byField) return byField;\n }\n if (opts.schemaId) {\n const byId = schemaRegistry.get(registryKey(opts.entityType, undefined, opts.schemaId));\n if (byId) return byId;\n }\n\n for (const schema of schemaRegistry.values()) {\n if (schema.entityType !== opts.entityType) continue;\n if (opts.field && schema.field !== opts.field) continue;\n return schema;\n }\n\n return null;\n}\n\nexport function useSchemaEntityFields<TEntity extends object = Record<string, unknown>>(\n opts: GetEntityJsonSchemaOptions & { schema?: JsonSchemaObject; rootField?: string },\n) {\n return useMemo(() => {\n const schema = opts.schema ?? getEntityJsonSchema(opts)?.schema;\n if (!schema) return [];\n return buildEntityFieldsFromSchema<TEntity>({ schema, rootField: opts.rootField ?? opts.field });\n }, [opts.entityType, opts.field, opts.rootField, opts.schemaId, opts.schema]);\n}\n\nexport function buildEntityFieldsFromSchema<TEntity extends object = Record<string, unknown>>(\n opts: BuildEntityFieldsFromSchemaOptions,\n): SchemaFieldDescriptor<TEntity>[] {\n return buildSchemaFields<TEntity>(opts.schema, opts.rootField ?? \"\", \"\");\n}\n\nexport function exportGraphSnapshotWithSchemas(opts: GraphSnapshotWithSchemasOptions): string {\n return JSON.stringify(\n {\n scope: opts.scope,\n generatedAt: new Date().toISOString(),\n data: opts.data,\n schemas: opts.schemas.filter(Boolean),\n },\n null,\n opts.pretty === false ? 0 : 2,\n );\n}\n\nexport function escapeHtml(input: string): string {\n return input\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\");\n}\n\nexport function renderMarkdownToHtml(value: string): string {\n const escaped = escapeHtml(value);\n const blocks = escaped.split(/\\n{2,}/).map((block) => block.trim()).filter(Boolean);\n return blocks.map((block) => renderMarkdownBlock(block)).join(\"\");\n}\n\nexport function MarkdownFieldRenderer({ value, className }: { value: string; className?: string }) {\n return (\n <div\n className={className}\n dangerouslySetInnerHTML={{ __html: renderMarkdownToHtml(value ?? \"\") }}\n />\n );\n}\n\nexport function MarkdownFieldEditor({\n value,\n onChange,\n placeholder,\n}: {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n}) {\n return (\n <div className=\"flex flex-col gap-2\">\n <textarea\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder={placeholder}\n className=\"w-full min-h-[120px] rounded-md border bg-muted/50 px-3 py-2 text-sm resize-y focus:outline-none focus:ring-1 focus:ring-ring transition-colors\"\n />\n <div className=\"rounded-md border bg-background px-3 py-2\">\n <MarkdownFieldRenderer value={value} className=\"prose prose-sm max-w-none\" />\n </div>\n </div>\n );\n}\n\nexport function createMarkdownDetailRenderer<TEntity extends object>(field: string) {\n return (value: unknown, entity: TEntity) => (\n <MarkdownFieldRenderer value={String(value ?? getValueAtPath(entity, field) ?? \"\")} className=\"prose prose-sm max-w-none\" />\n );\n}\n\nfunction buildSchemaFields<TEntity extends object>(\n schema: JsonSchemaObject,\n pathPrefix: string,\n schemaPathPrefix: string,\n): SchemaFieldDescriptor<TEntity>[] {\n if (schema.type === \"object\" && schema.properties) {\n const entries = Object.entries(schema.properties).sort(([, left], [, right]) => {\n const l = left[\"x-display-order\"] ?? Number.MAX_SAFE_INTEGER;\n const r = right[\"x-display-order\"] ?? Number.MAX_SAFE_INTEGER;\n return l - r;\n });\n\n return entries.flatMap(([key, childSchema]) => {\n if (childSchema[\"x-hidden\"]) return [];\n const field = pathPrefix ? `${pathPrefix}.${key}` : key;\n const schemaPath = schemaPathPrefix ? `${schemaPathPrefix}.${key}` : key;\n if (childSchema.type === \"object\" && childSchema.properties) {\n return buildSchemaFields<TEntity>(childSchema, field, schemaPath);\n }\n return [schemaField<TEntity>(field, schemaPath, childSchema, schema.required?.includes(key) ?? false)];\n });\n }\n\n return [];\n}\n\nfunction schemaField<TEntity extends object>(\n field: string,\n schemaPath: string,\n schema: JsonSchemaObject,\n required: boolean,\n): SchemaFieldDescriptor<TEntity> {\n const type = inferFieldType(schema);\n const descriptor: SchemaFieldDescriptor<TEntity> = {\n field,\n label: schema.title ?? humanize(field.split(\".\").pop() ?? field),\n type,\n required,\n hint: schema.description,\n schemaPath,\n schema,\n componentHint: schema[\"x-a2ui-component\"],\n };\n\n if (schema.enum) {\n descriptor.options = schema.enum.map((value) => ({\n value: String(value),\n label: String(value),\n }));\n }\n\n if (type === \"markdown\") {\n descriptor.render = createMarkdownDetailRenderer(field);\n }\n\n return descriptor;\n}\n\nfunction inferFieldType(schema: JsonSchemaObject): FieldType {\n const forced = schema[\"x-field-type\"];\n if (forced === \"markdown\") return \"markdown\";\n if (schema.format === \"markdown\") return \"markdown\";\n if (schema.enum) return \"enum\";\n\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n switch (type) {\n case \"boolean\":\n return \"boolean\";\n case \"integer\":\n case \"number\":\n return \"number\";\n case \"string\":\n if (schema.format === \"email\") return \"email\";\n if (schema.format === \"uri\" || schema.format === \"url\") return \"url\";\n if (schema.format === \"date\" || schema.format === \"date-time\") return \"date\";\n return \"text\";\n case \"array\":\n case \"object\":\n return \"json\";\n default:\n return \"text\";\n }\n}\n\nfunction registryKey(entityType: string, field?: string, schemaId?: string) {\n return `${entityType}::${field ?? \"*\"}::${schemaId ?? \"*\"}`;\n}\n\nfunction humanize(value: string) {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nfunction renderMarkdownBlock(block: string): string {\n if (block.startsWith(\"# \")) return `<h1>${renderInlineMarkdown(block.slice(2))}</h1>`;\n if (block.startsWith(\"## \")) return `<h2>${renderInlineMarkdown(block.slice(3))}</h2>`;\n return `<p>${renderInlineMarkdown(block).replaceAll(\"\\n\", \"<br/>\")}</p>`;\n}\n\nfunction renderInlineMarkdown(block: string): string {\n return block.replace(/\\*\\*(.+?)\\*\\*/g, \"<strong>$1</strong>\");\n}\n","import { useGraphStore } from \"./graph\";\nimport { queryOnce } from \"./graph-query\";\nimport { exportGraphSnapshotWithSchemas, getEntityJsonSchema } from \"./schema\";\n\nexport interface GraphSnapshotExportOptions {\n scope: string;\n data: unknown;\n pretty?: boolean;\n}\n\nexport interface GraphToolContext {\n store: ReturnType<typeof useGraphStore.getState>;\n queryOnce: typeof queryOnce;\n exportGraphSnapshot: typeof exportGraphSnapshot;\n}\n\nexport interface SchemaGraphToolContext extends GraphToolContext {\n getEntityJsonSchema: typeof getEntityJsonSchema;\n exportGraphSnapshotWithSchemas: typeof exportGraphSnapshotWithSchemas;\n}\n\nexport function exportGraphSnapshot(opts: GraphSnapshotExportOptions): string {\n const payload = {\n scope: opts.scope,\n generatedAt: new Date().toISOString(),\n data: opts.data,\n };\n return JSON.stringify(payload, null, opts.pretty === false ? 0 : 2);\n}\n\nexport function createGraphTool<TInput, TResult>(\n handler: (input: TInput, ctx: GraphToolContext) => Promise<TResult> | TResult,\n) {\n return (input: TInput) =>\n handler(input, {\n store: useGraphStore.getState(),\n queryOnce,\n exportGraphSnapshot,\n });\n}\n\nexport function createSchemaGraphTool<TInput, TResult>(\n handler: (input: TInput, ctx: SchemaGraphToolContext) => Promise<TResult> | TResult,\n) {\n return (input: TInput) =>\n handler(input, {\n store: useGraphStore.getState(),\n queryOnce,\n exportGraphSnapshot,\n getEntityJsonSchema,\n exportGraphSnapshotWithSchemas,\n });\n}\n","import { create } from \"zustand\";\nimport { useGraphStore } from \"./graph\";\nimport { replayRegisteredGraphAction, subscribeGraphActionEvents } from \"./graph-actions\";\n\nexport interface GraphPersistenceAdapter {\n get: (key: string) => Promise<string | null> | string | null;\n set: (key: string, value: string) => Promise<void> | void;\n remove?: (key: string) => Promise<void> | void;\n}\n\nexport interface GraphActionRecord {\n id: string;\n key: string;\n input: unknown;\n enqueuedAt: string;\n}\n\nexport interface GraphSyncStatus {\n phase: \"idle\" | \"hydrating\" | \"syncing\" | \"ready\" | \"offline\" | \"error\";\n isOnline: boolean;\n isSynced: boolean;\n pendingActions: number;\n lastHydratedAt: string | null;\n lastPersistedAt: string | null;\n storageKey: string | null;\n error: string | null;\n}\n\nexport interface GraphSnapshotPayload {\n version: 1;\n snapshot: {\n entities: ReturnType<typeof useGraphStore.getState>[\"entities\"];\n patches: ReturnType<typeof useGraphStore.getState>[\"patches\"];\n entityStates: ReturnType<typeof useGraphStore.getState>[\"entityStates\"];\n syncMetadata: ReturnType<typeof useGraphStore.getState>[\"syncMetadata\"];\n lists: ReturnType<typeof useGraphStore.getState>[\"lists\"];\n };\n pendingActions: GraphActionRecord[];\n}\n\nexport interface PersistGraphToStorageOptions {\n storage: GraphPersistenceAdapter;\n key: string;\n pendingActions?: GraphActionRecord[];\n}\n\nexport interface HydrateGraphFromStorageOptions {\n storage: GraphPersistenceAdapter;\n key: string;\n}\n\n/**\n * Retry-with-backoff policy for replaying pending offline actions.\n *\n * The replay loop tracks per-action attempt counts. After `maxAttempts`\n * failed attempts the action is considered \"poisoned\" — it is removed from\n * the in-memory pending queue (so it won't block other actions) and the\n * optional `poisonHandler` is invoked. Consumers typically log the action,\n * surface a UI prompt, or persist it to a dead-letter store.\n *\n * Defaults: 5 attempts, starting at 500ms, doubling up to 30s, with\n * \"equal\" jitter (random in `[delay/2, delay]`).\n */\nexport interface ReplayRetryPolicy {\n maxAttempts?: number;\n initialDelayMs?: number;\n maxDelayMs?: number;\n backoffFactor?: number;\n jitter?: \"full\" | \"equal\" | \"none\";\n poisonHandler?: (action: GraphActionRecord, error: unknown) => void | Promise<void>;\n}\n\nexport interface StartLocalFirstGraphOptions {\n storage: GraphPersistenceAdapter;\n key?: string;\n replayPendingActions?: boolean;\n onlineSource?: {\n getIsOnline: () => boolean;\n subscribe: (listener: (online: boolean) => void) => () => void;\n };\n persistDebounceMs?: number;\n /** Retry-with-backoff policy for offline action replay. */\n retryPolicy?: ReplayRetryPolicy;\n}\n\nexport interface LocalFirstGraphRuntime {\n ready: Promise<void>;\n dispose: () => void;\n persistNow: () => Promise<void>;\n hydrate: () => Promise<Awaited<ReturnType<typeof hydrateGraphFromStorage>>>;\n getStatus: () => GraphSyncStatus;\n}\n\nconst DEFAULT_STORAGE_KEY = \"prometheus:graph\";\n\nconst useGraphSyncStatusStore = create<{ status: GraphSyncStatus; setStatus: (status: Partial<GraphSyncStatus>) => void }>((set) => ({\n status: {\n phase: \"idle\",\n isOnline: true,\n isSynced: true,\n pendingActions: 0,\n lastHydratedAt: null,\n lastPersistedAt: null,\n storageKey: null,\n error: null,\n },\n setStatus: (status) =>\n set((state) => ({\n status: {\n ...state.status,\n ...status,\n },\n })),\n}));\n\nconst pendingActions = new Map<string, GraphActionRecord>();\n\nexport function useGraphSyncStatus() {\n return useGraphSyncStatusStore((state) => state.status);\n}\n\nexport async function persistGraphToStorage(opts: PersistGraphToStorageOptions) {\n const payload: GraphSnapshotPayload = {\n version: 1,\n snapshot: cloneGraphSnapshot(),\n pendingActions: opts.pendingActions ?? Array.from(pendingActions.values()),\n };\n const json = JSON.stringify(payload);\n await opts.storage.set(opts.key, json);\n const persistedAt = new Date().toISOString();\n useGraphSyncStatusStore.getState().setStatus({\n lastPersistedAt: persistedAt,\n storageKey: opts.key,\n pendingActions: payload.pendingActions.length,\n });\n return {\n ok: true as const,\n key: opts.key,\n bytes: json.length,\n persistedAt,\n };\n}\n\nexport async function hydrateGraphFromStorage(opts: HydrateGraphFromStorageOptions) {\n const raw = await opts.storage.get(opts.key);\n if (!raw) {\n return {\n ok: false as const,\n key: opts.key,\n hydratedAt: null,\n entityCounts: {},\n error: \"No persisted graph snapshot found\",\n };\n }\n\n try {\n const parsed = JSON.parse(raw) as GraphSnapshotPayload;\n useGraphStore.setState(parsed.snapshot as Partial<ReturnType<typeof useGraphStore.getState>>);\n pendingActions.clear();\n for (const action of parsed.pendingActions ?? []) pendingActions.set(action.id, action);\n const hydratedAt = new Date().toISOString();\n useGraphSyncStatusStore.getState().setStatus({\n lastHydratedAt: hydratedAt,\n storageKey: opts.key,\n pendingActions: pendingActions.size,\n error: null,\n });\n return {\n ok: true as const,\n key: opts.key,\n hydratedAt,\n entityCounts: Object.fromEntries(\n Object.entries(parsed.snapshot.entities).map(([type, entities]) => [type, Object.keys(entities).length]),\n ),\n pendingActions: Array.from(pendingActions.values()),\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n useGraphSyncStatusStore.getState().setStatus({\n phase: \"error\",\n error: message,\n storageKey: opts.key,\n });\n return {\n ok: false as const,\n key: opts.key,\n hydratedAt: null,\n entityCounts: {},\n error: message,\n };\n }\n}\n\nexport function startLocalFirstGraph(opts: StartLocalFirstGraphOptions): LocalFirstGraphRuntime {\n const key = opts.key ?? DEFAULT_STORAGE_KEY;\n const persistDebounceMs = opts.persistDebounceMs ?? 50;\n const statusStore = useGraphSyncStatusStore.getState();\n statusStore.setStatus({\n phase: \"hydrating\",\n storageKey: key,\n isOnline: opts.onlineSource?.getIsOnline() ?? getDefaultOnlineSource().getIsOnline(),\n isSynced: pendingActions.size === 0,\n error: null,\n });\n\n let persistTimer: ReturnType<typeof setTimeout> | null = null;\n const schedulePersist = () => {\n if (persistTimer) clearTimeout(persistTimer);\n persistTimer = setTimeout(() => {\n void persistGraphToStorage({ storage: opts.storage, key });\n }, persistDebounceMs);\n };\n\n const graphUnsub = useGraphStore.subscribe(() => {\n schedulePersist();\n });\n\n const actionUnsub = subscribeGraphActionEvents((event) => {\n if (event.type === \"enqueued\") pendingActions.set(event.record.id, event.record);\n if (event.type === \"settled\") pendingActions.delete(event.record.id);\n useGraphSyncStatusStore.getState().setStatus({\n pendingActions: pendingActions.size,\n isSynced: pendingActions.size === 0,\n });\n schedulePersist();\n });\n\n const onlineSource = opts.onlineSource ?? getDefaultOnlineSource();\n const onlineUnsub = onlineSource.subscribe((online) => {\n useGraphSyncStatusStore.getState().setStatus({\n isOnline: online,\n phase: online ? \"ready\" : \"offline\",\n });\n });\n\n const ready = (async () => {\n const hydrated = await hydrateGraphFromStorage({ storage: opts.storage, key });\n if (opts.replayPendingActions && hydrated.ok && pendingActions.size > 0) {\n useGraphSyncStatusStore.getState().setStatus({\n phase: \"syncing\",\n isSynced: false,\n });\n const policy = resolveRetryPolicy(opts.retryPolicy);\n for (const action of Array.from(pendingActions.values())) {\n await replayActionWithRetry(action, policy);\n // Whether it succeeded or was poisoned, remove from pending — the\n // poison handler (if any) owns escalation from here.\n pendingActions.delete(action.id);\n }\n await persistGraphToStorage({ storage: opts.storage, key });\n }\n\n const online = onlineSource.getIsOnline();\n useGraphSyncStatusStore.getState().setStatus({\n phase: online ? \"ready\" : \"offline\",\n isOnline: online,\n isSynced: pendingActions.size === 0,\n pendingActions: pendingActions.size,\n });\n })();\n\n return {\n ready,\n dispose() {\n graphUnsub();\n actionUnsub();\n onlineUnsub();\n if (persistTimer) clearTimeout(persistTimer);\n },\n async persistNow() {\n await persistGraphToStorage({ storage: opts.storage, key });\n },\n hydrate() {\n return hydrateGraphFromStorage({ storage: opts.storage, key });\n },\n getStatus() {\n return useGraphSyncStatusStore.getState().status;\n },\n };\n}\n\nfunction cloneGraphSnapshot() {\n const state = useGraphStore.getState();\n return {\n entities: structuredClone(state.entities),\n patches: structuredClone(state.patches),\n entityStates: structuredClone(state.entityStates),\n syncMetadata: structuredClone(state.syncMetadata),\n lists: structuredClone(state.lists),\n };\n}\n\ninterface ResolvedRetryPolicy {\n maxAttempts: number;\n initialDelayMs: number;\n maxDelayMs: number;\n backoffFactor: number;\n jitter: \"full\" | \"equal\" | \"none\";\n poisonHandler?: (action: GraphActionRecord, error: unknown) => void | Promise<void>;\n}\n\nfunction resolveRetryPolicy(policy?: ReplayRetryPolicy): ResolvedRetryPolicy {\n return {\n maxAttempts: policy?.maxAttempts ?? 5,\n initialDelayMs: policy?.initialDelayMs ?? 500,\n maxDelayMs: policy?.maxDelayMs ?? 30_000,\n backoffFactor: policy?.backoffFactor ?? 2,\n jitter: policy?.jitter ?? \"equal\",\n poisonHandler: policy?.poisonHandler,\n };\n}\n\nfunction computeDelay(policy: ResolvedRetryPolicy, attempt: number): number {\n const base = Math.min(\n policy.initialDelayMs * Math.pow(policy.backoffFactor, Math.max(0, attempt - 1)),\n policy.maxDelayMs,\n );\n switch (policy.jitter) {\n case \"none\":\n return base;\n case \"full\":\n return Math.random() * base;\n case \"equal\":\n default:\n return base / 2 + Math.random() * (base / 2);\n }\n}\n\n/** Internal — sleep helper that respects test environments. */\nfunction sleep(ms: number): Promise<void> {\n if (ms <= 0) return Promise.resolve();\n return new Promise((r) => setTimeout(r, ms));\n}\n\n/**\n * Attempt to replay an action up to `maxAttempts` times. On exhaustion the\n * action goes to \"poison\" — the optional handler is invoked and the function\n * resolves. Exposed for unit testing.\n */\nexport async function replayActionWithRetry(\n action: GraphActionRecord,\n policy: ResolvedRetryPolicy,\n): Promise<{ ok: true } | { ok: false; poisoned: true; error: unknown }> {\n let lastError: unknown = null;\n for (let attempt = 1; attempt <= policy.maxAttempts; attempt++) {\n try {\n await replayRegisteredGraphAction(action);\n return { ok: true };\n } catch (error) {\n lastError = error;\n if (attempt >= policy.maxAttempts) break;\n await sleep(computeDelay(policy, attempt));\n }\n }\n try {\n await policy.poisonHandler?.(action, lastError);\n } catch {\n /* swallow handler failures — they must not block the queue */\n }\n return { ok: false, poisoned: true, error: lastError };\n}\n\nfunction getDefaultOnlineSource() {\n if (typeof window !== \"undefined\" && typeof window.addEventListener === \"function\") {\n return {\n getIsOnline: () => window.navigator.onLine,\n subscribe: (listener: (online: boolean) => void) => {\n const onlineHandler = () => listener(true);\n const offlineHandler = () => listener(false);\n window.addEventListener(\"online\", onlineHandler);\n window.addEventListener(\"offline\", offlineHandler);\n return () => {\n window.removeEventListener(\"online\", onlineHandler);\n window.removeEventListener(\"offline\", offlineHandler);\n };\n },\n };\n }\n\n return {\n getIsOnline: () => true,\n subscribe: () => () => {},\n };\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 object>(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 dataSelector = useCallback((state: ReturnType<typeof useGraphStore.getState>) => {\n if (!id) return null;\n return state.readEntitySnapshot<TEntity>(type, id) as TEntity | null;\n }, [id, type]);\n const data = useStore(useGraphStore, useShallow(dataSelector));\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 /**\n * Last error message from the underlying fetcher, or `null` when\n * the latest attempt succeeded / no attempt has been made.\n * Combined with `isError` for TanStack-Query-style ergonomics.\n */\n error: string | null;\n /** Convenience for `error !== null`. TanStack-Query-style. */\n isError: boolean;\n 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 */\n/**\n * @deprecated Use `useEntities` from `\"@prometheus-ags/prometheus-entity-management\"` instead.\n * Register a transport: `registerEntityTransport(\"Foo\", makeRestTransport({ supabase, table: \"foo\" }))`\n * Then consume: `const { items } = useEntities<Foo>(\"Foo\")`.\n * `useEntityList` will be removed in a future major version.\n */\nexport function useEntityList<TRaw, TEntity extends object>(opts: ListQueryOptions<TRaw, TEntity>): UseEntityListResult<TEntity> {\n console.warn(\n `[entity-management] useEntityList(\"${String(opts.type)}\") is deprecated in 2.0.\\n` +\n `Register a transport at boot: registerEntityTransport(\"${String(opts.type)}\", makeRestTransport(...))\\n` +\n `Then replace this call with: useEntities<T>(\"${String(opts.type)}\")`,\n );\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 itemsSelector = useCallback((state: ReturnType<typeof useGraphStore.getState>) => {\n const ids = state.lists[key]?.ids ?? EMPTY_IDS;\n return ids\n .map((id) => state.readEntitySnapshot<TEntity>(type, id))\n .filter((x) => x !== null) as TEntity[];\n }, [key, type]);\n const items = useStore(useGraphStore, useShallow(itemsSelector));\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 // Stabilize the returned object identity. React 19's\n // `useSyncExternalStore` (which Zustand's `useStore` reads above)\n // warns \"The result of getSnapshot should be cached to avoid an\n // infinite loop\" whenever consumers see a fresh object identity per\n // render. The `useShallow(itemsSelector)` above keeps `items` stable\n // across no-op renders, and the `listState` selector already returns\n // a referentially-stable slice from the Zustand store; this useMemo\n // ensures the outer result shape consumers (e.g. `useTeam` →\n // `useQuickStats` → `KpiOutstanding`) read is also identity-stable.\n // See https://github.com/pmndrs/zustand/discussions/1936 and\n // https://react.dev/reference/react/useSyncExternalStore for the\n // contract being honoured here.\n return useMemo(\n () => ({\n items,\n ids: listState.ids,\n isLoading: listState.ids.length === 0 && listState.isFetching,\n isFetching: listState.isFetching,\n isFetchingMore: listState.isFetchingMore,\n error: listState.error,\n isError: listState.error !== null,\n hasNextPage: listState.hasNextPage,\n hasPrevPage: listState.hasPrevPage,\n total: listState.total,\n currentPage: listState.currentPage,\n fetchNextPage,\n refetch: doFetch,\n }),\n [items, listState, fetchNextPage, doFetch],\n );\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 object> {\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 object>(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 const previousSync = store.syncMetadata[`${type}:${id}`];\n store.patchEntity(type, id, patch as Record<string, unknown>);\n store.setEntitySyncMetadata(type, id, { synced: false, origin: \"optimistic\", updatedAt: Date.now() });\n rollback = () => {\n const currentStore = useGraphStore.getState();\n if (Object.keys(previous).length > 0) currentStore.patchEntity(type, id, previous);\n else currentStore.clearPatch(type, id);\n if (previousSync) currentStore.setEntitySyncMetadata(type, id, previousSync);\n else currentStore.clearEntitySyncMetadata(type, id);\n };\n }\n }\n try {\n const result = await apiFn(input);\n if (normalize) {\n const { id, data } = normalize(result, input);\n const store = useGraphStore.getState();\n store.upsertEntity(type, id, data as Record<string, unknown>);\n store.setEntitySyncMetadata(type, id, { synced: true, origin: \"server\", updatedAt: Date.now() });\n if (optimistic) { const opt = optimistic(input); if (opt) store.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 object>(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 object>(\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 object>(\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 { 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 object> {\n type: EntityType; baseQueryKey: unknown[]; view: ViewDescriptor; mode?: CompletenessMode;\n remoteFetch?: (params: ViewFetchParams) => Promise<ListResponse<TEntity>>;\n normalize?: (raw: TEntity) => { id: EntityId; data: TEntity };\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 /**\n * Last error message from the remote fetcher (or the cached base\n * list state). `null` when the latest attempt succeeded or no\n * attempt has been made.\n */\n error: string | null;\n /** Convenience for `error !== null`. TanStack-Query-style. */\n isError: boolean;\n 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 */\n/**\n * @deprecated Use `useEntityQuery` from `\"@prometheus-ags/prometheus-entity-management\"` instead.\n * Register a transport: `registerEntityTransport(\"Foo\", makeRestTransport({ supabase, table: \"foo\" }))`\n * Then consume: `const { items, setFilter, setSort } = useEntityQuery<Foo>(\"Foo\", { view })`\n * `useEntityView` will be removed in a future major version.\n */\nexport function useEntityView<TEntity extends object>(opts: UseEntityViewOptions<TEntity>): UseEntityViewResult<TEntity> {\n console.warn(\n `[entity-management] useEntityView(\"${String(opts.type)}\") is deprecated in 2.0.\\n` +\n `Register a transport at boot: registerEntityTransport(\"${String(opts.type)}\", makeRestTransport(...))\\n` +\n `Then replace this call with: useEntityQuery<T>(\"${String(opts.type)}\", { view })`,\n );\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 => state.readEntitySnapshot(type, id);\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 = useMemo(\n () =>\n localViewIds\n .map((id) => useGraphStore.getState().readEntitySnapshot<TEntity>(type, id))\n .filter((item) => item !== null) as TEntity[],\n [localViewIds, type],\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 const baseKeyStr = serializeKey(bqk);\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 }));\n store.upsertEntities(type, normalized.map(({ id, data }) => ({ id, data: data as Record<string, unknown> }))); 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 // Mark the base key as freshly fetched (even if its ids list is\n // empty / unchanged). This stops the staleness re-trigger in the\n // mount effect below — a successful remote fetch counts as a base\n // refresh even when no ids land in the base list.\n store.setListFetching(baseKeyStr, false);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n setRemoteError(msg);\n // Stamp BOTH keys with the error:\n // - rKey so consumers reading remote-result state see it,\n // - baseKey so the SWR staleness check in the mount effect\n // stops refiring (terminal-error trap fix). `setListError`\n // now also stamps `lastFetched` so this is sufficient to\n // prevent the retry loop on permanent errors like 404 from a\n // missing table. Consumers can manually `refetch()` to\n // re-attempt.\n store.setListError(rKey, msg);\n store.setListError(baseKeyStr, msg);\n }\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>;\n const merged = store.readEntitySnapshot(type, id) ?? 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) => store.readEntitySnapshot(type, eid), 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 // Fixed: `listState?.isFetching ?? true` was the terminal-error\n // trap — when no list state existed (because a remote fetch failed\n // before seeding the base key, OR because the base key was never\n // primed), the `?? true` kept isLoading at true forever. The new\n // default of `?? false` matches `useEntityList`'s symmetric\n // behaviour (it reads from EMPTY_LIST_STATE which has\n // `isFetching: false`). `isRemoteFetching` still gates the spinner\n // during the actual round-trip.\n const error: string | null = remoteError ?? listState?.error ?? null;\n return {\n items,\n viewIds: localViewIds,\n viewTotal,\n isLoading:\n items.length === 0 &&\n ((listState?.isFetching ?? false) || isRemoteFetching),\n isFetching: (listState?.isFetching ?? false) || isRemoteFetching,\n isRemoteFetching,\n isShowingLocalPending: completenessMode === \"hybrid\" && isRemoteFetching && items.length > 0,\n error,\n isError: error !== null,\n 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\";\nimport { collectDirtyPaths, setValueAtPath } from \"../object-path\";\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 object> {\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/** Public field input for CRUD setters: supports classic `keyof T` calls and dotted nested paths for JSON-backed forms. */\nexport type EntityFieldPath<TEntity extends object> = keyof TEntity | string;\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 extends object> {\n changed: ReadonlySet<EntityFieldPath<TEntity>>;\n isDirty: boolean;\n}\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 object> {\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: (field: EntityFieldPath<TEntity>, value: unknown) => 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: (field: EntityFieldPath<TEntity>, value: unknown) => 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 object>(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((field: EntityFieldPath<TEntity>, value: unknown) => setEditBuffer((prev) => setValueAtPath(prev as Record<string, unknown>, String(field), value) as Partial<TEntity>), []);\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 = collectDirtyPaths(editBuffer, detail);\n return { changed: changed as ReadonlySet<EntityFieldPath<TEntity>>, 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(() => {\n if (!selectedId) return;\n const store = useGraphStore.getState();\n store.patchEntity(type, selectedId, editBuffer as Record<string, unknown>);\n store.setEntitySyncMetadata(type, selectedId, { synced: false, origin: \"optimistic\", updatedAt: Date.now() });\n }, [type, selectedId, editBuffer]);\n const save = useCallback(async (): Promise<TEntity | null> => {\n if (!selectedId || !onUpdate) return null;\n setIsSaving(true); setSaveError(null);\n const store = useGraphStore.getState();\n const previous = store.readEntity<TEntity>(type, selectedId);\n const previousSync = store.syncMetadata[`${type}:${selectedId}`];\n store.upsertEntity(type, selectedId, editBuffer as Record<string, unknown>);\n store.setEntitySyncMetadata(type, selectedId, { synced: false, origin: \"optimistic\", updatedAt: Date.now() });\n try {\n const result = await onUpdate(selectedId, editBuffer);\n const { id, data } = normalize(result);\n store.replaceEntity(type, id, data as Record<string, unknown>);\n store.clearPatch(type, id);\n store.setEntitySyncMetadata(type, id, { synced: true, origin: \"server\", updatedAt: Date.now() });\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) store.replaceEntity(type, selectedId, previous as Record<string, unknown>);\n if (previousSync) store.setEntitySyncMetadata(type, selectedId, previousSync);\n else store.clearEntitySyncMetadata(type, selectedId);\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((field: EntityFieldPath<TEntity>, value: unknown) => setCreateBuffer((prev) => setValueAtPath(prev as Record<string, unknown>, String(field), value) as Partial<TEntity>), []);\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 const store = useGraphStore.getState();\n store.upsertEntity(type, tempId, optimisticData as Record<string, unknown>);\n store.setEntitySyncMetadata(type, tempId, { synced: false, origin: \"optimistic\", updatedAt: Date.now() });\n store.insertIdInList(serializeKey(listQueryKey), tempId, \"start\");\n try {\n const result = await onCreate(createBuffer);\n const { id: realId, data } = normalize(result);\n store.removeEntity(type, tempId);\n store.upsertEntity(type, realId, data as Record<string, unknown>);\n store.setEntityFetched(type, realId);\n store.setEntitySyncMetadata(type, realId, { synced: true, origin: \"server\", updatedAt: Date.now() });\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 store.removeEntity(type, tempId); store.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 object> {\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 object>(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 object> {\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 object>(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 object> {\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 object>(\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 object>(\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<unknown>;\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 object> {\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 object>(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 as Record<string, unknown>)[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 object>(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 as Record<string, unknown>)[idColumn]), data: normalize ? normalize(row) : (row as Record<string, unknown>) })));\n for (const row of r.rows) store.setEntityFetched(type, String((row as Record<string, unknown>)[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 * adapters/electricsql-tenant.ts\n *\n * Tenant-scoped Electric adapter — the safety primitive that enforces\n * **RULE 5 — Shape predicates ⊆ RLS** (see hotseaters constraints).\n *\n * PGlite has no row-level security. The only way to guarantee a client\n * never sees cross-tenant data through Electric is to refuse to attach\n * any shape that lacks a tenant predicate. This wrapper does exactly that:\n *\n * - Validates the tenant claim (currently `{ companyId }`) is a UUID.\n * - Refuses to attach a shape whose `tenantColumn` is `undefined`. We\n * accept explicit `null` for the company root itself (filtered by `id`).\n * - Builds the `where` clause from `tenantColumn` and the validated\n * companyId so individual shape factories cannot drift from RLS.\n * - Delegates to the existing `createElectricAdapter` for the actual\n * sync wiring.\n *\n * This also fulfils Change 13 item 11 (auth-claim-aware shape registration):\n * the `tenantClaim` is the typed seam where authn meets shape registration.\n *\n * Self-hosted Supabase only. Local stack and `https://electricsql.prometheusags.ai`\n * are the only acceptable Electric endpoints — this module does not\n * hard-code either; it only governs the predicate.\n */\n\nimport { createElectricAdapter } from \"./electricsql\";\nimport type { SyncAdapter } from \"./types\";\nimport type { EntityType } from \"../graph\";\n\n// ---------------------------------------------------------------------------\n// Minimal surface types (mirror adapters/electricsql.ts)\n// ---------------------------------------------------------------------------\ninterface PGlite {\n query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<{ rows: T[] }>;\n exec(sql: string): Promise<unknown>;\n listen(channel: string, handler: (payload: string) => void): Promise<() => void>;\n}\n\ninterface ShapeMessage<T = Record<string, unknown>> {\n headers: { operation: \"insert\" | \"update\" | \"delete\" };\n offset: string;\n value: T;\n key: string;\n}\n\ninterface ShapeStream<T = Record<string, unknown>> {\n subscribe(onMsg: (msgs: ShapeMessage<T>[]) => void, onErr?: (e: Error) => void): () => void;\n isUpToDate: boolean;\n lastOffset: string;\n}\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\n/** Auth claim required to register tenant-scoped shapes. */\nexport interface TenantClaim {\n companyId: string;\n}\n\nexport interface TenantScopedTableConfig<T extends object = Record<string, unknown>> {\n type: EntityType;\n table: string;\n /**\n * Column used for tenant filtering.\n *\n * - A string (`\"company_id\"`) yields `WHERE company_id = '<companyId>'`.\n * - Explicit `null` means the table IS the tenant root and is filtered by\n * `id = '<companyId>'`. Only the `company` table qualifies.\n * - `undefined` is **rejected** — this is the safety gate.\n */\n tenantColumn: string | null;\n primaryKey?: string[];\n /**\n * Factory invoked with the constructed `where` clause and the tenant claim.\n * Consumers wire their preferred Electric `ShapeStream` builder here. The\n * factory must use the supplied `where` verbatim (no widening).\n */\n shapeStreamFactory: (params: {\n table: string;\n where: string;\n tenantClaim: TenantClaim;\n }) => ShapeStream<T>;\n normalize?: (row: T) => Record<string, unknown>;\n}\n\nexport interface TenantScopedAdapterOptions {\n pglite: PGlite;\n tenantClaim: TenantClaim;\n tables: TenantScopedTableConfig[];\n onSynced?: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\nfunction assertUuid(companyId: string): void {\n if (typeof companyId !== \"string\" || !UUID_RE.test(companyId)) {\n throw new Error(\n `tenant-scoped adapter: companyId must be a UUID, received \"${companyId}\".`,\n );\n }\n}\n\nfunction assertSafeColumn(column: string): void {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(column)) {\n throw new Error(`tenant-scoped adapter: unsafe tenantColumn \"${column}\".`);\n }\n}\n\n/**\n * Build the `where` clause for a single shape. Exposed for tests.\n *\n * - `tenantColumn === null` → `id = '<companyId>'` (company-root case)\n * - `tenantColumn === string` → `<tenantColumn> = '<companyId>'`\n *\n * Throws if `tenantColumn` is `undefined` or `companyId` is not a UUID.\n */\nexport function buildTenantWhere(\n tenantColumn: string | null | undefined,\n companyId: string,\n tableLabel: string,\n): string {\n if (typeof tenantColumn === \"undefined\") {\n throw new Error(\n `shape \"${tableLabel}\" lacks tenantColumn — tenant-scoped adapter refuses to attach unscoped shapes.`,\n );\n }\n assertUuid(companyId);\n if (tenantColumn === null) {\n return `id = '${companyId}'`;\n }\n assertSafeColumn(tenantColumn);\n return `${tenantColumn} = '${companyId}'`;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Build a tenant-scoped {@link SyncAdapter}.\n *\n * For each table in `tables`:\n * 1. Validates `tenantColumn` is defined (string or explicit null).\n * 2. Validates `companyId` is a UUID.\n * 3. Builds the predicate and calls `shapeStreamFactory(...)` to get the\n * actual `ShapeStream`.\n * 4. Hands the resulting list off to `createElectricAdapter` for wiring.\n *\n * @throws if any table lacks `tenantColumn`, or the company id is not a UUID.\n */\nexport function createTenantScopedElectricAdapter(\n opts: TenantScopedAdapterOptions,\n): SyncAdapter {\n const { pglite, tenantClaim, tables, onSynced } = opts;\n assertUuid(tenantClaim.companyId);\n\n const wired = tables.map((tc) => {\n const where = buildTenantWhere(tc.tenantColumn, tenantClaim.companyId, tc.table);\n const shapeStream = tc.shapeStreamFactory({ table: tc.table, where, tenantClaim });\n return {\n type: tc.type,\n table: tc.table,\n where,\n idColumn: tc.primaryKey?.[0] ?? \"id\",\n normalize: tc.normalize,\n shapeStream,\n };\n });\n\n return createElectricAdapter({ pglite, tables: wired, onSynced });\n}\n","/**\n * adapters/pglite-persistence.ts\n *\n * PGlite-backed implementation of {@link GraphPersistenceAdapter}.\n *\n * Stores the local-first runtime's graph snapshot inside a PGlite table\n * (`_graph_snapshot` by default) instead of `localStorage`/`IndexedDB`.\n *\n * Why this exists:\n * - The app already has a PGlite handle for ElectricSQL sync.\n * - Putting the graph snapshot alongside synced data means one storage\n * surface to back up, clear, and reason about.\n * - Works in Tauri WebView + Node (PGlite is a WASM Postgres) without\n * pulling in browser-only storage.\n *\n * Contract:\n * - `get(key)` -> returns the stored string or null\n * - `set(key, v)` -> upserts (insert-or-replace), stamping `updated_at`\n * - `remove(key)` -> deletes the row (no-op if absent)\n *\n * The function lazily ensures the storage table exists on first call.\n * That `CREATE TABLE IF NOT EXISTS` is idempotent so it's safe to retry.\n *\n * Self-hosted Supabase only. HotSeatersMVP is the bible. This module does\n * not import `@electric-sql/pglite` — consumers pass a PGlite-shaped handle.\n */\n\nimport type { GraphPersistenceAdapter } from \"../local-first-runtime\";\n\n// ---------------------------------------------------------------------------\n// Minimal surface type — matches the pattern used by adapters/electricsql.ts.\n// Avoids a hard dep on @electric-sql/pglite.\n// ---------------------------------------------------------------------------\nexport interface PGlitePersistenceClient {\n query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<{ rows: T[] }>;\n exec(sql: string): Promise<unknown>;\n}\n\nexport interface CreatePGlitePersistenceAdapterOptions {\n /** Name of the snapshot table. Defaults to `_graph_snapshot`. */\n tableName?: string;\n}\n\nconst DEFAULT_TABLE = \"_graph_snapshot\";\n\n/**\n * Returns a {@link GraphPersistenceAdapter} that reads/writes the graph\n * snapshot through a PGlite-shaped client.\n *\n * @example\n * ```ts\n * import { PGlite } from \"@electric-sql/pglite\";\n * import { startLocalFirstGraph, createPGlitePersistenceAdapter } from \"@prometheus-ags/prometheus-entity-management\";\n *\n * const pglite = await PGlite.create(\"idb://hotseaters\");\n * const storage = await createPGlitePersistenceAdapter(pglite);\n * const runtime = startLocalFirstGraph({ storage, key: \"hotseaters:graph\" });\n * ```\n */\nexport async function createPGlitePersistenceAdapter(\n pglite: PGlitePersistenceClient,\n options: CreatePGlitePersistenceAdapterOptions = {},\n): Promise<GraphPersistenceAdapter> {\n const tableName = options.tableName ?? DEFAULT_TABLE;\n // Quote-escape the identifier with simple validation. Reject anything that\n // isn't a safe identifier so we never interpolate hostile names.\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(tableName)) {\n throw new Error(`createPGlitePersistenceAdapter: invalid tableName \"${tableName}\"`);\n }\n\n await pglite.exec(\n `CREATE TABLE IF NOT EXISTS ${tableName} (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n updated_at TIMESTAMPTZ NOT NULL DEFAULT now()\n )`,\n );\n\n return {\n async get(key: string): Promise<string | null> {\n const result = await pglite.query<{ value: string }>(\n `SELECT value FROM ${tableName} WHERE key = $1`,\n [key],\n );\n const row = result.rows[0];\n return row?.value ?? null;\n },\n async set(key: string, value: string): Promise<void> {\n await pglite.query(\n `INSERT INTO ${tableName} (key, value, updated_at)\n VALUES ($1, $2, now())\n ON CONFLICT (key) DO UPDATE\n SET value = EXCLUDED.value,\n updated_at = now()`,\n [key, value],\n );\n },\n async remove(key: string): Promise<void> {\n await pglite.query(`DELETE FROM ${tableName} WHERE key = $1`, [key]);\n },\n };\n}\n","/**\n * schema-from-sql.ts\n *\n * Generates a JSON Schema (and registers it via `registerEntityJsonSchema`)\n * directly from a Postgres `CREATE TABLE` statement. Lets a consumer keep\n * `latest-data/supabase/migrations/*.sql` as the single source of truth for\n * column shapes — no hand-maintained TypeScript schema duplicates.\n *\n * Deliberately regex-based: a real SQL parser is overkill for the slice of\n * DDL we care about, and would add a non-trivial runtime dep.\n *\n * Type mapping\n * ------------\n * UUID, TEXT, VARCHAR(*) -> { type: \"string\" }\n * INTEGER, INT, BIGINT, SMALLINT -> { type: \"integer\" }\n * NUMERIC(*), DECIMAL(*) -> { type: \"number\" }\n * BOOLEAN, BOOL -> { type: \"boolean\" }\n * TIMESTAMPTZ, TIMESTAMP -> { type: \"string\", format: \"date-time\" }\n * DATE -> { type: \"string\", format: \"date\" }\n * JSONB, JSON -> { type: \"object\" }\n * TEXT[] -> { type: \"array\", items: { type: \"string\" } }\n * anything else -> { type: \"string\" } + \"x-warning\"\n *\n * `required` is populated from `NOT NULL` columns that lack a `DEFAULT`.\n * Callers can pass `overrides` to deep-merge a partial config (typically to\n * narrow a JSONB column to an array, or to add `enum`/`format` hints).\n */\n\nimport {\n registerEntityJsonSchema,\n type EntityJsonSchemaConfig,\n type JsonSchemaObject,\n} from \"./schema\";\n\nexport interface RegisterEntityFromSqlOptions {\n entityType: string;\n /** A single `CREATE TABLE` statement (extra DDL around it is ignored). */\n createTableSql: string;\n /** Optional deep-merge overrides (overrides win). */\n overrides?: Partial<EntityJsonSchemaConfig>;\n}\n\ninterface ParsedColumn {\n name: string;\n sqlType: string;\n notNull: boolean;\n hasDefault: boolean;\n}\n\ninterface ParsedTable {\n tableName: string;\n columns: ParsedColumn[];\n}\n\n/**\n * Parse a `CREATE TABLE` block. Exposed for tests and for callers who need\n * the intermediate representation.\n */\nexport function parseCreateTable(sql: string): ParsedTable {\n // Capture: CREATE TABLE [IF NOT EXISTS] <name> ( <body> )\n const headerMatch = sql.match(\n /CREATE\\s+TABLE\\s+(?:IF\\s+NOT\\s+EXISTS\\s+)?[\"]?([A-Za-z_][A-Za-z0-9_]*)[\"]?\\s*\\(([\\s\\S]*)\\)\\s*;?\\s*$/im,\n );\n if (!headerMatch) {\n throw new Error(\"parseCreateTable: could not locate a CREATE TABLE block\");\n }\n const tableName = headerMatch[1];\n const body = headerMatch[2];\n\n const columns: ParsedColumn[] = [];\n for (const rawLine of splitTopLevelCommas(body)) {\n const line = rawLine.trim();\n if (!line) continue;\n // Skip table-level constraints (PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK,\n // CONSTRAINT, LIKE, EXCLUDE).\n if (/^(?:PRIMARY\\s+KEY|FOREIGN\\s+KEY|UNIQUE|CHECK|CONSTRAINT|LIKE|EXCLUDE)\\b/i.test(line)) {\n continue;\n }\n const colMatch = line.match(/^[\"]?([A-Za-z_][A-Za-z0-9_]*)[\"]?\\s+([A-Za-z][A-Za-z0-9_]*(?:\\s*\\([^)]*\\))?(?:\\s*\\[\\s*\\])?)([\\s\\S]*)$/);\n if (!colMatch) continue;\n const name = colMatch[1];\n const sqlType = colMatch[2].replace(/\\s+/g, \"\").toUpperCase();\n const rest = colMatch[3].toUpperCase();\n const notNull = /\\bNOT\\s+NULL\\b/.test(rest);\n const hasDefault = /\\bDEFAULT\\b/.test(rest);\n columns.push({ name, sqlType, notNull, hasDefault });\n }\n\n return { tableName, columns };\n}\n\n/**\n * Split a parenthesised body on top-level commas (ignoring commas inside\n * nested parens like `NUMERIC(10, 2)`).\n */\nfunction splitTopLevelCommas(body: string): string[] {\n const parts: string[] = [];\n let depth = 0;\n let current = \"\";\n for (const ch of body) {\n if (ch === \"(\") depth++;\n else if (ch === \")\") depth--;\n if (ch === \",\" && depth === 0) {\n parts.push(current);\n current = \"\";\n } else {\n current += ch;\n }\n }\n if (current.trim()) parts.push(current);\n return parts;\n}\n\n/**\n * Map a normalized (uppercased, whitespace-stripped) SQL type to a JSON\n * schema fragment.\n *\n * Returns `{ schema, warning }` so the caller can surface \"unmapped type\"\n * notes via `x-warning` on the property.\n */\nexport function sqlTypeToJsonSchema(sqlType: string): {\n schema: JsonSchemaObject;\n warning?: string;\n} {\n const t = sqlType.replace(/\\s+/g, \"\").toUpperCase();\n\n if (/^TEXT\\[\\]$/.test(t)) {\n return { schema: { type: \"array\", items: { type: \"string\" } } };\n }\n if (t === \"UUID\" || t === \"TEXT\" || /^VARCHAR(\\(.*\\))?$/.test(t) || /^CHAR(\\(.*\\))?$/.test(t)) {\n return { schema: { type: \"string\" } };\n }\n if (t === \"INTEGER\" || t === \"INT\" || t === \"BIGINT\" || t === \"SMALLINT\" || t === \"INT4\" || t === \"INT8\" || t === \"INT2\") {\n return { schema: { type: \"integer\" } };\n }\n if (/^NUMERIC(\\(.*\\))?$/.test(t) || /^DECIMAL(\\(.*\\))?$/.test(t) || t === \"REAL\" || t === \"DOUBLEPRECISION\" || t === \"FLOAT\") {\n return { schema: { type: \"number\" } };\n }\n if (t === \"BOOLEAN\" || t === \"BOOL\") {\n return { schema: { type: \"boolean\" } };\n }\n if (t === \"TIMESTAMPTZ\" || t === \"TIMESTAMP\" || t === \"TIMESTAMPWITHTIMEZONE\" || t === \"TIMESTAMPWITHOUTTIMEZONE\") {\n return { schema: { type: \"string\", format: \"date-time\" } };\n }\n if (t === \"DATE\") {\n return { schema: { type: \"string\", format: \"date\" } };\n }\n if (t === \"JSONB\" || t === \"JSON\") {\n return { schema: { type: \"object\" } };\n }\n return {\n schema: { type: \"string\" },\n warning: `sql type \"${sqlType}\" not explicitly mapped; defaulting to string`,\n };\n}\n\n/**\n * Untyped deep-merge used by `mergeEntityConfig`. Generic and `unknown`-typed\n * to keep this internal helper free of the interface-vs-Record friction that\n * strict-mode `Record<string, unknown>` introduces with named interfaces.\n *\n * @internal\n */\nfunction deepMergeUnknown(\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...base };\n for (const [key, value] of Object.entries(override)) {\n const baseValue = base[key];\n if (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n baseValue !== null &&\n typeof baseValue === \"object\" &&\n !Array.isArray(baseValue)\n ) {\n out[key] = deepMergeUnknown(\n baseValue as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n } else {\n out[key] = value;\n }\n }\n return out;\n}\n\n/**\n * Merge a generated `EntityJsonSchemaConfig` with an optional caller-supplied\n * overrides object. Required fields (`entityType`, `schema`) always come from\n * the generated value; overrides may extend them but cannot remove them.\n */\nfunction mergeEntityConfig(\n generated: EntityJsonSchemaConfig,\n overrides?: Partial<EntityJsonSchemaConfig>,\n): EntityJsonSchemaConfig {\n if (!overrides) return generated;\n const merged = deepMergeUnknown(\n generated as unknown as Record<string, unknown>,\n overrides as unknown as Record<string, unknown>,\n );\n // Re-impose the required fields from the generated source — overrides may\n // not erase them, only refine them.\n // The deepMerge result is structurally compatible but TypeScript can't\n // narrow it back through the Record<> intermediate; the explicit\n // `unknown` hop is the documented escape per the TS strict-mode contract.\n const refined = merged as unknown as EntityJsonSchemaConfig;\n return {\n ...refined,\n entityType: generated.entityType,\n schema: refined.schema ?? generated.schema,\n };\n}\n\n/**\n * Build (and register) an `EntityJsonSchemaConfig` from a CREATE TABLE\n * statement. Returns the registered config so callers can introspect it.\n */\nexport function registerEntityFromSql(\n opts: RegisterEntityFromSqlOptions,\n): EntityJsonSchemaConfig {\n const parsed = parseCreateTable(opts.createTableSql);\n const properties: Record<string, JsonSchemaObject> = {};\n const required: string[] = [];\n\n for (const col of parsed.columns) {\n const { schema, warning } = sqlTypeToJsonSchema(col.sqlType);\n const propSchema: JsonSchemaObject = { ...schema };\n if (warning) {\n (propSchema as Record<string, unknown>)[\"x-warning\"] = warning;\n }\n properties[col.name] = propSchema;\n if (col.notNull && !col.hasDefault) {\n required.push(col.name);\n }\n }\n\n const generated: EntityJsonSchemaConfig = {\n entityType: opts.entityType,\n source: \"runtime\",\n schema: {\n type: \"object\",\n title: parsed.tableName,\n properties,\n required,\n },\n };\n\n const config = mergeEntityConfig(generated, opts.overrides);\n registerEntityJsonSchema(config);\n return config;\n}\n","/**\n * table/use-entity-list-as-table.ts\n *\n * Adapter hook that shapes a `useEntityList` result for TanStack Table (or\n * any data-grid that wants a plain `data` array + `rowCount`).\n *\n * It deliberately does NOT bring `@tanstack/react-table` as a dependency.\n * Consumers wire the table; this helper only stabilizes the array reference\n * so the table doesn't re-render unnecessarily, and exposes the same\n * loading/error surface as `useEntityList`.\n *\n * @example\n * ```tsx\n * const tableProps = useEntityListAsTable({\n * type: \"Client\",\n * fetch: (params) => api.listClients(params),\n * normalize: (raw) => ({ id: raw.id, data: raw }),\n * });\n *\n * const table = useReactTable({\n * data: tableProps.data,\n * rowCount: tableProps.rowCount,\n * columns,\n * getCoreRowModel: getCoreRowModel(),\n * });\n * ```\n */\n\nimport { useMemo, useRef } from \"react\";\nimport { useEntityList } from \"../hooks\";\nimport type { ListQueryOptions } from \"../engine\";\nimport type { EntityType } from \"../graph\";\n\nexport interface UseEntityListAsTableOptions<TRaw, TEntity extends object>\n extends Omit<ListQueryOptions<TRaw, TEntity>, \"type\" | \"queryKey\"> {\n type: EntityType;\n /** Optional override for the cache key. Defaults to `[\"entity-list-as-table\", type]`. */\n queryKey?: unknown[];\n}\n\nexport interface UseEntityListAsTableResult<TEntity> {\n data: TEntity[];\n rowCount: number;\n isLoading: boolean;\n isFetching: boolean;\n error: string | null;\n refetch: () => void;\n}\n\n/**\n * Wraps `useEntityList` for table consumers.\n *\n * Returns a referentially-stable `data` array (replaced only when items\n * actually change). TanStack Table treats `data` by identity for memoization,\n * so this is essential to avoid blowing away row state on every render.\n */\nexport function useEntityListAsTable<TRaw, TEntity extends object>(\n opts: UseEntityListAsTableOptions<TRaw, TEntity>,\n): UseEntityListAsTableResult<TEntity> {\n const queryKey = opts.queryKey ?? [\"entity-list-as-table\", opts.type];\n const list = useEntityList<TRaw, TEntity>({\n ...opts,\n queryKey,\n });\n\n const lastDataRef = useRef<TEntity[] | null>(null);\n const data = useMemo(() => {\n const prev = lastDataRef.current;\n if (prev && prev.length === list.items.length) {\n let same = true;\n for (let i = 0; i < prev.length; i++) {\n if (prev[i] !== list.items[i]) {\n same = false;\n break;\n }\n }\n if (same) return prev;\n }\n lastDataRef.current = list.items;\n return list.items;\n }, [list.items]);\n\n return {\n data,\n rowCount: list.total ?? list.ids.length,\n isLoading: list.isLoading,\n isFetching: list.isFetching,\n error: list.error,\n refetch: list.refetch,\n };\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 object> {\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 object>(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 object>(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 object> {\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 object>(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 return s.readEntitySnapshot<TEntity>(type, id) as TEntity | null;\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 object> {\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 object>(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\n .map((id) => s.readEntitySnapshot<TEntity>(type, id))\n .filter((x) => x !== null) as TEntity[];\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 object>(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 object> {\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 object>({ viewResult, columns, getRowId = r => String((r as Record<string, unknown>).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\";\nimport { getValueAtPath } from \"../object-path\";\nimport { MarkdownFieldEditor, MarkdownFieldRenderer } from \"../schema\";\n\n// ---------------------------------------------------------------------------\n// Field descriptors\n// ---------------------------------------------------------------------------\nexport type FieldType = \"text\" | \"textarea\" | \"number\" | \"email\" | \"url\" | \"date\" | \"boolean\" | \"enum\" | \"json\" | \"markdown\" | \"custom\";\n\nexport interface FieldDescriptor<TEntity> {\n field: 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 object>({ 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 \"markdown\":\n return <MarkdownFieldEditor value={String(value ?? \"\")} onChange={(nextValue) => onChange(nextValue)} placeholder={descriptor.placeholder} />;\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 case \"json\":\n return (\n <textarea\n value={value != null ? JSON.stringify(value, null, 2) : \"\"}\n onChange={(event) => {\n const nextValue = event.target.value;\n try {\n onChange(nextValue ? JSON.parse(nextValue) : null);\n } catch {\n onChange(nextValue);\n }\n }}\n placeholder={descriptor.placeholder}\n className=\"w-full min-h-[120px] rounded-md border bg-muted/50 px-3 py-2 text-sm font-mono resize-y focus:outline-none focus:ring-1 focus:ring-ring transition-colors\"\n />\n );\n default:\n return <input value={String(value ?? \"\")} onChange={e => onChange(e.target.value)} className={base} />;\n }\n}\n\nfunction FieldReadonlyValue<TEntity extends object>({ descriptor, value, entity }: { descriptor: FieldDescriptor<TEntity>; value: unknown; entity: TEntity }) {\n if (descriptor.render) return <>{descriptor.render(value, entity)}</>;\n if (descriptor.type === \"markdown\") return <MarkdownFieldRenderer value={String(value ?? \"\")} className=\"prose prose-sm max-w-none py-1\" />;\n if (descriptor.type === \"json\") return <pre className=\"text-xs py-1 whitespace-pre-wrap break-words\">{JSON.stringify(value ?? null, null, 2)}</pre>;\n return <p className=\"text-sm py-1\">{value != null && value !== \"\" ? String(value) : \"—\"}</p>;\n}\n\n// ---------------------------------------------------------------------------\n// EntityDetailSheet\n// ---------------------------------------------------------------------------\nexport function EntityDetailSheet<TEntity extends object>({ 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 <FieldReadonlyValue descriptor={f} value={getValueAtPath(entity, f.field)} entity={entity} />\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 object>({ 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);\n const currentValue = getValueAtPath(buf, f.field);\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={currentValue} onChange={v => setField(f.field, v)} 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 object>(\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 object> {\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 object>({\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 as Record<string, unknown>)[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 object> {\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 object>({\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 object> {\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 object>({\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 object>({\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 object> {\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 object>({\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 object> {\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 object>({\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 object> {\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 object>({\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 object> {\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 object>({\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 object>({\n item,\n descriptor,\n}: {\n item: TData;\n descriptor?: ItemDescriptor<TData>;\n}) {\n if (!descriptor) {\n const rec = item as Record<string, unknown>;\n const keys = Object.keys(rec);\n return (\n <div className=\"flex-1 min-w-0\">\n <p className=\"truncate text-sm font-medium\">\n {String(rec[keys[0]] ?? \"\")}\n </p>\n {keys[1] && (\n <p className=\"truncate text-xs text-muted-foreground\">\n {String(rec[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 object> {\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 object>(\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"]}
|