@sole-ui/react 0.0.0-stage → 0.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 (161) hide show
  1. package/README.md +98 -2
  2. package/dist/components/shell/app-frame.d.ts +14 -0
  3. package/dist/components/shell/app-frame.js +8 -0
  4. package/dist/components/shell/command-palette.d.ts +32 -0
  5. package/dist/components/shell/command-palette.js +30 -0
  6. package/dist/components/shell/index.d.ts +4 -0
  7. package/dist/components/shell/index.js +4 -0
  8. package/dist/components/shell/page.d.ts +25 -0
  9. package/dist/components/shell/page.js +22 -0
  10. package/dist/components/shell/sidebar.d.ts +81 -0
  11. package/dist/components/shell/sidebar.js +113 -0
  12. package/dist/components/sole/avatar.d.ts +19 -0
  13. package/dist/components/sole/avatar.js +37 -0
  14. package/dist/components/sole/banner.d.ts +24 -0
  15. package/dist/components/sole/banner.js +27 -0
  16. package/dist/components/sole/column-header.d.ts +15 -0
  17. package/dist/components/sole/column-header.js +15 -0
  18. package/dist/components/sole/copy-field.d.ts +10 -0
  19. package/dist/components/sole/copy-field.js +32 -0
  20. package/dist/components/sole/count-badge.d.ts +8 -0
  21. package/dist/components/sole/count-badge.js +8 -0
  22. package/dist/components/sole/field.d.ts +24 -0
  23. package/dist/components/sole/field.js +27 -0
  24. package/dist/components/sole/filters.d.ts +33 -0
  25. package/dist/components/sole/filters.js +48 -0
  26. package/dist/components/sole/index.d.ts +17 -0
  27. package/dist/components/sole/index.js +17 -0
  28. package/dist/components/sole/kbd.d.ts +7 -0
  29. package/dist/components/sole/kbd.js +14 -0
  30. package/dist/components/sole/label-tag.d.ts +18 -0
  31. package/dist/components/sole/label-tag.js +17 -0
  32. package/dist/components/sole/layout.d.ts +54 -0
  33. package/dist/components/sole/layout.js +48 -0
  34. package/dist/components/sole/logo.d.ts +13 -0
  35. package/dist/components/sole/logo.js +17 -0
  36. package/dist/components/sole/nav.d.ts +22 -0
  37. package/dist/components/sole/nav.js +32 -0
  38. package/dist/components/sole/person-chip.d.ts +8 -0
  39. package/dist/components/sole/person-chip.js +19 -0
  40. package/dist/components/sole/person-header.d.ts +21 -0
  41. package/dist/components/sole/person-header.js +22 -0
  42. package/dist/components/sole/pill.d.ts +9 -0
  43. package/dist/components/sole/pill.js +14 -0
  44. package/dist/components/sole/states.d.ts +48 -0
  45. package/dist/components/sole/states.js +53 -0
  46. package/dist/components/sole/table.d.ts +23 -0
  47. package/dist/components/sole/table.js +32 -0
  48. package/dist/components/ui/alert-dialog.d.ts +27 -0
  49. package/dist/components/ui/alert-dialog.js +33 -0
  50. package/dist/components/ui/badge.d.ts +11 -0
  51. package/dist/components/ui/badge.js +30 -0
  52. package/dist/components/ui/button.d.ts +13 -0
  53. package/dist/components/ui/button.js +49 -0
  54. package/dist/components/ui/calendar.d.ts +9 -0
  55. package/dist/components/ui/calendar.js +79 -0
  56. package/dist/components/ui/checkbox.d.ts +4 -0
  57. package/dist/components/ui/checkbox.js +11 -0
  58. package/dist/components/ui/command.d.ts +90 -0
  59. package/dist/components/ui/command.js +36 -0
  60. package/dist/components/ui/dialog.d.ts +18 -0
  61. package/dist/components/ui/dialog.js +33 -0
  62. package/dist/components/ui/dropdown-menu.d.ts +25 -0
  63. package/dist/components/ui/dropdown-menu.js +42 -0
  64. package/dist/components/ui/index.d.ts +23 -0
  65. package/dist/components/ui/index.js +23 -0
  66. package/dist/components/ui/input.d.ts +3 -0
  67. package/dist/components/ui/input.js +12 -0
  68. package/dist/components/ui/label.d.ts +4 -0
  69. package/dist/components/ui/label.js +10 -0
  70. package/dist/components/ui/popover.d.ts +10 -0
  71. package/dist/components/ui/popover.js +22 -0
  72. package/dist/components/ui/scroll-area.d.ts +5 -0
  73. package/dist/components/ui/scroll-area.js +14 -0
  74. package/dist/components/ui/select.d.ts +15 -0
  75. package/dist/components/ui/select.js +30 -0
  76. package/dist/components/ui/separator.d.ts +4 -0
  77. package/dist/components/ui/separator.js +10 -0
  78. package/dist/components/ui/sheet.d.ts +14 -0
  79. package/dist/components/ui/sheet.js +35 -0
  80. package/dist/components/ui/skeleton.d.ts +3 -0
  81. package/dist/components/ui/skeleton.js +10 -0
  82. package/dist/components/ui/sonner.d.ts +5 -0
  83. package/dist/components/ui/sonner.js +63 -0
  84. package/dist/components/ui/switch.d.ts +6 -0
  85. package/dist/components/ui/switch.js +10 -0
  86. package/dist/components/ui/tabs.d.ts +7 -0
  87. package/dist/components/ui/tabs.js +24 -0
  88. package/dist/components/ui/textarea.d.ts +3 -0
  89. package/dist/components/ui/textarea.js +9 -0
  90. package/dist/components/ui/toggle-group.d.ts +14 -0
  91. package/dist/components/ui/toggle-group.js +24 -0
  92. package/dist/components/ui/toggle.d.ts +12 -0
  93. package/dist/components/ui/toggle.js +28 -0
  94. package/dist/components/ui/tooltip.d.ts +7 -0
  95. package/dist/components/ui/tooltip.js +18 -0
  96. package/dist/hq/activity-line.d.ts +21 -0
  97. package/dist/hq/activity-line.js +26 -0
  98. package/dist/hq/board-card.d.ts +12 -0
  99. package/dist/hq/board-card.js +21 -0
  100. package/dist/hq/board-chip.d.ts +12 -0
  101. package/dist/hq/board-chip.js +20 -0
  102. package/dist/hq/checklist-item.d.ts +14 -0
  103. package/dist/hq/checklist-item.js +13 -0
  104. package/dist/hq/comment.d.ts +26 -0
  105. package/dist/hq/comment.js +15 -0
  106. package/dist/hq/due-chip.d.ts +11 -0
  107. package/dist/hq/due-chip.js +25 -0
  108. package/dist/hq/group-header.d.ts +27 -0
  109. package/dist/hq/group-header.js +22 -0
  110. package/dist/hq/inbox-row.d.ts +22 -0
  111. package/dist/hq/inbox-row.js +13 -0
  112. package/dist/hq/index.d.ts +21 -0
  113. package/dist/hq/index.js +21 -0
  114. package/dist/hq/link-row.d.ts +13 -0
  115. package/dist/hq/link-row.js +13 -0
  116. package/dist/hq/mention-chip.d.ts +23 -0
  117. package/dist/hq/mention-chip.js +28 -0
  118. package/dist/hq/page-row.d.ts +26 -0
  119. package/dist/hq/page-row.js +30 -0
  120. package/dist/hq/priority-icon.d.ts +9 -0
  121. package/dist/hq/priority-icon.js +23 -0
  122. package/dist/hq/property-type-icon.d.ts +7 -0
  123. package/dist/hq/property-type-icon.js +22 -0
  124. package/dist/hq/recent-item.d.ts +11 -0
  125. package/dist/hq/recent-item.js +12 -0
  126. package/dist/hq/review-badge.d.ts +37 -0
  127. package/dist/hq/review-badge.js +77 -0
  128. package/dist/hq/state-icon.d.ts +12 -0
  129. package/dist/hq/state-icon.js +41 -0
  130. package/dist/hq/state-pill.d.ts +9 -0
  131. package/dist/hq/state-pill.js +18 -0
  132. package/dist/hq/sticky.d.ts +13 -0
  133. package/dist/hq/sticky.js +22 -0
  134. package/dist/hq/template-card.d.ts +10 -0
  135. package/dist/hq/template-card.js +9 -0
  136. package/dist/hq/types.d.ts +49 -0
  137. package/dist/hq/types.js +7 -0
  138. package/dist/hq/work-item-row.d.ts +16 -0
  139. package/dist/hq/work-item-row.js +23 -0
  140. package/dist/index.d.ts +13 -0
  141. package/dist/index.js +12 -0
  142. package/dist/lib/cn.d.ts +2 -0
  143. package/dist/lib/cn.js +15 -0
  144. package/dist/lib/colour.d.ts +8 -0
  145. package/dist/lib/colour.js +28 -0
  146. package/dist/lib/dates.d.ts +62 -0
  147. package/dist/lib/dates.js +182 -0
  148. package/dist/lib/hue.d.ts +3 -0
  149. package/dist/lib/hue.js +1 -0
  150. package/dist/lib/person.d.ts +16 -0
  151. package/dist/lib/person.js +17 -0
  152. package/dist/lib/platform.d.ts +4 -0
  153. package/dist/lib/platform.js +12 -0
  154. package/dist/lib/sole-provider.d.ts +35 -0
  155. package/dist/lib/sole-provider.js +52 -0
  156. package/dist/styles.css +64 -0
  157. package/dist/tokens.css +231 -0
  158. package/dist/tokens.generated.d.ts +219 -0
  159. package/dist/tokens.generated.js +679 -0
  160. package/dist/tokens.json +677 -0
  161. package/package.json +82 -4
@@ -0,0 +1,18 @@
1
+ import * as React from 'react';
2
+ import { Dialog as DialogPrimitive } from 'radix-ui';
3
+ declare function Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>): React.JSX.Element;
4
+ declare const DialogTrigger: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
5
+ declare function DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>): React.JSX.Element;
6
+ declare const DialogClose: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
9
+ showCloseButton?: boolean;
10
+ overlayClassName?: string;
11
+ } & React.RefAttributes<HTMLDivElement>>;
12
+ declare const DialogHeader: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ declare const DialogFooter: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
14
+ showCloseButton?: boolean;
15
+ } & React.RefAttributes<HTMLDivElement>>;
16
+ declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
17
+ declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
18
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { XIcon } from 'lucide-react';
5
+ import { Dialog as DialogPrimitive } from 'radix-ui';
6
+ import { cn } from '../../lib/cn.js';
7
+ import { Button } from './button.js';
8
+ function Dialog({ ...props }) {
9
+ return _jsx(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
10
+ }
11
+ const DialogTrigger = React.forwardRef((props, ref) => _jsx(DialogPrimitive.Trigger, { ref: ref, "data-slot": "dialog-trigger", ...props }));
12
+ DialogTrigger.displayName = 'DialogTrigger';
13
+ function DialogPortal({ ...props }) {
14
+ return _jsx(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
15
+ }
16
+ const DialogClose = React.forwardRef((props, ref) => _jsx(DialogPrimitive.Close, { ref: ref, "data-slot": "dialog-close", ...props }));
17
+ DialogClose.displayName = 'DialogClose';
18
+ const DialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Overlay, { ref: ref, "data-slot": "dialog-overlay", className: cn('fixed inset-0 z-50 bg-black/30 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0', className), ...props })));
19
+ DialogOverlay.displayName = 'DialogOverlay';
20
+ // Dialogs sit a little above the middle of the window, their centre at 38% of its
21
+ // height, as every dialog in hq/design/screens does. The height cap keeps the top edge
22
+ // at least 16px down on a short window; a taller dialog scrolls inside itself.
23
+ const DialogContent = React.forwardRef(({ className, overlayClassName, children, showCloseButton = true, ...props }, ref) => (_jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [_jsx(DialogOverlay, { className: overlayClassName }), _jsxs(DialogPrimitive.Content, { ref: ref, "data-slot": "dialog-content", className: cn('fixed top-[38%] left-[50%] z-50 grid max-h-[calc(76dvh-32px)] w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 overflow-y-auto rounded-2xl border bg-popover p-5 text-popover-foreground shadow-lg duration-200 ease-rise outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 max-w-[400px]', className), ...props, children: [children, showCloseButton && (_jsxs(DialogPrimitive.Close, { "data-slot": "dialog-close", className: "absolute top-3.5 right-3.5 inline-flex size-7 items-center justify-center rounded-md text-subtle-foreground transition-colors duration-[120ms] hover:bg-sidebar-hover hover:text-foreground focus-visible:shadow-[var(--focus-ring)] disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", children: [_jsx(XIcon, {}), _jsx("span", { className: "sr-only", children: "Close" })] }))] })] })));
24
+ DialogContent.displayName = 'DialogContent';
25
+ const DialogHeader = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-slot": "dialog-header", className: cn('flex flex-col gap-1 pr-8 text-left', className), ...props })));
26
+ DialogHeader.displayName = 'DialogHeader';
27
+ const DialogFooter = React.forwardRef(({ className, showCloseButton = false, children, ...props }, ref) => (_jsxs("div", { ref: ref, "data-slot": "dialog-footer", className: cn('flex flex-row justify-end gap-2', className), ...props, children: [children, showCloseButton && (_jsx(DialogPrimitive.Close, { asChild: true, children: _jsx(Button, { variant: "outline", children: "Close" }) }))] })));
28
+ DialogFooter.displayName = 'DialogFooter';
29
+ const DialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Title, { ref: ref, "data-slot": "dialog-title", className: cn('text-title', className), ...props })));
30
+ DialogTitle.displayName = 'DialogTitle';
31
+ const DialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Description, { ref: ref, "data-slot": "dialog-description", className: cn('text-body text-muted-foreground', className), ...props })));
32
+ DialogDescription.displayName = 'DialogDescription';
33
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+ import { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';
3
+ declare function DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>): React.JSX.Element;
4
+ declare function DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>): React.JSX.Element;
5
+ declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const DropdownMenuGroup: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
9
+ inset?: boolean;
10
+ variant?: 'default' | 'destructive';
11
+ } & React.RefAttributes<HTMLDivElement>>;
12
+ declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
14
+ declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
15
+ declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
16
+ inset?: boolean;
17
+ } & React.RefAttributes<HTMLDivElement>>;
18
+ declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
19
+ declare const DropdownMenuShortcut: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
20
+ declare function DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>): React.JSX.Element;
21
+ declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
22
+ inset?: boolean;
23
+ } & React.RefAttributes<HTMLDivElement>>;
24
+ declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
25
+ export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // The Radix menu drawn with the Sole menu parts (components/pickers/menu.tsx, 60.3, 90.1):
4
+ // a 10px radius, 32px items, a 14px icon, 11px labels, red danger items.
5
+ import * as React from 'react';
6
+ import { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';
7
+ import { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';
8
+ import { cn } from '../../lib/cn.js';
9
+ function DropdownMenu({ ...props }) {
10
+ return _jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
11
+ }
12
+ function DropdownMenuPortal({ ...props }) {
13
+ return _jsx(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
14
+ }
15
+ const DropdownMenuTrigger = React.forwardRef((props, ref) => _jsx(DropdownMenuPrimitive.Trigger, { ref: ref, "data-slot": "dropdown-menu-trigger", ...props }));
16
+ DropdownMenuTrigger.displayName = 'DropdownMenuTrigger';
17
+ const DropdownMenuContent = React.forwardRef(({ className, sideOffset = 4, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { ref: ref, "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: cn('z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[200px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-[10px] border bg-popover p-[3px] text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95', className), ...props }) })));
18
+ DropdownMenuContent.displayName = 'DropdownMenuContent';
19
+ const DropdownMenuGroup = React.forwardRef((props, ref) => _jsx(DropdownMenuPrimitive.Group, { ref: ref, "data-slot": "dropdown-menu-group", ...props }));
20
+ DropdownMenuGroup.displayName = 'DropdownMenuGroup';
21
+ const DropdownMenuItem = React.forwardRef(({ className, inset, variant = 'default', ...props }, ref) => (_jsx(DropdownMenuPrimitive.Item, { ref: ref, "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn("relative flex h-8 cursor-default items-center gap-2.5 rounded-md px-2 text-body text-foreground outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-danger-text data-[variant=destructive]:focus:bg-danger-soft data-[variant=destructive]:focus:text-danger-text [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5 [&_svg:not([class*='text-'])]:text-muted-foreground focus:[&_svg:not([class*='text-'])]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive!", className), ...props })));
22
+ DropdownMenuItem.displayName = 'DropdownMenuItem';
23
+ const DropdownMenuCheckboxItem = React.forwardRef(({ className, children, checked, ...props }, ref) => (_jsxs(DropdownMenuPrimitive.CheckboxItem, { ref: ref, "data-slot": "dropdown-menu-checkbox-item", className: cn("relative flex h-8 cursor-default items-center gap-2.5 rounded-md pr-2 pl-8 text-body text-foreground outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), checked: checked, ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "size-4" }) }) }), children] })));
24
+ DropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem';
25
+ const DropdownMenuRadioGroup = React.forwardRef((props, ref) => _jsx(DropdownMenuPrimitive.RadioGroup, { ref: ref, "data-slot": "dropdown-menu-radio-group", ...props }));
26
+ DropdownMenuRadioGroup.displayName = 'DropdownMenuRadioGroup';
27
+ const DropdownMenuRadioItem = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(DropdownMenuPrimitive.RadioItem, { ref: ref, "data-slot": "dropdown-menu-radio-item", className: cn("relative flex cursor-default items-center gap-2 rounded-md py-1.5 pr-2 pl-8 text-body outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CircleIcon, { className: "size-2 fill-current" }) }) }), children] })));
28
+ DropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem';
29
+ const DropdownMenuLabel = React.forwardRef(({ className, inset, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Label, { ref: ref, "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn('h-6 px-2 pt-1 text-micro text-subtle-foreground data-[inset]:pl-8', className), ...props })));
30
+ DropdownMenuLabel.displayName = 'DropdownMenuLabel';
31
+ const DropdownMenuSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(DropdownMenuPrimitive.Separator, { ref: ref, "data-slot": "dropdown-menu-separator", className: cn('my-1 h-px bg-border', className), ...props })));
32
+ DropdownMenuSeparator.displayName = 'DropdownMenuSeparator';
33
+ const DropdownMenuShortcut = React.forwardRef(({ className, ...props }, ref) => (_jsx("span", { ref: ref, "data-slot": "dropdown-menu-shortcut", className: cn('ml-auto pl-3 text-label font-normal text-subtle-foreground tnum', className), ...props })));
34
+ DropdownMenuShortcut.displayName = 'DropdownMenuShortcut';
35
+ function DropdownMenuSub({ ...props }) {
36
+ return _jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
37
+ }
38
+ const DropdownMenuSubTrigger = React.forwardRef(({ className, inset, children, ...props }, ref) => (_jsxs(DropdownMenuPrimitive.SubTrigger, { ref: ref, "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, className: cn("flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-body outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className), ...props, children: [children, _jsx(ChevronRightIcon, { className: "ml-auto size-4" })] })));
39
+ DropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger';
40
+ const DropdownMenuSubContent = React.forwardRef(({ className, ...props }, ref) => (_jsx(DropdownMenuPrimitive.SubContent, { ref: ref, "data-slot": "dropdown-menu-sub-content", className: cn('z-50 min-w-[200px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-[10px] border bg-popover p-[3px] text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95', className), ...props })));
41
+ DropdownMenuSubContent.displayName = 'DropdownMenuSubContent';
42
+ export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
@@ -0,0 +1,23 @@
1
+ export * from './alert-dialog.tsx';
2
+ export * from './badge.tsx';
3
+ export * from './button.tsx';
4
+ export * from './calendar.tsx';
5
+ export * from './checkbox.tsx';
6
+ export * from './command.tsx';
7
+ export * from './dialog.tsx';
8
+ export * from './dropdown-menu.tsx';
9
+ export * from './input.tsx';
10
+ export * from './label.tsx';
11
+ export * from './popover.tsx';
12
+ export * from './scroll-area.tsx';
13
+ export * from './select.tsx';
14
+ export * from './separator.tsx';
15
+ export * from './sheet.tsx';
16
+ export * from './skeleton.tsx';
17
+ export * from './sonner.tsx';
18
+ export * from './switch.tsx';
19
+ export * from './tabs.tsx';
20
+ export * from './textarea.tsx';
21
+ export * from './toggle-group.tsx';
22
+ export * from './toggle.tsx';
23
+ export * from './tooltip.tsx';
@@ -0,0 +1,23 @@
1
+ export * from './alert-dialog.js';
2
+ export * from './badge.js';
3
+ export * from './button.js';
4
+ export * from './calendar.js';
5
+ export * from './checkbox.js';
6
+ export * from './command.js';
7
+ export * from './dialog.js';
8
+ export * from './dropdown-menu.js';
9
+ export * from './input.js';
10
+ export * from './label.js';
11
+ export * from './popover.js';
12
+ export * from './scroll-area.js';
13
+ export * from './select.js';
14
+ export * from './separator.js';
15
+ export * from './sheet.js';
16
+ export * from './skeleton.js';
17
+ export * from './sonner.js';
18
+ export * from './switch.js';
19
+ export * from './tabs.js';
20
+ export * from './textarea.js';
21
+ export * from './toggle-group.js';
22
+ export * from './toggle.js';
23
+ export * from './tooltip.js';
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ declare const Input: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
3
+ export { Input };
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { cn } from '../../lib/cn.js';
5
+ const Input = React.forwardRef(function Input({ className, type, ...props }, ref) {
6
+ return (_jsx("input", { ref: ref, type: type, "data-slot": "input", className: cn('h-8 w-full min-w-0 rounded-md border border-input bg-field px-2.5 py-1 text-body transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-body file:font-medium file:text-foreground placeholder:text-subtle-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50', 'focus-visible:border-ring focus-visible:shadow-[var(--focus-ring)]',
7
+ // Invalid: the red border (10.2, 10.4). With focus it keeps the red and trades the
8
+ // blue halo for a faint red one, so the focus still shows without mixing colours.
9
+ 'aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive aria-invalid:focus-visible:shadow-[0_0_0_3px_color-mix(in_srgb,var(--destructive)_14%,transparent)]', className), ...props }));
10
+ });
11
+ Input.displayName = 'Input';
12
+ export { Input };
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import { Label as LabelPrimitive } from 'radix-ui';
3
+ declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & React.RefAttributes<HTMLLabelElement>>;
4
+ export { Label };
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Label as LabelPrimitive } from 'radix-ui';
5
+ import { cn } from '../../lib/cn.js';
6
+ const Label = React.forwardRef(function Label({ className, ...props }, ref) {
7
+ return (_jsx(LabelPrimitive.Root, { ref: ref, "data-slot": "label", className: cn('flex items-center gap-2 text-body leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50', className), ...props }));
8
+ });
9
+ Label.displayName = 'Label';
10
+ export { Label };
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ import { Popover as PopoverPrimitive } from 'radix-ui';
3
+ declare function Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>): React.JSX.Element;
4
+ declare const PopoverTrigger: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const PopoverContent: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
6
+ declare const PopoverAnchor: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const PopoverHeader: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const PopoverTitle: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ declare const PopoverDescription: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
10
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverHeader, PopoverTitle, PopoverDescription };
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Popover as PopoverPrimitive } from 'radix-ui';
5
+ import { cn } from '../../lib/cn.js';
6
+ function Popover({ ...props }) {
7
+ return _jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
8
+ }
9
+ const PopoverTrigger = React.forwardRef((props, ref) => _jsx(PopoverPrimitive.Trigger, { ref: ref, "data-slot": "popover-trigger", ...props }));
10
+ PopoverTrigger.displayName = 'PopoverTrigger';
11
+ const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, "data-slot": "popover-content", align: align, sideOffset: sideOffset, className: cn('z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-lg border bg-popover p-4 text-popover-foreground shadow-lg outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95', className), ...props }) })));
12
+ PopoverContent.displayName = 'PopoverContent';
13
+ const PopoverAnchor = React.forwardRef((props, ref) => _jsx(PopoverPrimitive.Anchor, { ref: ref, "data-slot": "popover-anchor", ...props }));
14
+ PopoverAnchor.displayName = 'PopoverAnchor';
15
+ const PopoverHeader = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-slot": "popover-header", className: cn('flex flex-col gap-1 text-body', className), ...props })));
16
+ PopoverHeader.displayName = 'PopoverHeader';
17
+ // HQ typed this as an h2's props but rendered a div; the props now match the element.
18
+ const PopoverTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-slot": "popover-title", className: cn('font-medium', className), ...props })));
19
+ PopoverTitle.displayName = 'PopoverTitle';
20
+ const PopoverDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx("p", { ref: ref, "data-slot": "popover-description", className: cn('text-muted-foreground', className), ...props })));
21
+ PopoverDescription.displayName = 'PopoverDescription';
22
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverHeader, PopoverTitle, PopoverDescription };
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import { ScrollArea as ScrollAreaPrimitive } from 'radix-ui';
3
+ declare const ScrollArea: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
+ declare const ScrollBar: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { ScrollArea as ScrollAreaPrimitive } from 'radix-ui';
5
+ import { cn } from '../../lib/cn.js';
6
+ const ScrollArea = React.forwardRef(function ScrollArea({ className, children, ...props }, ref) {
7
+ return (_jsxs(ScrollAreaPrimitive.Root, { ref: ref, "data-slot": "scroll-area", className: cn('relative', className), ...props, children: [_jsx(ScrollAreaPrimitive.Viewport, { "data-slot": "scroll-area-viewport", className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:shadow-[var(--focus-ring)] focus-visible:outline-1", children: children }), _jsx(ScrollBar, {}), _jsx(ScrollAreaPrimitive.Corner, {})] }));
8
+ });
9
+ ScrollArea.displayName = 'ScrollArea';
10
+ const ScrollBar = React.forwardRef(function ScrollBar({ className, orientation = 'vertical', ...props }, ref) {
11
+ return (_jsx(ScrollAreaPrimitive.ScrollAreaScrollbar, { ref: ref, "data-slot": "scroll-area-scrollbar", orientation: orientation, className: cn('flex touch-none p-px transition-colors select-none', orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent', orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent', className), ...props, children: _jsx(ScrollAreaPrimitive.ScrollAreaThumb, { "data-slot": "scroll-area-thumb", className: "relative flex-1 rounded-full bg-border" }) }));
12
+ });
13
+ ScrollBar.displayName = 'ScrollBar';
14
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { Select as SelectPrimitive } from 'radix-ui';
3
+ declare function Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>): React.JSX.Element;
4
+ declare const SelectGroup: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ declare const SelectValue: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
6
+ declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & {
7
+ size?: 'sm' | 'default';
8
+ } & React.RefAttributes<HTMLButtonElement>>;
9
+ declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
+ declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
+ declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
+ declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
14
+ declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
15
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, };
@@ -0,0 +1,30 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';
5
+ import { Select as SelectPrimitive } from 'radix-ui';
6
+ import { cn } from '../../lib/cn.js';
7
+ function Select({ ...props }) {
8
+ return _jsx(SelectPrimitive.Root, { "data-slot": "select", ...props });
9
+ }
10
+ const SelectGroup = React.forwardRef((props, ref) => _jsx(SelectPrimitive.Group, { ref: ref, "data-slot": "select-group", ...props }));
11
+ SelectGroup.displayName = 'SelectGroup';
12
+ const SelectValue = React.forwardRef((props, ref) => _jsx(SelectPrimitive.Value, { ref: ref, "data-slot": "select-value", ...props }));
13
+ SelectValue.displayName = 'SelectValue';
14
+ const SelectTrigger = React.forwardRef(({ className, size = 'default', children, ...props }, ref) => (_jsxs(SelectPrimitive.Trigger, { ref: ref, "data-slot": "select-trigger", "data-size": size, className: cn("flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-field px-2.5 py-2 text-body whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:shadow-[var(--focus-ring)] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-subtle-foreground data-[size=default]:h-8 data-[size=sm]:h-7 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className), ...props, children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDownIcon, { className: "size-4 opacity-50" }) })] })));
15
+ SelectTrigger.displayName = 'SelectTrigger';
16
+ const SelectScrollUpButton = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollUpButton, { ref: ref, "data-slot": "select-scroll-up-button", className: cn('flex cursor-default items-center justify-center py-1', className), ...props, children: _jsx(ChevronUpIcon, { className: "size-4" }) })));
17
+ SelectScrollUpButton.displayName = 'SelectScrollUpButton';
18
+ const SelectScrollDownButton = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollDownButton, { ref: ref, "data-slot": "select-scroll-down-button", className: cn('flex cursor-default items-center justify-center py-1', className), ...props, children: _jsx(ChevronDownIcon, { className: "size-4" }) })));
19
+ SelectScrollDownButton.displayName = 'SelectScrollDownButton';
20
+ const SelectContent = React.forwardRef(({ className, children, position = 'item-aligned', align = 'center', ...props }, ref) => (_jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { ref: ref, "data-slot": "select-content", className: cn('relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border bg-popover text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95', position === 'popper' &&
21
+ 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1', className), position: position, align: align, ...props, children: [_jsx(SelectScrollUpButton, {}), _jsx(SelectPrimitive.Viewport, { className: cn('p-1', position === 'popper' &&
22
+ 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1'), children: children }), _jsx(SelectScrollDownButton, {})] }) })));
23
+ SelectContent.displayName = 'SelectContent';
24
+ const SelectLabel = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.Label, { ref: ref, "data-slot": "select-label", className: cn('px-2 py-1.5 text-label text-muted-foreground', className), ...props })));
25
+ SelectLabel.displayName = 'SelectLabel';
26
+ const SelectItem = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Item, { ref: ref, "data-slot": "select-item", className: cn("relative flex w-full cursor-default items-center gap-2 rounded-md py-1.5 pr-8 pl-2 text-body outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className), ...props, children: [_jsx("span", { "data-slot": "select-item-indicator", className: "absolute right-2 flex size-3.5 items-center justify-center", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "size-4" }) }) }), _jsx(SelectPrimitive.ItemText, { children: children })] })));
27
+ SelectItem.displayName = 'SelectItem';
28
+ const SelectSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.Separator, { ref: ref, "data-slot": "select-separator", className: cn('pointer-events-none -mx-1 my-1 h-px bg-border', className), ...props })));
29
+ SelectSeparator.displayName = 'SelectSeparator';
30
+ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, };
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import { Separator as SeparatorPrimitive } from 'radix-ui';
3
+ declare const Separator: React.ForwardRefExoticComponent<Omit<SeparatorPrimitive.SeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
+ export { Separator };
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Separator as SeparatorPrimitive } from 'radix-ui';
5
+ import { cn } from '../../lib/cn.js';
6
+ const Separator = React.forwardRef(function Separator({ className, orientation = 'horizontal', decorative = true, ...props }, ref) {
7
+ return (_jsx(SeparatorPrimitive.Root, { ref: ref, "data-slot": "separator", decorative: decorative, orientation: orientation, className: cn('shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px', className), ...props }));
8
+ });
9
+ Separator.displayName = 'Separator';
10
+ export { Separator };
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { Dialog as SheetPrimitive } from 'radix-ui';
3
+ declare function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>): React.JSX.Element;
4
+ declare const SheetTrigger: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const SheetClose: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const SheetContent: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
7
+ side?: 'top' | 'right' | 'bottom' | 'left';
8
+ showCloseButton?: boolean;
9
+ } & React.RefAttributes<HTMLDivElement>>;
10
+ declare const SheetHeader: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
+ declare const SheetFooter: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
+ declare const SheetTitle: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
13
+ declare const SheetDescription: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
14
+ export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription };
@@ -0,0 +1,35 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { XIcon } from 'lucide-react';
5
+ import { Dialog as SheetPrimitive } from 'radix-ui';
6
+ import { cn } from '../../lib/cn.js';
7
+ function Sheet({ ...props }) {
8
+ return _jsx(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
9
+ }
10
+ const SheetTrigger = React.forwardRef((props, ref) => _jsx(SheetPrimitive.Trigger, { ref: ref, "data-slot": "sheet-trigger", ...props }));
11
+ SheetTrigger.displayName = 'SheetTrigger';
12
+ const SheetClose = React.forwardRef((props, ref) => _jsx(SheetPrimitive.Close, { ref: ref, "data-slot": "sheet-close", ...props }));
13
+ SheetClose.displayName = 'SheetClose';
14
+ function SheetPortal({ ...props }) {
15
+ return _jsx(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
16
+ }
17
+ // The work item sheet leaves the board behind it undimmed (50.5-work-item-side-sheet),
18
+ // so the overlay only catches the click that closes the sheet.
19
+ const SheetOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Overlay, { ref: ref, "data-slot": "sheet-overlay", className: cn('fixed inset-0 z-50 bg-transparent data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0', className), ...props })));
20
+ SheetOverlay.displayName = 'SheetOverlay';
21
+ const SheetContent = React.forwardRef(({ className, children, side = 'right', showCloseButton = true, ...props }, ref) => (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Content, { ref: ref, "data-slot": "sheet-content", className: cn('fixed z-50 flex flex-col gap-4 bg-card text-card-foreground shadow-lg transition ease-rise data-[state=closed]:animate-out data-[state=closed]:duration-150 data-[state=open]:animate-in data-[state=open]:duration-200', side === 'right' &&
22
+ 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right max-w-sm rounded-l-2xl', side === 'left' &&
23
+ 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left max-w-sm rounded-r-2xl', side === 'top' &&
24
+ 'inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top', side === 'bottom' &&
25
+ 'inset-x-0 bottom-0 h-auto rounded-t-2xl border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom', className), ...props, children: [children, showCloseButton && (_jsxs(SheetPrimitive.Close, { className: "absolute top-3 right-3 inline-flex size-8 items-center justify-center rounded-md text-subtle-foreground transition-colors duration-[120ms] hover:bg-sidebar-hover hover:text-foreground focus-visible:shadow-[var(--focus-ring)]", children: [_jsx(XIcon, { className: "size-4" }), _jsx("span", { className: "sr-only", children: "Close" })] }))] })] })));
26
+ SheetContent.displayName = 'SheetContent';
27
+ const SheetHeader = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-slot": "sheet-header", className: cn('flex flex-col gap-1.5 p-4', className), ...props })));
28
+ SheetHeader.displayName = 'SheetHeader';
29
+ const SheetFooter = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, "data-slot": "sheet-footer", className: cn('mt-auto flex flex-col gap-2 p-4', className), ...props })));
30
+ SheetFooter.displayName = 'SheetFooter';
31
+ const SheetTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Title, { ref: ref, "data-slot": "sheet-title", className: cn('text-title text-foreground', className), ...props })));
32
+ SheetTitle.displayName = 'SheetTitle';
33
+ const SheetDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Description, { ref: ref, "data-slot": "sheet-description", className: cn('text-body text-muted-foreground', className), ...props })));
34
+ SheetDescription.displayName = 'SheetDescription';
35
+ export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription };
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ declare const Skeleton: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
3
+ export { Skeleton };
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { cn } from '../../lib/cn.js';
5
+ // Bars 12px tall, 4px corners, a 1.4s opacity pulse (brand-and-ux 5.15).
6
+ const Skeleton = React.forwardRef(function Skeleton({ className, ...props }, ref) {
7
+ return (_jsx("div", { ref: ref, "data-slot": "skeleton", "aria-hidden": "true", className: cn('h-3 animate-pulse rounded-sm bg-skeleton [animation-duration:1.4s]', className), ...props }));
8
+ });
9
+ Skeleton.displayName = 'Skeleton';
10
+ export { Skeleton };
@@ -0,0 +1,5 @@
1
+ import type { ToasterProps } from 'sonner';
2
+ /** While mounted, toasts sit `bottom` px from the bottom and `right` px from the right. */
3
+ export declare function useToastLift(bottom: number, right?: number): void;
4
+ declare const Toaster: import("react").ForwardRefExoticComponent<ToasterProps & import("react").RefAttributes<HTMLElement>>;
5
+ export { Toaster };
@@ -0,0 +1,63 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef, useEffect, useSyncExternalStore } from 'react';
4
+ import { CircleCheckIcon, CircleXIcon, InfoIcon, Loader2Icon, TriangleAlertIcon } from 'lucide-react';
5
+ import { Toaster as Sonner } from 'sonner';
6
+ const lifts = [];
7
+ let currentLift = null;
8
+ const liftListeners = new Set();
9
+ function setLifts() {
10
+ currentLift = lifts.at(-1) ?? null;
11
+ for (const listen of liftListeners)
12
+ listen();
13
+ }
14
+ function subscribeLift(listener) {
15
+ liftListeners.add(listener);
16
+ return () => {
17
+ liftListeners.delete(listener);
18
+ };
19
+ }
20
+ const readLift = () => currentLift;
21
+ /** Where toasts sit when no screen lifts them (90.6). */
22
+ const EDGE = { top: 16, left: 16, bottom: 36, right: 24 };
23
+ /** While mounted, toasts sit `bottom` px from the bottom and `right` px from the right. */
24
+ export function useToastLift(bottom, right = EDGE.right) {
25
+ useEffect(() => {
26
+ const lift = { bottom, right };
27
+ lifts.push(lift);
28
+ setLifts();
29
+ return () => {
30
+ lifts.splice(lifts.indexOf(lift), 1);
31
+ setLifts();
32
+ };
33
+ }, [bottom, right]);
34
+ }
35
+ // `toast` is not exported here: the package re-exports sonner's own, so a consumer's calls
36
+ // and this Toaster share one sonner instance.
37
+ const Toaster = forwardRef(function Toaster({ ...props }, ref) {
38
+ const lift = useSyncExternalStore(subscribeLift, readLift, readLift);
39
+ return (_jsx(Sonner, { ref: ref, theme: "light", position: "bottom-right", offset: lift ? { ...EDGE, bottom: lift.bottom, right: lift.right } : EDGE, duration: 4000, className: "toaster group", icons: {
40
+ success: _jsx(CircleCheckIcon, { className: "size-4 text-success" }),
41
+ info: _jsx(InfoIcon, { className: "size-4 text-subtle-foreground" }),
42
+ warning: _jsx(TriangleAlertIcon, { className: "size-4 text-warning" }),
43
+ error: _jsx(CircleXIcon, { className: "size-4 text-destructive" }),
44
+ loading: _jsx(Loader2Icon, { className: "size-4 animate-spin" }),
45
+ }, toastOptions: {
46
+ classNames: {
47
+ toast: '!w-[360px] !max-w-[calc(100vw-32px)] !items-start !rounded-xl !border-border !bg-popover !py-[11px] !pr-3.5 !text-popover-foreground !shadow-lg !text-body',
48
+ icon: '!mt-0 !ml-[-2px] !mr-[3px]',
49
+ content: '!gap-px !pr-3.5',
50
+ title: '!text-body !leading-[17px] !font-semibold',
51
+ description: '!text-body !leading-4 !text-muted-foreground',
52
+ actionButton: '!-mt-1 !bg-transparent !px-0 !text-body !text-link !font-medium',
53
+ },
54
+ }, style: {
55
+ '--normal-bg': 'var(--popover)',
56
+ '--normal-text': 'var(--popover-foreground)',
57
+ '--normal-border': 'var(--border)',
58
+ '--border-radius': '12px',
59
+ '--width': '360px',
60
+ }, ...props }));
61
+ });
62
+ Toaster.displayName = 'Toaster';
63
+ export { Toaster };
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ import { Switch as SwitchPrimitive } from 'radix-ui';
3
+ declare const Switch: React.ForwardRefExoticComponent<Omit<SwitchPrimitive.SwitchProps & React.RefAttributes<HTMLButtonElement>, "ref"> & {
4
+ size?: 'sm' | 'default';
5
+ } & React.RefAttributes<HTMLButtonElement>>;
6
+ export { Switch };
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Switch as SwitchPrimitive } from 'radix-ui';
5
+ import { cn } from '../../lib/cn.js';
6
+ const Switch = React.forwardRef(function Switch({ className, size = 'default', ...props }, ref) {
7
+ return (_jsx(SwitchPrimitive.Root, { ref: ref, "data-slot": "switch", "data-size": size, className: cn('peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:shadow-[var(--focus-ring)] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input', className), ...props, children: _jsx(SwitchPrimitive.Thumb, { "data-slot": "switch-thumb", className: cn('pointer-events-none block rounded-full bg-card ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0') }) }));
8
+ });
9
+ Switch.displayName = 'Switch';
10
+ export { Switch };
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import { Tabs as TabsPrimitive } from 'radix-ui';
3
+ declare const Tabs: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
+ declare const TabsList: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ declare const TabsTrigger: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const TabsContent: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,24 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Tabs as TabsPrimitive } from 'radix-ui';
5
+ import { cn } from '../../lib/cn.js';
6
+ // Sole tabs are an underline, not pills (brand-and-ux 5.14): 2px of --brand under the
7
+ // active tab, a hairline under the whole list.
8
+ const Tabs = React.forwardRef(function Tabs({ className, ...props }, ref) {
9
+ return _jsx(TabsPrimitive.Root, { ref: ref, "data-slot": "tabs", className: cn('flex flex-col gap-4', className), ...props });
10
+ });
11
+ Tabs.displayName = 'Tabs';
12
+ const TabsList = React.forwardRef(function TabsList({ className, ...props }, ref) {
13
+ return (_jsx(TabsPrimitive.List, { ref: ref, "data-slot": "tabs-list", className: cn('flex h-9 w-full items-stretch gap-5 overflow-x-auto border-b border-border', className), ...props }));
14
+ });
15
+ TabsList.displayName = 'TabsList';
16
+ const TabsTrigger = React.forwardRef(function TabsTrigger({ className, ...props }, ref) {
17
+ return (_jsx(TabsPrimitive.Trigger, { ref: ref, "data-slot": "tabs-trigger", className: cn("relative inline-flex shrink-0 items-center gap-1.5 px-0.5 text-body font-medium whitespace-nowrap text-muted-foreground transition-colors duration-[120ms] outline-none hover:text-foreground focus-visible:text-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 'after:absolute after:inset-x-0 after:-bottom-px after:h-0.5 after:rounded-full after:bg-brand after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100 focus-visible:after:opacity-60', className), ...props }));
18
+ });
19
+ TabsTrigger.displayName = 'TabsTrigger';
20
+ const TabsContent = React.forwardRef(function TabsContent({ className, ...props }, ref) {
21
+ return _jsx(TabsPrimitive.Content, { ref: ref, "data-slot": "tabs-content", className: cn('flex-1 outline-none', className), ...props });
22
+ });
23
+ TabsContent.displayName = 'TabsContent';
24
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ declare const Textarea: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
3
+ export { Textarea };
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { cn } from '../../lib/cn.js';
5
+ const Textarea = React.forwardRef(function Textarea({ className, ...props }, ref) {
6
+ return (_jsx("textarea", { ref: ref, "data-slot": "textarea", className: cn('flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-field px-2.5 py-2 text-body transition-[color,box-shadow] outline-none placeholder:text-subtle-foreground focus-visible:border-ring focus-visible:shadow-[var(--focus-ring)] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20', className), ...props }));
7
+ });
8
+ Textarea.displayName = 'Textarea';
9
+ export { Textarea };