@conscia-labs/design-system 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/patterns/pagination.tsx","../src/patterns/data-table.tsx","../src/patterns/entity-table.tsx","../src/patterns/detail-back-link.tsx","../src/patterns/app-shell.tsx","../src/patterns/activity-list.tsx","../src/patterns/confirmation-dialog.tsx","../src/patterns/code-block.tsx","../src/patterns/inventory-surface.tsx","../src/patterns/metric-band.tsx","../src/patterns/page-header.tsx","../src/patterns/page-toolbar.tsx","../src/patterns/preference-controls.tsx","../src/patterns/provider-mark.tsx","../src/patterns/resource-detail.tsx","../src/patterns/sidebar-navigation.tsx","../src/patterns/state-views.tsx","../src/patterns/value-meter.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ChevronLeft, ChevronRight } from \"lucide-react\";\n\nimport { Button } from \"../primitives/button\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../primitives/select\";\nimport { cn } from \"../primitives/utils\";\n\ntype PaginationControlsProps = React.ComponentProps<\"div\"> & {\n currentPage: number;\n pageCount: number;\n totalLabel?: React.ReactNode;\n onPrevious?: () => void;\n onNext?: () => void;\n onPageChange?: (page: number) => void;\n pageSize?: number;\n pageSizeOptions?: number[];\n onPageSizeChange?: (pageSize: number) => void;\n};\n\nfunction PaginationControls({\n currentPage,\n pageCount,\n totalLabel,\n onPrevious,\n onNext,\n onPageChange,\n pageSize,\n pageSizeOptions = [10, 25, 50],\n onPageSizeChange,\n className,\n ...props\n}: PaginationControlsProps) {\n return (\n <div\n data-slot=\"pagination-controls\"\n className={cn(\"flex flex-col gap-2 border-t border-border-subtle px-5 py-3 text-sm text-muted-foreground sm:flex-row sm:items-center sm:justify-between\", className)}\n {...props}\n >\n <div className=\"flex flex-wrap items-center gap-3\">\n <span>{totalLabel}</span>\n {pageSize && onPageSizeChange ? (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[var(--ds-metadata)]\">Rows</span>\n <Select value={String(pageSize)} onValueChange={(value) => onPageSizeChange(Number(value))}>\n <SelectTrigger size=\"sm\" className=\"w-[4.5rem]\" aria-label=\"Rows per page\"><SelectValue /></SelectTrigger>\n <SelectContent>{pageSizeOptions.map((size) => <SelectItem key={size} value={String(size)}>{size}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n ) : null}\n </div>\n <div className=\"flex items-center gap-1\">\n <Button type=\"button\" variant=\"outline\" size=\"icon\" className=\"size-8\" aria-label=\"Previous page\" onClick={onPrevious ?? (() => onPageChange?.(currentPage - 1))} disabled={currentPage <= 1}><ChevronLeft /></Button>\n {onPageChange ? pageItems(currentPage, pageCount).map((item, index) => item === \"ellipsis\" ? (\n <span key={`ellipsis-${index}`} className=\"flex size-8 items-center justify-center text-muted-foreground\" aria-hidden=\"true\">…</span>\n ) : (\n <Button type=\"button\" key={item} variant={item === currentPage ? \"secondary\" : \"ghost\"} size=\"icon\" className=\"size-8\" aria-label={`Page ${item}`} aria-current={item === currentPage ? \"page\" : undefined} onClick={() => onPageChange(item)}>{item}</Button>\n )) : <span className=\"px-2 text-[var(--ds-metadata)]\">Page {currentPage} of {pageCount}</span>}\n <Button type=\"button\" variant=\"outline\" size=\"icon\" className=\"size-8\" aria-label=\"Next page\" onClick={onNext ?? (() => onPageChange?.(currentPage + 1))} disabled={currentPage >= pageCount}><ChevronRight /></Button>\n </div>\n </div>\n );\n}\n\nfunction pageItems(currentPage: number, pageCount: number): Array<number | \"ellipsis\"> {\n if (pageCount <= 7) return Array.from({ length: pageCount }, (_, index) => index + 1);\n const pages = new Set([1, pageCount, currentPage - 1, currentPage, currentPage + 1]);\n const sorted = Array.from(pages).filter((page) => page > 0 && page <= pageCount).sort((a, b) => a - b);\n const result: Array<number | \"ellipsis\"> = [];\n sorted.forEach((page, index) => {\n if (index && page - sorted[index - 1]! > 1) result.push(\"ellipsis\");\n result.push(page);\n });\n return result;\n}\n\nexport { PaginationControls };\nexport type { PaginationControlsProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport {\n flexRender,\n getCoreRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type PaginationState,\n type Row,\n type RowSelectionState,\n type SortingState,\n} from \"@tanstack/react-table\";\nimport { ArrowDown, ArrowUp, ChevronsUpDown } from \"lucide-react\";\n\nimport { Button } from \"../primitives/button\";\nimport { Checkbox } from \"../primitives/checkbox\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"../primitives/table\";\nimport { cn } from \"../primitives/utils\";\nimport { PaginationControls } from \"./pagination\";\n\ntype DataTableColumn<TData> = {\n id: string;\n header: React.ReactNode;\n cell: (item: TData) => React.ReactNode;\n accessor?: (item: TData) => string | number | null | undefined;\n sortable?: boolean;\n className?: string;\n};\n\ntype DataTableProps<TData> = {\n data: TData[];\n columns: DataTableColumn<TData>[];\n getRowId: (item: TData) => string;\n getRowLabel?: (item: TData) => string;\n onRowClick?: (item: TData) => void;\n isRowClickable?: (item: TData) => boolean;\n rowActions?: (item: TData) => React.ReactNode;\n selectedIds?: Set<string>;\n onSelectionChange?: (selectedIds: Set<string>) => void;\n sorting?: SortingState;\n onSortingChange?: (sorting: SortingState) => void;\n manualSorting?: boolean;\n pagination?: PaginationState;\n onPaginationChange?: (pagination: PaginationState) => void;\n manualPagination?: boolean;\n pageCount?: number;\n rowCount?: number;\n pageSizeOptions?: number[];\n totalLabel?: React.ReactNode;\n mobileRow?: (item: TData) => React.ReactNode;\n empty?: React.ReactNode;\n className?: string;\n};\n\nfunction DataTable<TData>({\n data,\n columns,\n getRowId,\n getRowLabel,\n onRowClick,\n isRowClickable,\n rowActions,\n selectedIds,\n onSelectionChange,\n sorting,\n onSortingChange,\n manualSorting = false,\n pagination,\n onPaginationChange,\n manualPagination = false,\n pageCount,\n rowCount,\n pageSizeOptions,\n totalLabel,\n mobileRow,\n empty,\n className,\n}: DataTableProps<TData>) {\n const rowSelection = React.useMemo<RowSelectionState>(() => {\n const selection: RowSelectionState = {};\n selectedIds?.forEach((id) => { selection[id] = true; });\n return selection;\n }, [selectedIds]);\n\n const tableColumns = React.useMemo<ColumnDef<TData>[]>(() => {\n const result: ColumnDef<TData>[] = [];\n if (onSelectionChange) {\n result.push({\n id: \"select\",\n enableSorting: false,\n header: ({ table }) => (\n <Checkbox\n aria-label=\"Select all rows on this page\"\n checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && \"indeterminate\")}\n onCheckedChange={(checked) => table.toggleAllPageRowsSelected(Boolean(checked))}\n />\n ),\n cell: ({ row }) => (\n <Checkbox\n aria-label={`Select ${getRowLabel?.(row.original) ?? row.id}`}\n checked={row.getIsSelected()}\n onCheckedChange={(checked) => row.toggleSelected(Boolean(checked))}\n onClick={(event) => event.stopPropagation()}\n />\n ),\n meta: { className: \"w-10\" },\n });\n }\n result.push(...columns.map((column): ColumnDef<TData> => ({\n id: column.id,\n ...(column.accessor ? { accessorFn: column.accessor } : {}),\n enableSorting: column.sortable ?? false,\n header: () => column.header,\n cell: ({ row }: { row: Row<TData> }) => column.cell(row.original),\n meta: { className: column.className, label: typeof column.header === \"string\" ? column.header : column.id },\n })));\n if (rowActions) {\n result.push({\n id: \"actions\",\n enableSorting: false,\n header: \"Actions\",\n cell: ({ row }) => (\n <div\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n {rowActions(row.original)}\n </div>\n ),\n meta: { className: \"w-12 text-right\" },\n });\n }\n return result;\n }, [columns, getRowLabel, onSelectionChange, rowActions]);\n\n // TanStack Table intentionally returns a mutable table instance; React Compiler skips this hook.\n // eslint-disable-next-line react-hooks/incompatible-library\n const table = useReactTable({\n data,\n columns: tableColumns,\n getRowId: (row) => getRowId(row),\n state: { rowSelection, ...(sorting ? { sorting } : {}), ...(pagination ? { pagination } : {}) },\n enableRowSelection: Boolean(onSelectionChange),\n onRowSelectionChange: (updater) => {\n if (!onSelectionChange) return;\n const next = typeof updater === \"function\" ? updater(rowSelection) : updater;\n onSelectionChange(new Set(Object.keys(next).filter((id) => next[id])));\n },\n onSortingChange: (updater) => {\n if (!onSortingChange) return;\n onSortingChange(typeof updater === \"function\" ? updater(sorting ?? []) : updater);\n },\n onPaginationChange: (updater) => {\n if (!onPaginationChange || !pagination) return;\n onPaginationChange(typeof updater === \"function\" ? updater(pagination) : updater);\n },\n manualSorting,\n manualPagination,\n pageCount,\n rowCount,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: manualSorting ? undefined : getSortedRowModel(),\n getPaginationRowModel: pagination && !manualPagination ? getPaginationRowModel() : undefined,\n });\n\n if (!data.length && empty) return <>{empty}</>;\n\n const visibleRows = table.getRowModel().rows;\n const showPagination = Boolean(pagination && onPaginationChange);\n\n return (\n <div data-slot=\"data-table\" className={cn(\"bg-background\", className)}>\n <div className={mobileRow ? \"hidden md:block\" : undefined}>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n const meta = header.column.columnDef.meta as { className?: string; label?: string } | undefined;\n const canSort = header.column.getCanSort();\n const sorted = header.column.getIsSorted();\n return (\n <TableHead\n key={header.id}\n className={meta?.className}\n aria-sort={\n canSort\n ? sorted === \"asc\"\n ? \"ascending\"\n : sorted === \"desc\"\n ? \"descending\"\n : \"none\"\n : undefined\n }\n >\n {header.isPlaceholder ? null : canSort ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"-ml-2 h-8 gap-1.5 px-2 text-[var(--ds-metadata)] font-semibold uppercase text-muted-foreground hover:text-foreground\"\n onClick={header.column.getToggleSortingHandler()}\n aria-label={`Sort by ${meta?.label ?? header.column.id}`}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {sorted === \"asc\" ? <ArrowUp className=\"size-3.5\" /> : sorted === \"desc\" ? <ArrowDown className=\"size-3.5\" /> : <ChevronsUpDown className=\"size-3.5 opacity-60\" />}\n </Button>\n ) : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {visibleRows.map((row) => {\n const rowClickable = Boolean(\n onRowClick && (isRowClickable?.(row.original) ?? true),\n );\n return (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() ? \"selected\" : undefined}\n tabIndex={rowClickable ? 0 : undefined}\n aria-label={rowClickable ? getRowLabel?.(row.original) ?? row.id : undefined}\n className={cn(rowClickable && \"cursor-pointer outline-none focus-visible:ring-[3px] focus-visible:ring-ring/45\")}\n onClick={() => {\n if (rowClickable) onRowClick?.(row.original);\n }}\n onKeyDown={(event) => {\n if (!rowClickable || (event.key !== \"Enter\" && event.key !== \" \")) return;\n event.preventDefault();\n onRowClick?.(row.original);\n }}\n >\n {row.getVisibleCells().map((cell) => {\n const meta = cell.column.columnDef.meta as { className?: string } | undefined;\n return <TableCell key={cell.id} className={meta?.className}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>;\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </div>\n {mobileRow ? (\n <div className=\"divide-y divide-border-subtle md:hidden\" role=\"list\">\n {visibleRows.map((row) => <div key={row.id} role=\"listitem\">{mobileRow(row.original)}</div>)}\n </div>\n ) : null}\n {showPagination ? (\n <PaginationControls\n currentPage={pagination!.pageIndex + 1}\n pageCount={Math.max(1, table.getPageCount())}\n pageSize={pagination!.pageSize}\n pageSizeOptions={pageSizeOptions}\n totalLabel={totalLabel}\n onPageChange={(nextPage) => table.setPageIndex(nextPage - 1)}\n onPageSizeChange={(nextSize) => table.setPageSize(nextSize)}\n />\n ) : null}\n </div>\n );\n}\n\nexport { DataTable };\nexport type { DataTableColumn, DataTableProps, PaginationState, SortingState };\n","import * as React from \"react\";\n\nimport { DataTable, type DataTableColumn } from \"./data-table\";\n\ntype EntityTableColumn<T> = {\n key: string;\n header: React.ReactNode;\n cell: (item: T) => React.ReactNode;\n className?: string;\n};\n\ntype EntityTableProps<T> = {\n items: T[];\n columns: EntityTableColumn<T>[];\n getRowId: (item: T) => string;\n selectedIds?: Set<string>;\n onSelectionChange?: (selectedIds: Set<string>) => void;\n onRowClick?: (item: T) => void;\n getRowLabel?: (item: T) => string;\n rowActions?: (item: T) => React.ReactNode;\n className?: string;\n};\n\nfunction EntityTable<T>({\n items,\n columns,\n getRowId,\n selectedIds,\n onSelectionChange,\n onRowClick,\n getRowLabel,\n rowActions,\n className\n}: EntityTableProps<T>) {\n return (\n <DataTable\n data={items}\n columns={columns.map((column): DataTableColumn<T> => ({ ...column, id: column.key }))}\n getRowId={getRowId}\n selectedIds={selectedIds}\n onSelectionChange={onSelectionChange}\n onRowClick={onRowClick}\n getRowLabel={getRowLabel}\n rowActions={rowActions}\n className={className}\n />\n );\n}\n\nexport { EntityTable };\nexport type { EntityTableColumn, EntityTableProps };\n","import * as React from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\n\nimport { cn } from \"../primitives/utils\";\n\ntype DetailBackLinkProps = Omit<React.ComponentProps<\"a\">, \"children\"> & {\n label: string;\n};\n\nfunction DetailBackLink({ label, className, ...props }: DetailBackLinkProps) {\n return (\n <a\n data-slot=\"detail-back-link\"\n className={cn(\n \"inline-flex h-8 w-fit items-center gap-2 rounded-md px-2 text-sm font-medium text-muted-foreground outline-none transition-colors hover:bg-surface-muted hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/45\",\n className,\n )}\n {...props}\n >\n <ArrowLeft className=\"size-4\" aria-hidden=\"true\" />\n {label}\n </a>\n );\n}\n\nexport { DetailBackLink };\nexport type { DetailBackLinkProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { PanelLeftIcon, Search, X } from \"lucide-react\";\n\nimport { Button } from \"../primitives/button\";\nimport { Input } from \"../primitives/input\";\nimport { Separator } from \"../primitives/separator\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"../primitives/sheet\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../primitives/tooltip\";\nimport { cn } from \"../primitives/utils\";\n\nconst SIDEBAR_COOKIE_NAME = \"conscia_sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 30;\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\nconst SIDEBAR_STORAGE_KEY = \"conscia-sidebar-open:v1\";\nconst SIDEBAR_STATE_CHANGE_EVENT = \"conscia-sidebar-state-change\";\n\nfunction parseSidebarOpen(value: string | null) {\n return value === \"true\" ? true : value === \"false\" ? false : null;\n}\n\nfunction readPersistedSidebarOpen() {\n if (typeof document === \"undefined\") {\n return null;\n }\n\n try {\n const storedValue = window.localStorage.getItem(SIDEBAR_STORAGE_KEY);\n const storedSidebarOpen = parseSidebarOpen(storedValue);\n\n if (storedSidebarOpen !== null) {\n return storedSidebarOpen;\n }\n } catch {\n // Fall back to the cookie when storage is unavailable.\n }\n\n const cookie = document.cookie\n .split(\"; \")\n .find((entry) => entry.startsWith(`${SIDEBAR_COOKIE_NAME}=`));\n\n if (!cookie) {\n return null;\n }\n\n const value = cookie.slice(SIDEBAR_COOKIE_NAME.length + 1);\n\n return parseSidebarOpen(value);\n}\n\nfunction persistSidebarOpen(open: boolean) {\n try {\n window.localStorage.setItem(SIDEBAR_STORAGE_KEY, String(open));\n } catch {\n // The cookie still preserves the preference when storage is unavailable.\n }\n\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${open}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n window.dispatchEvent(new Event(SIDEBAR_STATE_CHANGE_EVENT));\n}\n\nfunction subscribeToSidebarOpen(onStoreChange: () => void) {\n function onStorage(event: StorageEvent) {\n if (event.key === SIDEBAR_STORAGE_KEY) {\n onStoreChange();\n }\n }\n\n window.addEventListener(SIDEBAR_STATE_CHANGE_EVENT, onStoreChange);\n window.addEventListener(\"storage\", onStorage);\n\n return () => {\n window.removeEventListener(SIDEBAR_STATE_CHANGE_EVENT, onStoreChange);\n window.removeEventListener(\"storage\", onStorage);\n };\n}\n\ntype AppShellContextValue = {\n sidebarState: \"expanded\" | \"collapsed\";\n sidebarSide: \"left\" | \"right\";\n setSidebarSide: (side: \"left\" | \"right\") => void;\n sidebarOpen: boolean;\n setSidebarOpen: (open: boolean) => void;\n mobileOpen: boolean;\n setMobileOpen: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst AppShellContext = React.createContext<AppShellContextValue | null>(null);\n\nfunction useAppShell() {\n const context = React.useContext(AppShellContext);\n\n if (!context) {\n throw new Error(\"useAppShell must be used within AppShell.\");\n }\n\n return context;\n}\n\nfunction useMediaQuery(query: string) {\n const [matches, setMatches] = React.useState(false);\n\n React.useEffect(() => {\n const media = window.matchMedia(query);\n const sync = () => setMatches(media.matches);\n\n sync();\n media.addEventListener(\"change\", sync);\n return () => media.removeEventListener(\"change\", sync);\n }, [query]);\n\n return matches;\n}\n\nfunction AppShell({\n defaultSidebarOpen = true,\n children,\n className,\n style,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultSidebarOpen?: boolean;\n}) {\n const isMobile = useMediaQuery(\"(max-width: 1023px)\");\n const [sidebarOpen, setSidebarOpenState] = React.useState(defaultSidebarOpen);\n const [sidebarSide, setSidebarSide] = React.useState<\"left\" | \"right\">(\"left\");\n const [mobileOpen, setMobileOpen] = React.useState(false);\n\n React.useEffect(() => {\n function syncSidebarOpen() {\n setSidebarOpenState(readPersistedSidebarOpen() ?? defaultSidebarOpen);\n }\n\n const unsubscribe = subscribeToSidebarOpen(syncSidebarOpen);\n queueMicrotask(syncSidebarOpen);\n\n return unsubscribe;\n }, [defaultSidebarOpen]);\n\n const setSidebarOpen = React.useCallback((open: boolean) => {\n persistSidebarOpen(open);\n }, []);\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) {\n setMobileOpen((current) => !current);\n return;\n }\n\n persistSidebarOpen(!sidebarOpen);\n }, [isMobile, sidebarOpen]);\n\n React.useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (\n event.key.toLowerCase() === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [toggleSidebar]);\n\n const contextValue = React.useMemo<AppShellContextValue>(\n () => ({\n sidebarState: sidebarOpen ? \"expanded\" : \"collapsed\",\n sidebarSide,\n setSidebarSide,\n sidebarOpen,\n setSidebarOpen,\n mobileOpen,\n setMobileOpen,\n isMobile,\n toggleSidebar,\n }),\n [\n isMobile,\n mobileOpen,\n setSidebarOpen,\n sidebarOpen,\n sidebarSide,\n toggleSidebar,\n ],\n );\n\n return (\n <AppShellContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={120}>\n <div\n data-slot=\"app-shell\"\n data-sidebar-state={sidebarOpen ? \"expanded\" : \"collapsed\"}\n data-sidebar-side={sidebarSide}\n suppressHydrationWarning\n className={cn(\n \"group/shell min-h-svh bg-canvas text-foreground\",\n \"[--ds-app-sidebar-width:var(--ds-sidebar-width)] [--ds-app-sidebar-width-mobile:var(--ds-sidebar-width-mobile)] data-[sidebar-state=collapsed]:[--ds-app-sidebar-width:3.5rem]\",\n className,\n )}\n style={style}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </AppShellContext.Provider>\n );\n}\n\nfunction AppSidebar({\n side = \"left\",\n variant = \"dark\",\n className,\n children,\n title = \"Application navigation\",\n description = \"Primary product navigation.\",\n ...props\n}: React.ComponentProps<\"aside\"> & {\n side?: \"left\" | \"right\";\n /** Preserve the historical dark sidebar by default; auto follows appearance. */\n variant?: \"light\" | \"dark\" | \"auto\";\n title?: string;\n description?: string;\n}) {\n const { mobileOpen, setMobileOpen, setSidebarSide } = useAppShell();\n\n React.useEffect(() => {\n setSidebarSide(side);\n }, [setSidebarSide, side]);\n\n return (\n <>\n <Sheet open={mobileOpen} onOpenChange={setMobileOpen}>\n <SheetContent\n side={side}\n data-sidebar-variant={variant}\n className=\"w-[var(--ds-sidebar-width-mobile)] border-sidebar-border bg-sidebar-canvas p-0 text-sidebar-primary-text [&>[data-slot=sheet-close]]:right-3 [&>[data-slot=sheet-close]]:top-3 [&>[data-slot=sheet-close]]:text-sidebar-secondary-text [&>[data-slot=sheet-close]]:hover:text-sidebar-primary-text\"\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>{title}</SheetTitle>\n <SheetDescription>{description}</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full min-h-0 flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n\n <aside\n data-slot=\"app-sidebar\"\n data-side={side}\n data-sidebar-variant={variant}\n className={cn(\n \"fixed inset-y-0 z-20 hidden w-[var(--ds-app-sidebar-width)] shrink-0 flex-col border-sidebar-border bg-sidebar-canvas text-sidebar-primary-text transition-[width] duration-200 ease-linear lg:flex\",\n side === \"left\" ? \"left-0 border-r\" : \"right-0 border-l\",\n \"group-data-[sidebar-state=collapsed]/shell:w-[var(--ds-app-sidebar-width)]\",\n className,\n )}\n {...props}\n >\n {children}\n </aside>\n </>\n );\n}\n\nfunction AppSidebarHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"app-sidebar-header\"\n className={cn(\n \"flex min-h-[var(--ds-topbar-height)] min-w-0 shrink-0 items-center overflow-hidden border-b border-sidebar-border bg-sidebar-header px-3\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AppSidebarContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"app-sidebar-content\"\n className={cn(\n \"flex min-h-0 min-w-0 flex-1 flex-col gap-[var(--ds-sidebar-group-gap)] overflow-x-hidden overflow-y-auto bg-sidebar-content px-[var(--ds-sidebar-content-padding-x)] py-[var(--ds-sidebar-content-padding-y)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AppSidebarFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"app-sidebar-footer\"\n className={cn(\n \"mt-auto flex min-w-0 shrink-0 flex-col gap-2 overflow-hidden border-t border-sidebar-border bg-sidebar-footer p-[var(--ds-sidebar-footer-padding)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ProductIdentity({\n label,\n description,\n icon,\n className,\n}: {\n label: React.ReactNode;\n description?: React.ReactNode;\n icon?: React.ReactNode;\n className?: string;\n}) {\n return (\n <div\n data-slot=\"product-identity\"\n className={cn(\"flex min-w-0 items-center gap-2\", className)}\n >\n {icon ? (\n <div className=\"flex size-7 shrink-0 items-center justify-center rounded-[var(--ds-radius-control)] bg-sidebar-hover text-sidebar-icon\">\n {icon}\n </div>\n ) : null}\n <div className=\"min-w-0 group-data-[sidebar-state=collapsed]/shell:hidden\">\n <div className=\"truncate text-sm font-semibold leading-5 text-sidebar-primary-text\">\n {label}\n </div>\n {description ? (\n <div className=\"truncate text-[var(--ds-metadata)] leading-4 text-sidebar-metadata-text\">\n {description}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"app-sidebar-separator\"\n className={cn(\"bg-sidebar-border\", className)}\n {...props}\n />\n );\n}\n\nfunction NavigationGroup({\n label,\n count,\n children,\n className,\n}: {\n label?: React.ReactNode;\n count?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <section\n data-slot=\"navigation-group\"\n className={cn(\"flex min-w-0 flex-col gap-1\", className)}\n >\n {label ? (\n <div\n data-slot=\"navigation-group-label\"\n className=\"flex min-h-6 items-center gap-2 px-2 pb-1 pt-2 text-[length:var(--ds-sidebar-group-label-size)] font-semibold uppercase leading-5 tracking-[0.08em] text-sidebar-group-label group-data-[sidebar-state=collapsed]/shell:hidden\"\n >\n {label}\n {count !== undefined ? (\n <span className=\"ml-auto shrink-0 text-[length:var(--ds-metadata)] font-medium normal-case tracking-normal text-sidebar-group-count\">\n {count}\n </span>\n ) : null}\n </div>\n ) : null}\n <div className=\"flex min-w-0 flex-col gap-1\">{children}</div>\n </section>\n );\n}\n\nfunction navigationItemClasses(active?: boolean) {\n return cn(\n \"flex min-h-[var(--ds-sidebar-item-height-touch)] min-w-0 cursor-pointer items-center gap-2 rounded-[var(--ds-radius-control)] px-2 text-sm font-medium text-sidebar-secondary-text outline-none transition-colors duration-150 lg:h-[var(--ds-sidebar-item-height)] lg:min-h-0\",\n \"hover:bg-sidebar-hover hover:text-sidebar-primary-text\",\n \"focus-visible:ring-[3px] focus-visible:ring-sidebar-focus-ring\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:cursor-not-allowed aria-disabled:opacity-50\",\n \"group-data-[sidebar-state=collapsed]/shell:justify-center group-data-[sidebar-state=collapsed]/shell:px-0\",\n \"[&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:stroke-[1.75] [&>svg]:text-sidebar-icon\",\n active &&\n \"bg-sidebar-active text-sidebar-active-foreground shadow-[inset_3px_0_0_var(--sidebar-active-indicator)] hover:bg-sidebar-active hover:text-sidebar-active-foreground [&>svg]:text-sidebar-active-foreground\",\n );\n}\n\nfunction NavigationItem({\n asChild = false,\n active = false,\n tooltip,\n type,\n className,\n children,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n active?: boolean;\n tooltip?: string;\n}) {\n const Comp = asChild ? Slot : \"button\";\n const { sidebarState, sidebarSide, isMobile } = useAppShell();\n const item = (\n <Comp\n data-slot=\"navigation-item\"\n data-active={active ? \"true\" : undefined}\n type={asChild ? undefined : (type ?? \"button\")}\n className={cn(navigationItemClasses(active), className)}\n {...props}\n >\n {children}\n </Comp>\n );\n\n if (!tooltip) {\n return item;\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{item}</TooltipTrigger>\n <TooltipContent\n side={sidebarSide === \"left\" ? \"right\" : \"left\"}\n align=\"center\"\n hidden={sidebarState !== \"collapsed\" || isMobile}\n >\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n}\n\nfunction NavigationSubItem({\n asChild = false,\n active = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n active?: boolean;\n}) {\n const Comp = asChild ? Slot : \"a\";\n\n return (\n <Comp\n data-slot=\"navigation-sub-item\"\n data-active={active ? \"true\" : undefined}\n className={cn(\n \"flex min-h-[var(--ds-sidebar-item-height-touch)] min-w-0 cursor-pointer items-center gap-2 rounded-[var(--ds-radius-control)] px-2 text-sm text-sidebar-secondary-text outline-none transition-colors duration-150 lg:h-[calc(var(--ds-sidebar-item-height)-0.25rem)] lg:min-h-0\",\n \"hover:bg-sidebar-hover hover:text-sidebar-primary-text focus-visible:ring-[3px] focus-visible:ring-sidebar-focus-ring\",\n \"group-data-[sidebar-state=collapsed]/shell:hidden [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:stroke-[1.75] [&>svg]:text-sidebar-icon\",\n active &&\n \"bg-sidebar-active text-sidebar-active-foreground shadow-[inset_3px_0_0_var(--sidebar-active-indicator)] hover:bg-sidebar-active hover:text-sidebar-active-foreground [&>svg]:text-sidebar-active-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationSubList({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"navigation-sub-list\"\n className={cn(\n \"ml-4 flex min-w-0 flex-col gap-1 border-l border-sidebar-border pl-2 group-data-[sidebar-state=collapsed]/shell:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Place this control inside TopBar, not AppSidebar, so it remains available\n * after the sidebar collapses and in the mobile drawer layout.\n */\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { isMobile, mobileOpen, sidebarOpen, toggleSidebar } = useAppShell();\n\n return (\n <Button\n data-slot=\"sidebar-trigger\"\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\n \"shrink-0 cursor-pointer text-muted-foreground hover:bg-surface-muted hover:text-foreground focus-visible:ring-ring\",\n className,\n )}\n aria-expanded={isMobile ? mobileOpen : sidebarOpen}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle navigation</span>\n </Button>\n );\n}\n\ntype SidebarSearchProps = Omit<React.ComponentProps<typeof Input>, \"type\"> & {\n expanded?: boolean;\n defaultExpanded?: boolean;\n onExpandedChange?: (expanded: boolean) => void;\n triggerLabel?: string;\n shortcut?: string;\n};\n\n/**\n * Shared search affordance for sidebars. Applications own query state and\n * filtering; this component owns the compact trigger, focus handoff, and\n * keyboard-accessible expanded field.\n */\nfunction SidebarSearch({\n expanded: expandedProp,\n defaultExpanded = false,\n onExpandedChange,\n triggerLabel = \"Search navigation\",\n shortcut,\n className,\n onKeyDown,\n ...props\n}: SidebarSearchProps) {\n const [expandedState, setExpandedState] = React.useState(defaultExpanded);\n const expanded = expandedProp ?? expandedState;\n const inputRef = React.useRef<HTMLInputElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const mountedRef = React.useRef(false);\n\n const setExpanded = React.useCallback(\n (nextExpanded: boolean) => {\n if (expandedProp === undefined) {\n setExpandedState(nextExpanded);\n }\n onExpandedChange?.(nextExpanded);\n },\n [expandedProp, onExpandedChange],\n );\n\n React.useEffect(() => {\n if (expanded) {\n queueMicrotask(() => inputRef.current?.focus());\n } else if (mountedRef.current) {\n queueMicrotask(() => triggerRef.current?.focus());\n }\n\n mountedRef.current = true;\n }, [expanded]);\n\n if (!expanded) {\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n data-slot=\"sidebar-search-trigger\"\n className={cn(\n \"flex min-h-[var(--ds-sidebar-item-height-touch)] w-full cursor-pointer items-center gap-2 rounded-[var(--ds-radius-control)] px-2 text-left text-sm font-medium text-sidebar-secondary-text outline-none transition-colors hover:bg-sidebar-hover hover:text-sidebar-primary-text focus-visible:ring-[3px] focus-visible:ring-sidebar-focus-ring lg:min-h-[var(--ds-sidebar-item-height)]\",\n \"group-data-[sidebar-state=collapsed]/shell:justify-center group-data-[sidebar-state=collapsed]/shell:px-0\",\n className,\n )}\n onClick={() => setExpanded(true)}\n aria-label={triggerLabel}\n >\n <Search className=\"size-4 shrink-0 text-sidebar-icon\" />\n <span className=\"truncate group-data-[sidebar-state=collapsed]/shell:hidden\">\n {triggerLabel}\n </span>\n {shortcut ? (\n <kbd className=\"ml-auto rounded border border-sidebar-border px-1.5 py-0.5 text-[length:var(--ds-metadata)] font-medium text-sidebar-metadata-text group-data-[sidebar-state=collapsed]/shell:hidden\">\n {shortcut}\n </kbd>\n ) : null}\n </button>\n );\n }\n\n return (\n <div\n data-slot=\"sidebar-search\"\n data-expanded=\"true\"\n className={cn(\n \"flex min-h-[var(--ds-sidebar-item-height-touch)] items-center gap-2 rounded-[var(--ds-radius-control)] border border-sidebar-border bg-sidebar-search px-2 text-sidebar-primary-text shadow-[var(--ds-shadow-raised)] lg:min-h-[var(--ds-sidebar-item-height)]\",\n className,\n )}\n >\n <Search className=\"size-4 shrink-0 text-sidebar-icon\" />\n <Input\n ref={inputRef}\n type=\"search\"\n className=\"h-auto min-w-0 flex-1 border-0 bg-transparent px-0 py-1 text-sm shadow-none focus-visible:border-0 focus-visible:ring-0\"\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n setExpanded(false);\n }\n onKeyDown?.(event);\n }}\n {...props}\n />\n <button\n type=\"button\"\n data-slot=\"sidebar-search-close\"\n className=\"grid size-7 shrink-0 cursor-pointer place-items-center rounded-[var(--ds-radius-control)] text-sidebar-secondary-text outline-none transition-colors hover:bg-sidebar-hover hover:text-sidebar-primary-text focus-visible:ring-2 focus-visible:ring-sidebar-focus-ring\"\n onClick={() => {\n setExpanded(false);\n }}\n aria-label=\"Close search\"\n >\n <X className=\"size-4\" />\n </button>\n </div>\n );\n}\n\nfunction MainRegion({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"main-region\"\n className={cn(\n \"flex min-h-svh min-w-0 w-full flex-1 flex-col transition-[padding] duration-200 ease-linear\",\n \"group-data-[sidebar-side=left]/shell:lg:pl-[var(--ds-app-sidebar-width)] group-data-[sidebar-side=right]/shell:lg:pr-[var(--ds-app-sidebar-width)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TopBar({\n className,\n ...props\n}: React.ComponentProps<\"header\">) {\n return (\n <header\n data-slot=\"top-bar\"\n className={cn(\n \"sticky top-0 z-10 flex min-h-[var(--ds-topbar-height)] shrink-0 items-center justify-between gap-3 border-b border-border-subtle bg-background/96 px-3 backdrop-blur md:px-4\",\n \"supports-[backdrop-filter]:bg-background/88\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction PageFrame({\n width = \"full\",\n className,\n ...props\n}: React.ComponentProps<\"main\"> & {\n width?: \"full\" | \"wide\" | \"focused\" | \"reading\";\n}) {\n return (\n <main\n data-slot=\"page-frame\"\n data-width={width}\n className={cn(\n \"min-w-0 w-full flex-1 px-3 py-[var(--ds-space-section)] md:px-[var(--ds-space-page)]\",\n width === \"wide\" && \"mx-auto w-full max-w-[86rem]\",\n width === \"focused\" && \"mx-auto w-full max-w-[64rem]\",\n width === \"reading\" && \"mx-auto w-full max-w-[48rem]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction PageContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"page-content\"\n className={cn(\"flex min-w-0 flex-col gap-[var(--ds-space-section)]\", className)}\n {...props}\n />\n );\n}\n\nfunction PageBoundary({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"page-boundary\"\n className={cn(\n \"rounded-[var(--ds-radius-surface)] border border-border-subtle bg-surface p-[var(--ds-surface-padding)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InspectorRegion({\n className,\n ...props\n}: React.ComponentProps<\"aside\">) {\n return (\n <aside\n data-slot=\"inspector-region\"\n className={cn(\n \"w-full border-l border-border-subtle bg-surface md:w-[20rem] xl:w-[24rem]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n AppShell,\n AppSidebar,\n AppSidebarContent,\n AppSidebarFooter,\n AppSidebarHeader,\n InspectorRegion,\n MainRegion,\n NavigationGroup,\n NavigationItem,\n NavigationSubItem,\n NavigationSubList,\n PageBoundary,\n PageContent,\n PageFrame,\n ProductIdentity,\n SidebarSeparator,\n SidebarSearch,\n SidebarTrigger,\n TopBar,\n useAppShell,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../primitives/utils\";\n\nfunction ActivityList({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"activity-list\" className={cn(\"divide-y divide-border-subtle\", className)} {...props} />;\n}\n\ntype ActivityItemProps = React.ComponentProps<\"div\"> & {\n icon?: React.ReactNode;\n title: React.ReactNode;\n description?: React.ReactNode;\n metadata?: React.ReactNode;\n status?: React.ReactNode;\n};\n\nfunction ActivityItem({ icon, title, description, metadata, status, className, ...props }: ActivityItemProps) {\n return (\n <div data-slot=\"activity-item\" className={cn(\"grid grid-cols-[auto_minmax(0,1fr)_auto] gap-3 py-3\", className)} {...props}>\n <div className=\"flex size-8 items-center justify-center rounded-md bg-neutral-background text-neutral-foreground [&_svg]:size-4\">\n {icon}\n </div>\n <div className=\"min-w-0\">\n <div className=\"text-sm font-medium text-foreground\">{title}</div>\n {description ? <div className=\"mt-0.5 text-sm text-muted-foreground\">{description}</div> : null}\n {metadata ? <div className=\"mt-1 text-[var(--ds-metadata)] text-muted-foreground\">{metadata}</div> : null}\n </div>\n {status ? <div className=\"shrink-0\">{status}</div> : null}\n </div>\n );\n}\n\nexport { ActivityItem, ActivityList };\nexport type { ActivityItemProps };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport { Button } from \"../primitives/button\";\nimport { Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from \"../primitives/dialog\";\n\ntype ConfirmationDialogProps = {\n trigger: React.ReactNode;\n title: React.ReactNode;\n description: React.ReactNode;\n children?: React.ReactNode;\n confirmLabel?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n confirmVariant?: React.ComponentProps<typeof Button>[\"variant\"];\n pending?: boolean;\n onConfirm: () => unknown | Promise<unknown>;\n onError?: (error: unknown) => void;\n};\n\nfunction ConfirmationDialog({ trigger, title, description, children, confirmLabel = \"Confirm\", cancelLabel = \"Cancel\", confirmVariant = \"destructive\", pending = false, onConfirm, onError }: ConfirmationDialogProps) {\n const [open, setOpen] = React.useState(false);\n const [confirming, setConfirming] = React.useState(false);\n const isPending = pending || confirming;\n\n async function confirm() {\n if (isPending) {\n return;\n }\n\n setConfirming(true);\n\n try {\n await onConfirm();\n setOpen(false);\n } catch (error) {\n onError?.(error);\n } finally {\n setConfirming(false);\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogTrigger asChild>{trigger}</DialogTrigger>\n <DialogContent size=\"small\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogBody>{children}</DialogBody>\n <DialogFooter>\n <DialogClose asChild>\n <Button type=\"button\" variant=\"outline\" disabled={isPending}>{cancelLabel}</Button>\n </DialogClose>\n <Button type=\"button\" variant={confirmVariant} disabled={isPending} onClick={confirm}>\n {isPending ? \"Working...\" : confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport { ConfirmationDialog };\nexport type { ConfirmationDialogProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Check, Copy } from \"lucide-react\";\n\nimport { Button } from \"../primitives/button\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../primitives/tabs\";\nimport { cn } from \"../primitives/utils\";\n\ntype CodeBlockSnippet = {\n value: string;\n label: string;\n code: string;\n};\n\ntype CodeBlockProps = Omit<React.ComponentProps<\"div\">, \"children\"> & {\n snippets: CodeBlockSnippet[];\n defaultValue?: string;\n copyLabel?: string;\n};\n\nfunction CodeBlock({\n snippets,\n defaultValue,\n copyLabel = \"Copy code\",\n className,\n ...props\n}: CodeBlockProps) {\n const initialValue = defaultValue ?? snippets[0]?.value ?? \"\";\n const [activeValue, setActiveValue] = React.useState(initialValue);\n const [copiedValue, setCopiedValue] = React.useState<string | null>(null);\n const [copyError, setCopyError] = React.useState(false);\n const copyStatusId = React.useId();\n const activeSnippet =\n snippets.find((snippet) => snippet.value === activeValue) ?? snippets[0];\n\n if (!activeSnippet) return null;\n\n return (\n <div\n data-slot=\"code-block\"\n className={cn(\"overflow-hidden rounded-lg border border-border-subtle bg-surface\", className)}\n {...props}\n >\n <Tabs value={activeSnippet.value} onValueChange={setActiveValue} variant=\"segmented\" className=\"gap-0\">\n <div className=\"flex items-center justify-between gap-3 border-b border-border-subtle bg-surface-muted px-3 py-2\">\n <TabsList variant=\"segmented\" size=\"compact\" aria-label=\"Code language\">\n {snippets.map((snippet) => (\n <TabsTrigger key={snippet.value} value={snippet.value}>\n {snippet.label}\n </TabsTrigger>\n ))}\n </TabsList>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={async () => {\n try {\n await navigator.clipboard.writeText(activeSnippet.code);\n setCopiedValue(activeSnippet.value);\n setCopyError(false);\n } catch {\n setCopiedValue(null);\n setCopyError(true);\n }\n }}\n aria-describedby={copyStatusId}\n >\n {copiedValue === activeSnippet.value ? <Check /> : <Copy />}\n {copiedValue === activeSnippet.value ? \"Copied\" : copyLabel}\n </Button>\n <span id={copyStatusId} className=\"sr-only\" role=\"status\" aria-live=\"polite\">{copyError ? \"Code could not be copied. Select the code and copy it manually.\" : copiedValue === activeSnippet.value ? \"Code copied to clipboard.\" : \"\"}</span>\n </div>\n {snippets.map((snippet) => (\n <TabsContent key={snippet.value} value={snippet.value} className=\"m-0\">\n <pre className=\"max-h-[32rem] overflow-auto p-4 text-sm leading-6\">\n <code>{snippet.code}</code>\n </pre>\n </TabsContent>\n ))}\n </Tabs>\n </div>\n );\n}\n\nexport { CodeBlock };\nexport type { CodeBlockProps, CodeBlockSnippet };\n","import * as React from \"react\";\n\nimport { Card } from \"../primitives/card\";\nimport { cn } from \"../primitives/utils\";\n\nfunction InventorySurface({ className, ...props }: React.ComponentProps<typeof Card>) {\n return (\n <Card\n data-slot=\"inventory-surface\"\n className={cn(\"gap-0 overflow-hidden py-0\", className)}\n {...props}\n />\n );\n}\n\nfunction InventoryDesktop({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"inventory-desktop\" className={cn(\"hidden lg:block\", className)} {...props} />;\n}\n\nfunction InventoryMobile({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"inventory-mobile\" className={cn(\"divide-y divide-border-subtle lg:hidden\", className)} {...props} />;\n}\n\nexport { InventoryDesktop, InventoryMobile, InventorySurface };\n","import * as React from \"react\";\n\nimport { Skeleton } from \"../primitives/skeleton\";\nimport { cn } from \"../primitives/utils\";\n\ntype MetricBandProps = React.ComponentProps<\"div\"> & {\n columns?: 2 | 3 | 4 | 5;\n};\n\nfunction MetricBand({ columns = 4, className, ...props }: MetricBandProps) {\n return (\n <div\n data-slot=\"metric-band\"\n data-columns={columns}\n className={cn(\n \"grid grid-cols-2 border-b border-border-subtle\",\n columns === 2 && \"lg:grid-cols-2\",\n columns === 3 && \"lg:grid-cols-3\",\n columns === 4 && \"lg:grid-cols-4\",\n columns === 5 && \"lg:grid-cols-5\",\n className,\n )}\n {...props}\n />\n );\n}\n\ntype MetricBandItemProps = React.ComponentProps<\"div\"> & {\n label: React.ReactNode;\n value?: React.ReactNode;\n detail?: React.ReactNode;\n icon?: React.ReactNode;\n iconClassName?: string;\n loading?: boolean;\n};\n\nfunction MetricBandItem({\n label,\n value,\n detail,\n icon,\n iconClassName,\n loading = false,\n className,\n ...props\n}: MetricBandItemProps) {\n return (\n <div\n data-slot=\"metric-band-item\"\n className={cn(\n \"flex min-h-28 flex-col items-start gap-3 border-r border-border-subtle p-4 last:border-r-0 sm:flex-row sm:items-center sm:gap-4 sm:p-5\",\n \"[&:nth-child(-n+2)]:border-b lg:[&:nth-child(-n+2)]:border-b-0\",\n className,\n )}\n {...props}\n >\n {icon ? (\n <div\n className={cn(\n \"flex size-10 shrink-0 items-center justify-center rounded-md bg-neutral-background text-neutral-foreground [&_svg]:size-5\",\n iconClassName,\n )}\n >\n {icon}\n </div>\n ) : null}\n <div className=\"grid min-w-0 gap-1\">\n <div className=\"text-sm leading-snug text-muted-foreground\">{label}</div>\n {loading ? (\n <Skeleton className=\"h-7 w-14\" />\n ) : (\n <div className=\"text-2xl font-semibold tracking-tight\">{value ?? 0}</div>\n )}\n {detail ? (\n <div className=\"text-[var(--ds-metadata)] leading-snug text-muted-foreground\">\n {detail}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport { MetricBand, MetricBandItem };\nexport type { MetricBandItemProps, MetricBandProps };\n","import * as React from \"react\";\n\nimport { cn } from \"../primitives/utils\";\n\ntype PageHeaderProps = React.ComponentProps<\"header\"> & {\n title: React.ReactNode;\n description?: React.ReactNode;\n status?: React.ReactNode;\n metadata?: React.ReactNode;\n actions?: React.ReactNode;\n /**\n * Temporary compatibility prop for migrated Admin UI pages.\n * New implementations should pass an explicit actions node.\n */\n action?: {\n label: string;\n href: string;\n };\n /**\n * Temporary compatibility prop for migrated Admin UI pages.\n * New implementations should use actions.\n */\n actionNode?: React.ReactNode;\n};\n\nfunction PageHeader({\n title,\n description,\n status,\n metadata,\n actions,\n action,\n actionNode,\n className,\n ...props\n}: PageHeaderProps) {\n const resolvedActions =\n actions ??\n actionNode ??\n (action ? (\n <a\n className=\"inline-flex h-[var(--ds-control-height)] items-center justify-center gap-2 whitespace-nowrap rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground shadow-xs outline-none transition-colors hover:bg-accent-hover focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50\"\n href={action.href}\n >\n {action.label}\n </a>\n ) : null);\n\n return (\n <header\n data-slot=\"page-header\"\n className={cn(\"flex flex-col gap-3 border-b border-border-subtle bg-background px-5 py-4 lg:flex-row lg:items-start lg:justify-between\", className)}\n {...props}\n >\n <div className=\"min-w-0\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2\">\n <h1 className=\"truncate text-[length:var(--ds-page-title)] font-semibold leading-tight\">{title}</h1>\n {status}\n </div>\n {description ? <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">{description}</p> : null}\n {metadata ? <div className=\"mt-2 text-[var(--ds-metadata)] text-muted-foreground\">{metadata}</div> : null}\n </div>\n {resolvedActions ? <div className=\"flex shrink-0 flex-wrap items-center gap-2\">{resolvedActions}</div> : null}\n </header>\n );\n}\n\nexport { PageHeader };\nexport type { PageHeaderProps };\n","import * as React from \"react\";\n\nimport { cn } from \"../primitives/utils\";\n\ntype PageToolbarProps = React.ComponentProps<\"div\"> & {\n search?: React.ReactNode;\n filters?: React.ReactNode;\n viewControls?: React.ReactNode;\n bulkActions?: React.ReactNode;\n};\n\nfunction PageToolbar({\n search,\n filters,\n viewControls,\n bulkActions,\n className,\n children,\n ...props\n}: PageToolbarProps) {\n return (\n <div\n data-slot=\"page-toolbar\"\n className={cn(\"grid gap-2 border-b border-border-subtle bg-background px-5 py-3 lg:grid-cols-[minmax(0,1fr)_auto] lg:items-center\", className)}\n {...props}\n >\n <div className=\"flex min-w-0 flex-1 flex-col gap-2 sm:flex-row sm:items-center\">\n {search ? <div className=\"min-w-0 flex-1 sm:min-w-48 sm:max-w-sm\">{search}</div> : null}\n {filters ? <div className=\"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:flex-wrap sm:items-center\">{filters}</div> : null}\n </div>\n <div className=\"flex min-h-[var(--ds-control-height)] flex-wrap items-center gap-2 lg:justify-end\">\n {bulkActions ? (\n <div data-slot=\"page-toolbar-bulk-actions\" className=\"contents\">\n {bulkActions}\n </div>\n ) : null}\n {viewControls}\n {children}\n </div>\n </div>\n );\n}\n\nexport { PageToolbar };\nexport type { PageToolbarProps };\n","\"use client\";\n\nimport * as React from \"react\";\n\nimport {\n appearanceOptions,\n applyConsciaPreferences,\n densityOptions,\n type ConsciaAppearance,\n type ConsciaDensity,\n} from \"../foundation/preferences\";\nimport { cn } from \"../primitives/utils\";\n\nconst APPEARANCE_KEY = \"conscia-appearance:v1\";\nconst DENSITY_KEY = \"conscia-density:v1\";\nconst PREFERENCE_EVENT = \"conscia-preferences\";\nconst volatilePreferences = new Map<string, string>();\n\nfunction readPreference<T extends string>(\n key: string,\n fallback: T,\n allowedValues: readonly T[],\n): T {\n if (typeof window === \"undefined\") {\n return fallback;\n }\n\n try {\n const value =\n window.localStorage.getItem(key) ?? volatilePreferences.get(key);\n\n return value && allowedValues.includes(value as T)\n ? (value as T)\n : fallback;\n } catch {\n const value = volatilePreferences.get(key);\n\n return value && allowedValues.includes(value as T)\n ? (value as T)\n : fallback;\n }\n}\n\nfunction writePreference(key: string, value: string) {\n volatilePreferences.set(key, value);\n\n try {\n window.localStorage.setItem(key, value);\n } catch {\n // Preferences still apply for this session when storage is unavailable.\n }\n\n window.dispatchEvent(new Event(PREFERENCE_EVENT));\n}\n\nfunction useStoredPreference<T extends string>(\n key: string,\n fallback: T,\n allowedValues: readonly T[],\n): T {\n return React.useSyncExternalStore(\n (onStoreChange) => {\n window.addEventListener(\"storage\", onStoreChange);\n window.addEventListener(PREFERENCE_EVENT, onStoreChange);\n return () => {\n window.removeEventListener(\"storage\", onStoreChange);\n window.removeEventListener(PREFERENCE_EVENT, onStoreChange);\n };\n },\n () => readPreference(key, fallback, allowedValues),\n () => fallback,\n );\n}\n\nfunction useConsciaPreferences() {\n const appearance = useStoredPreference<ConsciaAppearance>(\n APPEARANCE_KEY,\n \"system\",\n appearanceOptions,\n );\n const density = useStoredPreference<ConsciaDensity>(\n DENSITY_KEY,\n \"comfortable\",\n densityOptions,\n );\n\n return { appearance, density };\n}\n\nfunction DesignSystemPreferenceSync() {\n const { appearance, density } = useConsciaPreferences();\n\n React.useEffect(() => {\n const media = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const sync = () =>\n applyConsciaPreferences(\n document.documentElement,\n appearance,\n density,\n media.matches,\n );\n\n sync();\n media.addEventListener(\"change\", sync);\n return () => media.removeEventListener(\"change\", sync);\n }, [appearance, density]);\n\n return null;\n}\n\nfunction AppearanceControl({ className }: { className?: string }) {\n const { appearance } = useConsciaPreferences();\n\n return (\n <SegmentedControl\n className={className}\n label=\"Appearance\"\n value={appearance}\n values={appearanceOptions}\n onChange={(value) => writePreference(APPEARANCE_KEY, value)}\n />\n );\n}\n\nfunction DensityControl({ className }: { className?: string }) {\n const { density } = useConsciaPreferences();\n\n return (\n <SegmentedControl\n className={className}\n label=\"Density\"\n value={density}\n values={densityOptions}\n onChange={(value) => writePreference(DENSITY_KEY, value)}\n />\n );\n}\n\nfunction DesignPreferenceControls({ className }: { className?: string }) {\n return (\n <div className={cn(\"flex flex-col gap-3 text-sm\", className)}>\n <AppearanceControl />\n <DensityControl />\n </div>\n );\n}\n\nfunction SegmentedControl({\n className,\n label,\n value,\n values,\n onChange,\n}: {\n className?: string;\n label: string;\n value: string;\n values: string[];\n onChange: (value: string) => void;\n}) {\n return (\n <fieldset className={cn(\"flex flex-col gap-2\", className)}>\n <legend className=\"text-[var(--ds-metadata)] font-medium text-muted-foreground\">\n {label}\n </legend>\n <div className=\"inline-flex rounded-[var(--ds-radius-control)] bg-muted p-1\">\n {values.map((item) => (\n <button\n key={item}\n type=\"button\"\n aria-pressed={value === item}\n suppressHydrationWarning\n onClick={() => onChange(item)}\n className=\"h-7 rounded-[calc(var(--ds-radius-control)-2px)] px-2.5 text-[var(--ds-metadata)] font-medium capitalize text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-pressed:bg-background aria-pressed:text-foreground aria-pressed:shadow-xs\"\n >\n {item}\n </button>\n ))}\n </div>\n </fieldset>\n );\n}\n\nexport {\n AppearanceControl,\n DensityControl,\n DesignPreferenceControls,\n DesignSystemPreferenceSync,\n useConsciaPreferences,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../primitives/utils\";\n\ntype ProviderMarkProps = React.ComponentProps<\"div\"> & {\n name: string;\n shortName: string;\n description?: React.ReactNode;\n size?: \"sm\" | \"default\";\n};\n\nfunction ProviderMark({ name, shortName, description, size = \"default\", className, ...props }: ProviderMarkProps) {\n return (\n <div data-slot=\"provider-mark\" className={cn(\"flex min-w-0 items-center gap-3\", className)} {...props}>\n <div\n aria-hidden=\"true\"\n className={cn(\n \"flex shrink-0 items-center justify-center rounded-md border border-border-subtle bg-surface-muted font-semibold tracking-tight text-foreground\",\n size === \"sm\" ? \"size-8 text-[10px]\" : \"size-10 text-xs\",\n )}\n >\n {shortName}\n </div>\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">{name}</div>\n {description ? <div className=\"mt-0.5 truncate text-[var(--ds-metadata)] text-muted-foreground\">{description}</div> : null}\n </div>\n </div>\n );\n}\n\nexport { ProviderMark };\nexport type { ProviderMarkProps };\n","import * as React from \"react\";\n\nimport { cn } from \"../primitives/utils\";\n\ntype ResourceSummaryProps = React.ComponentProps<\"section\"> & {\n variant?: \"plain\" | \"surface\";\n title?: React.ReactNode;\n description?: React.ReactNode;\n status?: React.ReactNode;\n metadata?: React.ReactNode;\n actions?: React.ReactNode;\n};\n\nfunction ResourceSummary({\n variant = \"plain\",\n title,\n description,\n status,\n metadata,\n actions,\n className,\n children,\n ...props\n}: ResourceSummaryProps) {\n return (\n <section\n data-slot=\"resource-summary\"\n className={cn(\n \"px-5 py-4\",\n variant === \"plain\" && \"border-b border-border-subtle bg-background\",\n variant === \"surface\" &&\n \"rounded-[var(--ds-radius-surface)] border border-border-subtle bg-surface\",\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between\">\n <div className=\"min-w-0\">\n {title || status ? (\n <div className=\"flex min-w-0 flex-wrap items-center gap-2\">\n {title ? (\n <h2 className=\"truncate text-[var(--ds-section-title)] font-semibold\">\n {title}\n </h2>\n ) : null}\n {status}\n </div>\n ) : null}\n {description ? (\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">\n {description}\n </p>\n ) : null}\n {metadata ? (\n <div className=\"mt-2 text-[var(--ds-metadata)] text-muted-foreground\">\n {metadata}\n </div>\n ) : null}\n </div>\n {actions ? (\n <div className=\"flex shrink-0 flex-wrap items-center gap-2\">\n {actions}\n </div>\n ) : null}\n </div>\n {children ? <div className=\"mt-4\">{children}</div> : null}\n </section>\n );\n}\n\nfunction DetailSections({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"detail-sections\"\n className={cn(\"flex flex-col gap-[var(--ds-space-section)]\", className)}\n {...props}\n />\n );\n}\n\ntype DetailSectionProps = React.ComponentProps<\"section\"> & {\n variant?: \"surface\" | \"open\";\n title: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n};\n\nfunction DetailSection({\n variant = \"surface\",\n title,\n description,\n actions,\n className,\n children,\n ...props\n}: DetailSectionProps) {\n return (\n <section\n data-slot=\"detail-section\"\n className={cn(\n variant === \"surface\" &&\n \"rounded-[var(--ds-radius-surface)] border border-border-subtle bg-surface p-[var(--ds-surface-padding)]\",\n variant === \"open\" && \"border-b border-border-subtle pb-[var(--ds-space-section)]\",\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n <h2 className=\"text-[var(--ds-section-title)] font-semibold\">\n {title}\n </h2>\n {description ? (\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">\n {description}\n </p>\n ) : null}\n </div>\n {actions ? (\n <div className=\"flex shrink-0 items-center gap-2\">{actions}</div>\n ) : null}\n </div>\n {children ? <div className=\"mt-4\">{children}</div> : null}\n </section>\n );\n}\n\nfunction KeyValueList({\n className,\n ...props\n}: React.ComponentProps<\"dl\">) {\n return (\n <dl\n data-slot=\"key-value-list\"\n className={cn(\"grid gap-3 text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction KeyValueItem({\n label,\n value,\n breakValue = false,\n}: {\n label: React.ReactNode;\n value: React.ReactNode;\n breakValue?: boolean;\n}) {\n return (\n <div data-slot=\"key-value-item\" className=\"flex justify-between gap-4\">\n <dt className=\"text-muted-foreground\">{label}</dt>\n <dd\n className={cn(\n \"text-right font-medium\",\n breakValue && \"break-all\",\n )}\n >\n {value}\n </dd>\n </div>\n );\n}\n\nexport {\n DetailSection,\n DetailSections,\n KeyValueItem,\n KeyValueList,\n ResourceSummary,\n};\nexport type { DetailSectionProps, ResourceSummaryProps };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { ChevronRight } from \"lucide-react\";\n\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../primitives/collapsible\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger,\n} from \"../primitives/dropdown-menu\";\nimport { cn } from \"../primitives/utils\";\nimport {\n NavigationGroup,\n NavigationItem,\n NavigationSubItem,\n NavigationSubList,\n useAppShell,\n} from \"./app-shell\";\n\nexport type SidebarNavigationItem = {\n id: string;\n label: string;\n icon?: React.ReactNode;\n active?: boolean;\n startsSection?: boolean;\n};\n\nexport type SidebarNavigationSection = Omit<\n SidebarNavigationItem,\n \"active\"\n> & {\n active?: boolean;\n items: SidebarNavigationItem[];\n};\n\nexport type SidebarNavigationEntry =\n | SidebarNavigationItem\n | SidebarNavigationSection;\n\nexport type SidebarNavigationLinkProps = {\n \"aria-current\"?: \"page\";\n \"aria-label\": string;\n children: React.ReactNode;\n onClick?: React.MouseEventHandler<HTMLAnchorElement>;\n};\n\ntype SidebarNavigationProps = {\n entries: SidebarNavigationEntry[];\n renderLink: (\n item: SidebarNavigationItem,\n props: SidebarNavigationLinkProps,\n ) => React.ReactElement;\n onNavigate?: () => void;\n storageKey?: string;\n className?: string;\n};\n\nfunction isSection(\n entry: SidebarNavigationEntry,\n): entry is SidebarNavigationSection {\n return \"items\" in entry;\n}\n\nfunction readOpenSections(storageKey?: string) {\n if (!storageKey || typeof window === \"undefined\") {\n return {};\n }\n\n try {\n const storedValue = window.localStorage.getItem(storageKey);\n\n if (!storedValue) {\n return {};\n }\n\n const parsedValue: unknown = JSON.parse(storedValue);\n return typeof parsedValue === \"object\" && parsedValue !== null\n ? (parsedValue as Record<string, boolean>)\n : {};\n } catch {\n return {};\n }\n}\n\nfunction SidebarNavigation({\n entries,\n renderLink,\n onNavigate,\n storageKey,\n className,\n}: SidebarNavigationProps) {\n const { isMobile, sidebarSide, sidebarState } = useAppShell();\n const [openSections, setOpenSections] = React.useState<\n Record<string, boolean>\n >({});\n const storageReady = React.useRef(false);\n\n React.useEffect(() => {\n storageReady.current = false;\n const storedSections = readOpenSections(storageKey);\n\n queueMicrotask(() => {\n storageReady.current = true;\n setOpenSections(storedSections);\n });\n }, [storageKey]);\n\n React.useEffect(() => {\n if (\n !storageReady.current ||\n !storageKey ||\n !entries.some(isSection)\n ) {\n return;\n }\n\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(openSections));\n } catch {\n // Navigation remains functional when storage is unavailable.\n }\n }, [entries, openSections, storageKey]);\n\n const handleNavigate = React.useCallback<\n React.MouseEventHandler<HTMLAnchorElement>\n >(() => {\n onNavigate?.();\n }, [onNavigate]);\n\n return (\n <nav\n data-slot=\"sidebar-navigation\"\n aria-label=\"Primary navigation\"\n className={cn(\"flex flex-col gap-1\", className)}\n >\n {entries.map((entry) => {\n if (!isSection(entry)) {\n return (\n <NavigationGroup\n key={entry.id}\n className={entry.startsSection ? \"mt-2\" : undefined}\n >\n <NavigationItem asChild active={entry.active} tooltip={entry.label}>\n {renderLink(entry, {\n \"aria-current\": entry.active ? \"page\" : undefined,\n \"aria-label\": entry.label,\n onClick: handleNavigate,\n children: (\n <>\n {entry.icon}\n <span className=\"truncate group-data-[sidebar-state=collapsed]/shell:hidden\">\n {entry.label}\n </span>\n </>\n ),\n })}\n </NavigationItem>\n </NavigationGroup>\n );\n }\n\n const sectionOpen = (openSections[entry.id] ?? false) || entry.active;\n\n if (sidebarState === \"collapsed\" && !isMobile) {\n return (\n <DropdownMenu key={entry.id}>\n <NavigationGroup\n className={entry.startsSection ? \"mt-2\" : undefined}\n >\n <DropdownMenuTrigger asChild>\n <NavigationItem\n active={entry.active}\n aria-label={`${entry.label} menu`}\n >\n {entry.icon}\n <span className=\"sr-only\">{entry.label}</span>\n </NavigationItem>\n </DropdownMenuTrigger>\n </NavigationGroup>\n <DropdownMenuContent\n side={sidebarSide === \"left\" ? \"right\" : \"left\"}\n align=\"start\"\n sideOffset={8}\n className=\"min-w-56 rounded-[var(--ds-radius-surface)] p-1.5\"\n >\n <DropdownMenuLabel className=\"px-2 py-1.5 font-semibold text-muted-foreground\">\n {entry.label}\n </DropdownMenuLabel>\n <DropdownMenuGroup>\n {entry.items.map((item) => (\n <DropdownMenuItem\n key={item.id}\n asChild\n className={cn(\n \"min-h-9 cursor-pointer rounded-[var(--ds-radius-control)] [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:stroke-[1.75]\",\n item.active &&\n \"bg-selection-background text-selection-foreground shadow-[inset_2px_0_0_var(--selection-indicator)] focus:bg-selection-background focus:text-selection-foreground\",\n )}\n >\n {renderLink(item, {\n \"aria-current\": item.active ? \"page\" : undefined,\n \"aria-label\": item.label,\n onClick: handleNavigate,\n children: (\n <>\n {item.icon}\n <span className=\"truncate\">{item.label}</span>\n </>\n ),\n })}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n }\n\n return (\n <Collapsible\n key={entry.id}\n open={sectionOpen}\n onOpenChange={(open) =>\n setOpenSections((current) => ({\n ...current,\n [entry.id]: open,\n }))\n }\n className={cn(\n \"group/collapsible\",\n entry.startsSection && \"mt-2\",\n )}\n >\n <NavigationGroup>\n <CollapsibleTrigger asChild>\n <NavigationItem\n active={entry.active}\n tooltip={entry.label}\n aria-label={entry.label}\n aria-expanded={sectionOpen}\n >\n {entry.icon}\n <span className=\"truncate group-data-[sidebar-state=collapsed]/shell:hidden\">\n {entry.label}\n </span>\n <ChevronRight className=\"ml-auto transition-transform duration-150 ease-out group-data-[sidebar-state=collapsed]/shell:hidden group-data-[state=open]/collapsible:rotate-90\" />\n </NavigationItem>\n </CollapsibleTrigger>\n <CollapsibleContent\n data-slot=\"sidebar-collapsible-content\"\n className=\"overflow-hidden\"\n >\n <NavigationSubList>\n {entry.items.map((item) => (\n <NavigationSubItem\n key={item.id}\n asChild\n active={item.active}\n >\n {renderLink(item, {\n \"aria-current\": item.active ? \"page\" : undefined,\n \"aria-label\": item.label,\n onClick: handleNavigate,\n children: (\n <>\n {item.icon}\n <span className=\"truncate\">{item.label}</span>\n </>\n ),\n })}\n </NavigationSubItem>\n ))}\n </NavigationSubList>\n </CollapsibleContent>\n </NavigationGroup>\n </Collapsible>\n );\n })}\n </nav>\n );\n}\n\nexport { SidebarNavigation };\n","import * as React from \"react\";\n\nimport { cn } from \"../primitives/utils\";\n\ntype StateViewProps = React.ComponentProps<\"div\"> & {\n title: React.ReactNode;\n description?: React.ReactNode;\n action?: React.ReactNode;\n icon?: React.ReactNode;\n};\n\nfunction StateView({ title, description, action, icon, className, ...props }: StateViewProps) {\n return (\n <div\n data-slot=\"state-view\"\n className={cn(\"flex min-h-72 flex-col items-center justify-center gap-3 border-b px-6 py-12 text-center\", className)}\n {...props}\n >\n {icon ? (\n <div className=\"flex size-10 items-center justify-center rounded-md bg-neutral-background text-neutral-foreground [&_svg]:size-5\">\n {icon}\n </div>\n ) : null}\n <h2 className=\"text-base font-semibold\">{title}</h2>\n {description ? <p className=\"max-w-md text-sm text-muted-foreground\">{description}</p> : null}\n {action ? <div className=\"mt-1\">{action}</div> : null}\n </div>\n );\n}\n\nfunction LoadingRows({\n rows = 6,\n columns = 5,\n}: {\n rows?: number;\n columns?: number;\n}) {\n return (\n <div data-slot=\"loading-rows\" className=\"border-b\">\n {Array.from({ length: rows }).map((_, index) => (\n <div\n key={index}\n className=\"grid h-[var(--ds-row-height)] items-center gap-4 border-b px-5 last:border-b-0\"\n style={{ gridTemplateColumns: `2fr repeat(${Math.max(columns - 1, 1)}, minmax(5rem, 1fr))` }}\n >\n {Array.from({ length: columns }).map((_, columnIndex) => (\n <div\n key={columnIndex}\n className={cn(\n \"h-3 rounded bg-muted\",\n columnIndex === 0 ? \"w-44\" : \"w-24\",\n )}\n />\n ))}\n </div>\n ))}\n </div>\n );\n}\n\nfunction ErrorState({ title, description, action, className, ...props }: StateViewProps) {\n return (\n <StateView\n title={title}\n description={description}\n action={action}\n className={cn(\"bg-danger-background/60\", className)}\n role=\"alert\"\n aria-live=\"assertive\"\n {...props}\n />\n );\n}\n\nexport { ErrorState, LoadingRows, StateView };\nexport type { StateViewProps };\n","import * as React from \"react\";\n\nimport { cn } from \"../primitives/utils\";\n\ntype ValueMeterProps = React.ComponentProps<\"div\"> & {\n label: React.ReactNode;\n value: number;\n maximum?: number | null;\n valueLabel?: React.ReactNode;\n detail?: React.ReactNode;\n tone?: \"neutral\" | \"success\" | \"warning\" | \"danger\";\n};\n\nfunction ValueMeter({\n label,\n value,\n maximum,\n valueLabel,\n detail,\n tone = \"neutral\",\n className,\n ...props\n}: ValueMeterProps) {\n const labelId = React.useId();\n const hasMaximum = typeof maximum === \"number\" && maximum > 0;\n const boundedValue = hasMaximum\n ? Math.min(maximum, Math.max(0, value))\n : value;\n const percentage = hasMaximum\n ? (boundedValue / maximum) * 100\n : null;\n const resolvedValueLabel =\n valueLabel ??\n (hasMaximum ? `${boundedValue} of ${maximum}` : String(boundedValue));\n\n return (\n <div\n data-slot=\"value-meter\"\n className={cn(\"grid gap-2\", className)}\n {...props}\n >\n <div className=\"flex items-baseline justify-between gap-4 text-sm\">\n <span id={labelId} className=\"font-medium text-foreground\">{label}</span>\n <span className=\"text-muted-foreground\">{resolvedValueLabel}</span>\n </div>\n {percentage === null ? null : (\n <div\n role=\"progressbar\"\n aria-labelledby={labelId}\n aria-valuemin={0}\n aria-valuemax={maximum ?? undefined}\n aria-valuenow={boundedValue}\n className=\"h-2 overflow-hidden rounded-full bg-surface-muted\"\n >\n <div\n className={cn(\n \"h-full rounded-full bg-neutral-foreground transition-[width]\",\n tone === \"success\" && \"bg-success-foreground\",\n tone === \"warning\" && \"bg-warning-foreground\",\n tone === \"danger\" && \"bg-danger-foreground\",\n )}\n style={{ width: `${percentage}%` }}\n />\n </div>\n )}\n {detail ? <div className=\"text-xs text-muted-foreground\">{detail}</div> : null}\n </div>\n );\n}\n\nexport { ValueMeter };\nexport type { ValueMeterProps };\n"],"mappings":"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","names":["jsx","jsxs","table","jsx","jsx","jsxs","React","Fragment","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","jsx","jsxs","jsx","jsxs","React","ChevronRight","Fragment","jsx","jsxs","ChevronRight","jsx","jsxs","_","React","jsx","jsxs"]}
@@ -1,3 +1,5 @@
1
+ @import "@fontsource-variable/inter/index.css";
2
+
1
3
  @custom-variant dark (&:is(.dark *));
2
4
 
3
5
  @keyframes ds-sidebar-expand {
@@ -79,6 +81,8 @@
79
81
  --surface-raised: #ffffff;
80
82
  --surface-floating: #ffffff;
81
83
  --surface-overlay: #ffffff;
84
+ --surface-control: var(--surface-muted);
85
+ --surface-control-hover: var(--surface-raised);
82
86
  --text-primary: var(--foreground);
83
87
  --text-secondary: #373b4a;
84
88
  --text-supporting: #5f6270;
@@ -135,7 +139,7 @@
135
139
  --sidebar-group-label: color-mix(in oklab, var(--sidebar-foreground) 72%, transparent);
136
140
  --sidebar-group-count: color-mix(in oklab, var(--sidebar-foreground) 62%, transparent);
137
141
  --sidebar-focus-ring: var(--ring);
138
- --font-sans: "Saans", "Inter", "Aptos", "Segoe UI", Arial, sans-serif;
142
+ --font-sans: "Inter Variable", "Inter", "Aptos", "Segoe UI", Arial, sans-serif;
139
143
  --ds-space-inline: 0.5rem;
140
144
  --ds-space-control: 0.625rem;
141
145
  --ds-field-gap: 1.25rem;
@@ -157,16 +161,17 @@
157
161
  --ds-control-height-sm: 2rem;
158
162
  --ds-control-height-lg: 2.75rem;
159
163
  --ds-control-padding-x: 1rem;
164
+ --ds-topbar-height: 3.5rem;
160
165
  --ds-sidebar-width: 16rem;
161
166
  --ds-sidebar-width-mobile: 18rem;
162
167
  --ds-sidebar-item-height: 2.25rem;
163
168
  --ds-sidebar-item-height-touch: 2.75rem;
164
- --ds-sidebar-header-height: 3.5rem;
169
+ --ds-sidebar-header-height: var(--ds-topbar-height);
165
170
  --ds-sidebar-content-padding-x: 0.625rem;
166
171
  --ds-sidebar-content-padding-y: 0.75rem;
167
172
  --ds-sidebar-footer-padding: 0.625rem;
168
173
  --ds-sidebar-group-gap: 0.25rem;
169
- --ds-sidebar-group-label-size: 0.75rem;
174
+ --ds-sidebar-group-label-size: var(--ds-field-label-size);
170
175
  --ds-surface-padding: 1.25rem;
171
176
  --ds-table-header-height: 2.25rem;
172
177
  --ds-row-height: 2.75rem;
@@ -250,6 +255,8 @@
250
255
  --surface-raised: #1d1f24;
251
256
  --surface-floating: #22242a;
252
257
  --surface-overlay: #282a31;
258
+ --surface-control: var(--surface-raised);
259
+ --surface-control-hover: var(--surface-muted);
253
260
  --text-primary: var(--foreground);
254
261
  --text-secondary: #e7e8eb;
255
262
  --text-supporting: #c5c7cf;
@@ -397,6 +404,8 @@
397
404
  --color-surface-raised: var(--surface-raised);
398
405
  --color-surface-floating: var(--surface-floating);
399
406
  --color-surface-overlay: var(--surface-overlay);
407
+ --color-surface-control: var(--surface-control);
408
+ --color-surface-control-hover: var(--surface-control-hover);
400
409
  --color-text-primary: var(--text-primary);
401
410
  --color-text-secondary: var(--text-secondary);
402
411
  --color-text-supporting: var(--text-supporting);
package/dist/index.js CHANGED
@@ -52,7 +52,7 @@ import {
52
52
  ValueMeter,
53
53
  useAppShell,
54
54
  useConsciaPreferences
55
- } from "./chunk-6VZDLHRF.js";
55
+ } from "./chunk-RFSIC55H.js";
56
56
  import {
57
57
  appearanceOptions,
58
58
  applyConsciaPreferences,
@@ -102,7 +102,7 @@ import {
102
102
  Textarea,
103
103
  alertVariants,
104
104
  badgeVariants
105
- } from "./chunk-VVTTFVCC.js";
105
+ } from "./chunk-OFYVHEIH.js";
106
106
  import {
107
107
  Button,
108
108
  Card,
@@ -177,7 +177,7 @@ import {
177
177
  TooltipProvider,
178
178
  TooltipTrigger,
179
179
  buttonVariants
180
- } from "./chunk-HLND6FZS.js";
180
+ } from "./chunk-JC7W5VB3.js";
181
181
  import {
182
182
  cn
183
183
  } from "./chunk-JU5DQXFC.js";
@@ -113,6 +113,10 @@ declare function NavigationSubItem({ asChild, active, className, ...props }: Rea
113
113
  active?: boolean;
114
114
  }): React.JSX.Element;
115
115
  declare function NavigationSubList({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
116
+ /**
117
+ * Place this control inside TopBar, not AppSidebar, so it remains available
118
+ * after the sidebar collapses and in the mobile drawer layout.
119
+ */
116
120
  declare function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>): React.JSX.Element;
117
121
  type SidebarSearchProps = Omit<React.ComponentProps<typeof Input>, "type"> & {
118
122
  expanded?: boolean;
@@ -51,9 +51,9 @@ import {
51
51
  ValueMeter,
52
52
  useAppShell,
53
53
  useConsciaPreferences
54
- } from "../chunk-6VZDLHRF.js";
54
+ } from "../chunk-RFSIC55H.js";
55
55
  import "../chunk-D5LYROOM.js";
56
- import "../chunk-HLND6FZS.js";
56
+ import "../chunk-JC7W5VB3.js";
57
57
  import "../chunk-JU5DQXFC.js";
58
58
  export {
59
59
  ActivityItem,
@@ -43,7 +43,7 @@ import {
43
43
  Textarea,
44
44
  alertVariants,
45
45
  badgeVariants
46
- } from "../chunk-VVTTFVCC.js";
46
+ } from "../chunk-OFYVHEIH.js";
47
47
  import {
48
48
  Button,
49
49
  Card,
@@ -118,7 +118,7 @@ import {
118
118
  TooltipProvider,
119
119
  TooltipTrigger,
120
120
  buttonVariants
121
- } from "../chunk-HLND6FZS.js";
121
+ } from "../chunk-JC7W5VB3.js";
122
122
  import {
123
123
  cn
124
124
  } from "../chunk-JU5DQXFC.js";