@labpane/ui 1.0.0 → 1.2.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.
Files changed (76) hide show
  1. package/README.md +27 -12
  2. package/dist/chunk-NR3PLNO7.js +100 -0
  3. package/dist/chunk-NR3PLNO7.js.map +7 -0
  4. package/dist/index.js +6829 -610
  5. package/dist/index.js.map +4 -4
  6. package/dist/styles.css +1 -1
  7. package/dist/terminal.js +1 -1
  8. package/dist/terminal.js.map +1 -1
  9. package/dist/ui/alert.d.ts +13 -0
  10. package/dist/ui/app-menu.d.ts +6 -1
  11. package/dist/ui/avatar.d.ts +11 -0
  12. package/dist/ui/badge.d.ts +17 -0
  13. package/dist/ui/breadcrumb.d.ts +11 -0
  14. package/dist/ui/browser-layout.d.ts +20 -0
  15. package/dist/ui/button.d.ts +27 -0
  16. package/dist/ui/card.d.ts +15 -0
  17. package/dist/ui/chart-frame.d.ts +4 -0
  18. package/dist/ui/checkbox.d.ts +4 -0
  19. package/dist/ui/classes.d.ts +5 -0
  20. package/dist/ui/command.d.ts +82 -0
  21. package/dist/ui/confirm-dialog.d.ts +28 -0
  22. package/dist/ui/copy-button.d.ts +7 -0
  23. package/dist/ui/dialog.d.ts +8 -17
  24. package/dist/ui/discard-dialog.d.ts +6 -0
  25. package/dist/ui/email-thread.d.ts +35 -0
  26. package/dist/ui/empty.d.ts +14 -0
  27. package/dist/ui/field.d.ts +26 -0
  28. package/dist/ui/file-input.d.ts +6 -0
  29. package/dist/ui/flame-graph-model.d.ts +23 -0
  30. package/dist/ui/flame-graph.d.ts +15 -0
  31. package/dist/ui/form-fields.d.ts +1 -1
  32. package/dist/ui/histogram.d.ts +23 -0
  33. package/dist/ui/index.d.ts +54 -3
  34. package/dist/ui/input-group.d.ts +28 -0
  35. package/dist/ui/input.d.ts +3 -0
  36. package/dist/ui/kbd.d.ts +4 -0
  37. package/dist/ui/label.d.ts +3 -0
  38. package/dist/ui/menu.d.ts +27 -0
  39. package/dist/ui/native-select.d.ts +7 -0
  40. package/dist/ui/nav-tabs.d.ts +7 -0
  41. package/dist/ui/overlay.d.ts +1 -0
  42. package/dist/ui/page.d.ts +22 -0
  43. package/dist/ui/rail.d.ts +16 -0
  44. package/dist/ui/search-input.d.ts +6 -0
  45. package/dist/ui/select.d.ts +13 -0
  46. package/dist/ui/separator.d.ts +6 -0
  47. package/dist/ui/settings.d.ts +14 -0
  48. package/dist/ui/sheet.d.ts +20 -0
  49. package/dist/ui/side-panel.d.ts +23 -0
  50. package/dist/ui/sidebar.d.ts +81 -0
  51. package/dist/ui/skeleton.d.ts +3 -0
  52. package/dist/ui/spinner.d.ts +3 -0
  53. package/dist/ui/stat.d.ts +7 -0
  54. package/dist/ui/steps.d.ts +7 -0
  55. package/dist/ui/switch.d.ts +6 -0
  56. package/dist/ui/tab-state.d.ts +8 -0
  57. package/dist/ui/table-layout.d.ts +19 -0
  58. package/dist/ui/table-model.d.ts +42 -0
  59. package/dist/ui/table-screen.d.ts +9 -0
  60. package/dist/ui/table.d.ts +33 -22
  61. package/dist/ui/tabs.d.ts +13 -0
  62. package/dist/ui/textarea.d.ts +3 -0
  63. package/dist/ui/theme.d.ts +22 -0
  64. package/dist/ui/time-series-chart.d.ts +19 -0
  65. package/dist/ui/time-series-model.d.ts +90 -0
  66. package/dist/ui/timing-tracks.d.ts +27 -0
  67. package/dist/ui/toggle.d.ts +22 -0
  68. package/dist/ui/tooltip.d.ts +7 -0
  69. package/dist/ui/topbar.d.ts +4 -0
  70. package/dist/ui/use-chart-width.d.ts +5 -0
  71. package/dist/ui/use-mobile.d.ts +1 -0
  72. package/package.json +18 -1
  73. package/styles.css +123 -0
  74. package/dist/chunk-3ZY2AVB4.js +0 -434
  75. package/dist/chunk-3ZY2AVB4.js.map +0 -7
  76. package/dist/ui/primitives.d.ts +0 -85
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../dialog.tsx", "../menu.tsx", "../app-menu.tsx", "../form-fields.tsx", "../table.tsx"],
4
- "sourcesContent": ["import * as React from \"react\";\nimport * as AlertDialog from \"@radix-ui/react-alert-dialog\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { CircleAlertIcon, XIcon } from \"lucide-react\";\nimport { Button, cn, CopyButton, Input, Spinner } from \"./primitives.js\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n }\n>(function DialogContent(\n { className, children, showCloseButton = true, ...props },\n ref,\n) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"labui:fixed labui:inset-0 labui:z-50 labui:bg-overlay\" />\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"dialog-content\"\n className={cn(\n \"labui:fixed labui:top-1/2 labui:left-1/2 labui:z-50 labui:-translate-x-1/2 labui:-translate-y-1/2\",\n \"labui:grid labui:max-h-[calc(100dvh-2rem)] labui:w-full labui:max-w-[calc(100%-2rem)] labui:sm:max-w-lg labui:gap-6 labui:overflow-y-auto\",\n \"labui:rounded-(--labui-radius-dialog) labui:border labui:bg-popover labui:p-6 labui:text-popover-foreground labui:shadow-sm labui:outline-none\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className={cn(\n \"labui:absolute labui:top-4 labui:right-4 labui:inline-flex labui:size-8 labui:items-center labui:justify-center labui:rounded-md\",\n \"labui:text-muted-foreground labui:transition-colors labui:hover:bg-accent labui:hover:text-foreground\",\n \"labui:focus-visible:ring-[3px] labui:focus-visible:ring-ring/50 labui:focus-visible:outline-none labui:disabled:pointer-events-none\",\n \"labui:[&_svg]:pointer-events-none labui:[&_svg]:size-4 labui:[&_svg]:shrink-0\",\n )}\n >\n <XIcon />\n <span className=\"labui:sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\nconst DialogHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function DialogHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"dialog-header\"\n className={cn(\n \"labui:flex labui:min-w-0 labui:flex-col labui:gap-2 labui:text-left\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst DialogFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function DialogFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"dialog-footer\"\n className={cn(\n \"labui:flex labui:flex-wrap labui:items-center labui:justify-end labui:gap-2\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n className={cn(\n \"labui:pr-8 labui:text-lg labui:leading-7 labui:font-semibold labui:break-words\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n className={cn(\"labui:text-sm labui:text-muted-foreground\", className)}\n {...props}\n />\n );\n});\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n};\n\nexport function ConfirmDialog({\n trigger,\n title,\n name,\n confirmLabel,\n typeToConfirm,\n onConfirm,\n}: {\n trigger: React.ReactElement;\n title: string;\n name: string;\n confirmLabel: string;\n typeToConfirm?: boolean;\n onConfirm: () => Promise<void>;\n}) {\n const [open, setOpen] = React.useState(false);\n const [value, setValue] = React.useState(\"\");\n const [busy, setBusy] = React.useState(false);\n const [error, setError] = React.useState<string>();\n\n function change(next: boolean) {\n if (busy) return;\n setOpen(next);\n setValue(\"\");\n setError(undefined);\n }\n\n async function submit(event: React.FormEvent) {\n event.preventDefault();\n setBusy(true);\n setError(undefined);\n try {\n await onConfirm();\n setOpen(false);\n } catch (err) {\n setError((err as Error).message);\n } finally {\n setBusy(false);\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={change}>\n <DialogTrigger asChild>{trigger}</DialogTrigger>\n <DialogContent\n role=\"alertdialog\"\n aria-describedby={undefined}\n className=\"labui:p-0\"\n showCloseButton={!busy}\n onOpenAutoFocus={(event) => {\n const input = (event.target as HTMLElement).querySelector(\"input\");\n if (!input) return;\n event.preventDefault();\n input.focus();\n }}\n >\n <form\n className=\"labui:flex labui:min-w-0 labui:flex-col\"\n onSubmit={submit}\n >\n <div className=\"labui:flex labui:min-w-0 labui:flex-col labui:gap-4 labui:p-6\">\n <div className=\"labui:flex labui:items-center labui:gap-3\">\n <span\n aria-hidden=\"true\"\n className=\"labui:flex labui:size-9 labui:shrink-0 labui:items-center labui:justify-center labui:rounded-xl labui:bg-destructive-muted labui:text-destructive\"\n >\n <CircleAlertIcon className=\"labui:size-5\" />\n </span>\n <DialogTitle>\n {title}{\" \"}\n <span className=\"labui:inline-flex labui:items-center labui:gap-1 labui:rounded-md labui:border labui:bg-muted/50 labui:py-0.5 labui:pr-0.5 labui:pl-2 labui:align-middle labui:font-mono labui:text-base labui:break-all\">\n {name}\n <CopyButton value={name} label=\"Copy name\" />\n </span>\n ?\n </DialogTitle>\n </div>\n {typeToConfirm && (\n <Input\n aria-label=\"Name\"\n autoComplete=\"off\"\n spellCheck=\"false\"\n placeholder={name}\n value={value}\n disabled={busy}\n onChange={(event) => setValue(event.target.value)}\n />\n )}\n {error && (\n <p role=\"alert\" className=\"labui:text-sm labui:text-destructive\">\n {error}\n </p>\n )}\n </div>\n <DialogFooter className=\"labui:justify-between labui:border-t labui:bg-muted/40 labui:px-6 labui:py-4\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={busy}\n onClick={() => change(false)}\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n variant=\"destructive\"\n disabled={busy || (typeToConfirm && value !== name)}\n >\n {busy && <Spinner />}\n {confirmLabel}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n\nconst dialogAction =\n \"labui:inline-flex labui:shrink-0 labui:items-center labui:justify-center labui:rounded-md labui:text-sm labui:font-medium labui:outline-none labui:transition-colors labui:hover:bg-accent labui:focus-visible:ring-2 labui:focus-visible:ring-ring labui:px-4 labui:py-2\";\n\nexport function DiscardDialog({\n label,\n onCancel,\n onConfirm,\n onCloseAutoFocus,\n}: {\n label?: string;\n onCancel: () => void;\n onConfirm: () => void;\n onCloseAutoFocus?: (event: Event) => void;\n}) {\n return (\n <AlertDialog.Root\n open={label !== undefined}\n onOpenChange={(open) => !open && onCancel()}\n >\n <AlertDialog.Portal>\n <AlertDialog.Overlay className=\"labui:fixed labui:inset-0 labui:z-50 labui:font-sans labui:text-sm labui:leading-normal labui:bg-overlay\" />\n <AlertDialog.Content\n className={cn(\n \"labui:fixed labui:top-1/2 labui:left-1/2 labui:z-50 labui:-translate-x-1/2 labui:-translate-y-1/2\",\n \"labui:w-[calc(100%-2rem)] labui:max-w-lg labui:rounded-[1.25rem] labui:border labui:border-border labui:bg-popover labui:p-6\",\n \"labui:font-sans labui:text-sm labui:leading-normal labui:text-popover-foreground labui:shadow-sm labui:outline-none\",\n )}\n onCloseAutoFocus={onCloseAutoFocus}\n >\n <AlertDialog.Title className=\"labui:m-0 labui:text-lg labui:font-semibold\">\n Discard changes in {label}?\n </AlertDialog.Title>\n <AlertDialog.Description className=\"labui:mt-2 labui:text-muted-foreground\">\n Closing the tab discards its unsaved changes.\n </AlertDialog.Description>\n <div className=\"labui:mt-6 labui:flex labui:flex-wrap labui:justify-end labui:gap-2\">\n <AlertDialog.Cancel\n className={dialogAction + \" labui:border labui:border-border\"}\n >\n Keep tab\n </AlertDialog.Cancel>\n <AlertDialog.Action\n className={\n dialogAction +\n \" labui:bg-destructive-muted labui:text-destructive\"\n }\n onClick={onConfirm}\n >\n Discard and close\n </AlertDialog.Action>\n </div>\n </AlertDialog.Content>\n </AlertDialog.Portal>\n </AlertDialog.Root>\n );\n}\n", "import * as React from \"react\";\nimport * as ContextMenu from \"@radix-ui/react-context-menu\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\";\n\nexport type MenuAction =\n | {\n label: string;\n onSelect: () => void;\n disabled?: boolean;\n checked?: boolean;\n }\n | { label: string; items: MenuAction[] }\n | null;\nexport type MenuOption = {\n id: string;\n label: string;\n group?: string;\n icon?: React.ReactNode;\n};\n\nconst panel =\n \"labui:z-50 labui:rounded-lg labui:border labui:border-border labui:bg-popover labui:p-1 labui:font-sans labui:text-sm labui:leading-normal labui:text-popover-foreground labui:shadow-sm\";\nconst menuItem =\n \"labui:flex labui:min-h-9 labui:cursor-default labui:items-center labui:gap-3 labui:rounded-md labui:px-3 labui:text-sm labui:outline-none labui:data-highlighted:bg-accent labui:data-disabled:opacity-50 labui:[@media(pointer:coarse)]:min-h-11\";\nconst optionPanel =\n panel +\n \" labui:min-w-40 labui:max-h-[var(--radix-dropdown-menu-content-available-height)] labui:overflow-auto\";\n\nexport function MenuContent({\n children,\n className = \"labui:w-56\",\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n className={\n \"labui:z-50 labui:max-h-[var(--radix-dropdown-menu-content-available-height)] labui:overflow-auto labui:rounded-lg labui:border labui:bg-popover labui:p-1 labui:text-popover-foreground labui:shadow-sm \" +\n className\n }\n >\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n );\n}\n\nfunction contextItem(action: MenuAction, index: number): React.ReactNode {\n if (!action)\n return (\n <ContextMenu.Separator\n key={index}\n className=\"labui:my-1 labui:border-t labui:border-border\"\n />\n );\n if (\"items\" in action)\n return (\n <ContextMenu.Sub key={action.label}>\n <ContextMenu.SubTrigger\n className={\n menuItem +\n \" labui:justify-between labui:data-[state=open]:bg-accent\"\n }\n >\n {action.label}\n <ChevronRightIcon className=\"labui:size-4\" />\n </ContextMenu.SubTrigger>\n <ContextMenu.Portal>\n <ContextMenu.SubContent\n className={panel + \" labui:min-w-40\"}\n sideOffset={4}\n collisionPadding={8}\n >\n {action.items.map(contextItem)}\n </ContextMenu.SubContent>\n </ContextMenu.Portal>\n </ContextMenu.Sub>\n );\n if (action.checked !== undefined)\n return (\n <ContextMenu.CheckboxItem\n key={action.label}\n className={menuItem}\n checked={action.checked}\n disabled={action.disabled}\n onSelect={action.onSelect}\n >\n <span className=\"labui:grid labui:size-4 labui:place-items-center\">\n <ContextMenu.ItemIndicator>\n <CheckIcon className=\"labui:size-4\" />\n </ContextMenu.ItemIndicator>\n </span>\n {action.label}\n </ContextMenu.CheckboxItem>\n );\n return (\n <ContextMenu.Item\n key={action.label}\n className={menuItem}\n disabled={action.disabled}\n onSelect={action.onSelect}\n >\n {action.label}\n </ContextMenu.Item>\n );\n}\n\nexport function ActionMenu({\n children,\n actions,\n onCloseAutoFocus,\n}: {\n children: React.ReactElement;\n actions: MenuAction[];\n onCloseAutoFocus?: (event: Event) => void;\n}) {\n return (\n <ContextMenu.Root modal={false}>\n <ContextMenu.Trigger asChild>{children}</ContextMenu.Trigger>\n <ContextMenu.Portal>\n <ContextMenu.Content\n className={panel + \" labui:min-w-44\"}\n onCloseAutoFocus={onCloseAutoFocus}\n >\n {actions.map(contextItem)}\n </ContextMenu.Content>\n </ContextMenu.Portal>\n </ContextMenu.Root>\n );\n}\n\nexport function OptionMenu({\n trigger,\n options,\n onSelect,\n open,\n onOpenChange,\n onCloseAutoFocus,\n}: {\n trigger: React.ReactElement;\n options: readonly MenuOption[];\n onSelect: (id: string) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onCloseAutoFocus?: (event: Event) => void;\n}) {\n const groups = [\n ...new Set(\n options.flatMap((option) => (option.group ? [option.group] : [])),\n ),\n ];\n const item = (option: MenuOption) => (\n <DropdownMenu.Item\n key={option.id}\n className={menuItem}\n onSelect={() => onSelect(option.id)}\n >\n {option.icon}\n {option.label}\n </DropdownMenu.Item>\n );\n return (\n <DropdownMenu.Root modal={false} open={open} onOpenChange={onOpenChange}>\n <DropdownMenu.Trigger asChild>{trigger}</DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n className={optionPanel}\n onCloseAutoFocus={onCloseAutoFocus}\n >\n {options.filter((option) => !option.group).map(item)}\n {groups.map((group) => (\n <DropdownMenu.Sub key={group}>\n <DropdownMenu.SubTrigger\n className={\n menuItem +\n \" labui:justify-between labui:data-[state=open]:bg-accent\"\n }\n >\n {group}\n <ChevronRightIcon className=\"labui:size-4\" />\n </DropdownMenu.SubTrigger>\n <DropdownMenu.Portal>\n <DropdownMenu.SubContent\n className={optionPanel}\n sideOffset={4}\n collisionPadding={8}\n >\n {options.filter((option) => option.group === group).map(item)}\n </DropdownMenu.SubContent>\n </DropdownMenu.Portal>\n </DropdownMenu.Sub>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n}\n", "import * as Popover from \"@radix-ui/react-popover\";\nimport { useRef, useState, type ReactNode } from \"react\";\nimport { MaximizeIcon, MinimizeIcon, MoonIcon, SunIcon } from \"lucide-react\";\nimport { ActionMenu } from \"./menu.js\";\nimport { Button } from \"./primitives.js\";\n\nconst round = \"labui:rounded-full labui:border labui:border-border\";\n\nexport function AppMenu({\n name,\n logo,\n version,\n dark = false,\n onThemeChange,\n size = 100,\n align = \"start\",\n onSizeChange,\n onSizeReset,\n fullscreen = false,\n onFullscreenChange,\n}: {\n name: string;\n logo: ReactNode;\n version?: ReactNode;\n dark?: boolean;\n onThemeChange?: (dark: boolean) => void;\n size?: number;\n onSizeChange?: (size: number) => void;\n // onSizeReset is offered when the size button is right-clicked\n onSizeReset?: () => void;\n fullscreen?: boolean;\n onFullscreenChange?: (fullscreen: boolean) => void;\n align?: \"start\" | \"end\";\n}) {\n const trigger = useRef<HTMLButtonElement>(null);\n const sizePanel = useRef<HTMLDivElement>(null);\n const [anchor, setAnchor] = useState<number>();\n const level = Math.max(0, Math.min(100, size));\n const ThemeIcon = dark ? SunIcon : MoonIcon;\n const theme = dark ? \"dark \" : \"\";\n return (\n <Popover.Root\n onOpenChange={(open) => {\n if (open) setAnchor(trigger.current?.offsetHeight);\n }}\n >\n <Popover.Trigger asChild>\n <button\n ref={trigger}\n type=\"button\"\n aria-label={name}\n title={`${name} menu`}\n className=\"labui:group labui:relative labui:grid labui:size-[var(--lab-tab-height,2.75rem)] labui:shrink-0 labui:cursor-pointer labui:place-items-center labui:rounded-full labui:outline-none labui:focus-visible:outline-2 labui:focus-visible:outline-ring\"\n >\n <span className=\"labui:grid labui:size-[var(--lab-logo-size,1.5rem)] labui:transition-[filter,translate] labui:duration-150 labui:motion-safe:group-hover:-translate-y-0.5 labui:group-hover:drop-shadow-[0_3px_2px_#00000035] labui:group-active:translate-y-0 labui:dark:group-hover:drop-shadow-[0_3px_3px_#00000090]\">\n {logo}\n </span>\n <Popover.Anchor asChild>\n <span\n className=\"labui:absolute labui:inset-x-0 labui:top-0\"\n style={{ height: anchor ?? \"100%\" }}\n />\n </Popover.Anchor>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n align={align}\n sideOffset={4}\n collisionPadding={8}\n aria-label={`${name} menu`}\n onInteractOutside={(event) => {\n if (sizePanel.current?.contains(event.target as Node))\n event.preventDefault();\n }}\n className={\n theme +\n (align === \"start\"\n ? \"labui:ml-1 labui:sm:-ml-1 \"\n : \"labui:mr-1 labui:sm:-mr-1 \") +\n \"labui:z-50 labui:flex labui:w-max labui:max-h-[var(--radix-popover-content-available-height)] labui:flex-col labui:items-center labui:gap-3 labui:overflow-auto labui:rounded-lg labui:border labui:bg-popover labui:p-4 labui:text-center labui:text-popover-foreground labui:shadow-sm\"\n }\n >\n <div className=\"labui:flex labui:items-center labui:gap-2 labui:text-2xl\">\n <span className=\"labui:grid labui:size-6 labui:shrink-0\">\n {logo}\n </span>\n <span className=\"labui:font-display labui:font-bold labui:tracking-tight\">\n {name}\n </span>\n </div>\n {version != null && (\n <div className=\"labui:text-xs labui:text-muted-foreground\">\n <span className=\"labui:font-mono\">{version}</span>\n </div>\n )}\n <div className=\"labui:flex labui:items-center labui:justify-center labui:gap-2\">\n {onThemeChange && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className={round}\n aria-label=\"Toggle theme\"\n aria-pressed={dark}\n onClick={() => onThemeChange(!dark)}\n title=\"Toggle theme\"\n >\n <ThemeIcon className=\"labui:size-4\" />\n </Button>\n )}\n {onSizeChange && (\n <Popover.Root>\n <ActionMenu\n actions={\n onSizeReset\n ? [{ label: \"Reset\", onSelect: onSizeReset }]\n : []\n }\n >\n <Popover.Trigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className={round}\n aria-label=\"Workspace size\"\n title=\"Workspace size\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n className=\"labui:size-4 labui:[&_rect]:transition-[fill-opacity]\"\n >\n {[0, 1, 2].map((row) => (\n <rect\n key={row}\n x=\"4\"\n y={3 + row * 7}\n width=\"16\"\n height=\"4\"\n rx=\"1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"currentColor\"\n fillOpacity={Math.max(\n 0,\n Math.min(1, (level / 100) * 3 - (2 - row)),\n )}\n />\n ))}\n </svg>\n </Button>\n </Popover.Trigger>\n </ActionMenu>\n <Popover.Portal>\n <Popover.Content\n ref={sizePanel}\n side=\"bottom\"\n align=\"center\"\n sideOffset={8}\n collisionPadding={8}\n aria-label=\"Workspace size\"\n className={\n theme +\n \"labui:z-[60] labui:origin-(--radix-popover-content-transform-origin) labui:animate-pop labui:rounded-xl labui:border labui:bg-popover labui:p-2 labui:shadow-md labui:data-[state=closed]:animate-[labui-pop_120ms_ease-in_reverse]\"\n }\n >\n <div className=\"labui:relative labui:h-28 labui:w-7 labui:overflow-hidden labui:rounded-full labui:border labui:bg-secondary labui:shadow-inner labui:has-focus-visible:outline-2 labui:has-focus-visible:outline-offset-2 labui:has-focus-visible:outline-ring\">\n <div\n className=\"labui:pointer-events-none labui:absolute labui:inset-x-0 labui:bottom-0 labui:bg-white labui:shadow-[0_-1px_4px_#00000014] labui:[transition:height_100ms_ease-out] labui:forced-colors:hidden\"\n style={{ height: `${level}%` }}\n />\n <input\n type=\"range\"\n min={0}\n max={100}\n step=\"any\"\n value={level}\n aria-label=\"Workspace size\"\n aria-orientation=\"vertical\"\n aria-valuetext={`${Math.round(level)}%`}\n className=\"labui:range-overlay\"\n onChange={(event) =>\n onSizeChange(event.currentTarget.valueAsNumber)\n }\n />\n </div>\n <Popover.Arrow asChild width={16} height={8}>\n <svg\n viewBox=\"0 0 16 8\"\n className=\"labui:fill-popover labui:stroke-border\"\n >\n <path d=\"M0 0 C3 0 5 6 7 7 Q8 8 9 7 C11 6 13 0 16 0\" />\n </svg>\n </Popover.Arrow>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )}\n {onFullscreenChange && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className={round}\n aria-label=\"Full screen\"\n aria-pressed={fullscreen}\n title={fullscreen ? \"Exit full screen\" : \"Full screen\"}\n onClick={() => onFullscreenChange(!fullscreen)}\n >\n {fullscreen ? (\n <MinimizeIcon className=\"labui:size-4\" />\n ) : (\n <MaximizeIcon className=\"labui:size-4\" />\n )}\n </Button>\n )}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n", "import { useId, type ReactNode } from \"react\";\nimport { PlusIcon } from \"lucide-react\";\nimport {\n Button,\n Field,\n FieldLabel,\n Input,\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n} from \"./primitives.js\";\n\ntype TextProps = {\n label: string;\n value: string;\n onChange: (value: string) => void;\n} & Omit<React.ComponentProps<typeof Input>, \"value\" | \"onChange\">;\n\nexport function TextField({ label, value, onChange, ...props }: TextProps) {\n const id = useId();\n return (\n <Field data-invalid={props[\"aria-invalid\"] || undefined}>\n <FieldLabel htmlFor={id}>{label}</FieldLabel>\n <Input\n id={id}\n autoComplete=\"off\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n {...props}\n />\n </Field>\n );\n}\n\nexport function SelectField({\n label,\n value,\n onChange,\n options,\n children,\n}: Pick<TextProps, \"label\" | \"value\" | \"onChange\"> & {\n options: { id: string; name: string; disabled?: boolean }[];\n children?: ReactNode;\n}) {\n const id = useId();\n return (\n <Field>\n <FieldLabel htmlFor={id}>{label}</FieldLabel>\n <div className=\"labui:flex labui:items-center labui:gap-2\">\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger id={id} className=\"labui:flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map((o) => (\n <SelectItem key={o.id} value={o.id} disabled={o.disabled}>\n {o.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {children}\n </div>\n </Field>\n );\n}\n\nexport function AddButton({\n children,\n onClick,\n}: {\n children: ReactNode;\n onClick: () => void;\n}) {\n return (\n <Button type=\"button\" variant=\"secondary\" onClick={onClick}>\n <PlusIcon />\n {children}\n </Button>\n );\n}\n", "import * as React from \"react\";\nimport { type ReactNode } from \"react\";\nimport { ArrowDownIcon, ArrowUpDownIcon, ArrowUpIcon } from \"lucide-react\";\nconst show = (value: unknown) => (value == null ? \"\" : String(value));\nimport { Button, cn, Skeleton } from \"./primitives.js\";\n\nexport type TableColumn<T> = {\n id: string;\n header: string;\n headerDetail?: string;\n rowHeader?: boolean;\n numeric?: boolean;\n cell: (row: T) => React.ReactNode;\n sortValue: (row: T) => string | number | null | undefined;\n};\n\ntype Sort = { column: string; direction: \"asc\" | \"desc\" };\n\nconst cellClass = \"labui:px-3 labui:py-(--labui-row-py) labui:align-middle\";\n\nexport function Table<T>({\n label,\n columns,\n rows,\n rowKey,\n loading,\n empty = \"No rows to display.\",\n defaultSort = null,\n onRowActivate,\n rowLabel,\n}: {\n label: string;\n columns: TableColumn<T>[];\n rows: readonly T[];\n rowKey: (row: T, index: number) => string;\n loading?: boolean;\n empty?: React.ReactNode;\n defaultSort?: Sort | null;\n onRowActivate?: (row: T) => void;\n rowLabel?: (row: T) => string;\n}) {\n const [sort, setSort] = React.useState(defaultSort);\n const sortBy = columns.find((c) => c.id === sort?.column)?.sortValue;\n const sorted =\n sort && sortBy\n ? [...rows].sort((x, y) => {\n const a = sortBy(x);\n const b = sortBy(y);\n if (a == null || b == null)\n return Number(a == null) - Number(b == null);\n const order =\n typeof a === \"number\" && typeof b === \"number\"\n ? a - b\n : String(a).localeCompare(String(b), undefined, {\n numeric: true,\n });\n return sort.direction === \"asc\" ? order : -order;\n })\n : rows;\n\n function toggle(column: TableColumn<T>) {\n setSort(\n sort?.column === column.id\n ? {\n column: column.id,\n direction: sort.direction === \"asc\" ? \"desc\" : \"asc\",\n }\n : { column: column.id, direction: column.numeric ? \"desc\" : \"asc\" },\n );\n }\n\n return (\n <div className=\"labui:min-w-0 labui:overflow-auto labui:rounded-lg labui:border\">\n <table\n aria-label={label}\n aria-busy={loading || undefined}\n className=\"labui:w-full labui:text-xs labui:tabular-nums\"\n >\n <thead>\n <tr>\n {columns.map((column) => {\n const direction =\n sort?.column === column.id ? sort.direction : null;\n const Marker =\n direction === \"asc\"\n ? ArrowUpIcon\n : direction === \"desc\"\n ? ArrowDownIcon\n : ArrowUpDownIcon;\n return (\n <th\n key={column.id}\n scope=\"col\"\n aria-sort={\n direction\n ? direction === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : undefined\n }\n className={cn(\n \"labui:sticky labui:top-0 labui:z-10 labui:h-8 labui:bg-card labui:px-3 labui:text-left labui:font-medium labui:whitespace-nowrap labui:text-muted-foreground labui:shadow-[inset_0_-1px_var(--labui-border)]\",\n column.numeric && \"labui:text-right\",\n )}\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"labui:-mx-2 labui:h-7 labui:gap-1 labui:px-2 labui:text-xs labui:font-medium labui:hover:bg-transparent\"\n disabled={loading}\n onClick={() => toggle(column)}\n >\n {column.header}\n {column.headerDetail && (\n <span className=\"labui:text-[10px] labui:font-normal\">\n {column.headerDetail}\n </span>\n )}\n <Marker\n aria-hidden=\"true\"\n className={cn(\n \"labui:size-3.5\",\n !direction && \"labui:opacity-40\",\n )}\n />\n </Button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"labui:[&_tr:last-child]:border-0\">\n {loading ? (\n Array.from({ length: 6 }, (_, index) => (\n <tr key={index} aria-hidden=\"true\" className=\"labui:border-b\">\n {columns.map((column, at) => (\n <td key={column.id} className={cellClass}>\n <Skeleton\n className={cn(\n \"labui:h-3\",\n at % 2 ? \"labui:w-1/2\" : \"labui:w-3/4\",\n )}\n />\n </td>\n ))}\n </tr>\n ))\n ) : sorted.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n className=\"labui:p-4 labui:text-muted-foreground\"\n >\n {empty}\n </td>\n </tr>\n ) : (\n sorted.map((row, index) => (\n <tr\n key={rowKey(row, index)}\n className={cn(\n \"labui:border-b labui:transition-colors labui:hover:bg-muted/50\",\n onRowActivate && \"labui:cursor-pointer\",\n )}\n onClick={(event) => {\n if (!(event.target as Element).closest(\"a, button\"))\n onRowActivate?.(row);\n }}\n >\n {columns.map((column, at) => {\n const Cell = column.rowHeader ? \"th\" : \"td\";\n return (\n <Cell\n key={column.id}\n scope={column.rowHeader ? \"row\" : undefined}\n className={cn(\n cellClass,\n column.rowHeader && \"labui:text-left labui:font-medium\",\n column.numeric && \"labui:text-right\",\n )}\n >\n {at === 0 && onRowActivate ? (\n <button\n type=\"button\"\n aria-label={rowLabel?.(row)}\n className=\"labui:-m-1 labui:min-h-6 labui:rounded labui:p-1 labui:text-left labui:whitespace-nowrap labui:focus-visible:outline-2 labui:focus-visible:outline-ring\"\n onClick={() => onRowActivate(row)}\n >\n {column.cell(row)}\n </button>\n ) : (\n column.cell(row)\n )}\n </Cell>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport function column<T>(\n id: string,\n header: string,\n value: (row: T) => string | number | null | undefined,\n cell: (row: T) => ReactNode = (row) => show(value(row)),\n): TableColumn<T> {\n return { id, header, sortValue: value, cell };\n}\n\nexport const mono = <T,>(\n id: string,\n header: string,\n value: (row: T) => unknown,\n) =>\n column<T>(\n id,\n header,\n (row) => show(value(row)),\n (row) => <span className=\"labui:font-mono\">{show(value(row))}</span>,\n );\n\nexport const num = <T,>(\n id: string,\n header: string,\n value: (row: T) => number,\n digits = 0,\n headerDetail?: string,\n): TableColumn<T> => ({\n ...column(id, header, value, (row) =>\n value(row).toLocaleString(\"en-US\", {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n }),\n ),\n numeric: true,\n headerDetail,\n});\n"],
5
- "mappings": "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",
6
- "names": ["DialogContent", "DialogHeader", "DialogFooter", "DialogTitle", "DialogDescription", "jsx", "jsxs", "useState", "jsx", "jsxs", "useState", "jsx", "jsxs", "React", "jsx", "jsxs", "column"]
3
+ "sources": ["../alert.tsx", "../app-menu.tsx", "../menu.tsx", "../overlay.ts", "../tab-state.ts", "../avatar.tsx", "../badge.tsx", "../breadcrumb.tsx", "../browser-layout.tsx", "../card.tsx", "../chart-frame.tsx", "../checkbox.tsx", "../command.tsx", "../dialog.tsx", "../confirm-dialog.tsx", "../copy-button.tsx", "../input.tsx", "../spinner.tsx", "../discard-dialog.tsx", "../email-thread.tsx", "../empty.tsx", "../field.tsx", "../label.tsx", "../separator.tsx", "../file-input.tsx", "../flame-graph.tsx", "../flame-graph-model.ts", "../use-chart-width.ts", "../form-fields.tsx", "../select.tsx", "../histogram.tsx", "../input-group.tsx", "../textarea.tsx", "../kbd.tsx", "../native-select.tsx", "../nav-tabs.tsx", "../page.tsx", "../rail.tsx", "../sidebar.tsx", "../sheet.tsx", "../skeleton.tsx", "../tooltip.tsx", "../use-mobile.ts", "../search-input.tsx", "../settings.tsx", "../side-panel.tsx", "../stat.tsx", "../steps.tsx", "../switch.tsx", "../table.tsx", "../table-layout.ts", "../table-model.ts", "../table-screen.tsx", "../tabs.tsx", "../theme.ts", "../time-series-chart.tsx", "../time-series-model.ts", "../timing-tracks.tsx", "../toggle.tsx", "../topbar.tsx"],
4
+ "sourcesContent": ["import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst alertVariants = {\n default: \"labui:bg-card labui:text-card-foreground\",\n destructive:\n \"labui:border-destructive/40 labui:bg-card labui:text-destructive labui:*:data-[slot=alert-description]:text-destructive/90 labui:[&>svg]:text-current\",\n warning:\n \"labui:border-warning/40 labui:bg-card labui:text-foreground labui:[&>svg]:text-warning\",\n success:\n \"labui:border-success/40 labui:bg-card labui:text-foreground labui:[&>svg]:text-success\",\n};\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & {\n variant?: keyof typeof alertVariants | null;\n }\n>(function Alert({ className, variant = \"default\", ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(\n \"labui:relative labui:grid labui:w-full labui:grid-cols-[0_1fr] labui:items-start labui:gap-y-0.5 labui:rounded-lg labui:border labui:px-4 labui:py-3 labui:text-sm labui:has-[>svg]:grid-cols-[--spacing(4)_1fr] labui:has-[>svg]:gap-x-3 labui:[&>svg]:size-4 labui:[&>svg]:translate-y-0.5 labui:[&>svg]:text-current\",\n variant && alertVariants[variant],\n className,\n )}\n {...props}\n />\n );\n});\n\nconst AlertTitle = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function AlertTitle({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"alert-title\"\n className={cn(\n \"labui:col-start-2 labui:line-clamp-1 labui:min-h-4 labui:font-medium labui:tracking-tight\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst AlertDescription = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function AlertDescription({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"alert-description\"\n className={cn(\n \"labui:col-start-2 labui:grid labui:justify-items-start labui:gap-1 labui:text-sm labui:text-muted-foreground labui:[&_p]:leading-relaxed\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Alert, AlertTitle, AlertDescription };\n", "import * as Popover from \"@radix-ui/react-popover\";\nimport { useRef, useState, type ReactNode } from \"react\";\nimport { MaximizeIcon, MinimizeIcon, MoonIcon, SunIcon } from \"lucide-react\";\nimport { ActionMenu } from \"./menu.js\";\nimport { Button } from \"./button.js\";\n\nconst round = \"labui:rounded-full labui:border labui:border-border\";\n\nexport function AppMenu({\n name,\n logo,\n version,\n dark = false,\n onThemeChange,\n size = 100,\n align = \"start\",\n onSizeChange,\n onSizeReset,\n fullscreen = false,\n onFullscreenChange,\n children,\n}: {\n name: string;\n logo: ReactNode;\n version?: ReactNode;\n dark?: boolean;\n onThemeChange?: (dark: boolean) => void;\n size?: number;\n onSizeChange?: (size: number) => void;\n // onSizeReset is offered when the size button is right-clicked\n onSizeReset?: () => void;\n fullscreen?: boolean;\n onFullscreenChange?: (fullscreen: boolean) => void;\n align?: \"start\" | \"end\";\n // children hold the app's own items, grouped with AppMenuSection\n children?: ReactNode;\n}) {\n const trigger = useRef<HTMLButtonElement>(null);\n const sizePanel = useRef<HTMLDivElement>(null);\n const [anchor, setAnchor] = useState<number>();\n const level = Math.max(0, Math.min(100, size));\n const ThemeIcon = dark ? SunIcon : MoonIcon;\n const theme = dark ? \"dark \" : \"\";\n return (\n <Popover.Root\n onOpenChange={(open) => {\n if (open) setAnchor(trigger.current?.offsetHeight);\n }}\n >\n <Popover.Trigger asChild>\n <button\n ref={trigger}\n type=\"button\"\n aria-label={name}\n title={`${name} menu`}\n className=\"labui:group labui:relative labui:grid labui:size-[var(--lab-tab-height,2.75rem)] labui:shrink-0 labui:cursor-pointer labui:place-items-center labui:rounded-full labui:outline-none labui:focus-visible:outline-2 labui:focus-visible:outline-ring\"\n >\n <span className=\"labui:grid labui:size-[var(--lab-logo-size,1.5rem)] labui:transition-[filter,translate] labui:duration-150 labui:motion-safe:group-hover:-translate-y-0.5 labui:group-hover:drop-shadow-[0_3px_2px_#00000035] labui:group-active:translate-y-0 labui:dark:group-hover:drop-shadow-[0_3px_3px_#00000090]\">\n {logo}\n </span>\n <Popover.Anchor asChild>\n <span\n className=\"labui:absolute labui:inset-x-0 labui:top-0\"\n style={{ height: anchor ?? \"100%\" }}\n />\n </Popover.Anchor>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n align={align}\n sideOffset={4}\n collisionPadding={8}\n aria-label={`${name} menu`}\n onInteractOutside={(event) => {\n if (sizePanel.current?.contains(event.target as Node))\n event.preventDefault();\n }}\n className={\n theme +\n (align === \"start\"\n ? \"labui:ml-1 labui:sm:-ml-1 \"\n : \"labui:mr-1 labui:sm:-mr-1 \") +\n \"labui:z-50 labui:flex labui:w-max labui:max-h-[var(--radix-popover-content-available-height)] labui:flex-col labui:items-center labui:gap-3 labui:overflow-auto labui:rounded-lg labui:border labui:bg-popover labui:p-4 labui:text-center labui:text-popover-foreground labui:shadow-sm\"\n }\n >\n <div className=\"labui:flex labui:items-center labui:gap-2 labui:text-2xl\">\n <span className=\"labui:grid labui:size-6 labui:shrink-0\">\n {logo}\n </span>\n <span className=\"labui:font-display labui:font-bold labui:tracking-tight\">\n {name}\n </span>\n </div>\n {version != null && (\n <div className=\"labui:text-xs labui:text-muted-foreground\">\n <span className=\"labui:font-mono\">{version}</span>\n </div>\n )}\n <div className=\"labui:flex labui:items-center labui:justify-center labui:gap-2\">\n {onThemeChange && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className={round}\n aria-label=\"Toggle theme\"\n aria-pressed={dark}\n onClick={() => onThemeChange(!dark)}\n title=\"Toggle theme\"\n >\n <ThemeIcon className=\"labui:size-4\" />\n </Button>\n )}\n {onSizeChange && (\n <Popover.Root>\n <ActionMenu\n actions={\n onSizeReset\n ? [{ label: \"Reset\", onSelect: onSizeReset }]\n : []\n }\n >\n <Popover.Trigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className={round}\n aria-label=\"Workspace size\"\n title=\"Workspace size\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n className=\"labui:size-4 labui:[&_rect]:transition-[fill-opacity]\"\n >\n {[0, 1, 2].map((row) => (\n <rect\n key={row}\n x=\"4\"\n y={3 + row * 7}\n width=\"16\"\n height=\"4\"\n rx=\"1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"currentColor\"\n fillOpacity={Math.max(\n 0,\n Math.min(1, (level / 100) * 3 - (2 - row)),\n )}\n />\n ))}\n </svg>\n </Button>\n </Popover.Trigger>\n </ActionMenu>\n <Popover.Portal>\n <Popover.Content\n ref={sizePanel}\n side=\"bottom\"\n align=\"center\"\n sideOffset={8}\n collisionPadding={8}\n aria-label=\"Workspace size\"\n className={\n theme +\n \"labui:z-[60] labui:origin-(--radix-popover-content-transform-origin) labui:animate-pop labui:rounded-xl labui:border labui:bg-popover labui:p-2 labui:shadow-md labui:data-[state=closed]:animate-[labui-pop_120ms_ease-in_reverse]\"\n }\n >\n <div className=\"labui:relative labui:h-28 labui:w-7 labui:overflow-hidden labui:rounded-full labui:border labui:bg-secondary labui:shadow-inner labui:has-focus-visible:outline-2 labui:has-focus-visible:outline-offset-2 labui:has-focus-visible:outline-ring\">\n <div\n className=\"labui:pointer-events-none labui:absolute labui:inset-x-0 labui:bottom-0 labui:bg-white labui:shadow-[0_-1px_4px_#00000014] labui:[transition:height_100ms_ease-out] labui:forced-colors:hidden\"\n style={{ height: `${level}%` }}\n />\n <input\n type=\"range\"\n min={0}\n max={100}\n step=\"any\"\n value={level}\n aria-label=\"Workspace size\"\n aria-orientation=\"vertical\"\n aria-valuetext={`${Math.round(level)}%`}\n className=\"labui:range-overlay\"\n onChange={(event) =>\n onSizeChange(event.currentTarget.valueAsNumber)\n }\n />\n </div>\n <Popover.Arrow asChild width={16} height={8}>\n <svg\n viewBox=\"0 0 16 8\"\n className=\"labui:fill-popover labui:stroke-border\"\n >\n <path d=\"M0 0 C3 0 5 6 7 7 Q8 8 9 7 C11 6 13 0 16 0\" />\n </svg>\n </Popover.Arrow>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )}\n {onFullscreenChange && (\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n className={round}\n aria-label=\"Full screen\"\n aria-pressed={fullscreen}\n title={fullscreen ? \"Exit full screen\" : \"Full screen\"}\n onClick={() => onFullscreenChange(!fullscreen)}\n >\n {fullscreen ? (\n <MinimizeIcon className=\"labui:size-4\" />\n ) : (\n <MaximizeIcon className=\"labui:size-4\" />\n )}\n </Button>\n )}\n </div>\n {children}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n\nexport function AppMenuSection({\n title,\n children,\n}: {\n title?: string;\n children: ReactNode;\n}) {\n return (\n <div\n data-slot=\"app-menu-section\"\n className=\"labui:flex labui:w-full labui:flex-col labui:gap-1 labui:border-t labui:pt-3 labui:text-left labui:text-sm\"\n >\n {title && (\n <p className=\"labui:px-1 labui:text-xs labui:font-medium labui:text-muted-foreground\">\n {title}\n </p>\n )}\n {children}\n </div>\n );\n}\n", "import * as React from \"react\";\nimport * as ContextMenu from \"@radix-ui/react-context-menu\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\nimport { cn } from \"./classes.js\";\nimport { useOverlayOpen } from \"./overlay.js\";\n\nexport type MenuAction =\n | {\n label: string;\n onSelect: () => void;\n disabled?: boolean;\n checked?: boolean;\n }\n | { label: string; items: MenuAction[] }\n | null;\n\nexport type MenuOption = {\n id: string;\n label: string;\n group?: string;\n icon?: React.ReactNode;\n};\n\nconst panel =\n \"labui:z-50 labui:rounded-lg labui:border labui:border-border labui:bg-popover labui:p-1 labui:font-sans labui:text-sm labui:leading-normal labui:text-popover-foreground labui:shadow-sm\";\nconst scrollingPanel =\n panel +\n \" labui:min-w-40 labui:max-h-(--radix-dropdown-menu-content-available-height) labui:overflow-auto\";\nconst menuItem =\n \"labui:relative labui:flex labui:min-h-9 labui:cursor-default labui:items-center labui:gap-3 labui:rounded-md labui:px-3 labui:text-sm labui:outline-none labui:data-highlighted:bg-accent labui:data-disabled:opacity-50 labui:[@media(pointer:coarse)]:min-h-11 labui:[&_svg]:pointer-events-none labui:[&_svg]:shrink-0 labui:[&_svg:not([class*='size-'])]:size-4\";\nconst subTrigger =\n menuItem + \" labui:justify-between labui:data-[state=open]:bg-accent\";\nconst indicator = \"labui:grid labui:size-4 labui:place-items-center\";\nconst separator = \"labui:my-1 labui:border-t labui:border-border\";\n\nfunction DropdownMenu({\n open,\n defaultOpen,\n onOpenChange,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n const [current, change] = useOverlayOpen(open, onOpenChange, defaultOpen);\n return (\n <DropdownMenuPrimitive.Root\n modal={false}\n open={current}\n onOpenChange={change}\n {...props}\n />\n );\n}\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n data-slot=\"dropdown-menu-content\"\n align=\"start\"\n sideOffset={4}\n collisionPadding={8}\n className={cn(scrollingPanel, className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(function DropdownMenuSubTrigger(\n { className, inset, children, ...props },\n ref,\n) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n data-slot=\"dropdown-menu-sub-trigger\"\n className={cn(subTrigger, inset && \"labui:pl-10\", className)}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"labui:ml-auto labui:size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n});\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(function DropdownMenuSubContent({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n data-slot=\"dropdown-menu-sub-content\"\n sideOffset={4}\n collisionPadding={8}\n className={cn(scrollingPanel, className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\n\nconst itemVariants = {\n default: \"\",\n destructive:\n \"labui:text-destructive labui:data-highlighted:bg-destructive/10 labui:data-highlighted:text-destructive\",\n};\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: keyof typeof itemVariants;\n }\n>(function DropdownMenuItem(\n { className, inset, variant = \"default\", ...props },\n ref,\n) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n data-slot=\"dropdown-menu-item\"\n data-variant={variant}\n className={cn(\n menuItem,\n itemVariants[variant],\n inset && \"labui:pl-10\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(function DropdownMenuCheckboxItem({ className, children, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(menuItem, className)}\n {...props}\n >\n <span className={indicator}>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"labui:size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n});\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(function DropdownMenuRadioItem({ className, children, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(menuItem, className)}\n {...props}\n >\n <span className={indicator}>\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"labui:size-2 labui:fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n});\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(function DropdownMenuLabel({ className, inset, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n data-slot=\"dropdown-menu-label\"\n className={cn(\n \"labui:px-3 labui:py-1.5 labui:text-xs labui:font-medium labui:text-muted-foreground\",\n inset && \"labui:pl-10\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n data-slot=\"dropdown-menu-separator\"\n className={cn(separator, className)}\n {...props}\n />\n );\n});\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"labui:ml-auto labui:text-xs labui:tracking-widest labui:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function MenuContent({\n children,\n className = \"labui:w-56\",\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <DropdownMenuContent className={className}>{children}</DropdownMenuContent>\n );\n}\n\nfunction contextItem(action: MenuAction, index: number): React.ReactNode {\n if (!action)\n return <ContextMenu.Separator key={index} className={separator} />;\n if (\"items\" in action)\n return (\n <ContextMenu.Sub key={action.label}>\n <ContextMenu.SubTrigger className={subTrigger}>\n {action.label}\n <ChevronRightIcon className=\"labui:size-4\" />\n </ContextMenu.SubTrigger>\n <ContextMenu.Portal>\n <ContextMenu.SubContent\n className={cn(panel, \"labui:min-w-40\")}\n sideOffset={4}\n collisionPadding={8}\n >\n {action.items.map(contextItem)}\n </ContextMenu.SubContent>\n </ContextMenu.Portal>\n </ContextMenu.Sub>\n );\n if (action.checked !== undefined)\n return (\n <ContextMenu.CheckboxItem\n key={action.label}\n className={menuItem}\n checked={action.checked}\n disabled={action.disabled}\n onSelect={action.onSelect}\n >\n <span className={indicator}>\n <ContextMenu.ItemIndicator>\n <CheckIcon className=\"labui:size-4\" />\n </ContextMenu.ItemIndicator>\n </span>\n {action.label}\n </ContextMenu.CheckboxItem>\n );\n return (\n <ContextMenu.Item\n key={action.label}\n className={menuItem}\n disabled={action.disabled}\n onSelect={action.onSelect}\n >\n {action.label}\n </ContextMenu.Item>\n );\n}\n\nexport function ActionMenu({\n children,\n actions,\n onCloseAutoFocus,\n}: {\n children: React.ReactElement;\n actions: MenuAction[];\n onCloseAutoFocus?: (event: Event) => void;\n}) {\n const [open, setOpen] = useOverlayOpen(undefined, undefined);\n return (\n <ContextMenu.Root modal={false} onOpenChange={setOpen}>\n <ContextMenu.Trigger asChild>{children}</ContextMenu.Trigger>\n {open && (\n <ContextMenu.Portal>\n <ContextMenu.Content\n className={cn(panel, \"labui:min-w-44\")}\n onCloseAutoFocus={onCloseAutoFocus}\n >\n {actions.map(contextItem)}\n </ContextMenu.Content>\n </ContextMenu.Portal>\n )}\n </ContextMenu.Root>\n );\n}\n\nexport function OptionMenu({\n trigger,\n options,\n onSelect,\n open,\n onOpenChange,\n onCloseAutoFocus,\n}: {\n trigger: React.ReactElement;\n options: readonly MenuOption[];\n onSelect: (id: string) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onCloseAutoFocus?: (event: Event) => void;\n}) {\n const groups = [\n ...new Set(\n options.flatMap((option) => (option.group ? [option.group] : [])),\n ),\n ];\n const item = (option: MenuOption) => (\n <DropdownMenuItem key={option.id} onSelect={() => onSelect(option.id)}>\n {option.icon}\n {option.label}\n </DropdownMenuItem>\n );\n return (\n <DropdownMenu open={open} onOpenChange={onOpenChange}>\n <DropdownMenuTrigger asChild>{trigger}</DropdownMenuTrigger>\n <DropdownMenuContent onCloseAutoFocus={onCloseAutoFocus}>\n {options.filter((option) => !option.group).map(item)}\n {groups.map((group) => (\n <DropdownMenuSub key={group}>\n <DropdownMenuSubTrigger>{group}</DropdownMenuSubTrigger>\n <DropdownMenuSubContent>\n {options.filter((option) => option.group === group).map(item)}\n </DropdownMenuSubContent>\n </DropdownMenuSub>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n", "import * as React from \"react\";\nimport { useTabActive } from \"./tab-state.js\";\n\n// Overlays close when their tab leaves the front and stay closed when it returns\nexport function useOverlayOpen(\n open: boolean | undefined,\n onOpenChange: ((open: boolean) => void) | undefined,\n defaultOpen = false,\n): [boolean, (open: boolean) => void] {\n const [own, setOwn] = React.useState(defaultOpen);\n const current = open ?? own;\n const active = useTabActive();\n const change = React.useCallback(\n (next: boolean) => {\n setOwn(next);\n onOpenChange?.(next);\n },\n [onOpenChange],\n );\n React.useEffect(() => {\n if (!active && current) change(false);\n }, [active, current, change]);\n return [current, change];\n}\n", "import * as React from \"react\";\n\nexport type TabState = { active: boolean; visible: boolean };\n\n// Both packages read one context, found by name so neither has to import the other\nconst key = Symbol.for(\"labpane.tab-state\");\nconst registry = globalThis as unknown as Record<\n symbol,\n React.Context<TabState> | undefined\n>;\nexport const TabStateContext = (registry[key] ??= React.createContext<TabState>(\n {\n active: true,\n visible: true,\n },\n));\n\nexport function useTabActive() {\n return React.useContext(TabStateContext).active;\n}\n\nexport function useTabVisible() {\n return React.useContext(TabStateContext).visible;\n}\n", "import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cn } from \"./classes.js\";\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\";\n }\n>(function Avatar({ className, size = \"default\", ...props }, ref) {\n return (\n <AvatarPrimitive.Root\n ref={ref}\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"labui:group/avatar labui:relative labui:flex labui:size-8 labui:shrink-0 labui:overflow-hidden labui:rounded-full labui:select-none labui:data-[size=lg]:size-10 labui:data-[size=sm]:size-6\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(function AvatarImage({ className, ...props }, ref) {\n return (\n <AvatarPrimitive.Image\n ref={ref}\n data-slot=\"avatar-image\"\n className={cn(\"labui:aspect-square labui:size-full\", className)}\n {...props}\n />\n );\n});\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(function AvatarFallback({ className, ...props }, ref) {\n return (\n <AvatarPrimitive.Fallback\n ref={ref}\n data-slot=\"avatar-fallback\"\n className={cn(\n \"labui:flex labui:size-full labui:items-center labui:justify-center labui:rounded-full labui:bg-muted labui:text-sm labui:text-muted-foreground labui:group-data-[size=sm]/avatar:text-xs\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst AvatarBadge = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(function AvatarBadge({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n data-slot=\"avatar-badge\"\n className={cn(\n \"labui:absolute labui:right-0 labui:bottom-0 labui:z-10 labui:inline-flex labui:items-center labui:justify-center labui:rounded-full labui:bg-primary labui:text-primary-foreground labui:ring-2 labui:ring-background labui:select-none\",\n \"labui:group-data-[size=sm]/avatar:size-2 labui:group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"labui:group-data-[size=default]/avatar:size-2.5 labui:group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"labui:group-data-[size=lg]/avatar:size-3 labui:group-data-[size=lg]/avatar:[&>svg]:size-2\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst AvatarGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function AvatarGroup({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"avatar-group\"\n className={cn(\n \"labui:group/avatar-group labui:flex labui:-space-x-2 labui:*:data-[slot=avatar]:ring-2 labui:*:data-[slot=avatar]:ring-background\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst AvatarGroupCount = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function AvatarGroupCount({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"avatar-group-count\"\n className={cn(\n \"labui:relative labui:flex labui:size-8 labui:shrink-0 labui:items-center labui:justify-center labui:rounded-full labui:bg-muted labui:text-sm labui:text-muted-foreground labui:ring-2 labui:ring-background labui:group-has-data-[size=lg]/avatar-group:size-10 labui:group-has-data-[size=sm]/avatar-group:size-6 labui:[&>svg]:size-4 labui:group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 labui:group-has-data-[size=sm]/avatar-group:[&>svg]:size-3\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n};\n", "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cn, focusRing, invalidRing } from \"./classes.js\";\n\nconst badgeVariants = {\n default:\n \"labui:bg-primary labui:text-primary-foreground labui:[a&]:hover:bg-primary/90\",\n secondary:\n \"labui:bg-secondary labui:text-secondary-foreground labui:[a&]:hover:bg-secondary/90\",\n destructive:\n \"labui:border-destructive/30 labui:bg-destructive/15 labui:text-destructive labui:focus-visible:ring-destructive/20 labui:[a&]:hover:bg-destructive/25\",\n success:\n \"labui:border-success/30 labui:bg-success/15 labui:text-success labui:[a&]:hover:bg-success/25\",\n warning:\n \"labui:border-warning/30 labui:bg-warning/15 labui:text-warning labui:[a&]:hover:bg-warning/25\",\n info: \"labui:border-info/30 labui:bg-info/15 labui:text-info labui:[a&]:hover:bg-info/25\",\n outline:\n \"labui:border-border labui:text-foreground labui:[a&]:hover:bg-accent labui:[a&]:hover:text-accent-foreground\",\n ghost: \"labui:[a&]:hover:bg-accent labui:[a&]:hover:text-accent-foreground\",\n link: \"labui:text-link labui:underline-offset-4 labui:[a&]:hover:underline\",\n};\n\nconst Badge = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\"> & {\n variant?: keyof typeof badgeVariants | null;\n asChild?: boolean;\n }\n>(function Badge(\n { className, variant = \"default\", asChild = false, ...props },\n ref,\n) {\n const Comp = asChild ? Slot : \"span\";\n return (\n <Comp\n ref={ref}\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(\n \"labui:inline-flex labui:w-fit labui:shrink-0 labui:items-center labui:justify-center labui:gap-1 labui:overflow-hidden\",\n \"labui:rounded-full labui:border labui:border-transparent labui:px-2 labui:py-0.5\",\n \"labui:text-xs labui:font-medium labui:whitespace-nowrap labui:transition-[color,box-shadow]\",\n focusRing,\n invalidRing,\n \"labui:[&>svg]:pointer-events-none labui:[&>svg]:size-3\",\n variant && badgeVariants[variant],\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Badge };\n", "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { ChevronRightIcon, EllipsisIcon } from \"lucide-react\";\nimport { cn } from \"./classes.js\";\n\nconst Breadcrumb = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\">\n>(function Breadcrumb(props, ref) {\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n );\n});\n\nconst BreadcrumbList = React.forwardRef<\n HTMLOListElement,\n React.ComponentPropsWithoutRef<\"ol\">\n>(function BreadcrumbList({ className, ...props }, ref) {\n return (\n <ol\n ref={ref}\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"labui:flex labui:list-none labui:flex-wrap labui:items-center labui:gap-1.5 labui:text-sm labui:break-words labui:text-muted-foreground labui:sm:gap-2.5\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst BreadcrumbItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(function BreadcrumbItem({ className, ...props }, ref) {\n return (\n <li\n ref={ref}\n data-slot=\"breadcrumb-item\"\n className={cn(\n \"labui:inline-flex labui:items-center labui:gap-1.5\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst BreadcrumbLink = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & { asChild?: boolean }\n>(function BreadcrumbLink({ asChild, className, ...props }, ref) {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n ref={ref}\n data-slot=\"breadcrumb-link\"\n className={cn(\n \"labui:transition-colors labui:hover:text-foreground\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst BreadcrumbPage = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(function BreadcrumbPage({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n data-slot=\"breadcrumb-page\"\n aria-current=\"page\"\n className={cn(\"labui:font-normal labui:text-foreground\", className)}\n {...props}\n />\n );\n});\n\nconst BreadcrumbSeparator = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(function BreadcrumbSeparator({ children, className, ...props }, ref) {\n return (\n <li\n ref={ref}\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"labui:[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRightIcon />}\n </li>\n );\n});\n\nconst BreadcrumbEllipsis = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(function BreadcrumbEllipsis({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\n \"labui:flex labui:size-9 labui:items-center labui:justify-center\",\n className,\n )}\n {...props}\n >\n <EllipsisIcon className=\"labui:size-4\" />\n <span className=\"labui:sr-only\">More</span>\n </span>\n );\n});\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n", "import * as React from \"react\";\nimport { PanelLeftIcon } from \"lucide-react\";\nimport { Button } from \"./button.js\";\nimport { cn } from \"./classes.js\";\n\ntype BrowserLayoutState = {\n navOpen: boolean;\n setNavOpen: (open: boolean) => void;\n};\n\nconst BrowserLayoutContext = React.createContext<BrowserLayoutState>({\n navOpen: true,\n setNavOpen: () => {},\n});\n\nexport function useBrowserLayout() {\n return React.useContext(BrowserLayoutContext);\n}\n\n// Below md only the pane the route is about shows; from md up both show and the nav can collapse\nconst BrowserLayout = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & {\n view: \"nav\" | \"detail\";\n navOpen?: boolean;\n defaultNavOpen?: boolean;\n onNavOpenChange?: (open: boolean) => void;\n }\n>(function BrowserLayout(\n {\n view,\n navOpen,\n defaultNavOpen = true,\n onNavOpenChange,\n className,\n children,\n ...props\n },\n ref,\n) {\n const [own, setOwn] = React.useState(defaultNavOpen);\n const open = navOpen ?? own;\n const state = React.useMemo<BrowserLayoutState>(\n () => ({\n navOpen: open,\n setNavOpen: (next) => {\n setOwn(next);\n onNavOpenChange?.(next);\n },\n }),\n [open, onNavOpenChange],\n );\n return (\n <BrowserLayoutContext.Provider value={state}>\n <div\n ref={ref}\n data-slot=\"browser-layout\"\n data-view={view}\n data-nav={open ? \"open\" : \"closed\"}\n className={cn(\n \"labui:group/browser labui:flex labui:min-h-0 labui:min-w-0 labui:flex-1\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </BrowserLayoutContext.Provider>\n );\n});\n\nconst BrowserLayoutNav = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\">\n>(function BrowserLayoutNav({ className, ...props }, ref) {\n return (\n <nav\n ref={ref}\n data-slot=\"browser-layout-nav\"\n className={cn(\n \"labui:flex labui:w-full labui:min-w-0 labui:flex-col labui:overflow-auto labui:md:w-72 labui:md:shrink-0 labui:md:border-r\",\n \"labui:max-md:group-data-[view=detail]/browser:hidden labui:md:group-data-[nav=closed]/browser:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst BrowserLayoutPane = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"main\">\n>(function BrowserLayoutPane({ className, ...props }, ref) {\n return (\n <main\n ref={ref}\n data-slot=\"browser-layout-pane\"\n className={cn(\n \"labui:flex labui:min-w-0 labui:flex-1 labui:flex-col labui:overflow-auto\",\n \"labui:max-md:group-data-[view=nav]/browser:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst BrowserLayoutToggle = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<typeof Button>\n>(function BrowserLayoutToggle({ className, onClick, ...props }, ref) {\n const { navOpen, setNavOpen } = useBrowserLayout();\n return (\n <Button\n ref={ref}\n data-slot=\"browser-layout-toggle\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label=\"Toggle navigation\"\n aria-pressed={navOpen}\n className={cn(\"labui:max-md:hidden\", className)}\n onClick={(event) => {\n onClick?.(event);\n setNavOpen(!navOpen);\n }}\n {...props}\n >\n <PanelLeftIcon />\n </Button>\n );\n});\n\nexport {\n BrowserLayout,\n BrowserLayoutNav,\n BrowserLayoutPane,\n BrowserLayoutToggle,\n};\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function Card({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"card\"\n className={cn(\n \"labui:flex labui:flex-col labui:gap-(--labui-card-gap) labui:rounded-xl labui:border labui:bg-card labui:py-(--labui-card-py) labui:text-card-foreground labui:shadow-sm\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & { bordered?: boolean }\n>(function CardHeader({ className, bordered, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"card-header\"\n data-bordered={bordered || undefined}\n className={cn(\n \"labui:@container/card-header labui:grid labui:auto-rows-min labui:grid-rows-[auto_auto] labui:items-start labui:gap-2 labui:px-(--labui-card-px) labui:has-data-[slot=card-action]:grid-cols-[1fr_auto] labui:data-[bordered]:border-b labui:data-[bordered]:pb-4\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.ComponentPropsWithoutRef<\"h2\"> & { as?: \"h2\" | \"h3\" | \"h4\" | \"div\" }\n>(function CardTitle({ as: Comp = \"h2\", className, ...props }, ref) {\n return (\n <Comp\n ref={ref}\n data-slot=\"card-title\"\n className={cn(\n \"labui:text-base labui:leading-none labui:font-semibold\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function CardDescription({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"card-description\"\n className={cn(\"labui:text-sm labui:text-muted-foreground\", className)}\n {...props}\n />\n );\n});\n\nconst CardAction = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function CardAction({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"card-action\"\n className={cn(\n \"labui:col-start-2 labui:row-span-2 labui:row-start-1 labui:self-start labui:justify-self-end\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function CardContent({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"card-content\"\n className={cn(\"labui:px-(--labui-card-px)\", className)}\n {...props}\n />\n );\n});\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & { bordered?: boolean }\n>(function CardFooter({ className, bordered, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n data-bordered={bordered || undefined}\n className={cn(\n \"labui:flex labui:items-center labui:px-(--labui-card-px) labui:data-[bordered]:border-t labui:data-[bordered]:pt-4\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n", "import * as React from \"react\";\nimport { Card } from \"./card.js\";\nimport { cn } from \"./classes.js\";\n\n/** Shared surface for interactive charts. Data loading belongs to the caller. */\nconst ChartFrame = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof Card>\n>(function ChartFrame({ className, ...props }, ref) {\n return (\n <Card\n ref={ref}\n role=\"region\"\n data-slot=\"chart-frame\"\n className={cn(\n \"labui:min-w-0 labui:gap-0 labui:overflow-hidden labui:py-0\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { ChartFrame };\n", "import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"lucide-react\";\nimport { cn, focusRing, invalidRing } from \"./classes.js\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(function Checkbox({ className, ...props }, ref) {\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n data-slot=\"checkbox\"\n className={cn(\n \"labui:peer labui:size-4 labui:shrink-0 labui:rounded-[4px] labui:border labui:border-input labui:dark:bg-input/30\",\n \"labui:shadow-xs labui:transition-shadow labui:outline-none\",\n \"labui:disabled:cursor-not-allowed labui:disabled:opacity-50\",\n \"labui:data-[state=checked]:border-primary labui:data-[state=checked]:bg-primary labui:data-[state=checked]:text-primary-foreground labui:dark:data-[state=checked]:bg-primary\",\n focusRing,\n invalidRing,\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"labui:grid labui:place-content-center labui:text-current labui:transition-none\"\n >\n <CheckIcon className=\"labui:size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n});\n\nexport { Checkbox };\n", "import * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { SearchIcon } from \"lucide-react\";\nimport { cn } from \"./classes.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog.js\";\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(function Command({ className, ...props }, ref) {\n return (\n <CommandPrimitive\n ref={ref}\n data-slot=\"command\"\n className={cn(\n \"labui:flex labui:h-full labui:w-full labui:flex-col labui:overflow-hidden labui:rounded-md labui:bg-popover labui:text-popover-foreground\",\n className,\n )}\n {...props}\n />\n );\n});\n\nfunction CommandDialog({\n title = \"Command palette\",\n description = \"Search for a command to run\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n className?: string;\n showCloseButton?: boolean;\n}) {\n return (\n <Dialog {...props}>\n <DialogContent\n className={cn(\"labui:overflow-hidden labui:p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <DialogHeader className=\"labui:sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <Command className=\"labui:**:data-[slot=command-input-wrapper]:h-12 labui:[&_[cmdk-group-heading]]:px-2 labui:[&_[cmdk-group-heading]]:font-medium labui:[&_[cmdk-group-heading]]:text-muted-foreground labui:[&_[cmdk-group]]:px-2 labui:[&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 labui:[&_[cmdk-input-wrapper]_svg]:h-5 labui:[&_[cmdk-input-wrapper]_svg]:w-5 labui:[&_[cmdk-input]]:h-12 labui:[&_[cmdk-item]]:px-2 labui:[&_[cmdk-item]]:py-3 labui:[&_[cmdk-item]_svg]:h-5 labui:[&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(function CommandInput({ className, ...props }, ref) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"labui:flex labui:h-9 labui:items-center labui:gap-2 labui:border-b labui:px-3\"\n >\n <SearchIcon className=\"labui:size-4 labui:shrink-0 labui:opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n data-slot=\"command-input\"\n className={cn(\n \"labui:flex labui:h-10 labui:w-full labui:rounded-md labui:bg-transparent labui:py-3 labui:text-sm labui:outline-hidden labui:placeholder:text-muted-foreground labui:disabled:cursor-not-allowed labui:disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n </div>\n );\n});\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(function CommandList({ className, ...props }, ref) {\n return (\n <CommandPrimitive.List\n ref={ref}\n data-slot=\"command-list\"\n className={cn(\n \"labui:max-h-[300px] labui:scroll-py-1 labui:overflow-x-hidden labui:overflow-y-auto\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(function CommandEmpty({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Empty\n ref={ref}\n data-slot=\"command-empty\"\n className={cn(\"labui:py-6 labui:text-center labui:text-sm\", className)}\n {...props}\n />\n );\n});\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(function CommandGroup({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Group\n ref={ref}\n data-slot=\"command-group\"\n className={cn(\n \"labui:overflow-hidden labui:p-1 labui:text-foreground labui:[&_[cmdk-group-heading]]:px-2 labui:[&_[cmdk-group-heading]]:py-1.5 labui:[&_[cmdk-group-heading]]:text-xs labui:[&_[cmdk-group-heading]]:font-medium labui:[&_[cmdk-group-heading]]:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(function CommandSeparator({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Separator\n ref={ref}\n data-slot=\"command-separator\"\n className={cn(\"labui:-mx-1 labui:h-px labui:bg-border\", className)}\n {...props}\n />\n );\n});\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(function CommandItem({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Item\n ref={ref}\n data-slot=\"command-item\"\n className={cn(\n \"labui:relative labui:flex labui:cursor-default labui:items-center labui:gap-2 labui:rounded-sm labui:px-2 labui:py-1.5 labui:text-sm labui:outline-hidden labui:select-none labui:data-[disabled=true]:pointer-events-none labui:data-[disabled=true]:opacity-50 labui:data-[selected=true]:bg-accent labui:data-[selected=true]:text-accent-foreground labui:[&_svg]:pointer-events-none labui:[&_svg]:shrink-0 labui:[&_svg:not([class*='size-'])]:size-4 labui:[&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n );\n});\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"labui:ml-auto labui:text-xs labui:tracking-widest labui:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n", "import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\nimport { Button } from \"./button.js\";\nimport { closeButton, cn, overlay } from \"./classes.js\";\nimport { useOverlayOpen } from \"./overlay.js\";\n\nfunction Dialog({\n open,\n defaultOpen,\n onOpenChange,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n const [current, change] = useOverlayOpen(open, onOpenChange, defaultOpen);\n return (\n <DialogPrimitive.Root\n data-slot=\"dialog\"\n open={current}\n onOpenChange={change}\n {...props}\n />\n );\n}\n\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogClose = DialogPrimitive.Close;\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(function DialogOverlay({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"dialog-overlay\"\n className={cn(overlay, className)}\n {...props}\n />\n );\n});\n\nconst keep = (event: Event) => event.preventDefault();\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n busy?: boolean;\n }\n>(function DialogContent(\n { className, children, showCloseButton = true, busy = false, ...props },\n ref,\n) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"dialog-content\"\n aria-busy={busy || undefined}\n onEscapeKeyDown={busy ? keep : props.onEscapeKeyDown}\n onInteractOutside={busy ? keep : props.onInteractOutside}\n className={cn(\n \"labui:fixed labui:top-1/2 labui:left-1/2 labui:z-50 labui:-translate-x-1/2 labui:-translate-y-1/2\",\n \"labui:grid labui:max-h-[calc(100dvh-2rem)] labui:w-full labui:max-w-[calc(100%-2rem)] labui:sm:max-w-lg labui:gap-6 labui:overflow-y-auto\",\n \"labui:rounded-(--labui-radius-dialog) labui:border labui:bg-popover labui:p-6 labui:text-popover-foreground labui:shadow-sm labui:outline-none\",\n \"labui:data-[state=open]:animate-zoom-in labui:data-[state=closed]:animate-zoom-out\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && !busy && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className={closeButton}\n >\n <XIcon />\n <span className=\"labui:sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n});\n\nconst DialogHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function DialogHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"dialog-header\"\n className={cn(\n \"labui:flex labui:min-w-0 labui:flex-col labui:gap-2 labui:text-left\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst DialogFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & { showCloseButton?: boolean }\n>(function DialogFooter(\n { className, showCloseButton = false, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-slot=\"dialog-footer\"\n className={cn(\n \"labui:flex labui:flex-wrap labui:items-center labui:justify-end labui:gap-2\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"secondary\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n );\n});\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n className={cn(\n \"labui:pr-8 labui:text-lg labui:leading-7 labui:font-semibold labui:break-words\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n className={cn(\n \"labui:text-sm labui:leading-6 labui:text-muted-foreground labui:break-words\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n", "import * as React from \"react\";\nimport { CheckIcon, CircleAlertIcon } from \"lucide-react\";\nimport { Button } from \"./button.js\";\nimport { cn } from \"./classes.js\";\nimport { CopyButton } from \"./copy-button.js\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from \"./dialog.js\";\nimport { Input } from \"./input.js\";\nimport { Spinner } from \"./spinner.js\";\n\nexport type Confirmation = {\n value: string;\n label: string;\n placeholder?: string;\n match?: \"exact\" | \"loose\";\n};\n\nexport type ConfirmDialogProps = {\n trigger?: React.ReactElement;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n title: React.ReactNode;\n // name is shown after the title as a copyable chip\n name?: string;\n description?: React.ReactNode;\n confirmLabel: string;\n cancelLabel?: string;\n pendingLabel?: string;\n tone?: \"destructive\" | \"default\";\n warning?: React.ReactNode;\n confirmation?: Confirmation;\n // typeToConfirm asks for name, for callers that have no confirmation\n typeToConfirm?: boolean;\n disabled?: boolean;\n onConfirm: () => void | Promise<void>;\n errorMessage?: string;\n};\n\nconst loose = (text: string) => text.trim().toLowerCase();\n\nexport function matchesConfirmation(value: string, confirmation: Confirmation) {\n return confirmation.match === \"loose\"\n ? loose(value) === loose(confirmation.value)\n : value === confirmation.value;\n}\n\nfunction confirmationFor({\n confirmation,\n typeToConfirm,\n name,\n}: ConfirmDialogProps) {\n if (confirmation) return confirmation;\n if (typeToConfirm && name) return { value: name, label: \"Name\" };\n return undefined;\n}\n\nexport function ConfirmDialog({\n trigger,\n open,\n defaultOpen = false,\n onOpenChange,\n ...props\n}: ConfirmDialogProps) {\n const [ownOpen, setOwnOpen] = React.useState(defaultOpen);\n const [busy, setBusy] = React.useState(false);\n const confirmation = confirmationFor(props);\n\n function changeOpen(next: boolean) {\n if (busy) return;\n setOwnOpen(next);\n onOpenChange?.(next);\n }\n\n return (\n <Dialog open={open ?? ownOpen} onOpenChange={changeOpen}>\n {trigger && <DialogTrigger asChild>{trigger}</DialogTrigger>}\n <ConfirmDialogContent\n key={confirmation?.value}\n {...props}\n confirmation={confirmation}\n busy={busy}\n onBusyChange={setBusy}\n onClose={() => changeOpen(false)}\n />\n </Dialog>\n );\n}\n\ntype ContentProps = Omit<\n ConfirmDialogProps,\n \"trigger\" | \"open\" | \"defaultOpen\" | \"onOpenChange\" | \"typeToConfirm\"\n> & {\n busy: boolean;\n onBusyChange: (busy: boolean) => void;\n onClose: () => void;\n};\n\nfunction ConfirmDialogContent({\n title,\n name,\n description,\n confirmLabel,\n cancelLabel = \"Cancel\",\n pendingLabel = confirmLabel,\n tone = \"destructive\",\n warning,\n confirmation,\n disabled = false,\n onConfirm,\n errorMessage,\n busy,\n onBusyChange,\n onClose,\n}: ContentProps) {\n const [value, setValue] = React.useState(\"\");\n const [error, setError] = React.useState<string>();\n const inputRef = React.useRef<HTMLInputElement>(null);\n const cancelRef = React.useRef<HTMLButtonElement>(null);\n const inputId = React.useId();\n const hintId = React.useId();\n const canConfirm =\n !disabled && (!confirmation || matchesConfirmation(value, confirmation));\n const Icon = tone === \"destructive\" ? CircleAlertIcon : CheckIcon;\n\n async function submit(event: React.FormEvent<HTMLFormElement>) {\n event.preventDefault();\n if (!canConfirm || busy) return;\n onBusyChange(true);\n setError(undefined);\n try {\n await onConfirm();\n } catch (failure) {\n setError(errorMessage ?? (failure as Error).message);\n return;\n } finally {\n onBusyChange(false);\n }\n onClose();\n }\n\n function submitWithModifier(event: React.KeyboardEvent<HTMLFormElement>) {\n if (event.key !== \"Enter\") return;\n if (event.nativeEvent.isComposing || event.repeat) {\n event.preventDefault();\n return;\n }\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n event.currentTarget.requestSubmit();\n }\n }\n\n return (\n <DialogContent\n role=\"alertdialog\"\n aria-describedby={description ? undefined : undefined}\n className=\"labui:p-0\"\n busy={busy}\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n (inputRef.current ?? cancelRef.current)?.focus();\n }}\n >\n {/* oxlint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- Ctrl+Enter submits */}\n <form\n data-slot=\"confirm-dialog\"\n className=\"labui:flex labui:min-w-0 labui:flex-col\"\n aria-busy={busy}\n onSubmit={submit}\n onKeyDown={submitWithModifier}\n >\n <div className=\"labui:flex labui:min-w-0 labui:flex-col labui:gap-5 labui:p-6\">\n <div className=\"labui:flex labui:items-start labui:gap-3\">\n <span\n aria-hidden=\"true\"\n className={cn(\n \"labui:mt-0.5 labui:flex labui:size-9 labui:shrink-0 labui:items-center labui:justify-center labui:rounded-xl\",\n tone === \"destructive\"\n ? \"labui:bg-destructive-muted labui:text-destructive\"\n : \"labui:bg-muted labui:text-foreground\",\n )}\n >\n <Icon className=\"labui:size-5\" />\n </span>\n <DialogHeader>\n <DialogTitle>\n {title}\n {name && (\n <>\n {\" \"}\n <span className=\"labui:inline-flex labui:items-center labui:gap-1 labui:rounded-md labui:border labui:bg-muted/50 labui:py-0.5 labui:pr-0.5 labui:pl-2 labui:align-middle labui:font-mono labui:text-base labui:break-all\">\n {name}\n <CopyButton value={name} label=\"Copy name\" />\n </span>\n ?\n </>\n )}\n </DialogTitle>\n {(description || warning) && (\n <DialogDescription asChild>\n <div className=\"labui:flex labui:flex-col labui:gap-3\">\n {description && <div>{description}</div>}\n {warning && (\n <p className=\"labui:border-l-2 labui:border-destructive/35 labui:pl-3 labui:text-xs labui:leading-5\">\n {warning}\n </p>\n )}\n </div>\n </DialogDescription>\n )}\n </DialogHeader>\n </div>\n {confirmation && (\n <div className=\"labui:flex labui:min-w-0 labui:flex-col labui:gap-2\">\n <label\n htmlFor={inputId}\n className=\"labui:text-sm labui:font-medium\"\n >\n {confirmation.label}\n </label>\n <Input\n ref={inputRef}\n id={inputId}\n aria-describedby={hintId}\n placeholder={confirmation.placeholder ?? confirmation.value}\n value={value}\n disabled={busy}\n spellCheck={false}\n autoCapitalize=\"none\"\n onChange={(event) => setValue(event.target.value)}\n />\n <p\n id={hintId}\n className=\"labui:text-xs labui:leading-5 labui:text-muted-foreground\"\n >\n To continue, enter{\" \"}\n <strong className=\"labui:font-medium labui:break-all labui:whitespace-pre-wrap labui:text-foreground\">\n {confirmation.value}\n </strong>\n {confirmation.match === \"loose\" ? \".\" : \" exactly as shown.\"}\n </p>\n </div>\n )}\n {error && (\n <p role=\"alert\" className=\"labui:text-sm labui:text-destructive\">\n {error}\n </p>\n )}\n </div>\n <DialogFooter className=\"labui:justify-between labui:border-t labui:bg-muted/40 labui:px-6 labui:py-4\">\n <Button\n ref={cancelRef}\n type=\"button\"\n variant=\"ghost\"\n disabled={busy}\n onClick={onClose}\n >\n {cancelLabel}\n </Button>\n <Button\n type=\"submit\"\n variant={tone}\n disabled={!canConfirm || busy}\n aria-keyshortcuts=\"Control+Enter Meta+Enter\"\n >\n {busy && <Spinner aria-hidden=\"true\" />}\n {busy ? pendingLabel : confirmLabel}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n );\n}\n", "import * as React from \"react\";\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\nimport { Button } from \"./button.js\";\nimport { cn } from \"./classes.js\";\n\nconst messages = {\n idle: \"\",\n copied: \"Copied\",\n failed: \"Copy unavailable\",\n};\n\nexport function CopyButton({\n value,\n label = \"Copy\",\n className,\n variant = \"ghost\",\n size = \"icon-xs\",\n ...props\n}: Omit<\n React.ComponentPropsWithoutRef<typeof Button>,\n \"onClick\" | \"value\" | \"size\"\n> & {\n value: string;\n label?: string;\n size?: \"icon\" | \"icon-xs\" | \"icon-sm\" | \"icon-lg\";\n}) {\n const [state, setState] = React.useState<keyof typeof messages>(\"idle\");\n\n function copy() {\n if (!navigator.clipboard) return setState(\"failed\");\n navigator.clipboard.writeText(value).then(\n () => setState(\"copied\"),\n () => setState(\"failed\"),\n );\n }\n\n return (\n <span\n data-slot=\"copy-button\"\n className={cn(\"labui:inline-flex labui:items-center\", className)}\n >\n <Button\n type=\"button\"\n variant={variant}\n size={size}\n aria-label={label}\n title={messages[state] || label}\n onClick={copy}\n {...props}\n >\n {state === \"copied\" ? (\n <CheckIcon aria-hidden=\"true\" />\n ) : (\n <CopyIcon aria-hidden=\"true\" />\n )}\n </Button>\n <span role=\"status\" className=\"labui:sr-only\">\n {messages[state]}\n </span>\n </span>\n );\n}\n", "import * as React from \"react\";\nimport { cn, inputSurface } from \"./classes.js\";\n\nconst Input = React.forwardRef<\n HTMLInputElement,\n React.ComponentPropsWithoutRef<\"input\">\n>(function Input({ className, type, ...props }, ref) {\n return (\n <input\n ref={ref}\n type={type}\n autoComplete=\"off\"\n data-slot=\"input\"\n className={cn(\n inputSurface,\n \"labui:h-(--labui-control-height) labui:px-(--labui-control-px) labui:py-1\",\n \"labui:selection:bg-primary labui:selection:text-primary-foreground labui:disabled:pointer-events-none\",\n \"labui:file:me-3 labui:file:inline-flex labui:file:h-7 labui:file:border-0 labui:file:bg-transparent\",\n \"labui:file:text-sm labui:file:font-medium labui:file:text-foreground\",\n \"labui:[&::-webkit-search-cancel-button]:appearance-none labui:[&::-webkit-search-decoration]:appearance-none labui:[&::-webkit-search-results-button]:appearance-none\",\n \"labui:[&::-webkit-calendar-picker-indicator]:opacity-60 labui:[&::-webkit-datetime-edit]:leading-none\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Input };\n", "import * as React from \"react\";\nimport { Loader2Icon } from \"lucide-react\";\nimport { cn } from \"./classes.js\";\n\nconst Spinner = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>(function Spinner({ className, ...props }, ref) {\n return (\n <Loader2Icon\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"labui:size-4 labui:animate-spin\", className)}\n {...props}\n />\n );\n});\n\nexport { Spinner };\n", "import * as AlertDialog from \"@radix-ui/react-alert-dialog\";\nimport { cn, overlay } from \"./classes.js\";\n\nconst dialogAction =\n \"labui:inline-flex labui:shrink-0 labui:items-center labui:justify-center labui:rounded-md labui:text-sm labui:font-medium labui:outline-none labui:transition-colors labui:hover:bg-accent labui:focus-visible:ring-2 labui:focus-visible:ring-ring labui:px-4 labui:py-2\";\n\nexport function DiscardDialog({\n label,\n onCancel,\n onConfirm,\n onCloseAutoFocus,\n}: {\n label?: string;\n onCancel: () => void;\n onConfirm: () => void;\n onCloseAutoFocus?: (event: Event) => void;\n}) {\n return (\n <AlertDialog.Root\n open={label !== undefined}\n onOpenChange={(open) => !open && onCancel()}\n >\n <AlertDialog.Portal>\n <AlertDialog.Overlay\n className={cn(\n overlay,\n \"labui:font-sans labui:text-sm labui:leading-normal\",\n )}\n />\n <AlertDialog.Content\n className={cn(\n \"labui:fixed labui:top-1/2 labui:left-1/2 labui:z-50 labui:-translate-x-1/2 labui:-translate-y-1/2\",\n \"labui:w-[calc(100%-2rem)] labui:max-w-lg labui:rounded-(--labui-radius-dialog) labui:border labui:border-border labui:bg-popover labui:p-6\",\n \"labui:font-sans labui:text-sm labui:leading-normal labui:text-popover-foreground labui:shadow-sm labui:outline-none\",\n )}\n onCloseAutoFocus={onCloseAutoFocus}\n >\n <AlertDialog.Title className=\"labui:m-0 labui:text-lg labui:font-semibold\">\n Discard changes in {label}?\n </AlertDialog.Title>\n <AlertDialog.Description className=\"labui:mt-2 labui:text-muted-foreground\">\n Closing the tab discards its unsaved changes.\n </AlertDialog.Description>\n <div className=\"labui:mt-6 labui:flex labui:flex-wrap labui:justify-end labui:gap-2\">\n <AlertDialog.Cancel\n className={cn(dialogAction, \"labui:border labui:border-border\")}\n >\n Keep tab\n </AlertDialog.Cancel>\n <AlertDialog.Action\n className={cn(\n dialogAction,\n \"labui:bg-destructive-muted labui:text-destructive\",\n )}\n onClick={onConfirm}\n >\n Discard and close\n </AlertDialog.Action>\n </div>\n </AlertDialog.Content>\n </AlertDialog.Portal>\n </AlertDialog.Root>\n );\n}\n", "import * as React from \"react\";\nimport { Avatar, AvatarFallback } from \"./avatar.js\";\nimport { cn } from \"./classes.js\";\n\nexport type EmailParticipant = { name?: string; address?: string };\n\nfunction EmailIdentity({ name, address }: EmailParticipant) {\n return (\n <span data-slot=\"email-identity\" className=\"labui:[overflow-wrap:anywhere]\">\n <bdi className=\"labui:font-medium labui:text-foreground\">\n {name || address || \"Unknown sender\"}\n </bdi>\n {name && address && name !== address && (\n <>\n {\" \"}\n <bdi className=\"labui:font-normal labui:text-muted-foreground\">\n &lt;{address}&gt;\n </bdi>\n </>\n )}\n </span>\n );\n}\n\nconst EmailThread = React.forwardRef<\n HTMLOListElement,\n React.ComponentPropsWithoutRef<\"ol\">\n>(function EmailThread({ className, ...props }, ref) {\n return (\n <ol\n ref={ref}\n data-slot=\"email-thread\"\n className={cn(\"labui:min-w-0 labui:list-none\", className)}\n {...props}\n />\n );\n});\n\nconst messageTones = {\n default: \"\",\n muted: \"labui:bg-muted/25\",\n warning: \"labui:border-warning/25 labui:bg-warning/5\",\n};\n\nexport type EmailMessageProps = Omit<\n React.ComponentPropsWithoutRef<\"li\">,\n \"children\"\n> & {\n sender: EmailParticipant;\n recipient?: EmailParticipant;\n attribution?: React.ReactNode;\n dateTime?: string;\n dateLabel: string;\n badge?: React.ReactNode;\n tone?: keyof typeof messageTones;\n body: string;\n attachments?: React.ReactNode;\n};\n\nconst initials = (participant: EmailParticipant) =>\n (participant.name || participant.address || \"?\").slice(0, 2).toUpperCase();\n\nconst EmailMessage = React.forwardRef<HTMLLIElement, EmailMessageProps>(\n function EmailMessage(\n {\n sender,\n recipient,\n attribution,\n dateTime,\n dateLabel,\n badge,\n tone = \"default\",\n body,\n attachments,\n className,\n ...props\n },\n ref,\n ) {\n return (\n <li\n ref={ref}\n data-slot=\"email-message\"\n className={cn(\n \"labui:group/message labui:relative labui:flex labui:min-w-0 labui:gap-3 labui:pb-6 labui:last:pb-0 labui:sm:gap-4\",\n className,\n )}\n {...props}\n >\n <div className=\"labui:relative labui:flex labui:shrink-0 labui:flex-col labui:items-center\">\n <Avatar\n aria-hidden=\"true\"\n className=\"labui:z-10 labui:size-9 labui:ring-4 labui:ring-background\"\n >\n <AvatarFallback\n className={cn(\n \"labui:text-xs labui:font-semibold\",\n tone === \"warning\" && \"labui:bg-warning/10 labui:text-warning\",\n )}\n >\n {initials(sender)}\n </AvatarFallback>\n </Avatar>\n <span\n aria-hidden=\"true\"\n className=\"labui:absolute labui:top-10 labui:-bottom-6 labui:w-px labui:bg-border labui:group-last/message:hidden\"\n />\n </div>\n <article\n className={cn(\n \"labui:min-w-0 labui:flex-1 labui:overflow-hidden labui:rounded-lg labui:border labui:bg-card\",\n messageTones[tone],\n )}\n >\n <header className=\"labui:flex labui:flex-wrap labui:items-start labui:justify-between labui:gap-x-5 labui:gap-y-2 labui:border-b labui:border-border/60 labui:px-4 labui:py-3 labui:sm:px-5\">\n <div className=\"labui:flex labui:min-w-0 labui:flex-1 labui:flex-col labui:gap-1 labui:text-sm\">\n <EmailIdentity {...sender} />\n {(recipient || attribution) && (\n <div className=\"labui:flex labui:flex-wrap labui:gap-x-3 labui:gap-y-1 labui:text-xs labui:text-muted-foreground\">\n {recipient && (\n <span>\n To <EmailIdentity {...recipient} />\n </span>\n )}\n {attribution && (\n <span className=\"labui:[overflow-wrap:anywhere]\">\n {attribution}\n </span>\n )}\n </div>\n )}\n </div>\n <div className=\"labui:flex labui:flex-wrap labui:items-center labui:gap-2 labui:text-xs labui:text-muted-foreground\">\n {badge}\n <time dateTime={dateTime} className=\"labui:tabular-nums\">\n {dateLabel}\n </time>\n </div>\n </header>\n <div className=\"labui:px-4 labui:py-4 labui:sm:px-5\">\n <div\n data-slot=\"email-body\"\n className=\"labui:text-sm labui:leading-7 labui:whitespace-pre-wrap labui:[overflow-wrap:anywhere]\"\n >\n {body}\n </div>\n {attachments && (\n <div\n data-slot=\"email-attachments\"\n className=\"labui:mt-4 labui:flex labui:flex-wrap labui:gap-2 labui:border-t labui:pt-3\"\n >\n {attachments}\n </div>\n )}\n </div>\n </article>\n </li>\n );\n },\n);\n\nexport { EmailIdentity, EmailMessage, EmailThread };\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst Empty = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function Empty({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"empty\"\n className={cn(\n \"labui:flex labui:min-w-0 labui:flex-1 labui:flex-col labui:items-center labui:justify-center labui:gap-6 labui:rounded-lg labui:border-dashed labui:p-6 labui:text-center labui:text-balance labui:md:p-12\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst EmptyHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function EmptyHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"empty-header\"\n className={cn(\n \"labui:flex labui:max-w-sm labui:flex-col labui:items-center labui:gap-2 labui:text-center\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst emptyMediaVariants = {\n default: \"labui:bg-transparent\",\n icon: \"labui:flex labui:size-10 labui:shrink-0 labui:items-center labui:justify-center labui:rounded-lg labui:bg-muted labui:text-foreground labui:[&_svg:not([class*='size-'])]:size-6\",\n};\n\nconst EmptyMedia = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & {\n variant?: keyof typeof emptyMediaVariants;\n }\n>(function EmptyMedia({ className, variant = \"default\", ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"empty-media\"\n data-variant={variant}\n className={cn(\n \"labui:mb-2 labui:flex labui:shrink-0 labui:items-center labui:justify-center labui:[&_svg]:pointer-events-none labui:[&_svg]:shrink-0\",\n emptyMediaVariants[variant],\n className,\n )}\n {...props}\n />\n );\n});\n\nconst EmptyTitle = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function EmptyTitle({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"empty-title\"\n className={cn(\n \"labui:text-lg labui:font-medium labui:tracking-tight\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst EmptyDescription = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentPropsWithoutRef<\"p\">\n>(function EmptyDescription({ className, ...props }, ref) {\n return (\n <p\n ref={ref}\n data-slot=\"empty-description\"\n className={cn(\n \"labui:text-sm/relaxed labui:text-muted-foreground labui:[&>a]:underline labui:[&>a]:underline-offset-4 labui:[&>a:hover]:text-link\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst EmptyContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function EmptyContent({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"empty-content\"\n className={cn(\n \"labui:flex labui:w-full labui:max-w-sm labui:min-w-0 labui:flex-col labui:items-center labui:gap-4 labui:text-sm labui:text-balance\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n};\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\nimport { Label } from \"./label.js\";\nimport { Separator } from \"./separator.js\";\n\nconst FieldSet = React.forwardRef<\n HTMLFieldSetElement,\n React.ComponentPropsWithoutRef<\"fieldset\">\n>(function FieldSet({ className, ...props }, ref) {\n return (\n <fieldset\n ref={ref}\n data-slot=\"field-set\"\n className={cn(\n \"labui:flex labui:flex-col labui:gap-6\",\n \"labui:has-[>[data-slot=checkbox-group]]:gap-3 labui:has-[>[data-slot=radio-group]]:gap-3\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst FieldLegend = React.forwardRef<\n HTMLLegendElement,\n React.ComponentPropsWithoutRef<\"legend\"> & { variant?: \"legend\" | \"label\" }\n>(function FieldLegend({ className, variant = \"legend\", ...props }, ref) {\n return (\n <legend\n ref={ref}\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"labui:mb-3 labui:font-medium\",\n \"labui:data-[variant=legend]:text-base labui:data-[variant=label]:text-sm\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst FieldGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function FieldGroup({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"field-group\"\n className={cn(\n \"labui:group/field-group labui:@container/field-group labui:flex labui:w-full labui:flex-col labui:gap-7 labui:data-[slot=checkbox-group]:gap-3 labui:[&>[data-slot=field-group]]:gap-4\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst fieldOrientations = {\n vertical: \"labui:flex-col labui:[&>*]:w-full\",\n horizontal: [\n \"labui:flex-row labui:items-center\",\n \"labui:[&>[data-slot=field-label]]:flex-auto\",\n \"labui:has-[>[data-slot=field-content]]:items-start labui:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ].join(\" \"),\n responsive: [\n \"labui:flex-col labui:@md/field-group:flex-row labui:@md/field-group:items-center labui:[&>*]:w-full labui:@md/field-group:[&>*]:w-auto\",\n \"labui:@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"labui:@md/field-group:has-[>[data-slot=field-content]]:items-start labui:@md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ].join(\" \"),\n};\n\nconst Field = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & {\n orientation?: keyof typeof fieldOrientations;\n }\n>(function Field({ className, orientation = \"vertical\", ...props }, ref) {\n return (\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(\n \"labui:group/field labui:flex labui:w-full labui:gap-3 labui:data-[invalid=true]:text-destructive\",\n fieldOrientations[orientation],\n className,\n )}\n {...props}\n />\n );\n});\n\nconst FieldContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function FieldContent({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"field-content\"\n className={cn(\n \"labui:group/field-content labui:flex labui:flex-1 labui:flex-col labui:gap-1.5 labui:leading-snug\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst FieldLabel = React.forwardRef<\n HTMLLabelElement,\n React.ComponentPropsWithoutRef<typeof Label>\n>(function FieldLabel({ className, ...props }, ref) {\n return (\n <Label\n ref={ref}\n data-slot=\"field-label\"\n className={cn(\n \"labui:group/field-label labui:peer/field-label labui:flex labui:w-fit labui:gap-2 labui:leading-snug labui:group-data-[disabled=true]/field:opacity-50\",\n \"labui:has-[>[data-slot=field]]:w-full labui:has-[>[data-slot=field]]:flex-col labui:has-[>[data-slot=field]]:rounded-md labui:has-[>[data-slot=field]]:border labui:[&>*]:data-[slot=field]:p-4\",\n \"labui:has-data-[state=checked]:border-primary labui:has-data-[state=checked]:bg-primary/5 labui:dark:has-data-[state=checked]:bg-primary/10\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst FieldTitle = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function FieldTitle({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"field-title\"\n className={cn(\n \"labui:flex labui:w-fit labui:items-center labui:gap-2 labui:text-sm labui:leading-snug labui:font-medium labui:group-data-[disabled=true]/field:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst FieldDescription = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentPropsWithoutRef<\"p\">\n>(function FieldDescription({ className, ...props }, ref) {\n return (\n <p\n ref={ref}\n data-slot=\"field-description\"\n className={cn(\n \"labui:text-sm labui:leading-normal labui:font-normal labui:text-muted-foreground labui:group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"labui:last:mt-0 labui:nth-last-2:-mt-1 labui:[[data-variant=legend]+&]:-mt-1.5\",\n \"labui:[&>a]:underline labui:[&>a]:underline-offset-4 labui:[&>a:hover]:text-link\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst FieldSeparator = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function FieldSeparator({ children, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"labui:relative labui:-my-2 labui:h-5 labui:text-sm labui:group-data-[variant=outline]/field-group:-mb-2\",\n className,\n )}\n {...props}\n >\n <Separator className=\"labui:absolute labui:inset-0 labui:top-1/2\" />\n {children && (\n <span\n data-slot=\"field-separator-content\"\n className=\"labui:relative labui:mx-auto labui:block labui:w-fit labui:bg-background labui:px-2 labui:text-muted-foreground\"\n >\n {children}\n </span>\n )}\n </div>\n );\n});\n\ntype FieldErrorItem = { message?: string } | undefined;\n\nfunction uniqueMessages(errors: FieldErrorItem[]) {\n return [...new Set(errors.flatMap((error) => error?.message ?? []))];\n}\n\nfunction errorContent(children: React.ReactNode, errors?: FieldErrorItem[]) {\n if (children) return children;\n const messages = uniqueMessages(errors ?? []);\n if (messages.length <= 1) return messages[0] ?? null;\n return (\n <ul className=\"labui:ml-4 labui:flex labui:list-disc labui:flex-col labui:gap-1\">\n {messages.map((message) => (\n <li key={message}>{message}</li>\n ))}\n </ul>\n );\n}\n\nconst FieldError = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & { errors?: FieldErrorItem[] }\n>(function FieldError({ className, children, errors, ...props }, ref) {\n const content = errorContent(children, errors);\n if (!content) return null;\n return (\n <div\n ref={ref}\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\n \"labui:text-sm labui:font-normal labui:text-destructive\",\n className,\n )}\n {...props}\n >\n {content}\n </div>\n );\n});\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n};\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst Label = React.forwardRef<\n HTMLLabelElement,\n React.ComponentPropsWithoutRef<\"label\">\n>(function Label({ className, ...props }, ref) {\n return (\n // oxlint-disable-next-line jsx-a11y/label-has-associated-control -- callers pass htmlFor\n <label\n ref={ref}\n data-slot=\"label\"\n className={cn(\n \"labui:flex labui:items-center labui:gap-2 labui:text-sm labui:leading-none labui:font-medium labui:select-none\",\n \"labui:group-data-[disabled=true]:pointer-events-none labui:group-data-[disabled=true]:opacity-50\",\n \"labui:peer-disabled:cursor-not-allowed labui:peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Label };\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst Separator = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & {\n orientation?: \"horizontal\" | \"vertical\";\n decorative?: boolean;\n }\n>(function Separator(\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-slot=\"separator\"\n data-orientation={orientation}\n role={decorative ? \"none\" : \"separator\"}\n aria-orientation={\n !decorative && orientation === \"vertical\" ? orientation : undefined\n }\n className={cn(\n \"labui:shrink-0 labui:bg-border\",\n \"labui:data-[orientation=horizontal]:h-px labui:data-[orientation=horizontal]:w-full\",\n \"labui:data-[orientation=vertical]:h-full labui:data-[orientation=vertical]:w-px\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Separator };\n", "import * as React from \"react\";\nimport { Button } from \"./button.js\";\nimport { cn } from \"./classes.js\";\n\nconst FileInput = React.forwardRef<\n HTMLInputElement,\n Omit<React.ComponentPropsWithoutRef<\"input\">, \"type\" | \"size\"> & {\n chooseLabel?: string;\n emptyLabel?: string;\n }\n>(function FileInput(\n {\n className,\n id,\n disabled,\n onChange,\n chooseLabel = \"Choose file\",\n emptyLabel = \"No file chosen\",\n ...props\n },\n ref,\n) {\n const generatedId = React.useId();\n const inputId = id ?? generatedId;\n const [filename, setFilename] = React.useState(\"\");\n return (\n <div\n data-slot=\"file-input\"\n className={cn(\n \"labui:flex labui:min-w-0 labui:items-center labui:gap-2\",\n className,\n )}\n >\n <input\n ref={ref}\n id={inputId}\n type=\"file\"\n className=\"labui:sr-only\"\n disabled={disabled}\n onChange={(event) => {\n setFilename(event.target.files?.[0]?.name ?? \"\");\n onChange?.(event);\n }}\n {...props}\n />\n <Button asChild variant=\"outline\" size=\"sm\" disabled={disabled}>\n <label htmlFor={inputId}>{chooseLabel}</label>\n </Button>\n <span className=\"labui:min-w-0 labui:truncate labui:text-sm labui:text-muted-foreground\">\n {filename || emptyLabel}\n </span>\n </div>\n );\n});\n\nexport { FileInput };\n", "import * as React from \"react\";\nimport { Button } from \"./button.js\";\nimport { ChartFrame } from \"./chart-frame.js\";\nimport { Input } from \"./input.js\";\nimport {\n flameLayout,\n flamePath,\n indexFlameNodes,\n type FlameNode,\n} from \"./flame-graph-model.js\";\nimport { useChartWidth } from \"./use-chart-width.js\";\n\nexport type { FlameNode } from \"./flame-graph-model.js\";\n\nexport type FlameGraphProps = {\n nodes: FlameNode[];\n label?: string;\n unit?: string;\n countLabel?: string;\n meanLabel?: string;\n focusId?: string | null;\n onFocusChange?: (id: string | null) => void;\n};\n\nconst ROW_HEIGHT = 34;\nconst BAR_HEIGHT = 31;\nconst PLOT_PADDING = 16;\nconst MIN_HEIGHT = 170;\nconst MIN_PLOT_WIDTH = 180;\nconst SEARCH_LIMIT = 100;\nconst TOOLTIP_WIDTH = 282;\nconst TOOLTIP_HEIGHT = 170;\nconst PALETTE_SIZE = 5;\n\nconst formatValue = (value: number) =>\n value.toLocaleString(undefined, { maximumFractionDigits: 3 });\nconst percent = (part: number, total: number) =>\n total > 0 ? `${((part / total) * 100).toFixed(2)}%` : \"0%\";\nconst names = (path: FlameNode[]) => path.map((node) => node.name).join(\" / \");\n\nfunction paletteColor(name: string) {\n let hash = 0;\n for (const letter of name) hash = (hash * 31 + letter.charCodeAt(0)) >>> 0;\n return `var(--labui-chart-${1 + (hash % PALETTE_SIZE)})`;\n}\n\nfunction barText(node: FlameNode, width: number, rootTotal: number) {\n const text =\n width > 160\n ? `${node.name} (${percent(node.total, rootTotal)})`\n : node.name;\n return text.slice(0, Math.max(1, Math.floor((width - 14) / 7)));\n}\n\nfunction FlameDetails({\n node,\n root,\n parent,\n unit,\n countLabel,\n meanLabel,\n}: {\n node: FlameNode;\n root: FlameNode;\n parent?: FlameNode;\n unit: string;\n countLabel: string;\n meanLabel: string;\n}) {\n const term = \"labui:text-muted-foreground\";\n return (\n <>\n <div className=\"labui:font-mono labui:text-sm labui:font-semibold labui:break-all\">\n {node.name}\n </div>\n <dl className=\"labui:mt-2 labui:grid labui:grid-cols-2 labui:gap-x-6 labui:gap-y-1 labui:text-xs labui:tabular-nums\">\n <dt className={term}>Total (inclusive)</dt>\n <dd>\n {formatValue(node.total)} {unit}\n </dd>\n <dt className={term}>Self (exclusive)</dt>\n <dd>\n {formatValue(node.self)} {unit}\n </dd>\n <dt className={term}>Share of selection</dt>\n <dd>{percent(node.total, root.total)}</dd>\n <dt className={term}>Share of parent</dt>\n <dd>{percent(node.total, parent?.total ?? root.total)}</dd>\n <dt className={term}>{countLabel}</dt>\n <dd>{formatValue(node.calls)}</dd>\n <dt className={term}>{meanLabel}</dt>\n <dd>\n {formatValue(node.calls ? node.total / node.calls : 0)} {unit}\n </dd>\n </dl>\n {node.detail && (\n <p className=\"labui:mt-2 labui:font-mono labui:text-xs labui:break-all labui:text-muted-foreground\">\n {node.detail}\n </p>\n )}\n </>\n );\n}\n\n/** Interactive flame graph over caller-supplied data: hover or focus to inspect, click to zoom. */\nconst FlameGraph = React.forwardRef<HTMLDivElement, FlameGraphProps>(\n function FlameGraph(\n {\n nodes,\n label = \"Flame graph\",\n unit = \"ms\",\n countLabel = \"Calls observed\",\n meanLabel = \"Mean per call\",\n focusId,\n onFocusChange,\n },\n ref,\n ) {\n const { container, width } = useChartWidth();\n React.useImperativeHandle(ref, () => container.current as HTMLDivElement, [\n container,\n ]);\n const svg = React.useRef<SVGSVGElement>(null);\n const helpId = React.useId();\n const [ownFocus, setOwnFocus] = React.useState<string | null>(null);\n const [inspected, setInspected] = React.useState<string | null>(null);\n const [search, setSearch] = React.useState(\"\");\n const [tooltip, setTooltip] = React.useState<{\n x: number;\n y: number;\n } | null>(null);\n const byId = React.useMemo(() => indexFlameNodes(nodes), [nodes]);\n const root = nodes.find((node) => node.parentId === null);\n const requestedId = focusId === undefined ? ownFocus : focusId;\n const focusedId =\n requestedId !== null && byId.has(requestedId)\n ? requestedId\n : (root?.id ?? \"\");\n const focused = byId.get(focusedId);\n const active = (inspected && byId.get(inspected)) || focused;\n const plotWidth = Math.max(MIN_PLOT_WIDTH, width - 32);\n const rects = React.useMemo(\n () => flameLayout(nodes, focusedId, plotWidth),\n [nodes, focusedId, plotWidth],\n );\n const depth = rects.reduce((max, rect) => Math.max(max, rect.depth), 0);\n const height = Math.max(\n MIN_HEIGHT,\n (depth + 1) * ROW_HEIGHT + PLOT_PADDING,\n );\n const query = search.trim().toLowerCase();\n const matches = query\n ? nodes.filter((node) => node.name.toLowerCase().includes(query))\n : [];\n const ancestry = (id: string) => flamePath(byId, id);\n const parentOf = (node: FlameNode) =>\n node.parentId === null ? undefined : byId.get(node.parentId);\n\n function zoom(node: FlameNode) {\n setOwnFocus(node.id);\n onFocusChange?.(node.id);\n setInspected(node.id);\n setTooltip(null);\n }\n function reset() {\n setOwnFocus(null);\n onFocusChange?.(null);\n setInspected(null);\n setTooltip(null);\n }\n function focusBar(id: string) {\n setInspected(id);\n const bars = svg.current?.querySelectorAll<SVGGElement>(\"[data-node-id]\");\n for (const bar of bars ?? []) if (bar.dataset.nodeId === id) bar.focus();\n }\n function keyboardTarget(key: string, node: FlameNode) {\n if (key === \"Home\") return focused;\n if (key === \"ArrowDown\") return parentOf(node);\n if (key === \"ArrowUp\")\n return rects.find((rect) => rect.node.parentId === node.id)?.node;\n if (key === \"ArrowLeft\" || key === \"ArrowRight\") {\n const siblings = rects.filter(\n (rect) => rect.node.parentId === node.parentId,\n );\n const index = siblings.findIndex((rect) => rect.node.id === node.id);\n return siblings[index + (key === \"ArrowLeft\" ? -1 : 1)]?.node;\n }\n return undefined;\n }\n function keydown(event: React.KeyboardEvent<SVGGElement>, node: FlameNode) {\n const { key } = event;\n if (key === \"Enter\" || key === \" \") {\n event.preventDefault();\n zoom(node);\n return;\n }\n if (key === \"Escape\" || key === \"Backspace\") {\n event.preventDefault();\n const parent = focused && parentOf(focused);\n if (parent) zoom(parent);\n else reset();\n return;\n }\n if (key.startsWith(\"Arrow\") || key === \"Home\") event.preventDefault();\n const target = keyboardTarget(key, node);\n if (target && rects.some((rect) => rect.node.id === target.id))\n focusBar(target.id);\n }\n function showTooltip(x: number, y: number) {\n setTooltip({\n x: Math.min(x + 24, Math.max(0, plotWidth - TOOLTIP_WIDTH)),\n y: Math.max(8, Math.min(y + 50, height - TOOLTIP_HEIGHT)),\n });\n }\n\n const details = active && root && (\n <FlameDetails\n node={active}\n root={root}\n parent={parentOf(active)}\n unit={unit}\n countLabel={countLabel}\n meanLabel={meanLabel}\n />\n );\n\n return (\n <ChartFrame data-slot=\"flame-graph\" aria-label={label} ref={container}>\n <div className=\"labui:flex labui:flex-wrap labui:items-center labui:justify-between labui:gap-3 labui:border-b labui:p-4\">\n <div>\n <h2 className=\"labui:text-sm labui:font-semibold\">{label}</h2>\n <p className=\"labui:text-xs labui:text-muted-foreground\">\n Width is inclusive time, gaps are self time\n </p>\n </div>\n <div className=\"labui:flex labui:items-center labui:gap-2\">\n <Input\n aria-label=\"Search flame graph\"\n placeholder=\"Find a function or phase\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n className=\"labui:w-44\"\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n onClick={reset}\n disabled={!ownFocus && !focusId}\n >\n Reset zoom\n </Button>\n </div>\n </div>\n {!root || !focused || !rects.length ? (\n <p className=\"labui:p-8 labui:text-sm labui:text-muted-foreground\">\n No timing data in this selection.\n </p>\n ) : (\n <>\n <nav\n aria-label=\"Flame graph ancestry\"\n className=\"labui:flex labui:flex-wrap labui:items-center labui:gap-1 labui:border-b labui:px-4 labui:py-2\"\n >\n {ancestry(focused.id).map((node, index) => (\n <React.Fragment key={node.id}>\n {index > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"labui:text-muted-foreground\"\n >\n /\n </span>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n type=\"button\"\n onClick={() => zoom(node)}\n aria-current={\n node.id === focused.id ? \"location\" : undefined\n }\n >\n {node.name}\n </Button>\n </React.Fragment>\n ))}\n </nav>\n {query && (\n <div className=\"labui:max-h-48 labui:overflow-y-auto labui:border-b labui:p-3\">\n <p\n role=\"status\"\n className=\"labui:mb-2 labui:text-xs labui:text-muted-foreground\"\n >\n {matches.length} matching entries\n {matches.length > SEARCH_LIMIT\n ? `, showing first ${SEARCH_LIMIT}`\n : \"\"}\n </p>\n {matches.slice(0, SEARCH_LIMIT).map((node) => (\n <button\n key={node.id}\n type=\"button\"\n className=\"labui:block labui:w-full labui:rounded labui:px-2 labui:py-1 labui:text-left labui:text-xs labui:hover:bg-accent labui:focus-visible:outline-2\"\n onClick={() => zoom(node)}\n >\n {names(ancestry(node.id))}{\" \"}\n <span className=\"labui:text-muted-foreground\">\n {formatValue(node.total)} {unit}\n </span>\n </button>\n ))}\n </div>\n )}\n <div\n className=\"labui:relative labui:overflow-x-auto labui:p-4\"\n onPointerLeave={() => setTooltip(null)}\n >\n <svg\n ref={svg}\n viewBox={`0 0 ${plotWidth} ${height}`}\n width=\"100%\"\n height={height}\n aria-label=\"Timing call tree\"\n aria-describedby={helpId}\n >\n {rects\n .filter(\n (rect) => rect.width >= 0.5 || rect.node.id === focused.id,\n )\n .map(({ node, x, width: barWidth, depth }) => {\n const y = height - PLOT_PADDING - (depth + 1) * ROW_HEIGHT;\n const matched =\n !query || node.name.toLowerCase().includes(query);\n const current = node.id === (active?.id ?? focused.id);\n return (\n <g\n key={node.id}\n role=\"button\"\n tabIndex={current ? 0 : -1}\n data-node-id={node.id}\n aria-label={`${node.name}, total ${formatValue(node.total)} ${unit}, self ${formatValue(node.self)} ${unit}. Press to zoom in`}\n className=\"labui:cursor-pointer labui:outline-none labui:focus-visible:[&>rect]:stroke-foreground labui:focus-visible:[&>rect]:stroke-2\"\n onClick={() => zoom(node)}\n onKeyDown={(event) => keydown(event, node)}\n onFocus={() => {\n setInspected(node.id);\n setTooltip(null);\n }}\n onPointerMove={() => {\n setInspected(node.id);\n showTooltip(x, y);\n }}\n >\n <title>{`${names(ancestry(node.id))}\\nTotal ${formatValue(node.total)} ${unit}; self ${formatValue(node.self)} ${unit}; ${node.calls} ${countLabel.toLowerCase()}`}</title>\n <rect\n x={x}\n y={y}\n width={Math.max(0, barWidth - 1)}\n height={BAR_HEIGHT}\n rx={3}\n fill={node.color || paletteColor(node.name)}\n opacity={matched ? 1 : 0.25}\n stroke={\n node.id === active?.id\n ? \"var(--labui-foreground)\"\n : \"transparent\"\n }\n />\n {barWidth > 38 && (\n <text\n x={x + 7}\n y={y + 20}\n fill=\"var(--labui-primary-foreground)\"\n fontSize={12}\n pointerEvents=\"none\"\n >\n {barText(node, barWidth, root.total)}\n </text>\n )}\n </g>\n );\n })}\n </svg>\n {tooltip && (\n <div\n role=\"tooltip\"\n className=\"labui:pointer-events-none labui:absolute labui:z-10 labui:w-64 labui:rounded-lg labui:border labui:bg-popover labui:p-3 labui:text-popover-foreground labui:shadow-lg\"\n style={{\n left: tooltip.x + 16,\n top: tooltip.y,\n maxWidth: plotWidth,\n }}\n >\n {details}\n </div>\n )}\n </div>\n <div className=\"labui:grid labui:gap-4 labui:border-t labui:bg-muted/20 labui:p-4 labui:sm:grid-cols-2\">\n <div aria-live=\"polite\" aria-atomic=\"true\">\n {details}\n </div>\n <div className=\"labui:text-xs labui:leading-relaxed labui:text-muted-foreground\">\n {active && (\n <p className=\"labui:mb-2 labui:font-mono labui:break-words\">\n {names(ancestry(active.id))}\n </p>\n )}\n <p id={helpId}>\n Hover or focus to inspect. Click or press Enter to zoom. Use\n arrow keys to move through the tree, Escape to return to the\n caller, and the breadcrumbs to return further. Horizontal\n position groups calls; it is not a timeline.\n </p>\n </div>\n </div>\n </>\n )}\n </ChartFrame>\n );\n },\n);\n\nexport { FlameGraph };\n", "/** Inclusive and exclusive values use the same unit supplied to the chart. */\nexport type FlameNode = {\n id: string;\n parentId: string | null;\n name: string;\n total: number;\n self: number;\n calls: number;\n /** Caller-supplied source or location detail, shown without interpreting it. */\n detail?: string;\n color?: string;\n};\n\nexport type FlameRect = {\n node: FlameNode;\n x: number;\n width: number;\n depth: number;\n};\n\nconst MAX_DEPTH = 256;\n\nconst hasWeight = (node: FlameNode) =>\n Number.isFinite(node.total) && node.total > 0;\n\nexport function indexFlameNodes(nodes: FlameNode[]): Map<string, FlameNode> {\n return new Map(nodes.map((node) => [node.id, node]));\n}\n\nfunction childrenByParent(nodes: FlameNode[]): Map<string, FlameNode[]> {\n const children = new Map<string, FlameNode[]>();\n for (const node of nodes) {\n if (node.parentId === null) continue;\n const siblings = children.get(node.parentId) ?? [];\n siblings.push(node);\n children.set(node.parentId, siblings);\n }\n for (const siblings of children.values())\n siblings.sort(\n (a, b) => a.name.localeCompare(b.name) || a.id.localeCompare(b.id),\n );\n return children;\n}\n\n/** Lays out a caller-provided tree. Horizontal position is alphabetical, not time. */\nexport function flameLayout(\n nodes: FlameNode[],\n focusId: string,\n width: number,\n): FlameRect[] {\n const root = indexFlameNodes(nodes).get(focusId);\n if (!root || !hasWeight(root)) return [];\n const children = childrenByParent(nodes);\n const rects: FlameRect[] = [];\n const seen = new Set<string>();\n function visit(node: FlameNode, x: number, w: number, depth: number) {\n if (seen.has(node.id) || depth > MAX_DEPTH || !Number.isFinite(w) || w <= 0)\n return;\n seen.add(node.id);\n rects.push({ node, x, width: w, depth });\n const list = (children.get(node.id) ?? []).filter(hasWeight);\n // Children never draw wider than their parent, even when their totals disagree with it.\n const denominator = Math.max(\n node.total,\n list.reduce((sum, child) => sum + child.total, 0),\n );\n let left = x;\n for (const child of list) {\n const childWidth = (w * child.total) / denominator;\n visit(child, left, childWidth, depth + 1);\n left += childWidth;\n }\n }\n visit(root, 0, width, 0);\n return rects;\n}\n\n/** Ancestry from the root down to the node, for breadcrumbs and search results. */\nexport function flamePath(\n nodes: FlameNode[] | Map<string, FlameNode>,\n id: string,\n): FlameNode[] {\n const byId = nodes instanceof Map ? nodes : indexFlameNodes(nodes);\n const path: FlameNode[] = [];\n const seen = new Set<string>();\n let node = byId.get(id);\n while (node && !seen.has(node.id)) {\n seen.add(node.id);\n path.unshift(node);\n node = node.parentId === null ? undefined : byId.get(node.parentId);\n }\n return path;\n}\n", "import { useEffect, useRef, useState } from \"react\";\n\nconst DEFAULT_WIDTH = 900;\nconst MIN_WIDTH = 200;\n\n/** Measures a chart container with a ResizeObserver. Zero widths (hidden tabs, display none) keep the last size. */\nexport function useChartWidth() {\n const container = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState(DEFAULT_WIDTH);\n useEffect(() => {\n const element = container.current;\n if (!element) return;\n const observer = new ResizeObserver((entries) => {\n const measured = entries[0]?.contentRect.width ?? 0;\n if (measured > 0) setWidth(Math.max(MIN_WIDTH, measured));\n });\n observer.observe(element);\n return () => observer.disconnect();\n }, []);\n return { container, width };\n}\n", "import { useId, type ReactNode } from \"react\";\nimport { PlusIcon } from \"lucide-react\";\nimport { Button } from \"./button.js\";\nimport { Field, FieldLabel } from \"./field.js\";\nimport { Input } from \"./input.js\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select.js\";\n\ntype TextProps = {\n label: string;\n value: string;\n onChange: (value: string) => void;\n} & Omit<React.ComponentProps<typeof Input>, \"value\" | \"onChange\">;\n\nexport function TextField({ label, value, onChange, ...props }: TextProps) {\n const id = useId();\n return (\n <Field data-invalid={props[\"aria-invalid\"] || undefined}>\n <FieldLabel htmlFor={id}>{label}</FieldLabel>\n <Input\n id={id}\n autoComplete=\"off\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n {...props}\n />\n </Field>\n );\n}\n\nexport function SelectField({\n label,\n value,\n onChange,\n options,\n children,\n}: Pick<TextProps, \"label\" | \"value\" | \"onChange\"> & {\n options: { id: string; name: string; disabled?: boolean }[];\n children?: ReactNode;\n}) {\n const id = useId();\n return (\n <Field>\n <FieldLabel htmlFor={id}>{label}</FieldLabel>\n <div className=\"labui:flex labui:items-center labui:gap-2\">\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger id={id} className=\"labui:flex-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map((o) => (\n <SelectItem key={o.id} value={o.id} disabled={o.disabled}>\n {o.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {children}\n </div>\n </Field>\n );\n}\n\nexport function AddButton({\n children,\n onClick,\n}: {\n children: ReactNode;\n onClick: () => void;\n}) {\n return (\n <Button type=\"button\" variant=\"secondary\" onClick={onClick}>\n <PlusIcon />\n {children}\n </Button>\n );\n}\n", "import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CheckIcon, ChevronDownIcon } from \"lucide-react\";\nimport { cn, focusRing, invalidRing } from \"./classes.js\";\n\n// Radix refuses an empty item value, so an empty string travels as this placeholder\nconst empty = \"\u0000\";\nconst toRadix = (value?: string) => (value === \"\" ? empty : value);\nconst fromRadix = (value: string) => (value === empty ? \"\" : value);\n\nfunction Select({\n value,\n defaultValue,\n onValueChange,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return (\n <SelectPrimitive.Root\n data-slot=\"select\"\n value={toRadix(value)}\n defaultValue={toRadix(defaultValue)}\n onValueChange={\n onValueChange && ((next) => onValueChange(fromRadix(next)))\n }\n {...props}\n />\n );\n}\n\nfunction SelectValue(\n props: React.ComponentProps<typeof SelectPrimitive.Value>,\n) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n variant?: \"default\" | \"ghost\";\n }\n>(function SelectTrigger(\n { className, size = \"default\", variant = \"default\", children, ...props },\n ref,\n) {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n data-size={size}\n data-variant={variant}\n className={cn(\n \"labui:flex labui:h-(--labui-control-height) labui:w-full labui:min-w-0 labui:items-center labui:justify-between labui:gap-2\",\n \"labui:rounded-md labui:border labui:border-input labui:bg-input-background labui:px-(--labui-control-px) labui:shadow-xs\",\n \"labui:text-sm labui:whitespace-nowrap labui:transition-[color,box-shadow] labui:outline-none labui:data-[placeholder]:text-muted-foreground\",\n \"labui:data-[size=sm]:h-(--labui-control-height-sm) labui:data-[size=sm]:px-2 labui:data-[size=sm]:text-xs\",\n focusRing,\n invalidRing,\n \"labui:disabled:cursor-not-allowed labui:disabled:opacity-50\",\n \"labui:*:data-[slot=select-value]:truncate labui:[&_svg]:pointer-events-none labui:[&_svg]:shrink-0\",\n variant === \"ghost\" &&\n \"labui:w-auto labui:border-transparent labui:bg-transparent labui:shadow-none labui:hover:bg-accent\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"labui:size-4 labui:text-muted-foreground\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(function SelectContent(\n { className, children, side = \"bottom\", ...props },\n ref,\n) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n data-slot=\"select-content\"\n position=\"popper\"\n side={side}\n sideOffset={4}\n className={cn(\n \"labui:relative labui:z-50 labui:max-h-(--radix-select-content-available-height) labui:min-w-(--radix-select-trigger-width) labui:overflow-x-hidden labui:overflow-y-auto labui:rounded-lg labui:border labui:bg-popover/90 labui:p-1 labui:text-popover-foreground labui:shadow-lg labui:backdrop-blur-xl labui:backdrop-saturate-150\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Viewport>\n {React.Children.toArray(children).length ? (\n children\n ) : (\n <p className=\"labui:p-2 labui:text-sm labui:text-muted-foreground\">\n Empty\n </p>\n )}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n});\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item> & {\n // hint shows under the item in the list but never in the trigger\n hint?: React.ReactNode;\n }\n>(function SelectItem({ className, children, value, hint, ...props }, ref) {\n return (\n <SelectPrimitive.Item\n ref={ref}\n data-slot=\"select-item\"\n value={toRadix(value)!}\n className={cn(\n \"labui:relative labui:flex labui:w-full labui:cursor-default labui:flex-col labui:items-start labui:rounded-md labui:py-1.5 labui:pr-8 labui:pl-2 labui:text-sm labui:outline-none labui:select-none labui:data-[disabled]:pointer-events-none labui:data-[disabled]:opacity-50 labui:data-[highlighted]:bg-accent labui:data-[highlighted]:text-accent-foreground\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n {hint && (\n <span\n data-slot=\"select-item-hint\"\n className=\"labui:text-xs labui:text-muted-foreground\"\n >\n {hint}\n </span>\n )}\n <SelectPrimitive.ItemIndicator className=\"labui:absolute labui:top-1/2 labui:right-2 labui:flex labui:-translate-y-1/2 labui:items-center\">\n <CheckIcon className=\"labui:size-4 labui:text-primary\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n});\n\nexport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue };\n", "import * as React from \"react\";\nimport { ChartFrame } from \"./chart-frame.js\";\nimport { useChartWidth } from \"./use-chart-width.js\";\n\n/** Inclusive integer bounds, with a count of observations in each interval. */\nexport type HistogramBin = { from: number; to: number; count: number };\n\nexport type HistogramChartProps = {\n bins: HistogramBin[];\n label: string;\n xLabel: string;\n unit: string;\n selected?: number;\n onSelect: (index: number) => void;\n};\n\nconst HEIGHT = 260;\nconst LEFT = 60;\nconst TOP = 16;\nconst BOTTOM = 206;\nconst SPARKLINE_WIDTH = 180;\nconst SPARKLINE_HEIGHT = 44;\n\nconst formatNumber = (value: number) => value.toLocaleString();\nconst describeBin = (bin: HistogramBin) =>\n bin.from === bin.to\n ? formatNumber(bin.from)\n : `${formatNumber(bin.from)} to ${formatNumber(bin.to)}`;\nconst tallest = (bins: HistogramBin[]) =>\n bins.reduce((max, bin) => Math.max(max, bin.count), 1);\nconst clampIndex = (index: number, length: number) =>\n Math.max(0, Math.min(length - 1, index));\n\nfunction nextIndex(key: string, current: number, length: number) {\n if (key === \"Home\") return 0;\n if (key === \"End\") return length - 1;\n if (key === \"ArrowLeft\") return clampIndex(current - 1, length);\n if (key === \"ArrowRight\") return clampIndex(current + 1, length);\n return undefined;\n}\n\n/** Small presentation-only plot for a table cell. Its caller supplies the button. */\nconst HistogramSparkline = React.forwardRef<\n SVGSVGElement,\n { bins: HistogramBin[]; label: string }\n>(function HistogramSparkline({ bins, label }, ref) {\n const max = tallest(bins);\n const slot = SPARKLINE_WIDTH / bins.length;\n const baseline = SPARKLINE_HEIGHT - 2;\n return (\n <svg\n ref={ref}\n role=\"img\"\n aria-label={label}\n viewBox={`0 0 ${SPARKLINE_WIDTH} ${SPARKLINE_HEIGHT}`}\n className=\"labui:h-11 labui:w-44 labui:text-chart-2\"\n >\n <title>{label}</title>\n {bins.map((bin, i) => {\n const barHeight = (bin.count / max) * (baseline - 2);\n return (\n <rect\n key={bin.from}\n x={i * slot}\n y={baseline - barHeight}\n width={Math.max(1, slot - 1)}\n height={barHeight}\n rx={1}\n fill=\"currentColor\"\n />\n );\n })}\n <path\n d={`M0 ${baseline}H${SPARKLINE_WIDTH}`}\n stroke=\"var(--labui-border)\"\n />\n </svg>\n );\n});\n\n/** Discrete, equal-width bins. Pointer and keyboard inspection share one selection. */\nconst HistogramChart = React.forwardRef<HTMLDivElement, HistogramChartProps>(\n function HistogramChart(\n { bins, label, xLabel, unit, selected, onSelect },\n ref,\n ) {\n const { container, width } = useChartWidth();\n React.useImperativeHandle(ref, () => container.current as HTMLDivElement, [\n container,\n ]);\n const [inspected, setInspected] = React.useState(0);\n const helpId = React.useId();\n const activeIndex = Math.min(inspected, bins.length - 1);\n const active = bins[activeIndex];\n const right = width - 20;\n const max = tallest(bins);\n const total = bins.reduce((sum, bin) => sum + bin.count, 0);\n const barWidth = (right - LEFT) / bins.length;\n const count = active ? `${formatNumber(active.count)} ${unit}` : \"\";\n const share =\n active && total > 0\n ? ` (${((active.count / total) * 100).toFixed(1)}%)`\n : \"\";\n\n const binAt = (clientX: number, element: SVGSVGElement) => {\n const rect = element.getBoundingClientRect();\n const scale = rect.width ? width / rect.width : 1;\n const x = (clientX - rect.left) * scale;\n return clampIndex(\n Math.floor(((x - LEFT) / (right - LEFT)) * bins.length),\n bins.length,\n );\n };\n function keydown(event: React.KeyboardEvent<SVGSVGElement>) {\n const target = nextIndex(event.key, activeIndex, bins.length);\n if (target !== undefined) {\n event.preventDefault();\n setInspected(target);\n } else if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onSelect(activeIndex);\n }\n }\n function click(event: React.MouseEvent<SVGSVGElement>) {\n const index = binAt(event.clientX, event.currentTarget);\n setInspected(index);\n onSelect(index);\n }\n\n return (\n <ChartFrame\n data-slot=\"histogram-chart\"\n aria-label={label}\n ref={container}\n >\n <div className=\"labui:flex labui:flex-wrap labui:items-center labui:justify-between labui:gap-2 labui:border-b labui:px-4 labui:py-3 labui:text-sm\">\n <span className=\"labui:font-medium\">{label}</span>\n <span className=\"labui:text-muted-foreground labui:tabular-nums\">\n {formatNumber(total)} {unit}\n </span>\n </div>\n {active ? (\n <>\n <div\n className=\"labui:px-4 labui:pt-3 labui:text-sm labui:tabular-nums\"\n aria-live=\"polite\"\n >\n {xLabel} {describeBin(active)}: <strong>{count}</strong>\n {share}\n </div>\n <svg\n viewBox={`0 0 ${width} ${HEIGHT}`}\n className=\"labui:block labui:w-full labui:touch-pan-y labui:outline-none labui:focus-visible:ring-2 labui:focus-visible:ring-ring labui:focus-visible:ring-inset\"\n role=\"slider\"\n aria-label={`${label}, interactive histogram`}\n aria-describedby={helpId}\n aria-orientation=\"horizontal\"\n aria-valuemin={0}\n aria-valuemax={bins.length - 1}\n aria-valuenow={activeIndex}\n aria-valuetext={`${xLabel} ${describeBin(active)}: ${count}${share}`}\n tabIndex={0}\n onPointerMove={(event) =>\n setInspected(binAt(event.clientX, event.currentTarget))\n }\n onClick={click}\n onKeyDown={keydown}\n >\n {[0, 0.5, 1].map((fraction) => {\n const y = BOTTOM - fraction * (BOTTOM - TOP);\n return (\n <g key={fraction} aria-hidden=\"true\">\n <path\n d={`M${LEFT} ${y}H${right}`}\n stroke=\"var(--labui-border)\"\n />\n <text\n x={LEFT - 8}\n y={y + 4}\n textAnchor=\"end\"\n fill=\"var(--labui-muted-foreground)\"\n fontSize={11}\n >\n {formatNumber(Math.round(max * fraction))}\n </text>\n </g>\n );\n })}\n {bins.map((bin, i) => {\n const barHeight = (bin.count / max) * (BOTTOM - TOP);\n const highlighted = i === activeIndex || selected === i;\n return (\n <g key={bin.from} aria-hidden=\"true\">\n <rect\n x={LEFT + i * barWidth + 1}\n y={BOTTOM - barHeight}\n width={Math.max(1, barWidth - 2)}\n height={barHeight}\n fill={\n selected === i\n ? \"var(--labui-chart-1)\"\n : \"var(--labui-chart-2)\"\n }\n opacity={highlighted ? 1 : 0.65}\n rx={2}\n />\n {i === activeIndex && (\n <rect\n x={LEFT + i * barWidth}\n y={TOP}\n width={barWidth}\n height={BOTTOM - TOP}\n fill=\"var(--labui-foreground)\"\n opacity={0.06}\n />\n )}\n </g>\n );\n })}\n <text\n x={LEFT}\n y={BOTTOM + 20}\n fill=\"var(--labui-muted-foreground)\"\n fontSize={11}\n >\n {formatNumber(bins[0]!.from)}\n </text>\n <text\n x={right}\n y={BOTTOM + 20}\n textAnchor=\"end\"\n fill=\"var(--labui-muted-foreground)\"\n fontSize={11}\n >\n {formatNumber(bins.at(-1)!.to)}\n </text>\n <text\n x={(LEFT + right) / 2}\n y={HEIGHT - 8}\n textAnchor=\"middle\"\n fill=\"var(--labui-muted-foreground)\"\n fontSize={12}\n >\n {xLabel}\n </text>\n </svg>\n <p\n id={helpId}\n className=\"labui:border-t labui:px-4 labui:py-2 labui:text-xs labui:text-muted-foreground\"\n >\n Hover to inspect. Click a bar to select. Arrow keys inspect, Enter\n selects.\n </p>\n </>\n ) : (\n <p className=\"labui:p-6 labui:text-sm labui:text-muted-foreground\">\n No measurements to display.\n </p>\n )}\n </ChartFrame>\n );\n },\n);\n\nexport { HistogramChart, HistogramSparkline };\n", "import * as React from \"react\";\nimport { Button } from \"./button.js\";\nimport { cn } from \"./classes.js\";\nimport { Input } from \"./input.js\";\nimport { Textarea } from \"./textarea.js\";\n\nconst InputGroup = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function InputGroup({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"labui:group/input-group labui:relative labui:flex labui:h-(--labui-control-height) labui:w-full labui:min-w-0 labui:items-center labui:rounded-md labui:border labui:border-input labui:bg-input-background labui:shadow-xs labui:transition-[color,box-shadow] labui:outline-none\",\n \"labui:has-[>textarea]:h-auto\",\n \"labui:has-[>[data-align=inline-start]]:[&>[data-slot=input-group-control]]:pl-2\",\n \"labui:has-[>[data-align=inline-end]]:[&>[data-slot=input-group-control]]:pr-2\",\n \"labui:has-[[data-slot=input-group-control]:focus-visible]:border-ring labui:has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] labui:has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50\",\n \"labui:has-[[data-slot][aria-invalid=true]]:border-destructive labui:has-[[data-slot][aria-invalid=true]]:ring-destructive/20 labui:dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst addonAlignments = {\n \"inline-start\":\n \"labui:order-first labui:pl-2.5 labui:has-[>button]:ml-[-0.45rem] labui:has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"labui:order-last labui:pr-2.5 labui:has-[>button]:mr-[-0.4rem] labui:has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"labui:order-first labui:w-full labui:justify-start labui:px-3 labui:pt-3 labui:group-has-[>input]/input-group:pt-2.5 labui:[.labui\\\\:border-b]:pb-3\",\n \"block-end\":\n \"labui:order-last labui:w-full labui:justify-start labui:px-3 labui:pb-3 labui:group-has-[>input]/input-group:pb-2.5 labui:[.labui\\\\:border-t]:pt-3\",\n};\n\nfunction focusControl(event: React.MouseEvent<HTMLDivElement>) {\n if ((event.target as HTMLElement).closest(\"button\")) return;\n event.currentTarget.parentElement\n ?.querySelector<HTMLInputElement>(\"input, textarea\")\n ?.focus();\n}\n\nconst InputGroupAddon = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & {\n align?: keyof typeof addonAlignments;\n }\n>(function InputGroupAddon(\n { className, align = \"inline-start\", onClick, ...props },\n ref,\n) {\n return (\n // oxlint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions -- a click on the addon focuses the control\n <div\n ref={ref}\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(\n \"labui:flex labui:h-auto labui:cursor-text labui:items-center labui:justify-center labui:gap-2 labui:py-1.5 labui:text-sm labui:font-medium labui:text-muted-foreground labui:select-none labui:group-data-[disabled=true]/input-group:opacity-50 labui:[&>kbd]:rounded-[calc(var(--labui-radius)-5px)] labui:[&>svg:not([class*='size-'])]:size-4\",\n addonAlignments[align],\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) focusControl(event);\n }}\n {...props}\n />\n );\n});\n\nconst groupButtonSizes = {\n xs: \"labui:h-6 labui:gap-1 labui:rounded-[calc(var(--labui-radius)-5px)] labui:px-2 labui:has-[>svg]:px-2 labui:[&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"labui:h-8 labui:gap-1.5 labui:rounded-md labui:px-2.5 labui:has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"labui:size-6 labui:rounded-[calc(var(--labui-radius)-5px)] labui:p-0 labui:has-[>svg]:p-0\",\n \"icon-sm\": \"labui:size-8 labui:p-0 labui:has-[>svg]:p-0\",\n};\n\nconst InputGroupButton = React.forwardRef<\n HTMLButtonElement,\n Omit<React.ComponentPropsWithoutRef<typeof Button>, \"size\"> & {\n size?: keyof typeof groupButtonSizes;\n }\n>(function InputGroupButton(\n { className, type = \"button\", variant = \"ghost\", size = \"xs\", ...props },\n ref,\n) {\n return (\n <Button\n ref={ref}\n type={type}\n data-size={size}\n variant={variant}\n size={null}\n className={cn(\n \"labui:flex labui:items-center labui:gap-2 labui:text-sm labui:shadow-none\",\n groupButtonSizes[size],\n className,\n )}\n {...props}\n />\n );\n});\n\nconst InputGroupText = React.forwardRef<\n HTMLSpanElement,\n React.ComponentPropsWithoutRef<\"span\">\n>(function InputGroupText({ className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cn(\n \"labui:flex labui:items-center labui:gap-2 labui:text-sm labui:text-muted-foreground labui:[&_svg]:pointer-events-none labui:[&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst controlInGroup =\n \"labui:flex-1 labui:rounded-none labui:border-0 labui:bg-transparent labui:shadow-none labui:focus-visible:ring-0 labui:dark:bg-transparent\";\n\nconst InputGroupInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentPropsWithoutRef<typeof Input>\n>(function InputGroupInput({ className, ...props }, ref) {\n return (\n <Input\n ref={ref}\n data-slot=\"input-group-control\"\n className={cn(controlInGroup, className)}\n {...props}\n />\n );\n});\n\nconst InputGroupTextarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentPropsWithoutRef<typeof Textarea>\n>(function InputGroupTextarea({ className, ...props }, ref) {\n return (\n <Textarea\n ref={ref}\n data-slot=\"input-group-control\"\n className={cn(controlInGroup, \"labui:resize-none labui:py-3\", className)}\n {...props}\n />\n );\n});\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n};\n", "import * as React from \"react\";\nimport { cn, inputSurface } from \"./classes.js\";\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentPropsWithoutRef<\"textarea\">\n>(function Textarea({ className, ...props }, ref) {\n return (\n <textarea\n ref={ref}\n data-slot=\"textarea\"\n className={cn(\n inputSurface,\n \"labui:flex labui:field-sizing-content labui:min-h-16 labui:px-(--labui-control-px) labui:py-2\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Textarea };\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst Kbd = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"kbd\">\n>(function Kbd({ className, ...props }, ref) {\n return (\n <kbd\n ref={ref}\n data-slot=\"kbd\"\n className={cn(\n \"labui:pointer-events-none labui:inline-flex labui:h-5 labui:w-fit labui:min-w-5 labui:items-center labui:justify-center labui:gap-1 labui:rounded-sm labui:bg-muted labui:px-1 labui:font-sans labui:text-xs labui:font-medium labui:text-muted-foreground labui:select-none\",\n \"labui:[&_svg:not([class*='size-'])]:size-3\",\n \"labui:[[data-slot=tooltip-content]_&]:bg-background/20 labui:[[data-slot=tooltip-content]_&]:text-background\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst KbdGroup = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"kbd\">\n>(function KbdGroup({ className, ...props }, ref) {\n return (\n <kbd\n ref={ref}\n data-slot=\"kbd-group\"\n className={cn(\n \"labui:inline-flex labui:items-center labui:gap-1\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Kbd, KbdGroup };\n", "import * as React from \"react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { cn, focusRing, invalidRing } from \"./classes.js\";\n\nconst NativeSelect = React.forwardRef<\n HTMLSelectElement,\n Omit<React.ComponentPropsWithoutRef<\"select\">, \"size\"> & {\n size?: \"sm\" | \"default\";\n }\n>(function NativeSelect({ className, size = \"default\", ...props }, ref) {\n return (\n <div\n data-slot=\"native-select-wrapper\"\n className={cn(\n \"labui:group/native-select labui:relative labui:w-full labui:min-w-0 labui:has-[select:disabled]:opacity-50\",\n className,\n )}\n >\n <select\n ref={ref}\n data-slot=\"native-select\"\n data-size={size}\n className={cn(\n \"labui:h-(--labui-control-height) labui:w-full labui:min-w-0 labui:appearance-none labui:rounded-md labui:border labui:border-input labui:bg-input-background labui:px-(--labui-control-px) labui:py-1 labui:pr-9 labui:text-sm labui:shadow-xs labui:transition-[color,box-shadow] labui:outline-none labui:disabled:pointer-events-none labui:disabled:cursor-not-allowed labui:data-[size=sm]:h-(--labui-control-height-sm) labui:dark:hover:bg-input/50\",\n focusRing,\n invalidRing,\n )}\n {...props}\n />\n <ChevronDownIcon\n data-slot=\"native-select-icon\"\n aria-hidden=\"true\"\n className=\"labui:pointer-events-none labui:absolute labui:top-1/2 labui:right-3 labui:size-4 labui:-translate-y-1/2 labui:text-muted-foreground labui:opacity-50 labui:select-none\"\n />\n </div>\n );\n});\n\nconst NativeSelectOption = React.forwardRef<\n HTMLOptionElement,\n React.ComponentPropsWithoutRef<\"option\">\n>(function NativeSelectOption({ className, ...props }, ref) {\n return (\n <option\n ref={ref}\n data-slot=\"native-select-option\"\n className={cn(\"labui:bg-[Canvas] labui:text-[CanvasText]\", className)}\n {...props}\n />\n );\n});\n\nconst NativeSelectOptGroup = React.forwardRef<\n HTMLOptGroupElement,\n React.ComponentPropsWithoutRef<\"optgroup\">\n>(function NativeSelectOptGroup({ className, ...props }, ref) {\n return (\n <optgroup\n ref={ref}\n data-slot=\"native-select-optgroup\"\n className={cn(\"labui:bg-[Canvas] labui:text-[CanvasText]\", className)}\n {...props}\n />\n );\n});\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption };\n", "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cn } from \"./classes.js\";\n\nfunction moveFocus(nav: HTMLElement, step: 1 | -1) {\n const tabs = [...nav.querySelectorAll<HTMLElement>(\"[data-slot=nav-tab]\")];\n if (!tabs.length) return;\n const index = tabs.indexOf(document.activeElement as HTMLElement);\n const next = index < 0 ? 0 : (index + step + tabs.length) % tabs.length;\n tabs[next]?.focus();\n}\n\nconst NavTabs = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\">\n>(function NavTabs({ className, onKeyDown, ...props }, ref) {\n return (\n // oxlint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- arrow keys move between the tabs\n <nav\n ref={ref}\n data-slot=\"nav-tabs\"\n className={cn(\n \"labui:flex labui:gap-1 labui:overflow-x-auto labui:border-b labui:pb-1 labui:[scrollbar-width:none]\",\n className,\n )}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key !== \"ArrowRight\" && event.key !== \"ArrowLeft\") return;\n event.preventDefault();\n moveFocus(event.currentTarget, event.key === \"ArrowRight\" ? 1 : -1);\n }}\n {...props}\n />\n );\n});\n\nconst NavTab = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & { active?: boolean; asChild?: boolean }\n>(function NavTab(\n { active = false, asChild = false, className, ...props },\n ref,\n) {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n ref={ref}\n data-slot=\"nav-tab\"\n data-state={active ? \"active\" : \"inactive\"}\n aria-current={active ? \"page\" : undefined}\n className={cn(\n \"labui:relative labui:inline-flex labui:h-8 labui:shrink-0 labui:items-center labui:gap-1.5 labui:rounded-md labui:px-3 labui:text-sm labui:font-medium labui:whitespace-nowrap labui:text-muted-foreground labui:transition-colors labui:outline-none labui:hover:bg-accent/60 labui:hover:text-foreground labui:focus-visible:ring-[3px] labui:focus-visible:ring-ring/50 labui:data-[state=active]:text-foreground\",\n \"labui:after:absolute labui:after:inset-x-2 labui:after:-bottom-[5px] labui:after:h-0.5 labui:after:rounded-full labui:after:bg-primary labui:after:opacity-0 labui:after:transition-opacity labui:data-[state=active]:after:opacity-100\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { NavTabs, NavTab };\n", "import * as React from \"react\";\nimport { ArrowLeftIcon } from \"lucide-react\";\nimport { Button } from \"./button.js\";\nimport { cn } from \"./classes.js\";\n\nconst PageActions = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function PageActions({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"page-actions\"\n className={cn(\n \"labui:ml-auto labui:flex labui:max-w-full labui:flex-wrap labui:items-center labui:justify-end labui:gap-2 labui:[--labui-control-height:2.25rem] labui:empty:hidden labui:[@media(pointer:coarse)]:[--labui-control-height:2.75rem]\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst PageHeaderText = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function PageHeaderText({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"page-header-text\"\n className={cn(\n \"labui:flex labui:min-w-0 labui:flex-col labui:gap-1\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst PageEyebrow = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentPropsWithoutRef<\"p\">\n>(function PageEyebrow({ className, ...props }, ref) {\n return (\n <p\n ref={ref}\n data-slot=\"page-eyebrow\"\n className={cn(\n \"labui:text-xs labui:font-semibold labui:tracking-[0.14em] labui:text-muted-foreground labui:uppercase\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst PageTitle = React.forwardRef<\n HTMLHeadingElement,\n React.ComponentPropsWithoutRef<\"h1\">\n>(function PageTitle({ className, ...props }, ref) {\n return (\n // oxlint-disable-next-line jsx-a11y/heading-has-content -- callers pass children\n <h1\n ref={ref}\n data-slot=\"page-title\"\n className={cn(\n \"labui:font-display labui:text-2xl labui:font-bold labui:tracking-tight\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst PageDescription = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentPropsWithoutRef<\"p\">\n>(function PageDescription({ className, ...props }, ref) {\n return (\n <p\n ref={ref}\n data-slot=\"page-description\"\n className={cn(\"labui:text-sm labui:text-muted-foreground\", className)}\n {...props}\n />\n );\n});\n\ntype PageHeaderProps = Omit<\n React.ComponentPropsWithoutRef<\"header\">,\n \"title\"\n> & {\n title?: React.ReactNode;\n eyebrow?: React.ReactNode;\n description?: React.ReactNode;\n leading?: React.ReactNode;\n actions?: React.ReactNode;\n variant?: \"bar\";\n};\n\nconst PageHeader = React.forwardRef<HTMLElement, PageHeaderProps>(\n function PageHeader(\n {\n title,\n eyebrow,\n description,\n leading,\n actions,\n variant,\n className,\n children,\n ...props\n },\n ref,\n ) {\n const hasText = title || eyebrow || description;\n return (\n <header\n ref={ref}\n data-slot=\"page-header\"\n data-variant={variant}\n className={cn(\n \"labui:flex labui:flex-wrap labui:items-center labui:gap-3\",\n variant === \"bar\" &&\n \"labui:border-b labui:px-4 labui:py-3 labui:sm:px-6\",\n className,\n )}\n {...props}\n >\n {leading}\n {hasText && (\n <PageHeaderText>\n {eyebrow && <PageEyebrow>{eyebrow}</PageEyebrow>}\n {title && <PageTitle>{title}</PageTitle>}\n {description && <PageDescription>{description}</PageDescription>}\n </PageHeaderText>\n )}\n {children}\n <PageActions>{actions}</PageActions>\n </header>\n );\n },\n);\n\nconst Page = React.forwardRef<\n HTMLDivElement,\n Omit<React.ComponentPropsWithoutRef<\"div\">, \"title\"> & {\n title?: React.ReactNode;\n actions?: React.ReactNode;\n }\n>(function Page({ title, actions, className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"page\"\n className={cn(\n \"labui:flex labui:min-w-0 labui:flex-col labui:gap-4\",\n className,\n )}\n {...props}\n >\n {title && <PageHeader title={title} actions={actions} />}\n {children}\n </div>\n );\n});\n\nconst Back = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & { label: string }\n>(function Back({ label, ...props }, ref) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"labui:-ml-2.5 labui:self-start\"\n asChild\n >\n <a ref={ref} {...props}>\n <ArrowLeftIcon />\n {label}\n </a>\n </Button>\n );\n});\n\nexport {\n Back,\n Page,\n PageActions,\n PageDescription,\n PageEyebrow,\n PageHeader,\n PageHeaderText,\n PageTitle,\n};\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\nimport { Sidebar, SidebarMenuButton } from \"./sidebar.js\";\n\nconst Rail = React.forwardRef<\n HTMLDivElement,\n Omit<React.ComponentPropsWithoutRef<typeof Sidebar>, \"collapsible\">\n>(function Rail({ className, ...props }, ref) {\n return (\n <Sidebar\n ref={ref}\n collapsible=\"none\"\n data-slot=\"rail\"\n className={cn(\n \"labui:sticky labui:top-0 labui:h-svh labui:w-[4.75rem] labui:shrink-0 labui:border-r labui:border-sidebar-border\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst RailItem = React.forwardRef<\n HTMLButtonElement,\n Omit<React.ComponentPropsWithoutRef<typeof SidebarMenuButton>, \"isActive\"> & {\n active?: boolean;\n }\n>(function RailItem({ active = false, className, ...props }, ref) {\n return (\n <SidebarMenuButton\n ref={ref}\n data-slot=\"rail-item\"\n isActive={active}\n className={cn(\n \"labui:relative labui:h-auto labui:flex-col labui:items-center labui:justify-center labui:gap-1 labui:rounded-lg labui:px-1 labui:py-2 labui:text-[10px] labui:leading-none labui:font-medium labui:tracking-tight labui:[&>svg]:size-5 labui:[&>span:last-child]:truncate\",\n \"labui:before:absolute labui:before:inset-y-2 labui:before:left-0 labui:before:w-0.5 labui:before:rounded-full labui:before:bg-sidebar-primary labui:before:opacity-0 labui:before:transition-opacity labui:data-[active=true]:before:opacity-100\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Rail, RailItem };\n", "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { PanelLeftIcon } from \"lucide-react\";\nimport { Button } from \"./button.js\";\nimport { cn } from \"./classes.js\";\nimport { Input } from \"./input.js\";\nimport { Separator } from \"./separator.js\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { useTabActive } from \"./tab-state.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip.js\";\nimport { useIsMobile } from \"./use-mobile.js\";\n\nconst widths = { expanded: \"16rem\", mobile: \"18rem\", icon: \"3rem\" };\n\ntype SidebarState = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarState | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) throw new Error(\"useSidebar needs a SidebarProvider above it\");\n return context;\n}\n\nfunction useShortcut(key: string | null, run: () => void) {\n const active = useTabActive();\n React.useEffect(() => {\n if (!key || !active) return;\n const press = (event: KeyboardEvent) => {\n if (event.key !== key || !(event.metaKey || event.ctrlKey)) return;\n event.preventDefault();\n run();\n };\n window.addEventListener(\"keydown\", press);\n return () => window.removeEventListener(\"keydown\", press);\n }, [key, active, run]);\n}\n\nconst SidebarProvider = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n shortcut?: string | null;\n }\n>(function SidebarProvider(\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n shortcut = \"b\",\n className,\n style,\n children,\n ...props\n },\n ref,\n) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n const [ownOpen, setOwnOpen] = React.useState(defaultOpen);\n const open = openProp ?? ownOpen;\n const setOpen = React.useCallback(\n (next: boolean) => {\n setOwnOpen(next);\n onOpenChange?.(next);\n },\n [onOpenChange],\n );\n const toggleSidebar = React.useCallback(\n () => (isMobile ? setOpenMobile((was) => !was) : setOpen(!open)),\n [isMobile, open, setOpen],\n );\n useShortcut(shortcut, toggleSidebar);\n\n const value = React.useMemo<SidebarState>(\n () => ({\n state: open ? \"expanded\" : \"collapsed\",\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [open, setOpen, isMobile, openMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={value}>\n <TooltipProvider delayDuration={0}>\n <div\n ref={ref}\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--labui-sidebar-width\": widths.expanded,\n \"--labui-sidebar-width-icon\": widths.icon,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"labui:group/sidebar-wrapper labui:flex labui:min-h-svh labui:w-full labui:has-data-[variant=inset]:bg-sidebar\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n});\n\ntype SidebarProps = React.ComponentPropsWithoutRef<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n};\n\nfunction MobileSidebar({\n side,\n children,\n ...props\n}: Pick<SidebarProps, \"side\" | \"children\"> &\n React.ComponentProps<typeof Sheet>) {\n const { openMobile, setOpenMobile } = useSidebar();\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n side={side}\n showCloseButton={false}\n style={\n { \"--labui-sidebar-width\": widths.mobile } as React.CSSProperties\n }\n className=\"labui:w-(--labui-sidebar-width) labui:bg-sidebar labui:p-0 labui:text-sidebar-foreground\"\n >\n <SheetHeader className=\"labui:sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Navigation</SheetDescription>\n </SheetHeader>\n <div className=\"labui:flex labui:h-full labui:w-full labui:flex-col\">\n {children}\n </div>\n </SheetContent>\n </Sheet>\n );\n}\n\nconst Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>(function Sidebar(\n {\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n },\n ref,\n) {\n const { isMobile, state } = useSidebar();\n const padded = variant === \"floating\" || variant === \"inset\";\n\n if (collapsible === \"none\")\n return (\n <div\n ref={ref}\n data-slot=\"sidebar\"\n className={cn(\n \"labui:flex labui:h-full labui:w-(--labui-sidebar-width) labui:flex-col labui:bg-sidebar labui:text-sidebar-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n\n if (isMobile) return <MobileSidebar side={side}>{children}</MobileSidebar>;\n\n return (\n <div\n ref={ref}\n data-slot=\"sidebar\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n className=\"labui:group labui:peer labui:hidden labui:text-sidebar-foreground labui:md:block\"\n >\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"labui:relative labui:w-(--labui-sidebar-width) labui:bg-transparent labui:transition-[width] labui:duration-200 labui:ease-linear\",\n \"labui:group-data-[collapsible=offcanvas]:w-0 labui:group-data-[side=right]:rotate-180\",\n padded\n ? \"labui:group-data-[collapsible=icon]:w-[calc(var(--labui-sidebar-width-icon)+(--spacing(4)))]\"\n : \"labui:group-data-[collapsible=icon]:w-(--labui-sidebar-width-icon)\",\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"labui:fixed labui:inset-y-0 labui:z-10 labui:hidden labui:h-svh labui:w-(--labui-sidebar-width) labui:transition-[left,right,width] labui:duration-200 labui:ease-linear labui:md:flex\",\n side === \"left\"\n ? \"labui:left-0 labui:group-data-[collapsible=offcanvas]:left-[calc(var(--labui-sidebar-width)*-1)]\"\n : \"labui:right-0 labui:group-data-[collapsible=offcanvas]:right-[calc(var(--labui-sidebar-width)*-1)]\",\n padded\n ? \"labui:p-2 labui:group-data-[collapsible=icon]:w-[calc(var(--labui-sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"labui:group-data-[collapsible=icon]:w-(--labui-sidebar-width-icon) labui:group-data-[side=left]:border-r labui:group-data-[side=right]:border-l\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"labui:flex labui:h-full labui:w-full labui:flex-col labui:bg-sidebar labui:group-data-[variant=floating]:rounded-lg labui:group-data-[variant=floating]:border labui:group-data-[variant=floating]:border-sidebar-border labui:group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n});\n\nconst SidebarTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<typeof Button>\n>(function SidebarTrigger({ className, onClick, ...props }, ref) {\n const { toggleSidebar } = useSidebar();\n return (\n <Button\n ref={ref}\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon-sm\"\n className={cn(\"labui:size-7\", className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"labui:sr-only\">Toggle sidebar</span>\n </Button>\n );\n});\n\nconst SidebarRail = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<\"button\">\n>(function SidebarRail({ className, ...props }, ref) {\n const { toggleSidebar } = useSidebar();\n return (\n <button\n ref={ref}\n type=\"button\"\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle sidebar\"\n className={cn(\n \"labui:absolute labui:inset-y-0 labui:z-20 labui:hidden labui:w-4 labui:-translate-x-1/2 labui:transition-all labui:ease-linear labui:group-data-[side=left]:-right-4 labui:group-data-[side=right]:left-0 labui:after:absolute labui:after:inset-y-0 labui:after:left-1/2 labui:after:w-[2px] labui:hover:after:bg-sidebar-border labui:sm:flex\",\n \"labui:in-data-[side=left]:cursor-w-resize labui:in-data-[side=right]:cursor-e-resize\",\n \"labui:[[data-side=left][data-state=collapsed]_&]:cursor-e-resize labui:[[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"labui:group-data-[collapsible=offcanvas]:translate-x-0 labui:group-data-[collapsible=offcanvas]:after:left-full labui:hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n \"labui:[[data-side=left][data-collapsible=offcanvas]_&]:-right-2 labui:[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SidebarInset = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"main\">\n>(function SidebarInset({ className, ...props }, ref) {\n return (\n <main\n ref={ref}\n data-slot=\"sidebar-inset\"\n className={cn(\n \"labui:relative labui:flex labui:w-full labui:flex-1 labui:flex-col labui:bg-background\",\n \"labui:md:peer-data-[variant=inset]:m-2 labui:md:peer-data-[variant=inset]:ml-0 labui:md:peer-data-[variant=inset]:rounded-xl labui:md:peer-data-[variant=inset]:shadow-sm labui:md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SidebarInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentPropsWithoutRef<typeof Input>\n>(function SidebarInput({ className, ...props }, ref) {\n return (\n <Input\n ref={ref}\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\n \"labui:h-8 labui:w-full labui:bg-background labui:shadow-none\",\n className,\n )}\n {...props}\n />\n );\n});\n\nfunction section(slot: string, classes: string) {\n const Section = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n >(function Section({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot={`sidebar-${slot}`}\n data-sidebar={slot}\n className={cn(classes, className)}\n {...props}\n />\n );\n });\n return Section;\n}\n\nconst SidebarHeader = section(\n \"header\",\n \"labui:flex labui:flex-col labui:gap-2 labui:p-2\",\n);\nconst SidebarFooter = section(\n \"footer\",\n \"labui:flex labui:flex-col labui:gap-2 labui:p-2\",\n);\nconst SidebarContent = section(\n \"content\",\n \"labui:flex labui:min-h-0 labui:flex-1 labui:flex-col labui:gap-2 labui:overflow-auto labui:group-data-[collapsible=icon]:overflow-hidden\",\n);\nconst SidebarGroup = section(\n \"group\",\n \"labui:relative labui:flex labui:w-full labui:min-w-0 labui:flex-col labui:p-2\",\n);\nconst SidebarGroupContent = section(\n \"group-content\",\n \"labui:w-full labui:text-sm\",\n);\n\nconst SidebarSeparator = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof Separator>\n>(function SidebarSeparator({ className, ...props }, ref) {\n return (\n <Separator\n ref={ref}\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\n \"labui:mx-2 labui:bg-sidebar-border labui:data-[orientation=horizontal]:w-auto\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SidebarGroupLabel = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & { asChild?: boolean }\n>(function SidebarGroupLabel({ className, asChild = false, ...props }, ref) {\n const Comp = asChild ? Slot : \"div\";\n return (\n <Comp\n ref={ref}\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"labui:flex labui:h-8 labui:shrink-0 labui:items-center labui:rounded-md labui:px-2 labui:text-xs labui:font-medium labui:text-sidebar-foreground/70 labui:ring-sidebar-ring labui:outline-hidden labui:transition-[margin,opacity] labui:duration-200 labui:ease-linear labui:focus-visible:ring-2 labui:[&>svg]:size-4 labui:[&>svg]:shrink-0\",\n \"labui:group-data-[collapsible=icon]:-mt-8 labui:group-data-[collapsible=icon]:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SidebarGroupAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<\"button\"> & { asChild?: boolean }\n>(function SidebarGroupAction({ className, asChild = false, ...props }, ref) {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n ref={ref}\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"labui:absolute labui:top-3.5 labui:right-3 labui:flex labui:aspect-square labui:w-5 labui:items-center labui:justify-center labui:rounded-md labui:p-0 labui:text-sidebar-foreground labui:ring-sidebar-ring labui:outline-hidden labui:transition-transform labui:hover:bg-sidebar-accent labui:hover:text-sidebar-accent-foreground labui:focus-visible:ring-2 labui:[&>svg]:size-4 labui:[&>svg]:shrink-0\",\n \"labui:after:absolute labui:after:-inset-2 labui:md:after:hidden\",\n \"labui:group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SidebarMenu = React.forwardRef<\n HTMLUListElement,\n React.ComponentPropsWithoutRef<\"ul\">\n>(function SidebarMenu({ className, ...props }, ref) {\n return (\n <ul\n ref={ref}\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\n \"labui:flex labui:w-full labui:min-w-0 labui:list-none labui:flex-col labui:gap-1\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SidebarMenuItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(function SidebarMenuItem({ className, ...props }, ref) {\n return (\n <li\n ref={ref}\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"labui:group/menu-item labui:relative\", className)}\n {...props}\n />\n );\n});\n\nconst menuButtonVariants = {\n default:\n \"labui:hover:bg-sidebar-accent labui:hover:text-sidebar-accent-foreground\",\n outline:\n \"labui:bg-background labui:shadow-[0_0_0_1px_var(--labui-sidebar-border)] labui:hover:bg-sidebar-accent labui:hover:text-sidebar-accent-foreground labui:hover:shadow-[0_0_0_1px_var(--labui-sidebar-accent)]\",\n};\n\nconst menuButtonSizes = {\n default: \"labui:h-8 labui:text-sm\",\n sm: \"labui:h-7 labui:text-xs\",\n lg: \"labui:h-12 labui:text-sm labui:group-data-[collapsible=icon]:p-0!\",\n};\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n variant?: keyof typeof menuButtonVariants;\n size?: keyof typeof menuButtonSizes;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n }\n>(function SidebarMenuButton(\n {\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n },\n ref,\n) {\n const Comp = asChild ? Slot : \"button\";\n const { isMobile, state } = useSidebar();\n const button = (\n <Comp\n ref={ref}\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"labui:peer/menu-button labui:flex labui:w-full labui:items-center labui:gap-2 labui:overflow-hidden labui:rounded-md labui:p-2 labui:text-left labui:text-sm labui:ring-sidebar-ring labui:outline-hidden labui:transition-[width,height,padding] labui:group-has-data-[sidebar=menu-action]/menu-item:pr-8 labui:group-data-[collapsible=icon]:size-8! labui:group-data-[collapsible=icon]:p-2! labui:focus-visible:ring-2 labui:active:bg-sidebar-accent labui:active:text-sidebar-accent-foreground labui:disabled:pointer-events-none labui:disabled:opacity-50 labui:aria-disabled:pointer-events-none labui:aria-disabled:opacity-50 labui:data-[active=true]:bg-sidebar-accent labui:data-[active=true]:font-medium labui:data-[active=true]:text-sidebar-accent-foreground labui:data-[state=open]:hover:bg-sidebar-accent labui:data-[state=open]:hover:text-sidebar-accent-foreground labui:[&>span:last-child]:truncate labui:[&>svg]:size-4 labui:[&>svg]:shrink-0\",\n menuButtonVariants[variant],\n menuButtonSizes[size],\n className,\n )}\n {...props}\n />\n );\n if (!tooltip) return button;\n const content = typeof tooltip === \"string\" ? { children: tooltip } : tooltip;\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...content}\n />\n </Tooltip>\n );\n});\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n }\n>(function SidebarMenuAction(\n { className, asChild = false, showOnHover = false, ...props },\n ref,\n) {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n ref={ref}\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"labui:absolute labui:top-1.5 labui:right-1 labui:flex labui:aspect-square labui:w-5 labui:items-center labui:justify-center labui:rounded-md labui:p-0 labui:text-sidebar-foreground labui:ring-sidebar-ring labui:outline-hidden labui:transition-transform labui:peer-hover/menu-button:text-sidebar-accent-foreground labui:hover:bg-sidebar-accent labui:hover:text-sidebar-accent-foreground labui:focus-visible:ring-2 labui:[&>svg]:size-4 labui:[&>svg]:shrink-0\",\n \"labui:after:absolute labui:after:-inset-2 labui:md:after:hidden\",\n \"labui:peer-data-[size=sm]/menu-button:top-1 labui:peer-data-[size=default]/menu-button:top-1.5 labui:peer-data-[size=lg]/menu-button:top-2.5\",\n \"labui:group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"labui:group-focus-within/menu-item:opacity-100 labui:group-hover/menu-item:opacity-100 labui:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground labui:data-[state=open]:opacity-100 labui:md:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SidebarMenuBadge = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function SidebarMenuBadge({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"labui:pointer-events-none labui:absolute labui:right-1 labui:flex labui:h-5 labui:min-w-5 labui:items-center labui:justify-center labui:rounded-md labui:px-1 labui:text-xs labui:font-medium labui:text-sidebar-foreground labui:tabular-nums labui:select-none\",\n \"labui:peer-hover/menu-button:text-sidebar-accent-foreground labui:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"labui:peer-data-[size=sm]/menu-button:top-1 labui:peer-data-[size=default]/menu-button:top-1.5 labui:peer-data-[size=lg]/menu-button:top-2.5\",\n \"labui:group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & { showIcon?: boolean; width?: string }\n>(function SidebarMenuSkeleton(\n { className, showIcon = false, width = \"70%\", ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\n \"labui:flex labui:h-8 labui:items-center labui:gap-2 labui:rounded-md labui:px-2\",\n className,\n )}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"labui:size-4 labui:rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"labui:h-4 labui:flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={{ maxWidth: width }}\n />\n </div>\n );\n});\n\nconst SidebarMenuSub = React.forwardRef<\n HTMLUListElement,\n React.ComponentPropsWithoutRef<\"ul\">\n>(function SidebarMenuSub({ className, ...props }, ref) {\n return (\n <ul\n ref={ref}\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"labui:mx-3.5 labui:flex labui:min-w-0 labui:translate-x-px labui:list-none labui:flex-col labui:gap-1 labui:border-l labui:border-sidebar-border labui:px-2.5 labui:py-0.5\",\n \"labui:group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SidebarMenuSubItem = React.forwardRef<\n HTMLLIElement,\n React.ComponentPropsWithoutRef<\"li\">\n>(function SidebarMenuSubItem({ className, ...props }, ref) {\n return (\n <li\n ref={ref}\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"labui:group/menu-sub-item labui:relative\", className)}\n {...props}\n />\n );\n});\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentPropsWithoutRef<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n }\n>(function SidebarMenuSubButton(\n { asChild = false, size = \"md\", isActive = false, className, ...props },\n ref,\n) {\n const Comp = asChild ? Slot : \"a\";\n return (\n <Comp\n ref={ref}\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"labui:flex labui:h-7 labui:min-w-0 labui:-translate-x-px labui:items-center labui:gap-2 labui:overflow-hidden labui:rounded-md labui:px-2 labui:text-sidebar-foreground labui:ring-sidebar-ring labui:outline-hidden labui:hover:bg-sidebar-accent labui:hover:text-sidebar-accent-foreground labui:focus-visible:ring-2 labui:active:bg-sidebar-accent labui:active:text-sidebar-accent-foreground labui:disabled:pointer-events-none labui:disabled:opacity-50 labui:aria-disabled:pointer-events-none labui:aria-disabled:opacity-50 labui:[&>span:last-child]:truncate labui:[&>svg]:size-4 labui:[&>svg]:shrink-0 labui:[&>svg]:text-sidebar-accent-foreground\",\n \"labui:data-[active=true]:bg-sidebar-accent labui:data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" ? \"labui:text-xs\" : \"labui:text-sm\",\n \"labui:group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n", "import * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\nimport { closeButton, cn, overlay } from \"./classes.js\";\nimport { useOverlayOpen } from \"./overlay.js\";\n\nfunction Sheet({\n open,\n defaultOpen,\n onOpenChange,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Root>) {\n const [current, change] = useOverlayOpen(open, onOpenChange, defaultOpen);\n return (\n <SheetPrimitive.Root\n data-slot=\"sheet\"\n open={current}\n onOpenChange={change}\n {...props}\n />\n );\n}\n\nconst SheetTrigger = SheetPrimitive.Trigger;\nconst SheetClose = SheetPrimitive.Close;\n\nconst sheetSides = {\n right:\n \"labui:inset-y-0 labui:right-0 labui:h-full labui:w-3/4 labui:rounded-l-(--labui-radius-dialog) labui:border-l labui:sm:max-w-sm labui:data-[state=open]:animate-slide-in-right labui:data-[state=closed]:animate-slide-out-right\",\n left: \"labui:inset-y-0 labui:left-0 labui:h-full labui:w-3/4 labui:rounded-r-(--labui-radius-dialog) labui:border-r labui:sm:max-w-sm labui:data-[state=open]:animate-slide-in-left labui:data-[state=closed]:animate-slide-out-left\",\n top: \"labui:inset-x-0 labui:top-0 labui:h-auto labui:rounded-b-(--labui-radius-dialog) labui:border-b labui:data-[state=open]:animate-slide-in-top labui:data-[state=closed]:animate-slide-out-top\",\n bottom:\n \"labui:inset-x-0 labui:bottom-0 labui:h-auto labui:rounded-t-(--labui-radius-dialog) labui:border-t labui:data-[state=open]:animate-slide-in-bottom labui:data-[state=closed]:animate-slide-out-bottom\",\n};\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content> & {\n side?: keyof typeof sheetSides;\n showCloseButton?: boolean;\n }\n>(function SheetContent(\n { className, children, side = \"right\", showCloseButton = true, ...props },\n ref,\n) {\n return (\n <SheetPrimitive.Portal>\n <SheetPrimitive.Overlay data-slot=\"sheet-overlay\" className={overlay} />\n <SheetPrimitive.Content\n ref={ref}\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n \"labui:fixed labui:z-50 labui:flex labui:max-h-dvh labui:flex-col labui:gap-5 labui:overflow-y-auto labui:bg-popover labui:text-popover-foreground labui:shadow-sm labui:outline-none\",\n sheetSides[side],\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close data-slot=\"sheet-close\" className={closeButton}>\n <XIcon />\n <span className=\"labui:sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPrimitive.Portal>\n );\n});\n\nconst SheetHeader = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function SheetHeader({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"sheet-header\"\n className={cn(\n \"labui:flex labui:flex-col labui:gap-3 labui:p-6\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SheetFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function SheetFooter({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"sheet-footer\"\n className={cn(\n \"labui:mt-auto labui:flex labui:flex-col labui:gap-2 labui:p-6\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(function SheetTitle({ className, ...props }, ref) {\n return (\n <SheetPrimitive.Title\n ref={ref}\n data-slot=\"sheet-title\"\n className={cn(\n \"labui:pr-8 labui:text-base labui:leading-6 labui:font-semibold labui:text-foreground\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(function SheetDescription({ className, ...props }, ref) {\n return (\n <SheetPrimitive.Description\n ref={ref}\n data-slot=\"sheet-description\"\n className={cn(\n \"labui:text-sm labui:leading-6 labui:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst Skeleton = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function Skeleton({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n className={cn(\n \"labui:animate-pulse labui:rounded-md labui:bg-accent\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Skeleton };\n", "import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"./classes.js\";\nimport { useOverlayOpen } from \"./overlay.js\";\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({\n open,\n defaultOpen,\n onOpenChange,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n const [current, change] = useOverlayOpen(open, onOpenChange, defaultOpen);\n return (\n <TooltipPrimitive.Root\n data-slot=\"tooltip\"\n open={current}\n onOpenChange={change}\n {...props}\n />\n );\n}\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(function TooltipContent(\n { className, sideOffset = 0, children, ...props },\n ref,\n) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"labui:z-50 labui:w-fit labui:origin-(--radix-tooltip-content-transform-origin) labui:rounded-md labui:bg-foreground labui:px-3 labui:py-1.5 labui:text-xs labui:text-balance labui:text-background\",\n \"labui:data-[state=delayed-open]:animate-fade-in labui:data-[state=instant-open]:animate-fade-in labui:data-[state=closed]:animate-fade-out\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"labui:z-50 labui:size-2.5 labui:translate-y-[calc(-50%-2px)] labui:rotate-45 labui:rounded-[2px] labui:bg-foreground labui:fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n});\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n", "import * as React from \"react\";\n\nconst query = \"(max-width: 767px)\";\n\nconst subscribe = (change: () => void) => {\n const media = window.matchMedia(query);\n media.addEventListener(\"change\", change);\n return () => media.removeEventListener(\"change\", change);\n};\n\nconst matches = () => window.matchMedia(query).matches;\n\nexport function useIsMobile() {\n return React.useSyncExternalStore(subscribe, matches, () => false);\n}\n", "import * as React from \"react\";\nimport { SearchIcon, XIcon } from \"lucide-react\";\nimport { cn } from \"./classes.js\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupInput,\n} from \"./input-group.js\";\n\nconst SearchInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentPropsWithoutRef<typeof InputGroupInput> & {\n onClear?: () => void;\n clearLabel?: string;\n }\n>(function SearchInput(\n {\n className,\n type = \"search\",\n value,\n defaultValue,\n onChange,\n onClear,\n clearLabel = \"Clear\",\n ...props\n },\n ref,\n) {\n const [own, setOwn] = React.useState(String(defaultValue ?? \"\"));\n const current = value ?? own;\n const inputRef = React.useRef<HTMLInputElement>(null);\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n function clear() {\n const input = inputRef.current;\n if (!input) return;\n setOwn(\"\");\n if (value === undefined) input.value = \"\";\n onClear?.();\n input.focus();\n }\n\n return (\n <InputGroup\n data-slot=\"search-input\"\n className={cn(\"labui:w-full\", className)}\n >\n <InputGroupAddon>\n <SearchIcon aria-hidden=\"true\" />\n </InputGroupAddon>\n <InputGroupInput\n ref={inputRef}\n type={type}\n value={value}\n defaultValue={defaultValue}\n onChange={(event) => {\n setOwn(event.target.value);\n onChange?.(event);\n }}\n {...props}\n />\n {current !== \"\" && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton\n size=\"icon-xs\"\n aria-label={clearLabel}\n onClick={clear}\n >\n <XIcon />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n});\n\nexport { SearchInput };\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst SettingsSection = React.forwardRef<\n HTMLElement,\n Omit<React.ComponentPropsWithoutRef<\"section\">, \"title\"> & {\n title: React.ReactNode;\n description?: React.ReactNode;\n }\n>(function SettingsSection(\n { title, description, className, children, ...props },\n ref,\n) {\n const headingId = React.useId();\n return (\n <section\n ref={ref}\n data-slot=\"settings-section\"\n aria-labelledby={headingId}\n className={cn(\"labui:flex labui:flex-col labui:gap-4\", className)}\n {...props}\n >\n <div className=\"labui:flex labui:flex-col labui:gap-1\">\n <h2\n id={headingId}\n className=\"labui:text-base labui:font-semibold labui:tracking-tight\"\n >\n {title}\n </h2>\n {description && (\n <p className=\"labui:text-sm labui:text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n <div className=\"labui:divide-y labui:rounded-lg labui:border labui:bg-card labui:text-card-foreground\">\n {children}\n </div>\n </section>\n );\n});\n\nconst SettingsRow = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & {\n label: React.ReactNode;\n description?: React.ReactNode;\n htmlFor?: string;\n }\n>(function SettingsRow(\n { label, description, htmlFor, className, children, ...props },\n ref,\n) {\n const Label = htmlFor ? \"label\" : \"div\";\n return (\n <div\n ref={ref}\n data-slot=\"settings-row\"\n className={cn(\n \"labui:flex labui:flex-wrap labui:items-center labui:justify-between labui:gap-x-6 labui:gap-y-2 labui:px-4 labui:py-3\",\n className,\n )}\n {...props}\n >\n <div className=\"labui:flex labui:min-w-0 labui:flex-1 labui:basis-56 labui:flex-col labui:gap-0.5\">\n <Label htmlFor={htmlFor} className=\"labui:text-sm labui:font-medium\">\n {label}\n </Label>\n {description && (\n <p className=\"labui:text-sm labui:text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n <div className=\"labui:flex labui:shrink-0 labui:items-center labui:gap-2\">\n {children}\n </div>\n </div>\n );\n});\n\nconst SettingsFooter = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\"> & { status?: React.ReactNode }\n>(function SettingsFooter({ status, className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"settings-footer\"\n className={cn(\n \"labui:flex labui:flex-wrap labui:items-center labui:justify-end labui:gap-3 labui:border-t labui:pt-4\",\n className,\n )}\n {...props}\n >\n <p\n role=\"status\"\n className=\"labui:mr-auto labui:text-sm labui:text-muted-foreground labui:empty:hidden\"\n >\n {status}\n </p>\n {children}\n </div>\n );\n});\n\nexport { SettingsSection, SettingsRow, SettingsFooter };\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nexport type SidePanelLimits = {\n minWidth: number;\n maxWidth: number;\n slack: number;\n mainMinWidth: number;\n};\n\nexport const sidePanelLimits: SidePanelLimits = {\n minWidth: 200,\n maxWidth: 480,\n slack: 80,\n mainMinWidth: 320,\n};\n\n// A drag that goes slack pixels past the minimum closes the panel; back out reopens it\nexport function resolveDrag(\n desired: number,\n available: number,\n limits: SidePanelLimits,\n) {\n const open = desired > limits.minWidth - limits.slack;\n const max = Math.max(\n limits.minWidth,\n Math.min(limits.maxWidth, available - limits.mainMinWidth),\n );\n return { open, width: Math.min(max, Math.max(limits.minWidth, desired)) };\n}\n\nconst SidePanel = React.forwardRef<\n HTMLElement,\n Omit<React.ComponentPropsWithoutRef<\"aside\">, \"children\"> & {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n width: number;\n onWidthChange: (width: number) => void;\n side?: \"left\" | \"right\";\n label: string;\n limits?: Partial<SidePanelLimits>;\n children: React.ReactNode;\n }\n>(function SidePanel(\n {\n open,\n onOpenChange,\n width,\n onWidthChange,\n side = \"right\",\n label,\n limits: partial,\n className,\n children,\n ...props\n },\n ref,\n) {\n const limits = { ...sidePanelLimits, ...partial };\n const direction = side === \"right\" ? -1 : 1;\n\n function apply(desired: number, available: number) {\n const next = resolveDrag(desired, available, limits);\n if (next.open !== open) onOpenChange(next.open);\n if (next.open && next.width !== width) onWidthChange(next.width);\n }\n\n function startDrag(event: React.PointerEvent<HTMLDivElement>) {\n event.preventDefault();\n const origin = event.clientX;\n const startWidth = open ? width : 0;\n const available =\n event.currentTarget.parentElement?.parentElement?.clientWidth ?? Infinity;\n const move = (next: PointerEvent) =>\n apply(startWidth + (next.clientX - origin) * direction, available);\n const stop = () => {\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", stop);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", stop);\n }\n\n function keyboardResize(event: React.KeyboardEvent<HTMLDivElement>) {\n const step =\n event.key === \"ArrowLeft\" ? -16 : event.key === \"ArrowRight\" ? 16 : 0;\n if (!step) return;\n event.preventDefault();\n const available =\n event.currentTarget.parentElement?.parentElement?.clientWidth ?? Infinity;\n apply((open ? width : 0) + step * direction, available);\n }\n\n return (\n <aside\n ref={ref}\n data-slot=\"side-panel\"\n data-side={side}\n data-state={open ? \"open\" : \"closed\"}\n aria-label={label}\n style={{ width: open ? width : 0 }}\n className={cn(\n \"labui:relative labui:flex labui:shrink-0 labui:overflow-visible\",\n !open && \"labui:border-0\",\n className,\n )}\n {...props}\n >\n {open && (\n <div className=\"labui:min-w-0 labui:flex-1 labui:overflow-auto\">\n {children}\n </div>\n )}\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize ${label}`}\n aria-valuenow={open ? width : 0}\n aria-valuemin={0}\n aria-valuemax={limits.maxWidth}\n tabIndex={0}\n onPointerDown={startDrag}\n onKeyDown={keyboardResize}\n className={cn(\n \"labui:absolute labui:inset-y-0 labui:z-10 labui:w-1.5 labui:cursor-col-resize labui:touch-none labui:outline-none labui:hover:bg-foreground/25 labui:focus-visible:bg-foreground/40\",\n side === \"right\" ? \"labui:-left-0.75\" : \"labui:-right-0.75\",\n )}\n />\n </aside>\n );\n});\n\nexport { SidePanel };\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst Stats = React.forwardRef<\n HTMLDListElement,\n React.ComponentPropsWithoutRef<\"dl\">\n>(function Stats({ className, ...props }, ref) {\n return (\n <dl\n ref={ref}\n data-slot=\"stats\"\n className={cn(\n \"labui:grid labui:gap-3 labui:sm:grid-cols-2 labui:lg:grid-cols-[repeat(auto-fit,minmax(12rem,1fr))]\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst Stat = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function Stat({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"stat\"\n className={cn(\n \"labui:flex labui:min-w-0 labui:flex-col labui:gap-1 labui:rounded-lg labui:border labui:bg-card labui:px-4 labui:py-3 labui:text-card-foreground\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst StatLabel = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"dt\">\n>(function StatLabel({ className, ...props }, ref) {\n return (\n <dt\n ref={ref}\n data-slot=\"stat-label\"\n className={cn(\n \"labui:text-xs labui:font-medium labui:tracking-wide labui:text-muted-foreground labui:uppercase\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst StatValue = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"dd\">\n>(function StatValue({ className, ...props }, ref) {\n return (\n <dd\n ref={ref}\n data-slot=\"stat-value\"\n className={cn(\n \"labui:truncate labui:text-xl labui:font-semibold labui:tracking-tight labui:tabular-nums\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst StatDetail = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"dd\">\n>(function StatDetail({ className, ...props }, ref) {\n return (\n <dd\n ref={ref}\n data-slot=\"stat-detail\"\n className={cn(\n \"labui:truncate labui:text-xs labui:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Stats, Stat, StatLabel, StatValue, StatDetail };\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst Steps = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"nav\">\n>(function Steps({ className, ...props }, ref) {\n return (\n <nav\n ref={ref}\n data-slot=\"steps\"\n className={cn(\"labui:flex labui:flex-col labui:gap-1\", className)}\n {...props}\n />\n );\n});\n\nconst Step = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<\"button\"> & { active?: boolean; index: number }\n>(function Step({ active = false, index, className, children, ...props }, ref) {\n return (\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"step\"\n data-state={active ? \"active\" : \"inactive\"}\n aria-current={active ? \"step\" : undefined}\n className={cn(\n \"labui:flex labui:items-center labui:gap-3 labui:rounded-md labui:px-2 labui:py-2 labui:text-left labui:text-sm labui:text-muted-foreground labui:transition-colors labui:outline-none labui:hover:text-foreground labui:focus-visible:ring-[3px] labui:focus-visible:ring-ring/50 labui:data-[state=active]:font-semibold labui:data-[state=active]:text-foreground\",\n className,\n )}\n {...props}\n >\n <span\n data-slot=\"step-index\"\n className=\"labui:grid labui:size-6 labui:shrink-0 labui:place-items-center labui:rounded-full labui:border labui:font-mono labui:text-[10px] labui:tabular-nums labui:[[data-state=active]>&]:border-primary labui:[[data-state=active]>&]:bg-primary labui:[[data-state=active]>&]:text-primary-foreground\"\n >\n {String(index).padStart(2, \"0\")}\n </span>\n {children}\n </button>\n );\n});\n\nexport { Steps, Step };\n", "import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn, focusRing, invalidRing } from \"./classes.js\";\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> & {\n size?: \"default\" | \"sm\";\n }\n>(function Switch({ className, size = \"default\", ...props }, ref) {\n return (\n <SwitchPrimitive.Root\n ref={ref}\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"labui:peer labui:group/switch labui:inline-flex labui:h-5 labui:w-9 labui:shrink-0 labui:items-center labui:rounded-full labui:border labui:border-transparent labui:shadow-xs labui:transition-colors labui:outline-none\",\n \"labui:data-[size=sm]:h-4 labui:data-[size=sm]:w-7\",\n \"labui:data-[state=unchecked]:bg-input/60 labui:data-[state=checked]:bg-primary labui:dark:data-[state=unchecked]:bg-input/40\",\n \"labui:disabled:cursor-not-allowed labui:disabled:opacity-50\",\n focusRing,\n invalidRing,\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"labui:pointer-events-none labui:block labui:size-4 labui:rounded-full labui:bg-background labui:shadow-sm labui:ring-0 labui:transition-transform\",\n \"labui:data-[state=unchecked]:translate-x-0 labui:data-[state=checked]:translate-x-4\",\n \"labui:group-data-[size=sm]/switch:size-3 labui:group-data-[size=sm]/switch:data-[state=checked]:translate-x-3\",\n \"labui:dark:data-[state=checked]:bg-primary-foreground\",\n )}\n />\n </SwitchPrimitive.Root>\n );\n});\n\nexport { Switch };\n", "import * as React from \"react\";\nimport { ArrowDownIcon, ArrowUpDownIcon, ArrowUpIcon } from \"lucide-react\";\nimport { Button } from \"./button.js\";\nimport { cn } from \"./classes.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { Spinner } from \"./spinner.js\";\nimport {\n useColumnResize,\n useLoadMore,\n useTableWindow,\n} from \"./table-layout.js\";\nimport {\n isSortable,\n nextSort,\n pageOf,\n sortRows,\n type SortDirection,\n type TableColumn,\n type TableSort,\n} from \"./table-model.js\";\n\nexport type {\n SortDirection,\n SortValue,\n TableColumn,\n TableSort,\n} from \"./table-model.js\";\nexport { column, mono, num } from \"./table-model.js\";\n\nexport type TableProps<T> = {\n label?: string;\n caption?: string;\n columns: TableColumn<T>[];\n rows: readonly T[];\n rowKey: (row: T, index: number) => string;\n empty?: React.ReactNode;\n className?: string;\n tableClassName?: string;\n scrollClassName?: string;\n rowClassName?: (row: T) => string | undefined;\n loading?: boolean;\n skeletonRows?: number;\n sort?: TableSort | null;\n defaultSort?: TableSort | null;\n onSortChange?: (sort: TableSort | null) => void;\n clientSort?: boolean;\n sortDisabled?: boolean;\n onRowActivate?: (row: T) => void;\n rowLabel?: (row: T) => string;\n selectedKey?: string | null;\n pageSize?: number;\n // rowHeight fixes every row's height and renders only the rows on screen\n rowHeight?: number;\n onLoadMore?: () => void | Promise<void>;\n hasMore?: boolean;\n banner?: React.ReactNode;\n tabs?: React.ReactNode;\n footerStart?: React.ReactNode;\n footerCenter?: React.ReactNode;\n footerEnd?: React.ReactNode;\n};\n\nconst cellPadding = \"labui:px-3 labui:py-(--labui-row-py)\";\nconst hidden = {\n sm: \"labui:max-sm:hidden\",\n md: \"labui:max-md:hidden\",\n lg: \"labui:max-lg:hidden\",\n};\n\nfunction columnClasses<T>(column: TableColumn<T>) {\n return cn(\n (column.numeric || column.align === \"end\") && \"labui:text-right\",\n column.align === \"center\" && \"labui:text-center\",\n column.numeric && \"labui:tabular-nums\",\n column.hideBelow && hidden[column.hideBelow],\n );\n}\n\nconst isControl = (target: EventTarget | null) =>\n target instanceof Element &&\n Boolean(\n target.closest(\n \"a, button, input, select, textarea, label, [role=checkbox]\",\n ),\n );\n\nconst pixels = (width?: string) =>\n width?.endsWith(\"px\") ? parseFloat(width) : undefined;\n\nconst sortMarkers = {\n asc: ArrowUpIcon,\n desc: ArrowDownIcon,\n none: ArrowUpDownIcon,\n};\nconst ariaSort = {\n asc: \"ascending\",\n desc: \"descending\",\n none: \"none\",\n} as const;\n\nfunction ResizeHandle({\n label,\n width,\n onDrag,\n onStep,\n}: {\n label: string;\n width: number;\n onDrag: (event: React.PointerEvent<HTMLElement>, initial: number) => void;\n onStep: (initial: number, delta: number) => void;\n}) {\n const measured = (element: HTMLElement) =>\n element.closest(\"th\")?.getBoundingClientRect().width || width;\n return (\n <span\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize ${label} column`}\n aria-valuenow={width}\n aria-valuemin={72}\n aria-valuemax={720}\n tabIndex={0}\n className=\"labui:absolute labui:inset-y-0 labui:right-0 labui:w-1.5 labui:cursor-col-resize labui:touch-none labui:hover:bg-foreground/25 labui:focus-visible:bg-foreground/40 labui:focus-visible:outline-none\"\n onPointerDown={(event) => onDrag(event, measured(event.currentTarget))}\n onKeyDown={(event) => {\n const delta =\n event.key === \"ArrowRight\" ? 16 : event.key === \"ArrowLeft\" ? -16 : 0;\n if (!delta) return;\n event.preventDefault();\n onStep(measured(event.currentTarget), delta);\n }}\n />\n );\n}\n\nfunction HeaderCell<T>({\n column,\n direction,\n width,\n disabled,\n onSort,\n resize,\n}: {\n column: TableColumn<T>;\n direction: SortDirection | \"none\";\n width: number | undefined;\n disabled: boolean;\n onSort: (() => void) | undefined;\n resize: ReturnType<typeof useColumnResize>;\n}) {\n const Marker = sortMarkers[direction];\n const title = typeof column.header === \"string\" ? column.header : undefined;\n const header = column.srOnly ? (\n <span className=\"labui:sr-only\">{column.header}</span>\n ) : (\n column.header\n );\n return (\n <th\n scope=\"col\"\n aria-sort={onSort ? ariaSort[direction] : undefined}\n style={{ width: width ?? column.width }}\n className={cn(\n \"labui:sticky labui:top-0 labui:z-10 labui:h-8 labui:bg-card labui:px-3 labui:text-left labui:align-middle labui:text-xs labui:font-medium labui:whitespace-nowrap labui:text-muted-foreground labui:shadow-[inset_0_-1px_var(--labui-border)]\",\n columnClasses(column),\n column.headClassName,\n )}\n >\n {onSort ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"labui:-mx-2 labui:h-7 labui:gap-1 labui:px-2 labui:text-xs labui:font-medium labui:hover:bg-transparent\"\n disabled={disabled}\n onClick={onSort}\n >\n {header}\n <Marker\n aria-hidden=\"true\"\n className={cn(\n \"labui:size-3.5\",\n direction === \"none\" && \"labui:opacity-40\",\n )}\n />\n </Button>\n ) : (\n header\n )}\n {column.headerDetail && (\n <span className=\"labui:block labui:text-[10px] labui:font-normal\">\n {column.headerDetail}\n </span>\n )}\n {title && !column.srOnly && (\n <ResizeHandle\n label={title}\n width={width ?? pixels(column.width) ?? 180}\n onDrag={(event, initial) => resize.start(event, column.id, initial)}\n onStep={(initial, delta) => resize.change(column.id, initial + delta)}\n />\n )}\n </th>\n );\n}\n\nfunction SkeletonRows<T>({\n columns,\n count,\n}: {\n columns: TableColumn<T>[];\n count: number;\n}) {\n return Array.from({ length: count }, (_, index) => (\n <tr key={index} data-slot=\"table-skeleton-row\" aria-hidden=\"true\">\n {columns.map((column, at) => (\n <td\n key={column.id}\n className={cn(cellPadding, \"labui:border-b\", columnClasses(column))}\n >\n <Skeleton\n className={cn(\"labui:h-3\", at % 2 ? \"labui:w-1/2\" : \"labui:w-3/4\")}\n />\n </td>\n ))}\n </tr>\n ));\n}\n\nfunction Spacer({ height, span }: { height: number; span: number }) {\n return height > 0 ? (\n <tr aria-hidden=\"true\" style={{ height }}>\n <td colSpan={span} className=\"labui:p-0\">\n <span className=\"labui:sr-only\">Rows out of view</span>\n </td>\n </tr>\n ) : null;\n}\n\nfunction useRovingRows(\n interactive: boolean,\n keys: string[],\n selectedKey?: string | null,\n) {\n const [focusKey, setFocusKey] = React.useState<string | null>(null);\n const pending = React.useRef<string | undefined>(undefined);\n const bodyRef = React.useRef<HTMLTableSectionElement>(null);\n\n React.useEffect(() => {\n if (!interactive) return;\n setFocusKey((current) =>\n current && keys.includes(current)\n ? current\n : selectedKey && keys.includes(selectedKey)\n ? selectedKey\n : (keys[0] ?? null),\n );\n }, [interactive, keys, selectedKey]);\n\n React.useLayoutEffect(() => {\n const key = pending.current;\n if (!key) return;\n const row = bodyRef.current?.querySelector<HTMLElement>(\n `[data-key=\"${CSS.escape(key)}\"]`,\n );\n if (row) {\n row.focus();\n pending.current = undefined;\n }\n });\n\n function focusRow(key: string) {\n setFocusKey(key);\n pending.current = key;\n }\n\n return { bodyRef, focusKey, setFocusKey, focusRow };\n}\n\nfunction Table<T>({\n label,\n caption,\n columns,\n rows,\n rowKey,\n empty = \"No rows to display.\",\n className,\n tableClassName,\n scrollClassName,\n rowClassName,\n loading = false,\n skeletonRows = 6,\n sort,\n defaultSort = null,\n onSortChange,\n clientSort = true,\n sortDisabled = false,\n onRowActivate,\n rowLabel,\n selectedKey,\n pageSize,\n rowHeight,\n onLoadMore,\n hasMore = false,\n banner,\n tabs,\n footerStart,\n footerCenter,\n footerEnd,\n}: TableProps<T>) {\n const statusId = React.useId();\n const [ownSort, setOwnSort] = React.useState<TableSort | null>(defaultSort);\n const activeSort = sort === undefined ? ownSort : sort;\n const [page, setPage] = React.useState(0);\n const interactive = Boolean(onRowActivate);\n\n const sorted = React.useMemo(\n () => (loading || !clientSort ? rows : sortRows(rows, columns, activeSort)),\n [activeSort, clientSort, columns, loading, rows],\n );\n const paged = React.useMemo(\n () => pageOf(sorted, pageSize, page),\n [sorted, pageSize, page],\n );\n const { scrollRef, range, reveal, viewportHeight } = useTableWindow(\n paged.rows.length,\n rowHeight,\n );\n const visible = paged.rows.slice(range.start, range.end);\n const keys = React.useMemo(\n () => paged.rows.map((row, index) => rowKey(row, paged.offset + index)),\n [paged, rowKey],\n );\n const roving = useRovingRows(interactive && !loading, keys, selectedKey);\n const resize = useColumnResize();\n const more = useLoadMore(scrollRef, onLoadMore, hasMore);\n\n React.useEffect(() => setPage(0), [rows, pageSize, activeSort]);\n\n function changeSort(column: TableColumn<T>) {\n const next = nextSort(column, activeSort);\n if (sort === undefined) setOwnSort(next);\n onSortChange?.(next);\n }\n\n function focusIndex(index: number) {\n const key = keys[Math.max(0, Math.min(keys.length - 1, index))];\n if (!key) return;\n roving.focusRow(key);\n reveal(keys.indexOf(key));\n }\n\n function rowKeyDown(row: T, at: number, event: React.KeyboardEvent) {\n if (event.target !== event.currentTarget) return;\n const pageStep = Math.max(\n 1,\n Math.floor(viewportHeight / (rowHeight || 36)),\n );\n const moves: Record<string, number> = {\n ArrowDown: at + 1,\n ArrowUp: at - 1,\n Home: 0,\n End: keys.length - 1,\n PageDown: at + pageStep,\n PageUp: at - pageStep,\n };\n if (event.key in moves) {\n event.preventDefault();\n focusIndex(moves[event.key]!);\n } else if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onRowActivate?.(row);\n }\n }\n\n const span = columns.length;\n const fixed = Boolean(rowHeight) || Object.keys(resize.widths).length > 0;\n const showFooter =\n footerStart || footerCenter || footerEnd || paged.pages > 1;\n\n return (\n <div\n data-slot=\"table-frame\"\n className={cn(\n \"labui:flex labui:min-w-0 labui:flex-col labui:overflow-hidden labui:rounded-lg labui:border\",\n className,\n )}\n >\n {banner}\n {tabs}\n {loading && (\n <span id={statusId} role=\"status\" className=\"labui:sr-only\">\n Loading rows\n </span>\n )}\n <div\n ref={scrollRef}\n data-slot=\"table-container\"\n className={cn(\n \"labui:relative labui:w-full labui:min-w-0 labui:overflow-auto\",\n rowHeight && \"labui:max-h-[calc(100dvh-16rem)]\",\n scrollClassName,\n )}\n >\n <table\n data-slot=\"table\"\n aria-label={caption ? undefined : label}\n aria-busy={loading || undefined}\n aria-describedby={loading ? statusId : undefined}\n aria-rowcount={rowHeight ? rows.length + 1 : undefined}\n className={cn(\n \"labui:w-full labui:caption-bottom labui:text-xs labui:tabular-nums\",\n fixed && \"labui:table-fixed\",\n tableClassName,\n )}\n >\n {caption && <caption className=\"labui:sr-only\">{caption}</caption>}\n <thead>\n <tr>\n {columns.map((column) => (\n <HeaderCell\n key={column.id}\n column={column}\n direction={\n activeSort?.column === column.id\n ? activeSort.direction\n : \"none\"\n }\n width={resize.widths[column.id]}\n disabled={sortDisabled || loading}\n onSort={\n isSortable(column) ? () => changeSort(column) : undefined\n }\n resize={resize}\n />\n ))}\n </tr>\n </thead>\n <tbody ref={roving.bodyRef}>\n {loading ? (\n <SkeletonRows columns={columns} count={skeletonRows} />\n ) : rows.length === 0 ? (\n <tr>\n <td\n colSpan={span}\n className=\"labui:p-4 labui:text-muted-foreground\"\n >\n {empty}\n </td>\n </tr>\n ) : (\n <>\n {rowHeight && (\n <Spacer height={range.start * rowHeight} span={span} />\n )}\n {visible.map((row, visibleIndex) => {\n const at = range.start + visibleIndex;\n const index = paged.offset + at;\n const key = keys[at]!;\n const selected = selectedKey === key;\n return (\n <tr\n key={key}\n data-key={key}\n data-state={selected ? \"selected\" : undefined}\n aria-rowindex={rowHeight ? index + 2 : undefined}\n aria-selected={interactive ? selected : undefined}\n aria-label={rowLabel?.(row)}\n tabIndex={\n interactive\n ? roving.focusKey === key\n ? 0\n : -1\n : undefined\n }\n style={rowHeight ? { height: rowHeight } : undefined}\n className={cn(\n \"labui:border-b labui:transition-colors labui:hover:bg-muted/50 labui:data-[state=selected]:bg-muted\",\n interactive &&\n \"labui:cursor-pointer labui:focus-visible:ring-[3px] labui:focus-visible:ring-ring/50 labui:focus-visible:ring-inset labui:focus-visible:outline-none\",\n rowClassName?.(row),\n )}\n onFocus={\n interactive ? () => roving.setFocusKey(key) : undefined\n }\n onClick={\n interactive\n ? (event) => {\n if (!isControl(event.target))\n onRowActivate?.(row);\n }\n : undefined\n }\n onKeyDown={\n interactive\n ? (event) => rowKeyDown(row, at, event)\n : undefined\n }\n >\n {columns.map((column) => {\n const Cell = column.rowHeader ? \"th\" : \"td\";\n const content = column.cell(row, index);\n return (\n <Cell\n key={column.id}\n scope={column.rowHeader ? \"row\" : undefined}\n className={cn(\n cellPadding,\n \"labui:align-middle\",\n column.rowHeader &&\n \"labui:text-left labui:font-medium labui:text-foreground\",\n typeof column.className === \"function\"\n ? column.className(row, index)\n : column.className,\n columnClasses(column),\n rowHeight &&\n \"labui:overflow-hidden labui:py-0 labui:text-ellipsis labui:whitespace-nowrap\",\n )}\n >\n {rowHeight ? (\n <div\n className={cn(\n \"labui:flex labui:items-center labui:overflow-hidden\",\n (column.numeric || column.align === \"end\") &&\n \"labui:justify-end\",\n )}\n style={{ height: rowHeight - 1 }}\n >\n {content}\n </div>\n ) : (\n content\n )}\n </Cell>\n );\n })}\n </tr>\n );\n })}\n {rowHeight && (\n <Spacer\n height={(paged.rows.length - range.end) * rowHeight}\n span={span}\n />\n )}\n </>\n )}\n {onLoadMore && hasMore && !loading && (\n <tr ref={more.sentinel} data-slot=\"table-load-more\">\n <td colSpan={span} className=\"labui:p-3 labui:text-center\">\n {more.loading && <Spinner className=\"labui:inline-block\" />}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n {showFooter && (\n <div\n data-slot=\"table-footer\"\n className=\"labui:flex labui:flex-wrap labui:items-center labui:justify-between labui:gap-3 labui:border-t labui:px-3 labui:py-2 labui:text-xs\"\n >\n <div className=\"labui:flex labui:items-center labui:gap-2\">\n {footerStart}\n </div>\n <div className=\"labui:flex labui:items-center labui:gap-2\">\n {footerCenter}\n {paged.pages > 1 && (\n <Pager\n page={paged.current}\n pages={paged.pages}\n from={paged.offset + 1}\n to={Math.min(paged.offset + paged.size, sorted.length)}\n total={sorted.length}\n onChange={setPage}\n />\n )}\n </div>\n <div className=\"labui:flex labui:items-center labui:gap-2\">\n {footerEnd}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction Pager({\n page,\n pages,\n from,\n to,\n total,\n onChange,\n}: {\n page: number;\n pages: number;\n from: number;\n to: number;\n total: number;\n onChange: (page: number) => void;\n}) {\n return (\n <>\n <span aria-live=\"polite\">\n {from} to {to} of {total}\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={page === 0}\n onClick={() => onChange(page - 1)}\n >\n Previous page\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={page + 1 === pages}\n onClick={() => onChange(page + 1)}\n >\n Next page\n </Button>\n </>\n );\n}\n\nfunction TableStack({\n title,\n detail,\n}: {\n title: React.ReactNode;\n detail?: React.ReactNode;\n}) {\n return (\n <>\n {title}\n {detail && (\n <div\n data-slot=\"table-stack-detail\"\n className=\"labui:mt-0.5 labui:text-xs labui:font-normal labui:text-muted-foreground\"\n >\n {detail}\n </div>\n )}\n </>\n );\n}\n\nexport { Table, TableStack };\n", "import * as React from \"react\";\nimport { clampColumnWidth, visibleRowRange } from \"./table-model.js\";\n\nconst margin = 32;\n\n// Fixed-height rows render only the viewport; other tables keep natural heights\nexport function useTableWindow(count: number, rowHeight?: number) {\n const scrollRef = React.useRef<HTMLDivElement>(null);\n const [viewport, setViewport] = React.useState({ top: 0, height: 0 });\n\n React.useLayoutEffect(() => {\n const node = scrollRef.current;\n if (!node || !rowHeight) return;\n const measure = () =>\n setViewport({\n top: Math.max(0, node.scrollTop - margin),\n height: node.clientHeight,\n });\n measure();\n node.addEventListener(\"scroll\", measure, { passive: true });\n const observer =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(measure);\n observer?.observe(node);\n return () => {\n node.removeEventListener(\"scroll\", measure);\n observer?.disconnect();\n };\n }, [rowHeight]);\n\n const range = rowHeight\n ? visibleRowRange(count, viewport.top, viewport.height, rowHeight)\n : { start: 0, end: count };\n\n function reveal(index: number) {\n const node = scrollRef.current;\n if (!node || !rowHeight) return;\n const top = index * rowHeight;\n const height = node.clientHeight || 360;\n if (top < node.scrollTop) node.scrollTop = top;\n else if (top + rowHeight > node.scrollTop + height - margin)\n node.scrollTop = top + rowHeight - height + margin;\n setViewport({ top: Math.max(0, node.scrollTop - margin), height });\n }\n\n return { scrollRef, range, reveal, viewportHeight: viewport.height || 360 };\n}\n\nexport function useColumnResize() {\n const [widths, setWidths] = React.useState<Record<string, number>>({});\n const stop = React.useRef<() => void>(() => {});\n React.useEffect(() => () => stop.current(), []);\n\n function change(id: string, width: number) {\n setWidths((previous) => ({ ...previous, [id]: clampColumnWidth(width) }));\n }\n\n function start(\n event: React.PointerEvent<HTMLElement>,\n id: string,\n initial: number,\n ) {\n event.preventDefault();\n event.stopPropagation();\n stop.current();\n const origin = event.clientX;\n const move = (next: PointerEvent) =>\n change(id, initial + next.clientX - origin);\n stop.current = () => {\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", stop.current);\n window.removeEventListener(\"pointercancel\", stop.current);\n stop.current = () => {};\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", stop.current);\n window.addEventListener(\"pointercancel\", stop.current);\n }\n\n return { widths, change, start };\n}\n\n// Loads the next chunk once the sentinel nears the bottom, one chunk at a time\nexport function useLoadMore(\n root: React.RefObject<HTMLElement | null>,\n onLoadMore: (() => void | Promise<void>) | undefined,\n hasMore: boolean,\n) {\n const sentinel = React.useRef<HTMLTableRowElement>(null);\n const [loading, setLoading] = React.useState(false);\n const pending = React.useRef(false);\n\n React.useEffect(() => {\n const target = sentinel.current;\n if (!target || !onLoadMore || !hasMore) return;\n const observer = new IntersectionObserver(\n async ([entry]) => {\n if (!entry?.isIntersecting || pending.current) return;\n pending.current = true;\n setLoading(true);\n try {\n await onLoadMore();\n } finally {\n pending.current = false;\n setLoading(false);\n }\n },\n { root: root.current, rootMargin: \"0px 0px 200px 0px\" },\n );\n observer.observe(target);\n return () => observer.disconnect();\n }, [root, onLoadMore, hasMore]);\n\n return { sentinel, loading };\n}\n", "import type * as React from \"react\";\n\nexport type SortDirection = \"asc\" | \"desc\";\nexport type TableSort = { column: string; direction: SortDirection };\nexport type SortValue = string | number | boolean | null | undefined;\n\nexport type TableColumn<T> = {\n id: string;\n header: React.ReactNode;\n headerDetail?: React.ReactNode;\n srOnly?: boolean;\n rowHeader?: boolean;\n className?: string | ((row: T, index: number) => string | undefined);\n headClassName?: string;\n cell: (row: T, index: number) => React.ReactNode;\n sortValue?: (row: T) => SortValue;\n // sort marks a column the server sorts, so it has no client comparator\n sort?: boolean;\n align?: \"start\" | \"end\" | \"center\";\n numeric?: boolean;\n width?: string;\n hideBelow?: \"sm\" | \"md\" | \"lg\";\n};\n\nconst missing = (value: SortValue) =>\n value == null || (typeof value === \"number\" && Number.isNaN(value));\n\nexport function compareValues(left: SortValue, right: SortValue): number {\n if (missing(left) || missing(right))\n return Number(missing(left)) - Number(missing(right));\n if (typeof left === \"number\" && typeof right === \"number\")\n return left === right ? 0 : left < right ? -1 : 1;\n if (typeof left === \"boolean\" && typeof right === \"boolean\")\n return Number(left) - Number(right);\n return String(left).localeCompare(String(right), undefined, {\n numeric: true,\n sensitivity: \"base\",\n });\n}\n\nexport function sortRows<T>(\n rows: readonly T[],\n columns: TableColumn<T>[],\n sort: TableSort | null,\n): readonly T[] {\n const column = columns.find((item) => item.id === sort?.column);\n const value = column?.sortValue;\n if (!sort || !value) return rows;\n const sign = sort.direction === \"asc\" ? 1 : -1;\n return [...rows].sort((a, b) => {\n const order = compareValues(value(a), value(b));\n return missing(value(a)) || missing(value(b)) ? order : order * sign;\n });\n}\n\nexport const isSortable = <T>(column: TableColumn<T>) =>\n Boolean(column.sortValue) || column.sort === true;\n\nexport function nextSort<T>(\n column: TableColumn<T>,\n current: TableSort | null,\n): TableSort {\n if (current?.column !== column.id)\n return { column: column.id, direction: column.numeric ? \"desc\" : \"asc\" };\n return {\n column: column.id,\n direction: current.direction === \"asc\" ? \"desc\" : \"asc\",\n };\n}\n\nexport function pageOf<T>(\n rows: readonly T[],\n pageSize: number | undefined,\n page: number,\n) {\n const size = pageSize ? Math.max(1, Math.floor(pageSize)) : rows.length || 1;\n const pages = Math.max(1, Math.ceil(rows.length / size));\n const current = Math.min(page, pages - 1);\n return {\n size,\n pages,\n current,\n offset: current * size,\n rows: pageSize ? rows.slice(current * size, (current + 1) * size) : rows,\n };\n}\n\n// Clamps the scroll position so filtering a scrolled list still renders rows\nexport function visibleRowRange(\n count: number,\n scrollTop: number,\n height: number,\n rowHeight: number,\n overscan = 8,\n) {\n const viewport = height || 360;\n const top = Math.min(\n Math.max(0, scrollTop),\n Math.max(0, count * rowHeight - viewport),\n );\n const start = Math.min(\n count,\n Math.max(0, Math.floor(top / rowHeight) - overscan),\n );\n const end = Math.min(\n count,\n Math.ceil((top + viewport) / rowHeight) + overscan,\n );\n return { start, end: Math.max(start, end) };\n}\n\nexport const clampColumnWidth = (width: number) =>\n Math.min(720, Math.max(72, Math.round(width)));\n\nconst show = (value: unknown) => (value == null ? \"\" : String(value));\n\nexport function column<T>(\n id: string,\n header: string,\n value: (row: T) => SortValue,\n cell: (row: T) => React.ReactNode = (row) => show(value(row)),\n): TableColumn<T> {\n return { id, header, sortValue: value, cell };\n}\n\nexport const mono = <T>(\n id: string,\n header: string,\n value: (row: T) => unknown,\n): TableColumn<T> => ({\n ...column<T>(id, header, (row) => show(value(row))),\n className: \"labui:font-mono\",\n});\n\nexport const num = <T>(\n id: string,\n header: string,\n value: (row: T) => number,\n digits = 0,\n headerDetail?: string,\n): TableColumn<T> => ({\n ...column(id, header, value, (row) =>\n value(row).toLocaleString(\"en-US\", {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n }),\n ),\n numeric: true,\n headerDetail,\n});\n", "import * as React from \"react\";\nimport { Alert, AlertDescription, AlertTitle } from \"./alert.js\";\nimport { cn } from \"./classes.js\";\nimport { PageHeader } from \"./page.js\";\n\nconst TableScreen = React.forwardRef<\n HTMLDivElement,\n Omit<React.ComponentPropsWithoutRef<\"div\">, \"title\"> & {\n title: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n tabs?: React.ReactNode;\n error?: React.ReactNode;\n }\n>(function TableScreen(\n { title, description, actions, tabs, error, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n data-slot=\"table-screen\"\n className={cn(\n \"labui:flex labui:h-full labui:min-h-0 labui:min-w-0 labui:flex-col\",\n className,\n )}\n {...props}\n >\n <PageHeader\n variant=\"bar\"\n title={title}\n description={description}\n actions={actions}\n />\n {tabs && (\n <div className=\"labui:px-4 labui:pt-3 labui:sm:px-6\">{tabs}</div>\n )}\n {error && (\n <Alert\n variant=\"destructive\"\n className=\"labui:mx-4 labui:mt-3 labui:w-auto labui:sm:mx-6\"\n >\n <AlertTitle>Something went wrong</AlertTitle>\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n )}\n <div className=\"labui:flex labui:min-h-0 labui:flex-1 labui:flex-col labui:p-4 labui:sm:p-6 labui:*:data-[slot=table-frame]:min-h-0 labui:*:data-[slot=table-frame]:flex-1\">\n {children}\n </div>\n </div>\n );\n});\n\nexport { TableScreen };\n", "import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"./classes.js\";\n\nconst Tabs = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>\n>(function Tabs({ className, orientation = \"horizontal\", ...props }, ref) {\n return (\n <TabsPrimitive.Root\n ref={ref}\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"labui:group/tabs labui:flex labui:gap-2 labui:data-[orientation=horizontal]:flex-col\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst tabsListVariants = {\n default: \"labui:bg-muted\",\n line: \"labui:gap-1 labui:bg-transparent\",\n};\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> & {\n variant?: keyof typeof tabsListVariants;\n }\n>(function TabsList({ className, variant = \"default\", ...props }, ref) {\n return (\n <TabsPrimitive.List\n ref={ref}\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(\n \"labui:group/tabs-list labui:inline-flex labui:w-fit labui:items-center labui:justify-center labui:rounded-lg labui:p-[3px] labui:text-muted-foreground labui:group-data-[orientation=horizontal]/tabs:h-9 labui:group-data-[orientation=vertical]/tabs:h-fit labui:group-data-[orientation=vertical]/tabs:flex-col labui:data-[variant=line]:rounded-none\",\n tabsListVariants[variant],\n className,\n )}\n {...props}\n />\n );\n});\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(function TabsTrigger({ className, ...props }, ref) {\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n data-slot=\"tabs-trigger\"\n className={cn(\n \"labui:relative labui:inline-flex labui:h-[calc(100%-1px)] labui:flex-1 labui:items-center labui:justify-center labui:gap-1.5 labui:rounded-md labui:border labui:border-transparent labui:px-2 labui:py-1 labui:text-sm labui:font-medium labui:whitespace-nowrap labui:text-foreground/60 labui:transition-all labui:group-data-[orientation=vertical]/tabs:w-full labui:group-data-[orientation=vertical]/tabs:justify-start labui:hover:text-foreground labui:focus-visible:border-ring labui:focus-visible:ring-[3px] labui:focus-visible:ring-ring/50 labui:focus-visible:outline-1 labui:focus-visible:outline-ring labui:disabled:pointer-events-none labui:disabled:opacity-50 labui:group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm labui:group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none labui:dark:text-muted-foreground labui:dark:hover:text-foreground labui:[&_svg]:pointer-events-none labui:[&_svg]:shrink-0 labui:[&_svg:not([class*='size-'])]:size-4\",\n \"labui:group-data-[variant=line]/tabs-list:bg-transparent labui:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent labui:dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent labui:dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent\",\n \"labui:data-[state=active]:bg-background labui:data-[state=active]:text-foreground labui:dark:data-[state=active]:border-input labui:dark:data-[state=active]:bg-input/30 labui:dark:data-[state=active]:text-foreground\",\n \"labui:after:absolute labui:after:bg-foreground labui:after:opacity-0 labui:after:transition-opacity labui:group-data-[orientation=horizontal]/tabs:after:inset-x-0 labui:group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] labui:group-data-[orientation=horizontal]/tabs:after:h-0.5 labui:group-data-[orientation=vertical]/tabs:after:inset-y-0 labui:group-data-[orientation=vertical]/tabs:after:-right-1 labui:group-data-[orientation=vertical]/tabs:after:w-0.5 labui:group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(function TabsContent({ className, ...props }, ref) {\n return (\n <TabsPrimitive.Content\n ref={ref}\n data-slot=\"tabs-content\"\n className={cn(\"labui:flex-1 labui:outline-none\", className)}\n {...props}\n />\n );\n});\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n", "import * as React from \"react\";\n\nexport const themeColors = [\n \"background\",\n \"foreground\",\n \"card\",\n \"card-foreground\",\n \"popover\",\n \"popover-foreground\",\n \"primary\",\n \"primary-foreground\",\n \"link\",\n \"secondary\",\n \"secondary-foreground\",\n \"muted\",\n \"muted-foreground\",\n \"accent\",\n \"accent-foreground\",\n \"destructive\",\n \"destructive-foreground\",\n \"destructive-muted\",\n \"success\",\n \"success-foreground\",\n \"warning\",\n \"warning-foreground\",\n \"info\",\n \"info-foreground\",\n \"border\",\n \"input\",\n \"input-background\",\n \"ring\",\n \"overlay\",\n \"chart-1\",\n \"chart-2\",\n \"chart-3\",\n \"chart-4\",\n \"chart-5\",\n \"sidebar\",\n \"sidebar-foreground\",\n \"sidebar-primary\",\n \"sidebar-primary-foreground\",\n \"sidebar-accent\",\n \"sidebar-accent-foreground\",\n \"sidebar-border\",\n \"sidebar-ring\",\n] as const;\n\nexport type ThemeColor = (typeof themeColors)[number];\nexport type ThemeColors = Partial<Record<ThemeColor, string>>;\n\nexport type Theme = {\n light?: ThemeColors;\n dark?: ThemeColors;\n fonts?: { sans?: string; mono?: string; display?: string };\n radius?: string;\n radiusDialog?: string;\n};\n\n// Tokens that @labpane/os reads under its own prefix\nconst osTokens: ThemeColor[] = [\n \"background\",\n \"foreground\",\n \"card\",\n \"muted-foreground\",\n \"accent\",\n \"border\",\n \"ring\",\n];\n\nfunction declarations(colors: ThemeColors) {\n return Object.entries(colors).flatMap(([name, value]) => [\n `--labui-${name}:${value}`,\n ...(osTokens.includes(name as ThemeColor)\n ? [`--lab-${name}:${value}`]\n : []),\n ]);\n}\n\nfunction block(selector: string, lines: string[]) {\n return lines.length ? `${selector}{${lines.join(\";\")}}` : \"\";\n}\n\nexport function themeCss(theme: Theme, selector = \":root\") {\n const { fonts = {}, radius, radiusDialog } = theme;\n const light = [\n ...declarations(theme.light ?? {}),\n ...(fonts.sans\n ? [`--labui-font-sans:${fonts.sans}`, `--lab-font-sans:${fonts.sans}`]\n : []),\n ...(fonts.mono ? [`--labui-font-mono:${fonts.mono}`] : []),\n ...(fonts.display ? [`--labui-font-display:${fonts.display}`] : []),\n ...(radius ? [`--labui-radius:${radius}`] : []),\n ...(radiusDialog ? [`--labui-radius-dialog:${radiusDialog}`] : []),\n ];\n const dark =\n selector === \":root\" ? \".dark\" : `${selector}.dark, ${selector} .dark`;\n return [block(selector, light), block(dark, declarations(theme.dark ?? {}))]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nexport function ThemeStyle({\n theme,\n selector,\n}: {\n theme: Theme;\n selector?: string;\n}) {\n return React.createElement(\n \"style\",\n { \"data-slot\": \"theme\" },\n themeCss(theme, selector),\n );\n}\n", "import * as React from \"react\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { Button } from \"./button.js\";\nimport { ChartFrame } from \"./chart-frame.js\";\nimport { Checkbox } from \"./checkbox.js\";\nimport { cn } from \"./classes.js\";\nimport { Input } from \"./input.js\";\nimport {\n DAY,\n FORECAST_DAYS,\n INDICATOR_PERIOD,\n chartModel,\n clampRange,\n nearestPoint,\n zoomRange,\n type ChartOptions,\n type Range,\n type SeriesPoint,\n} from \"./time-series-model.js\";\nimport { useChartWidth } from \"./use-chart-width.js\";\n\nexport {\n DAY,\n DEFAULT_OPTIONS,\n type ChartOptions,\n type SeriesPoint,\n} from \"./time-series-model.js\";\n\nexport type TimeSeriesChartProps = {\n points: SeriesPoint[];\n series: { key: string; color: string }[];\n start: number;\n options: ChartOptions;\n onOptionsChange: (options: ChartOptions) => void;\n title?: string;\n subtitle?: string;\n unit?: string;\n label: string;\n};\n\ntype Series = TimeSeriesChartProps[\"series\"][number];\ntype Model = ReturnType<typeof chartModel>;\ntype Indicator = Model[\"computed\"][number];\ntype Selected = readonly [SeriesPoint, SeriesPoint];\n\nconst ZOOM_IN = 0.65;\nconst ZOOM_OUT = 1.5;\nconst WINDOWS = [\n [\"1W\", 7],\n [\"1M\", 30],\n [\"3M\", 90],\n] as const;\nconst INDICATORS = [\n [\"sma\", `Moving average, ${INDICATOR_PERIOD} days`],\n [\"ema\", `Exponential average, ${INDICATOR_PERIOD} days`],\n [\"bollinger\", \"Bollinger bands, 2 sigma\"],\n [\"forecast\", `Trend forecast, ${FORECAST_DAYS} days`],\n] as const;\nconst HANDLED_KEYS = [\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Home\",\n \"End\",\n \"+\",\n \"=\",\n \"-\",\n \"0\",\n \"r\",\n \"R\",\n \" \",\n \"Escape\",\n];\n\nconst gutter = \"labui:px-4 labui:sm:px-5\";\nconst mutedSmall = \"labui:text-[11px] labui:text-muted-foreground\";\nconst settingsRow =\n \"labui:flex labui:min-h-8 labui:cursor-pointer labui:items-center labui:gap-2 labui:text-xs\";\nconst settingsHeading =\n \"labui:mb-2 labui:text-[11px] labui:font-medium labui:text-muted-foreground\";\nconst indicatorLine = {\n fill: \"none\",\n strokeWidth: 1.7,\n strokeLinejoin: \"round\",\n} as const;\nconst crosshair = {\n stroke: \"var(--labui-foreground)\",\n strokeOpacity: 0.45,\n strokeDasharray: \"3 4\",\n strokeWidth: 1,\n} as const;\n\nconst compactFormat = new Intl.NumberFormat(undefined, {\n notation: \"compact\",\n maximumFractionDigits: 1,\n});\nconst formatNumber = (value: number) => Math.round(value).toLocaleString();\nconst formatCompact = (value: number) => compactFormat.format(value);\nconst formatDay = (time: number, withYear = false) =>\n new Date(time).toLocaleDateString(undefined, {\n timeZone: \"UTC\",\n month: \"short\",\n day: \"numeric\",\n ...(withYear ? { year: \"numeric\" } : {}),\n });\nconst formatSpan = (range: Range) =>\n `${formatDay(range[0], true)} to ${formatDay(range[1], true)}`;\nconst clampIndex = (index: number, length: number) =>\n Math.max(0, Math.min(length - 1, index));\nconst shownSeries = (series: Series[], point: SeriesPoint) =>\n series.filter((s) => point.values[s.key]);\n\nfunction describeDelta(selected: Selected, unit: string) {\n const [from, to] = selected;\n const delta = to.total - from.total;\n const share = from.total\n ? ` (${((delta / from.total) * 100).toFixed(1)}%)`\n : \", percentage unavailable from zero\";\n return `${delta >= 0 ? \"+\" : \"\"}${formatNumber(delta)} ${unit}${share}`;\n}\n\nfunction describePoint(point: SeriesPoint, series: Series[], unit: string) {\n const breakdown = shownSeries(series, point).map(\n (s) => `${s.key}: ${formatNumber(point.values[s.key]!)}`,\n );\n return [\n `${formatDay(point.time, true)}, ${formatNumber(point.total)} total ${unit}.`,\n breakdown.length ? `${breakdown.join(\", \")}.` : \"\",\n point.annotation ? `${point.annotation}.` : \"\",\n point.carried ? \"Last captured value carried forward.\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction describeIndicators(options: ChartOptions, indicator?: Indicator) {\n const parts: string[] = [];\n if (options.sma && indicator?.sma != null)\n parts.push(`Moving average ${formatNumber(indicator.sma)}.`);\n if (options.ema)\n parts.push(`Exponential average ${formatNumber(indicator?.ema ?? 0)}.`);\n if (options.bollinger && indicator?.upper != null)\n parts.push(\n `Bollinger range ${formatNumber(indicator.lower!)} to ${formatNumber(indicator.upper)}.`,\n );\n return parts.join(\" \");\n}\n\nfunction placeTooltip(\n model: Model,\n width: number,\n height: number,\n x: number,\n y: number,\n rows: number,\n withIndicators: boolean,\n) {\n const boxWidth = Math.min(244, width - 74);\n const boxHeight = 116 + rows * 22 + (withIndicators ? 50 : 0);\n const preferredLeft =\n x + boxWidth + 24 > model.plot.right ? x - boxWidth - 16 : x + 16;\n const preferredTop = y > height / 2 ? y - boxHeight - 12 : y + 12;\n return {\n width: boxWidth,\n left: Math.max(\n model.plot.left,\n Math.min(width - boxWidth - 8, preferredLeft),\n ),\n top: Math.max(\n model.plot.top,\n Math.min(height - boxHeight - 42, preferredTop),\n ),\n };\n}\n\nfunction Swatch({ color }: { color: string }) {\n return (\n <i\n aria-hidden=\"true\"\n className=\"labui:inline-block labui:size-[7px] labui:shrink-0 labui:rounded-[2px]\"\n style={{ background: color }}\n />\n );\n}\n\nfunction Segmented({\n label,\n children,\n}: {\n label: string;\n children: React.ReactNode;\n}) {\n return (\n <div role=\"group\" aria-label={label} className=\"labui:flex labui:gap-0.5\">\n {children}\n </div>\n );\n}\n\nfunction ChartSettings({\n options,\n onOptionsChange,\n locked,\n onLockedChange,\n onForecastEnabled,\n}: {\n options: ChartOptions;\n onOptionsChange: (options: ChartOptions) => void;\n locked: boolean;\n onLockedChange: (locked: boolean) => void;\n onForecastEnabled: () => void;\n}) {\n const logBaseId = React.useId();\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n aria-label=\"Chart settings\"\n >\n Settings\n <ChevronDownIcon aria-hidden=\"true\" />\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n align=\"end\"\n sideOffset={8}\n collisionPadding={8}\n className=\"labui:z-50 labui:w-[min(276px,calc(100vw-2rem))] labui:rounded-lg labui:border labui:bg-popover labui:p-4 labui:text-popover-foreground labui:shadow-lg labui:outline-none\"\n >\n <h3 className={settingsHeading}>Display</h3>\n <label className={settingsRow}>\n <Checkbox\n checked={options.logarithmic}\n onCheckedChange={(checked) =>\n onOptionsChange({ ...options, logarithmic: checked === true })\n }\n />\n Logarithmic scale\n </label>\n {options.logarithmic && (\n <div className={settingsRow}>\n <label htmlFor={logBaseId}>Log base</label>\n <Input\n id={logBaseId}\n className=\"labui:h-8 labui:w-16\"\n type=\"number\"\n min={2}\n max={100}\n value={options.logBase}\n onChange={(event) => {\n const base = Number(event.target.value);\n if (base >= 2 && base <= 100)\n onOptionsChange({ ...options, logBase: base });\n }}\n />\n </div>\n )}\n <label className={settingsRow}>\n <Checkbox\n checked={locked}\n onCheckedChange={(checked) => onLockedChange(checked === true)}\n />\n Lock vertical scale\n </label>\n <h3\n className={cn(\n settingsHeading,\n \"labui:mt-3 labui:border-t labui:pt-3.5\",\n )}\n >\n Indicators\n </h3>\n {INDICATORS.map(([key, text]) => (\n <label key={key} className={settingsRow}>\n <Checkbox\n checked={options[key]}\n onCheckedChange={(checked) => {\n onOptionsChange({ ...options, [key]: checked === true });\n if (key === \"forecast\" && checked === true)\n onForecastEnabled();\n }}\n />\n {text}\n </label>\n ))}\n <p className=\"labui:mt-3 labui:text-[11px] labui:leading-relaxed labui:text-muted-foreground\">\n Forecasts describe the recent trend, not a target.\n </p>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n\nfunction Legend({\n series,\n point,\n unit,\n}: {\n series: Series[];\n point: SeriesPoint;\n unit: string;\n}) {\n return (\n <div\n className={cn(\n \"labui:flex labui:min-h-10 labui:flex-wrap labui:gap-x-5 labui:gap-y-2 labui:pt-1.5 labui:pb-4 labui:text-[11px]\",\n gutter,\n )}\n aria-label={`Series on ${formatDay(point.time)}`}\n >\n {shownSeries(series, point).map((s) => (\n <span\n key={s.key}\n className=\"labui:inline-flex labui:items-center labui:gap-1.5\"\n >\n <Swatch color={s.color} />\n <span>{s.key}</span>\n <b className=\"labui:font-normal labui:text-muted-foreground labui:tabular-nums\">\n {formatCompact(point.values[s.key]!)}\n </b>\n </span>\n ))}\n {!point.total && <span>No {unit} on this day</span>}\n </div>\n );\n}\n\nfunction Tooltip({\n point,\n series,\n unit,\n options,\n indicator,\n maxRows,\n style,\n}: {\n point: SeriesPoint;\n series: Series[];\n unit: string;\n options: ChartOptions;\n indicator?: Indicator;\n maxRows: number;\n style: React.CSSProperties;\n}) {\n const breakdown = shownSeries(series, point);\n const row = \"labui:flex labui:items-center labui:justify-between labui:gap-2\";\n const note =\n \"labui:mt-1.5 labui:flex labui:justify-between labui:text-[10px] labui:text-muted-foreground\";\n return (\n <div\n className=\"labui:pointer-events-none labui:absolute labui:z-10 labui:rounded-lg labui:border labui:bg-popover labui:p-3 labui:text-[11px] labui:text-popover-foreground labui:shadow-lg\"\n aria-hidden=\"true\"\n style={style}\n >\n <div className={row}>\n <b className=\"labui:font-medium\">{formatDay(point.time, true)}</b>\n <code className=\"labui:text-[10px] labui:text-muted-foreground\">\n {point.annotation}\n </code>\n </div>\n <div className=\"labui:my-2.5 labui:flex labui:items-baseline labui:gap-2 labui:border-b labui:pb-2.5\">\n <strong className=\"labui:text-[22px] labui:font-semibold labui:tracking-tight\">\n {formatNumber(point.total)}\n </strong>\n <span className=\"labui:text-muted-foreground\">{unit}</span>\n </div>\n {breakdown.slice(0, maxRows).map((s) => (\n <div\n className={cn(row, \"labui:min-h-[22px] labui:tabular-nums\")}\n key={s.key}\n >\n <span className=\"labui:flex labui:items-center labui:gap-1.5\">\n <Swatch color={s.color} />\n {s.key}\n </span>\n <b className=\"labui:font-medium\">\n {formatNumber(point.values[s.key]!)}\n </b>\n </div>\n ))}\n {breakdown.length > maxRows && (\n <small className={note}>\n +{breakdown.length - maxRows} more series\n </small>\n )}\n {options.sma && (\n <small className={note}>\n SMA {INDICATOR_PERIOD}\n <b>\n {indicator?.sma == null\n ? `${INDICATOR_PERIOD} days needed`\n : formatNumber(indicator.sma)}\n </b>\n </small>\n )}\n {options.ema && (\n <small className={note}>\n EMA {INDICATOR_PERIOD}\n <b>{formatNumber(indicator?.ema ?? 0)}</b>\n </small>\n )}\n {options.bollinger && (\n <small className={note}>\n Bollinger\n <b>\n {indicator?.upper == null\n ? `${INDICATOR_PERIOD} days needed`\n : `${formatCompact(indicator.lower!)} to ${formatCompact(indicator.upper)}`}\n </b>\n </small>\n )}\n {point.carried && (\n <small className={note}>Last capture carried forward</small>\n )}\n </div>\n );\n}\n\nfunction SelectionBar({\n selected,\n unit,\n onZoom,\n onClear,\n}: {\n selected: Selected;\n unit: string;\n onZoom: () => void;\n onClear: () => void;\n}) {\n return (\n <div\n className={cn(\n \"labui:flex labui:flex-wrap labui:items-center labui:justify-between labui:gap-3 labui:border-t labui:bg-popover labui:py-3 labui:text-xs\",\n gutter,\n )}\n >\n <span className=\"labui:flex labui:flex-wrap labui:gap-3\">\n <b className=\"labui:font-medium\">\n {formatDay(selected[0].time)} to {formatDay(selected[1].time)}\n </b>\n <span>{describeDelta(selected, unit)}</span>\n </span>\n <div className=\"labui:flex labui:gap-1.5\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n className=\"labui:text-xs\"\n onClick={onZoom}\n >\n Zoom to selection\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n className=\"labui:text-xs\"\n onClick={onClear}\n >\n Clear\n </Button>\n </div>\n </div>\n );\n}\n\nfunction Footer({\n range,\n locked,\n options,\n r2,\n}: {\n range: Range;\n locked: boolean;\n options: ChartOptions;\n r2?: number;\n}) {\n const scale = options.logarithmic\n ? `Log${options.logBase} (1 + value)`\n : \"Linear scale\";\n return (\n <div\n className={cn(\n \"labui:flex labui:flex-col labui:gap-1 labui:border-t labui:py-3 labui:text-[11px] labui:text-muted-foreground labui:tabular-nums labui:sm:flex-row labui:sm:justify-between labui:sm:gap-3 labui:sm:py-3.5\",\n gutter,\n )}\n >\n <span>\n {formatSpan(range)}\n {locked ? \", scale locked\" : \"\"}\n </span>\n <span>\n {scale}\n {options.forecast && r2 !== undefined\n ? `, trend R\u00B2 ${r2.toFixed(2)}`\n : \"\"}\n </span>\n </div>\n );\n}\n\nconst TimeSeriesChart = React.forwardRef<HTMLDivElement, TimeSeriesChartProps>(\n function TimeSeriesChart(props, ref) {\n if (!props.points.length)\n return (\n <ChartFrame\n ref={ref}\n data-slot=\"time-series-chart\"\n aria-label={props.label}\n className=\"labui:min-h-64 labui:items-center labui:justify-center labui:p-6 labui:text-sm labui:text-muted-foreground\"\n >\n No data to display\n </ChartFrame>\n );\n return <TimeSeriesPlot {...props} frameRef={ref} />;\n },\n);\n\nfunction TimeSeriesPlot({\n points,\n series,\n start,\n options,\n onOptionsChange,\n title = \"Composition\",\n subtitle,\n unit = \"units\",\n label,\n frameRef,\n}: TimeSeriesChartProps & { frameRef: React.ForwardedRef<HTMLDivElement> }) {\n const { container, width } = useChartWidth();\n React.useImperativeHandle(\n frameRef,\n () => container.current as HTMLDivElement,\n [container],\n );\n const svg = React.useRef<SVGSVGElement>(null);\n const ids = React.useId().replace(/\\W/g, \"\");\n const clipId = `${ids}-clip`;\n const helpId = `${ids}-help`;\n const last = points.at(-1)!;\n const history: Range = [\n Math.min(start, points[0]!.time),\n Math.max(last.time, start + DAY),\n ];\n const bounds: Range = [\n history[0],\n history[1] + (options.forecast ? FORECAST_DAYS * DAY : 0),\n ];\n const [view, setView] = React.useState<Range>(bounds);\n const [from, to] = clampRange(view, bounds);\n const range = React.useMemo<Range>(() => [from, to], [from, to]);\n const [locked, setLocked] = React.useState<Range>();\n const [inspected, setInspected] = React.useState<number | null>(null);\n const [selection, setSelection] = React.useState<[number, number] | null>(\n null,\n );\n const [extending, setExtending] = React.useState(false);\n const pointers = React.useRef(new Map<number, number>());\n const drag = React.useRef<number | null>(null);\n const pinch = React.useRef<{\n distance: number;\n range: Range;\n anchor: number;\n } | null>(null);\n const height = width < 600 ? 360 : 430;\n const keys = React.useMemo(() => series.map((s) => s.key), [series]);\n const model = React.useMemo(\n () => chartModel(points, keys, range, width, height, options, locked),\n [points, keys, range, width, height, options, locked],\n );\n const activeIndex =\n inspected === null\n ? points.length - 1\n : clampIndex(inspected, points.length);\n const active = points[activeIndex]!;\n const indicator = model.computed[activeIndex];\n const selected: Selected | null = selection\n ? [points[Math.min(...selection)]!, points[Math.max(...selection)]!]\n : null;\n\n const nearest = (time: number) => nearestPoint(points, time);\n const pixelAt = (clientX: number) => {\n const rect = svg.current!.getBoundingClientRect();\n const scale = rect.width ? width / rect.width : 1;\n return Math.max(\n model.plot.left,\n Math.min(model.plot.right, (clientX - rect.left) * scale),\n );\n };\n const zoomBy = (factor: number, anchor: number) =>\n setView(zoomRange(range, factor, anchor, bounds));\n const showWindow = (days: number) =>\n setView(clampRange([last.time - days * DAY, last.time], bounds));\n\n const wheelHandler = React.useRef<(event: WheelEvent) => void>(() => {});\n wheelHandler.current = (event) => {\n event.preventDefault();\n if (event.shiftKey) {\n const offset = (event.deltaY / 700) * (range[1] - range[0]);\n setView(clampRange([range[0] + offset, range[1] + offset], bounds));\n return;\n }\n const factor = Math.exp(Math.max(-1, Math.min(1, event.deltaY * 0.002)));\n zoomBy(factor, model.timeAt(pixelAt(event.clientX)));\n };\n React.useEffect(() => {\n const element = svg.current;\n if (!element) return;\n const wheel = (event: WheelEvent) => wheelHandler.current(event);\n element.addEventListener(\"wheel\", wheel, { passive: false });\n return () => element.removeEventListener(\"wheel\", wheel);\n }, []);\n\n function reset() {\n setView(history);\n setSelection(null);\n setInspected(null);\n setExtending(false);\n }\n function clearSelection() {\n setSelection(null);\n setExtending(false);\n }\n function moveInspection(index: number, extend = false) {\n index = clampIndex(index, points.length);\n if (extend) setSelection([selection?.[0] ?? activeIndex, index]);\n setInspected(index);\n const time = points[index]!.time,\n span = range[1] - range[0];\n if (time < range[0]) setView(clampRange([time, time + span], bounds));\n if (time > range[1]) setView(clampRange([time - span, time], bounds));\n }\n function keydown(event: React.KeyboardEvent<SVGSVGElement>) {\n if (event.altKey || event.ctrlKey || event.metaKey) return;\n const { key } = event;\n if (HANDLED_KEYS.includes(key)) event.preventDefault();\n const extend = event.shiftKey || extending;\n if (key === \"ArrowLeft\") moveInspection(activeIndex - 1, extend);\n if (key === \"ArrowRight\") moveInspection(activeIndex + 1, extend);\n if (key === \"Home\") moveInspection(0, extend);\n if (key === \"End\") moveInspection(points.length - 1, extend);\n if (key === \"+\" || key === \"=\") zoomBy(ZOOM_IN, active.time);\n if (key === \"-\") zoomBy(ZOOM_OUT, active.time);\n if (key === \"0\" || key === \"r\" || key === \"R\") reset();\n if (key === \"Escape\") {\n clearSelection();\n setInspected(null);\n }\n if (key === \" \") {\n setExtending(!extending);\n if (!extending) setSelection([activeIndex, activeIndex]);\n }\n }\n function pointerDown(event: React.PointerEvent<SVGSVGElement>) {\n if (event.button !== 0) return;\n svg.current?.focus({ preventScroll: true });\n event.currentTarget.setPointerCapture(event.pointerId);\n const px = pixelAt(event.clientX);\n pointers.current.set(event.pointerId, px);\n setSelection(null);\n if (pointers.current.size === 2) {\n const [a, b] = [...pointers.current.values()] as [number, number];\n pinch.current = {\n distance: Math.max(1, Math.abs(a - b)),\n range,\n anchor: model.timeAt((a + b) / 2),\n };\n drag.current = null;\n return;\n }\n drag.current = nearest(model.timeAt(px));\n setInspected(drag.current);\n }\n function pointerMove(event: React.PointerEvent<SVGSVGElement>) {\n const px = pixelAt(event.clientX);\n if (pointers.current.has(event.pointerId))\n pointers.current.set(event.pointerId, px);\n if (pinch.current && pointers.current.size >= 2) {\n const [a, b] = [...pointers.current.values()] as [number, number];\n setView(\n zoomRange(\n pinch.current.range,\n pinch.current.distance / Math.max(1, Math.abs(a - b)),\n pinch.current.anchor,\n bounds,\n ),\n );\n return;\n }\n const index = nearest(model.timeAt(px));\n setInspected(index);\n if (drag.current !== null && drag.current !== index)\n setSelection([drag.current, index]);\n }\n function pointerEnd(event: React.PointerEvent<SVGSVGElement>) {\n pointers.current.delete(event.pointerId);\n drag.current = null;\n pinch.current = null;\n if (event.currentTarget.hasPointerCapture(event.pointerId))\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n function pointerLeave() {\n if (drag.current === null && document.activeElement !== svg.current)\n setInspected(null);\n }\n\n const inspectX = model.x(active.time),\n inspectY = model.y(active.total);\n const showTooltip =\n inspected !== null &&\n inspectX >= model.plot.left &&\n inspectX <= model.plot.right;\n const maxRows = width < 600 ? 3 : 5;\n const tooltipStyle = placeTooltip(\n model,\n width,\n height,\n inspectX,\n inspectY,\n Math.min(maxRows, shownSeries(series, active).length),\n options.sma || options.ema || options.bollinger,\n );\n const forecastWidth = Math.max(\n 0,\n model.x(last.time + FORECAST_DAYS * DAY) - model.x(last.time),\n );\n const plotHeight = model.plot.bottom - model.plot.top;\n const liveText = [\n selected\n ? `Selected ${formatSpan([selected[0].time, selected[1].time])}. ${describeDelta(selected, unit)}.`\n : \"\",\n describePoint(active, series, unit),\n describeIndicators(options, indicator),\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <ChartFrame\n data-slot=\"time-series-chart\"\n aria-label={label}\n ref={container}\n >\n <div\n className={cn(\n \"labui:relative labui:flex labui:flex-wrap labui:items-center labui:justify-between labui:gap-3 labui:pt-4 labui:pb-3 labui:sm:pt-5\",\n gutter,\n )}\n >\n <div className=\"labui:flex labui:flex-wrap labui:items-baseline labui:gap-3\">\n <h2 className=\"labui:text-sm labui:font-medium\">{title}</h2>\n {subtitle && <span className={mutedSmall}>{subtitle}</span>}\n </div>\n <div className=\"labui:flex labui:flex-wrap labui:items-center labui:gap-2\">\n <Segmented label=\"Date window\">\n {WINDOWS.map(([text, days]) => (\n <Button\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n key={text}\n onClick={() => showWindow(days)}\n >\n {text}\n </Button>\n ))}\n <Button\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n onClick={reset}\n aria-label=\"Show all history\"\n >\n All\n </Button>\n </Segmented>\n <Segmented label=\"Zoom controls\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n aria-label=\"Zoom out\"\n onClick={() => zoomBy(ZOOM_OUT, (range[0] + range[1]) / 2)}\n >\n -\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n aria-label=\"Zoom in\"\n onClick={() => zoomBy(ZOOM_IN, (range[0] + range[1]) / 2)}\n >\n +\n </Button>\n </Segmented>\n <ChartSettings\n options={options}\n onOptionsChange={onOptionsChange}\n locked={!!locked}\n onLockedChange={(lock) =>\n setLocked(lock ? model.domain : undefined)\n }\n onForecastEnabled={() =>\n setView([range[0], last.time + FORECAST_DAYS * DAY])\n }\n />\n </div>\n </div>\n <Legend series={series} point={active} unit={unit} />\n <div className=\"labui:relative labui:w-full\">\n <svg\n ref={svg}\n viewBox={`0 0 ${width} ${height}`}\n width={width}\n height={height}\n className=\"labui:block labui:max-w-full labui:cursor-crosshair labui:touch-none labui:rounded labui:outline-none labui:select-none labui:focus-visible:ring-2 labui:focus-visible:ring-ring labui:focus-visible:ring-inset\"\n role=\"slider\"\n tabIndex={0}\n aria-label={`${label}, ${formatSpan(range)}`}\n aria-describedby={helpId}\n aria-orientation=\"horizontal\"\n aria-valuemin={0}\n aria-valuemax={points.length - 1}\n aria-valuenow={activeIndex}\n aria-valuetext={describePoint(active, series, unit)}\n onKeyDown={keydown}\n onFocus={() => setInspected(nearest(range[1]))}\n onPointerDown={pointerDown}\n onPointerMove={pointerMove}\n onPointerUp={pointerEnd}\n onPointerCancel={pointerEnd}\n onPointerLeave={pointerLeave}\n >\n <defs>\n <clipPath id={clipId}>\n <rect\n x={model.plot.left}\n y={model.plot.top}\n width={model.plot.right - model.plot.left}\n height={plotHeight}\n />\n </clipPath>\n </defs>\n <g aria-hidden=\"true\">\n {model.yTicks.map((tick, i) => (\n <g key={i}>\n <line\n x1={model.plot.left}\n x2={model.plot.right}\n y1={tick.pixel}\n y2={tick.pixel}\n stroke=\"var(--labui-border)\"\n strokeWidth={1}\n strokeDasharray=\"2 5\"\n />\n <text\n className=\"labui:font-mono\"\n x={model.plot.left - 12}\n y={tick.pixel + 4}\n textAnchor=\"end\"\n fill=\"var(--labui-muted-foreground)\"\n fontSize={10}\n >\n {formatCompact(tick.value)}\n </text>\n </g>\n ))}\n {model.xTicks.map((tick) => (\n <text\n className=\"labui:font-mono\"\n key={tick.value}\n x={tick.pixel}\n y={height - 12}\n textAnchor=\"middle\"\n fill=\"var(--labui-muted-foreground)\"\n fontSize={10}\n >\n {formatDay(tick.value)}\n </text>\n ))}\n <g clipPath={`url(#${clipId})`}>\n {model.bands.map((band) => (\n <path\n key={band.key}\n d={band.path}\n fill={series.find((s) => s.key === band.key)!.color}\n fillOpacity={0.72}\n />\n ))}\n <path\n d={model.totalPath}\n fill=\"none\"\n stroke=\"var(--labui-foreground)\"\n strokeWidth={1.4}\n strokeLinejoin=\"round\"\n />\n {options.sma && (\n <path\n {...indicatorLine}\n d={model.smaPath}\n stroke=\"var(--labui-chart-2)\"\n />\n )}\n {options.ema && (\n <path\n {...indicatorLine}\n d={model.emaPath}\n stroke=\"var(--labui-chart-4)\"\n />\n )}\n {options.bollinger &&\n [model.upperPath, model.lowerPath].map((d, i) => (\n <path\n {...indicatorLine}\n key={i}\n d={d}\n stroke=\"var(--labui-chart-3)\"\n strokeDasharray=\"4 3\"\n />\n ))}\n {options.forecast && (\n <>\n <rect\n x={model.x(last.time)}\n y={model.plot.top}\n width={forecastWidth}\n height={plotHeight}\n fill=\"var(--labui-foreground)\"\n opacity={0.025}\n />\n <path\n {...indicatorLine}\n d={model.forecastPath}\n stroke=\"var(--labui-foreground)\"\n strokeDasharray=\"5 5\"\n />\n </>\n )}\n {selected && (\n <rect\n x={model.x(selected[0].time)}\n y={model.plot.top}\n width={Math.max(\n 1,\n model.x(selected[1].time) - model.x(selected[0].time),\n )}\n height={plotHeight}\n fill=\"var(--labui-primary)\"\n fillOpacity={0.15}\n stroke=\"var(--labui-primary)\"\n strokeOpacity={0.7}\n />\n )}\n {showTooltip && (\n <>\n <line\n {...crosshair}\n x1={inspectX}\n x2={inspectX}\n y1={model.plot.top}\n y2={model.plot.bottom}\n />\n <line\n {...crosshair}\n x1={model.plot.left}\n x2={model.plot.right}\n y1={inspectY}\n y2={inspectY}\n />\n <circle\n cx={inspectX}\n cy={inspectY}\n r={4}\n fill=\"var(--labui-foreground)\"\n stroke=\"var(--labui-background)\"\n strokeWidth={2}\n />\n </>\n )}\n </g>\n </g>\n </svg>\n {showTooltip && (\n <Tooltip\n point={active}\n series={series}\n unit={unit}\n options={options}\n indicator={indicator}\n maxRows={maxRows}\n style={tooltipStyle}\n />\n )}\n </div>\n {selected && (\n <SelectionBar\n selected={selected}\n unit={unit}\n onZoom={() =>\n setView(clampRange([selected[0].time, selected[1].time], bounds))\n }\n onClear={clearSelection}\n />\n )}\n <Footer\n range={range}\n locked={!!locked}\n options={options}\n r2={model.forecast?.r2}\n />\n <p\n className={cn(\n \"labui:pb-4 labui:text-[10px] labui:leading-relaxed labui:text-muted-foreground\",\n gutter,\n )}\n id={helpId}\n >\n Scroll or pinch to zoom. Drag to compare. Arrow keys inspect, Shift and\n arrows select. Plus and minus zoom, R resets. Shift and scroll pans.\n </p>\n <div className=\"labui:sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n {liveText}\n </div>\n </ChartFrame>\n );\n}\n\nexport { TimeSeriesChart };\n", "/** Pure chart geometry: no DOM, React, clock or storage. */\nexport const DAY = 86_400_000;\nexport type Range = [number, number];\nexport type SeriesPoint = {\n time: number;\n total: number;\n values: Record<string, number>;\n annotation?: string;\n carried?: boolean;\n};\nexport type ChartOptions = {\n logarithmic: boolean;\n logBase: number;\n sma: boolean;\n ema: boolean;\n bollinger: boolean;\n forecast: boolean;\n};\nexport const DEFAULT_OPTIONS: ChartOptions = {\n logarithmic: false,\n logBase: 10,\n sma: false,\n ema: false,\n bollinger: false,\n forecast: false,\n};\n\nexport const FORECAST_DAYS = 90;\nexport const INDICATOR_PERIOD = 20;\nconst MIN_SPAN = 3 * DAY;\n\nexport function nearestPoint(points: SeriesPoint[], time: number): number {\n let lo = 0,\n hi = points.length - 1;\n while (lo < hi) {\n const mid = Math.floor((lo + hi) / 2);\n if (points[mid]!.time < time) lo = mid + 1;\n else hi = mid;\n }\n return lo > 0 && time - points[lo - 1]!.time <= points[lo]!.time - time\n ? lo - 1\n : lo;\n}\n\nexport function clampRange(\n range: Range,\n bounds: Range,\n minimum = MIN_SPAN,\n): Range {\n const size = Math.max(1, bounds[1] - bounds[0]);\n const span = Math.min(\n size,\n Math.max(Math.min(minimum, size), range[1] - range[0]),\n );\n const start = Math.max(bounds[0], Math.min(bounds[1] - span, range[0]));\n return [start, start + span];\n}\n\nexport function zoomRange(\n range: Range,\n factor: number,\n anchor: number,\n bounds: Range,\n): Range {\n const ratio = Math.max(\n 0,\n Math.min(1, (anchor - range[0]) / (range[1] - range[0])),\n );\n const size = bounds[1] - bounds[0];\n const span = Math.max(\n Math.min(MIN_SPAN, size),\n Math.min(size, (range[1] - range[0]) * factor),\n );\n return clampRange(\n [anchor - span * ratio, anchor + span * (1 - ratio)],\n bounds,\n );\n}\n\nexport function indicators(points: SeriesPoint[], period = INDICATOR_PERIOD) {\n let sum = 0,\n squares = 0,\n ema = points[0]?.total ?? 0;\n return points.map((p, i) => {\n sum += p.total;\n squares += p.total * p.total;\n if (i >= period) {\n const old = points[i - period]!.total;\n sum -= old;\n squares -= old * old;\n }\n ema += ((p.total - ema) * 2) / (period + 1);\n const mean = sum / period;\n const sigma = Math.sqrt(Math.max(0, squares / period - mean * mean));\n const complete = i + 1 >= period;\n return {\n time: p.time,\n ema,\n sma: complete ? mean : null,\n upper: complete ? mean + 2 * sigma : null,\n lower: complete ? Math.max(0, mean - 2 * sigma) : null,\n };\n });\n}\n\n/** Fits the last 90 daily values, then anchors the projection to the latest actual value. */\nexport function regression(points: SeriesPoint[]) {\n const sample = points.slice(-FORECAST_DAYS),\n last = sample.at(-1);\n if (!last || sample.length < 2) return null;\n let sx = 0,\n sy = 0,\n sxx = 0,\n sxy = 0,\n syy = 0;\n for (const p of sample) {\n const x = (p.time - last.time) / DAY;\n sx += x;\n sy += p.total;\n sxx += x * x;\n sxy += x * p.total;\n syy += p.total ** 2;\n }\n const n = sample.length,\n variance = n * sxx - sx * sx;\n const slope = variance ? (n * sxy - sx * sy) / variance : 0;\n const denom = variance * (n * syy - sy * sy);\n const r2 =\n denom > 0 ? Math.max(0, Math.min(1, (n * sxy - sx * sy) ** 2 / denom)) : 1;\n return {\n slope,\n r2,\n points: [\n { time: last.time, value: last.total },\n {\n time: last.time + FORECAST_DAYS * DAY,\n value: Math.max(0, last.total + slope * FORECAST_DAYS),\n },\n ],\n };\n}\n\nexport function niceTicks(maximum: number, count = 5): number[] {\n const rough = Math.max(1, maximum) / count,\n magnitude = 10 ** Math.floor(Math.log10(rough));\n const step =\n [1, 2, 2.5, 5, 10].find((n) => n * magnitude >= rough)! * magnitude;\n return Array.from(\n { length: Math.floor(maximum / step) + 1 },\n (_, i) => i * step,\n );\n}\n\nconst line = (points: { x: number; y: number }[]) =>\n points\n .map((p, i) => `${i ? \"L\" : \"M\"}${p.x.toFixed(2)},${p.y.toFixed(2)}`)\n .join(\" \");\n\nfunction visibleMaximum(\n points: { time: number; value: number | null }[],\n range: Range,\n): number {\n let maximum = 0;\n for (let i = 0; i < points.length; i++) {\n const p = points[i]!,\n next = points[i + 1];\n if (p.value === null) continue;\n if (p.time >= range[0] && p.time <= range[1])\n maximum = Math.max(maximum, p.value);\n if (!next || next.value === null || next.time === p.time) continue;\n for (const edge of range)\n if (p.time < edge && next.time > edge)\n maximum = Math.max(\n maximum,\n p.value +\n ((next.value - p.value) * (edge - p.time)) / (next.time - p.time),\n );\n }\n return maximum;\n}\n\nexport function chartModel(\n points: SeriesPoint[],\n keys: string[],\n range: Range,\n width: number,\n height: number,\n options: ChartOptions,\n lockedDomain?: Range,\n) {\n const plot = {\n left: width < 600 ? 48 : 64,\n right: Math.max(100, width - 20),\n top: 20,\n bottom: height - 40,\n };\n const x = (time: number) =>\n plot.left +\n ((time - range[0]) / Math.max(1, range[1] - range[0])) *\n (plot.right - plot.left);\n const timeAt = (pixel: number) =>\n range[0] +\n ((pixel - plot.left) / (plot.right - plot.left)) * (range[1] - range[0]);\n // Include the immediate neighbors so clipped paths meet the plot edge without a gap.\n const visible = (time: number, i: number) =>\n (time >= range[0] && time <= range[1]) ||\n (time < range[0] && (points[i + 1]?.time ?? Infinity) >= range[0]) ||\n (time > range[1] && (points[i - 1]?.time ?? -Infinity) <= range[1]);\n const shown = points.filter((p, i) => visible(p.time, i));\n const computed = indicators(points),\n forecast = options.forecast ? regression(points) : null;\n let maximum = Math.max(\n 1,\n visibleMaximum(\n points.map((p) => ({ time: p.time, value: p.total })),\n range,\n ),\n );\n for (const key of [\"sma\", \"ema\", \"bollinger\"] as const)\n if (options[key])\n maximum = Math.max(\n maximum,\n visibleMaximum(\n computed.map((p) => ({\n time: p.time,\n value: key === \"bollinger\" ? p.upper : p[key],\n })),\n range,\n ),\n );\n if (forecast && range[1] > forecast.points[0]!.time) {\n maximum = Math.max(\n maximum,\n forecast.points[0]!.value,\n forecast.points[0]!.value +\n forecast.slope *\n Math.min(FORECAST_DAYS, (range[1] - forecast.points[0]!.time) / DAY),\n );\n }\n const domain: Range = lockedDomain ?? [0, maximum * 1.12];\n const base =\n Number.isFinite(options.logBase) && options.logBase > 1\n ? options.logBase\n : 10;\n const transform = (v: number) =>\n options.logarithmic ? Math.log1p(Math.max(0, v)) / Math.log(base) : v;\n const y = (value: number) =>\n plot.bottom -\n ((transform(value) - transform(domain[0])) /\n Math.max(1e-9, transform(domain[1]) - transform(domain[0]))) *\n (plot.bottom - plot.top);\n const totals = shown.map((p) => ({ x: x(p.time), y: y(p.total) }));\n const cumulative = shown.map(() => 0);\n const bands = keys.map((key) => {\n const lower = shown.map((p, i) => ({ x: x(p.time), y: y(cumulative[i]!) }));\n const upper = shown.map((p, i) => {\n cumulative[i] = cumulative[i]! + (p.values[key] ?? 0);\n return { x: x(p.time), y: y(cumulative[i]!) };\n });\n return {\n key,\n path: `${line(upper)} ${line(lower.reverse()).replace(/^M/, \"L\")} Z`,\n };\n });\n const overlay = (key: \"sma\" | \"ema\" | \"upper\" | \"lower\") =>\n line(\n computed\n .filter((p, i) => p[key] !== null && visible(p.time, i))\n .map((p) => ({ x: x(p.time), y: y(p[key]!) })),\n );\n const tickCount = Math.max(2, Math.floor((plot.right - plot.left) / 125));\n const dayStep = Math.max(\n 1,\n Math.ceil((range[1] - range[0]) / DAY / tickCount),\n );\n const firstTick = Math.ceil(range[0] / DAY) * DAY;\n const xTicks = Array.from(\n {\n length: Math.max(\n 1,\n Math.floor((range[1] - firstTick) / (dayStep * DAY)) + 1,\n ),\n },\n (_, i) => ({\n value: firstTick + i * dayStep * DAY,\n pixel: x(firstTick + i * dayStep * DAY),\n }),\n );\n const logSteps = Math.max(0, Math.floor(transform(domain[1])));\n const logStride = Math.max(1, Math.ceil(logSteps / 6));\n const yTicks = options.logarithmic\n ? Array.from(\n { length: Math.floor(logSteps / logStride) + 1 },\n (_, i) => base ** (i * logStride) - 1,\n )\n : niceTicks(domain[1]);\n if (yTicks.length === 1) yTicks.push(domain[1]);\n return {\n plot,\n domain,\n x,\n y,\n timeAt,\n bands,\n totalPath: line(totals),\n xTicks,\n yTicks: yTicks.map((value) => ({ value, pixel: y(value) })),\n positions: points.map((p) => ({ x: x(p.time), y: y(p.total) })),\n computed,\n smaPath: overlay(\"sma\"),\n emaPath: overlay(\"ema\"),\n upperPath: overlay(\"upper\"),\n lowerPath: overlay(\"lower\"),\n forecast,\n forecastPath: forecast\n ? line(forecast.points.map((p) => ({ x: x(p.time), y: y(p.value) })))\n : \"\",\n };\n}\n", "import * as React from \"react\";\nimport { ChartFrame } from \"./chart-frame.js\";\n\nexport type TimingSpan = {\n id: string;\n start: number;\n end: number;\n label: string;\n detail?: string;\n color?: string;\n /** A bound or observation window, not a measured execution interval. */\n uncertain?: boolean;\n};\nexport type TimingTrack = { id: string; label: string; spans: TimingSpan[] };\n\nexport type TimingTracksProps = {\n tracks: TimingTrack[];\n from: number;\n to: number;\n label?: string;\n unit?: string;\n onSelect?: (span: TimingSpan) => void;\n};\n\nconst TICKS = 5;\nconst formatValue = (value: number) =>\n value.toLocaleString(undefined, { maximumFractionDigits: 3 });\n\n/** Shared-clock tracks supplied by the caller. Deliberately no clock conversion. */\nconst TimingTracks = React.forwardRef<HTMLDivElement, TimingTracksProps>(\n function TimingTracks(\n { tracks, from, to, label = \"Timeline\", unit = \"ms\", onSelect },\n ref,\n ) {\n const [active, setActive] = React.useState<TimingSpan | null>(null);\n const range = Math.max(0.001, to - from);\n const visible = (span: TimingSpan) => span.end >= from && span.start <= to;\n const placement = (span: TimingSpan) => {\n const left = Math.max(from, span.start);\n const right = Math.min(to, span.end);\n return {\n left: `${((left - from) / range) * 100}%`,\n width: `max(3px, ${((right - left) / range) * 100}%)`,\n };\n };\n const duration = (span: TimingSpan) =>\n `${formatValue(span.end - span.start)} ${unit}`;\n\n return (\n <ChartFrame data-slot=\"timing-tracks\" aria-label={label} ref={ref}>\n <div className=\"labui:border-b labui:px-4 labui:py-3 labui:text-sm labui:font-semibold\">\n {label}\n </div>\n <div className=\"labui:overflow-x-auto labui:p-4\">\n <div className=\"labui:min-w-[560px]\">\n <div className=\"labui:mb-2 labui:ml-36 labui:flex labui:justify-between labui:text-xs labui:text-muted-foreground labui:tabular-nums\">\n {Array.from({ length: TICKS }, (_, i) => (\n <span key={i}>\n {formatValue(from + (range * i) / (TICKS - 1))} {unit}\n </span>\n ))}\n </div>\n {tracks.map((track) => (\n <div\n key={track.id}\n className=\"labui:mb-2 labui:flex labui:items-center labui:gap-3\"\n >\n <span className=\"labui:w-32 labui:shrink-0 labui:text-xs labui:font-medium\">\n {track.label}\n </span>\n <div\n className=\"labui:relative labui:h-9 labui:flex-1 labui:rounded labui:border labui:bg-muted/30\"\n aria-label={track.label}\n >\n {track.spans.filter(visible).map((span) => (\n <button\n key={span.id}\n type=\"button\"\n className=\"labui:absolute labui:top-1 labui:h-7 labui:overflow-hidden labui:rounded labui:px-1 labui:text-left labui:text-[11px] labui:text-primary-foreground labui:outline-offset-2 labui:focus-visible:outline-2\"\n style={{\n ...placement(span),\n background: span.color || \"var(--labui-chart-4)\",\n border: span.uncertain\n ? \"1px dashed currentColor\"\n : undefined,\n opacity: span.uncertain ? 0.65 : 1,\n }}\n title={`${span.label}: ${duration(span)}. ${span.detail ?? \"\"}`}\n onPointerEnter={() => setActive(span)}\n onFocus={() => setActive(span)}\n onClick={() => {\n setActive(span);\n onSelect?.(span);\n }}\n aria-label={`${span.label}, ${formatValue(span.start)} to ${formatValue(span.end)} ${unit}${span.uncertain ? \", observation window\" : \"\"}`}\n >\n {span.label}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n <div\n className=\"labui:min-h-14 labui:border-t labui:bg-muted/20 labui:px-4 labui:py-3 labui:text-xs\"\n aria-live=\"polite\"\n >\n {active ? (\n <>\n <strong>{active.label}</strong>, {duration(active)}\n <span className=\"labui:ml-2 labui:text-muted-foreground\">\n {active.detail}\n </span>\n </>\n ) : (\n <span className=\"labui:text-muted-foreground\">\n Hover or focus a span for its timing. Dashed spans indicate\n observation windows.\n </span>\n )}\n </div>\n </ChartFrame>\n );\n },\n);\n\nexport { TimingTracks };\n", "import * as React from \"react\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\";\nimport { cn, focusRing, invalidRing } from \"./classes.js\";\n\nconst toggleVariants = {\n default: \"labui:bg-transparent\",\n outline:\n \"labui:border labui:border-input labui:bg-transparent labui:shadow-xs labui:hover:bg-accent labui:hover:text-accent-foreground\",\n};\n\nconst toggleSizes = {\n default: \"labui:h-9 labui:min-w-9 labui:px-2\",\n sm: \"labui:h-8 labui:min-w-8 labui:px-1.5\",\n lg: \"labui:h-10 labui:min-w-10 labui:px-2.5\",\n};\n\ntype ToggleStyle = {\n variant?: keyof typeof toggleVariants;\n size?: keyof typeof toggleSizes;\n};\n\nfunction toggleClasses({ variant = \"default\", size = \"default\" }: ToggleStyle) {\n return cn(\n \"labui:inline-flex labui:items-center labui:justify-center labui:gap-2 labui:rounded-md labui:text-sm labui:font-medium labui:whitespace-nowrap labui:transition-[color,box-shadow] labui:outline-none labui:hover:bg-muted labui:hover:text-muted-foreground labui:disabled:pointer-events-none labui:disabled:opacity-50 labui:data-[state=on]:bg-accent labui:data-[state=on]:text-accent-foreground labui:[&_svg]:pointer-events-none labui:[&_svg]:shrink-0 labui:[&_svg:not([class*='size-'])]:size-4\",\n focusRing,\n invalidRing,\n toggleVariants[variant],\n toggleSizes[size],\n );\n}\n\nconst Toggle = React.forwardRef<\n React.ElementRef<typeof TogglePrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & ToggleStyle\n>(function Toggle({ className, variant, size, ...props }, ref) {\n return (\n <TogglePrimitive.Root\n ref={ref}\n data-slot=\"toggle\"\n className={cn(toggleClasses({ variant, size }), className)}\n {...props}\n />\n );\n});\n\nconst ToggleGroupContext = React.createContext<\n ToggleStyle & { spacing: number }\n>({ spacing: 0 });\n\nconst ToggleGroup = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &\n ToggleStyle & { spacing?: number }\n>(function ToggleGroup(\n { className, variant, size, spacing = 0, children, ...props },\n ref,\n) {\n const style = React.useMemo(\n () => ({ variant, size, spacing }),\n [variant, size, spacing],\n );\n return (\n <ToggleGroupPrimitive.Root\n ref={ref}\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n style={{ \"--labui-gap\": spacing } as React.CSSProperties}\n className={cn(\n \"labui:group/toggle-group labui:flex labui:w-fit labui:items-center labui:gap-[--spacing(var(--labui-gap))] labui:rounded-md\",\n className,\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={style}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n});\n\nconst ToggleGroupItem = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> & ToggleStyle\n>(function ToggleGroupItem({ className, variant, size, ...props }, ref) {\n const group = React.useContext(ToggleGroupContext);\n const style = {\n variant: group.variant ?? variant,\n size: group.size ?? size,\n };\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n data-slot=\"toggle-group-item\"\n data-variant={style.variant}\n data-size={style.size}\n data-spacing={group.spacing}\n className={cn(\n toggleClasses(style),\n \"labui:w-auto labui:min-w-0 labui:shrink-0 labui:px-3 labui:focus:z-10 labui:focus-visible:z-10\",\n \"labui:data-[spacing=0]:rounded-none labui:data-[spacing=0]:shadow-none labui:data-[spacing=0]:first:rounded-l-md labui:data-[spacing=0]:last:rounded-r-md labui:data-[spacing=0]:data-[variant=outline]:border-l-0 labui:data-[spacing=0]:data-[variant=outline]:first:border-l\",\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Toggle, ToggleGroup, ToggleGroupItem };\n", "import * as React from \"react\";\nimport { cn } from \"./classes.js\";\n\nconst Topbar = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithoutRef<\"header\">\n>(function Topbar({ className, ...props }, ref) {\n return (\n <header\n ref={ref}\n data-slot=\"topbar\"\n className={cn(\n \"labui:flex labui:h-(--labui-topbar-height) labui:shrink-0 labui:items-center labui:justify-between labui:gap-4 labui:border-b labui:bg-background labui:px-4\",\n className,\n )}\n {...props}\n />\n );\n});\n\nconst TopbarActions = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<\"div\">\n>(function TopbarActions({ className, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"topbar-actions\"\n className={cn(\"labui:flex labui:items-center labui:gap-2\", className)}\n {...props}\n />\n );\n});\n\nexport { Topbar, TopbarActions };\n"],
5
+ "mappings": "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",
6
+ "names": ["Alert", "AlertTitle", "AlertDescription", "useState", "React", "React", "React", "jsx", "DropdownMenuContent", "DropdownMenuSubTrigger", "DropdownMenuSubContent", "DropdownMenuItem", "DropdownMenuCheckboxItem", "DropdownMenuRadioItem", "DropdownMenuLabel", "DropdownMenuSeparator", "jsx", "jsxs", "useState", "React", "jsx", "Avatar", "AvatarImage", "AvatarFallback", "AvatarBadge", "AvatarGroup", "AvatarGroupCount", "React", "jsx", "Badge", "React", "Slot", "ChevronRightIcon", "jsx", "jsxs", "Breadcrumb", "BreadcrumbList", "BreadcrumbItem", "BreadcrumbLink", "Slot", "BreadcrumbPage", "BreadcrumbSeparator", "ChevronRightIcon", "BreadcrumbEllipsis", "React", "jsx", "BrowserLayout", "BrowserLayoutNav", "BrowserLayoutPane", "BrowserLayoutToggle", "React", "jsx", "Card", "CardHeader", "CardTitle", "CardDescription", "CardAction", "CardContent", "CardFooter", "React", "jsx", "ChartFrame", "React", "CheckIcon", "jsx", "Checkbox", "CheckIcon", "React", "React", "jsx", "jsxs", "DialogOverlay", "DialogContent", "DialogHeader", "DialogFooter", "DialogTitle", "DialogDescription", "jsx", "jsxs", "Command", "CommandInput", "CommandList", "CommandEmpty", "CommandGroup", "CommandSeparator", "CommandItem", "React", "CheckIcon", "React", "CheckIcon", "jsx", "jsxs", "CheckIcon", "React", "jsx", "Input", "React", "jsx", "Spinner", "jsx", "jsxs", "Icon", "CheckIcon", "jsx", "jsxs", "React", "Fragment", "jsx", "jsxs", "EmailThread", "EmailMessage", "React", "jsx", "Empty", "EmptyHeader", "EmptyMedia", "EmptyTitle", "EmptyDescription", "EmptyContent", "React", "React", "jsx", "Label", "React", "jsx", "Separator", "jsx", "jsxs", "FieldSet", "FieldLegend", "FieldGroup", "Field", "FieldContent", "FieldLabel", "Label", "FieldTitle", "FieldDescription", "FieldSeparator", "Separator", "messages", "FieldError", "React", "jsx", "jsxs", "FileInput", "React", "useEffect", "useRef", "useState", "Fragment", "jsx", "jsxs", "FlameGraph", "query", "matches", "key", "depth", "useId", "React", "CheckIcon", "jsx", "jsxs", "SelectTrigger", "SelectContent", "SelectItem", "CheckIcon", "jsx", "jsxs", "useId", "React", "Fragment", "jsx", "jsxs", "key", "HistogramSparkline", "HistogramChart", "React", "React", "jsx", "Textarea", "jsx", "InputGroup", "InputGroupAddon", "InputGroupButton", "InputGroupText", "InputGroupInput", "InputGroupTextarea", "React", "jsx", "Kbd", "KbdGroup", "React", "ChevronDownIcon", "jsx", "jsxs", "NativeSelect", "ChevronDownIcon", "NativeSelectOption", "NativeSelectOptGroup", "React", "Slot", "jsx", "NavTabs", "NavTab", "Slot", "React", "jsx", "jsxs", "PageActions", "PageHeaderText", "PageEyebrow", "PageTitle", "PageDescription", "PageHeader", "Page", "Back", "React", "React", "Slot", "PanelLeftIcon", "React", "XIcon", "jsx", "jsxs", "SheetContent", "XIcon", "SheetHeader", "SheetFooter", "SheetTitle", "SheetDescription", "React", "jsx", "Skeleton", "React", "jsx", "jsxs", "TooltipContent", "React", "jsx", "jsxs", "key", "SidebarProvider", "Sidebar", "SidebarTrigger", "PanelLeftIcon", "SidebarRail", "SidebarInset", "SidebarInput", "Section", "SidebarSeparator", "Separator", "SidebarGroupLabel", "Slot", "SidebarGroupAction", "SidebarMenu", "SidebarMenuItem", "SidebarMenuButton", "SidebarMenuAction", "SidebarMenuBadge", "SidebarMenuSkeleton", "SidebarMenuSub", "SidebarMenuSubItem", "SidebarMenuSubButton", "jsx", "Rail", "RailItem", "React", "SearchIcon", "XIcon", "jsx", "jsxs", "SearchInput", "SearchIcon", "XIcon", "React", "jsx", "jsxs", "SettingsSection", "SettingsRow", "Label", "SettingsFooter", "React", "jsx", "jsxs", "SidePanel", "React", "jsx", "Stats", "Stat", "StatLabel", "StatValue", "StatDetail", "React", "jsx", "jsxs", "Steps", "Step", "React", "jsx", "Switch", "React", "React", "column", "widths", "Fragment", "jsx", "jsxs", "column", "key", "empty", "React", "jsx", "jsxs", "TableScreen", "React", "jsx", "Tabs", "TabsList", "TabsTrigger", "TabsContent", "React", "React", "Popover", "ChevronDownIcon", "key", "overlay", "Fragment", "jsx", "jsxs", "createElement", "formatNumber", "clampIndex", "indicator", "ChevronDownIcon", "key", "Tooltip", "TimeSeriesChart", "React", "Fragment", "jsx", "jsxs", "formatValue", "TimingTracks", "React", "jsx", "Toggle", "ToggleGroup", "ToggleGroupItem", "React", "jsx", "Topbar", "TopbarActions"]
7
7
  }