@dalexto/lexsys-registry 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/dist/index.d.ts +25 -0
  4. package/dist/index.js +2164 -0
  5. package/dist/install-layer.d.ts +4 -0
  6. package/dist/items/accordion.d.ts +7 -0
  7. package/dist/items/alert-dialog.d.ts +7 -0
  8. package/dist/items/alert.d.ts +7 -0
  9. package/dist/items/auth-form.d.ts +7 -0
  10. package/dist/items/autocomplete.d.ts +7 -0
  11. package/dist/items/avatar.d.ts +7 -0
  12. package/dist/items/badge.d.ts +7 -0
  13. package/dist/items/button.d.ts +7 -0
  14. package/dist/items/card.d.ts +7 -0
  15. package/dist/items/checkbox-group.d.ts +7 -0
  16. package/dist/items/checkbox.d.ts +7 -0
  17. package/dist/items/collapsible.d.ts +7 -0
  18. package/dist/items/combobox.d.ts +7 -0
  19. package/dist/items/command-palette.d.ts +7 -0
  20. package/dist/items/context-menu.d.ts +7 -0
  21. package/dist/items/dashboard-shell.d.ts +7 -0
  22. package/dist/items/dialog.d.ts +7 -0
  23. package/dist/items/drawer.d.ts +7 -0
  24. package/dist/items/field.d.ts +7 -0
  25. package/dist/items/fieldset.d.ts +7 -0
  26. package/dist/items/form-field.d.ts +7 -0
  27. package/dist/items/form.d.ts +7 -0
  28. package/dist/items/index.d.ts +49 -0
  29. package/dist/items/input.d.ts +7 -0
  30. package/dist/items/menu.d.ts +7 -0
  31. package/dist/items/menubar.d.ts +7 -0
  32. package/dist/items/meter.d.ts +7 -0
  33. package/dist/items/navigation-menu.d.ts +7 -0
  34. package/dist/items/number-field.d.ts +7 -0
  35. package/dist/items/otp-field.d.ts +7 -0
  36. package/dist/items/popover.d.ts +7 -0
  37. package/dist/items/preview-card.d.ts +7 -0
  38. package/dist/items/progress.d.ts +7 -0
  39. package/dist/items/radio-group.d.ts +7 -0
  40. package/dist/items/scroll-area.d.ts +7 -0
  41. package/dist/items/select.d.ts +7 -0
  42. package/dist/items/separator.d.ts +7 -0
  43. package/dist/items/settings-panel.d.ts +7 -0
  44. package/dist/items/sidebar.d.ts +7 -0
  45. package/dist/items/slider.d.ts +7 -0
  46. package/dist/items/switch.d.ts +7 -0
  47. package/dist/items/tabs.d.ts +7 -0
  48. package/dist/items/textarea.d.ts +7 -0
  49. package/dist/items/toast.d.ts +7 -0
  50. package/dist/items/toggle-group.d.ts +7 -0
  51. package/dist/items/toggle.d.ts +7 -0
  52. package/dist/items/toolbar.d.ts +7 -0
  53. package/dist/items/tooltip.d.ts +7 -0
  54. package/dist/registry.types.d.ts +40 -0
  55. package/dist/styles/theme.d.ts +2 -0
  56. package/dist/utilities/cn.d.ts +2 -0
  57. package/dist/validate-registry-composition.d.ts +2 -0
  58. package/dist/validate-registry-item.d.ts +2 -0
  59. package/dist/validate-registry-template-imports.d.ts +4 -0
  60. package/dist/validate-registry.d.ts +9 -0
  61. package/package.json +52 -0
  62. package/templates/blocks/AuthForm/AuthForm.tsx +109 -0
  63. package/templates/blocks/AuthForm/AuthForm.types.ts +34 -0
  64. package/templates/blocks/AuthForm/AuthForm.variants.ts +11 -0
  65. package/templates/blocks/CommandPalette/CommandPalette.tsx +245 -0
  66. package/templates/blocks/CommandPalette/CommandPalette.types.ts +73 -0
  67. package/templates/blocks/CommandPalette/CommandPalette.variants.ts +26 -0
  68. package/templates/blocks/FormField/FormField.tsx +83 -0
  69. package/templates/blocks/FormField/FormField.types.ts +26 -0
  70. package/templates/blocks/FormField/FormField.variants.ts +9 -0
  71. package/templates/blocks/SettingsPanel/SettingsPanel.tsx +104 -0
  72. package/templates/blocks/SettingsPanel/SettingsPanel.types.ts +31 -0
  73. package/templates/blocks/SettingsPanel/SettingsPanel.variants.ts +9 -0
  74. package/templates/blocks/Sidebar/Sidebar.tsx +414 -0
  75. package/templates/blocks/Sidebar/Sidebar.types.ts +99 -0
  76. package/templates/blocks/Sidebar/Sidebar.variants.ts +84 -0
  77. package/templates/primitives/Accordion/Accordion.tsx +102 -0
  78. package/templates/primitives/Accordion/Accordion.types.ts +20 -0
  79. package/templates/primitives/Accordion/Accordion.variants.ts +32 -0
  80. package/templates/primitives/Alert/Alert.tsx +62 -0
  81. package/templates/primitives/Alert/Alert.types.ts +35 -0
  82. package/templates/primitives/Alert/Alert.variants.ts +41 -0
  83. package/templates/primitives/AlertDialog/AlertDialog.tsx +168 -0
  84. package/templates/primitives/AlertDialog/AlertDialog.types.ts +30 -0
  85. package/templates/primitives/AlertDialog/AlertDialog.variants.ts +57 -0
  86. package/templates/primitives/Autocomplete/Autocomplete.tsx +394 -0
  87. package/templates/primitives/Autocomplete/Autocomplete.types.ts +82 -0
  88. package/templates/primitives/Autocomplete/Autocomplete.variants.ts +154 -0
  89. package/templates/primitives/Avatar/Avatar.tsx +56 -0
  90. package/templates/primitives/Avatar/Avatar.types.ts +31 -0
  91. package/templates/primitives/Avatar/Avatar.variants.ts +40 -0
  92. package/templates/primitives/Badge/Badge.tsx +30 -0
  93. package/templates/primitives/Badge/Badge.types.ts +30 -0
  94. package/templates/primitives/Badge/Badge.variants.ts +81 -0
  95. package/templates/primitives/Button/Button.tsx +53 -0
  96. package/templates/primitives/Button/Button.types.ts +25 -0
  97. package/templates/primitives/Button/Button.variants.ts +69 -0
  98. package/templates/primitives/Card/Card.tsx +85 -0
  99. package/templates/primitives/Card/Card.types.ts +54 -0
  100. package/templates/primitives/Card/Card.variants.ts +46 -0
  101. package/templates/primitives/Checkbox/Checkbox.tsx +72 -0
  102. package/templates/primitives/Checkbox/Checkbox.types.ts +28 -0
  103. package/templates/primitives/Checkbox/Checkbox.variants.ts +39 -0
  104. package/templates/primitives/CheckboxGroup/CheckboxGroup.tsx +32 -0
  105. package/templates/primitives/CheckboxGroup/CheckboxGroup.types.ts +17 -0
  106. package/templates/primitives/CheckboxGroup/CheckboxGroup.variants.ts +25 -0
  107. package/templates/primitives/Collapsible/Collapsible.tsx +74 -0
  108. package/templates/primitives/Collapsible/Collapsible.types.ts +28 -0
  109. package/templates/primitives/Collapsible/Collapsible.variants.ts +44 -0
  110. package/templates/primitives/Combobox/Combobox.tsx +450 -0
  111. package/templates/primitives/Combobox/Combobox.types.ts +99 -0
  112. package/templates/primitives/Combobox/Combobox.variants.ts +180 -0
  113. package/templates/primitives/ContextMenu/ContextMenu.tsx +375 -0
  114. package/templates/primitives/ContextMenu/ContextMenu.types.ts +57 -0
  115. package/templates/primitives/ContextMenu/ContextMenu.variants.ts +39 -0
  116. package/templates/primitives/Dialog/Dialog.tsx +148 -0
  117. package/templates/primitives/Dialog/Dialog.types.ts +29 -0
  118. package/templates/primitives/Dialog/Dialog.variants.ts +56 -0
  119. package/templates/primitives/Drawer/Drawer.tsx +266 -0
  120. package/templates/primitives/Drawer/Drawer.types.ts +77 -0
  121. package/templates/primitives/Drawer/Drawer.variants.ts +175 -0
  122. package/templates/primitives/Field/Field.tsx +132 -0
  123. package/templates/primitives/Field/Field.types.ts +43 -0
  124. package/templates/primitives/Field/Field.variants.ts +77 -0
  125. package/templates/primitives/Fieldset/Fieldset.tsx +36 -0
  126. package/templates/primitives/Fieldset/Fieldset.types.ts +26 -0
  127. package/templates/primitives/Fieldset/Fieldset.variants.ts +37 -0
  128. package/templates/primitives/Form/Form.tsx +24 -0
  129. package/templates/primitives/Form/Form.types.ts +13 -0
  130. package/templates/primitives/Form/Form.variants.ts +11 -0
  131. package/templates/primitives/Input/Input.tsx +36 -0
  132. package/templates/primitives/Input/Input.types.ts +27 -0
  133. package/templates/primitives/Input/Input.variants.ts +41 -0
  134. package/templates/primitives/Menu/Menu.tsx +352 -0
  135. package/templates/primitives/Menu/Menu.types.ts +56 -0
  136. package/templates/primitives/Menu/Menu.variants.ts +73 -0
  137. package/templates/primitives/Menubar/Menubar.tsx +25 -0
  138. package/templates/primitives/Menubar/Menubar.types.ts +12 -0
  139. package/templates/primitives/Menubar/Menubar.variants.ts +22 -0
  140. package/templates/primitives/Meter/Meter.tsx +123 -0
  141. package/templates/primitives/Meter/Meter.types.ts +45 -0
  142. package/templates/primitives/Meter/Meter.variants.ts +47 -0
  143. package/templates/primitives/NavigationMenu/NavigationMenu.tsx +256 -0
  144. package/templates/primitives/NavigationMenu/NavigationMenu.types.ts +58 -0
  145. package/templates/primitives/NavigationMenu/NavigationMenu.variants.ts +40 -0
  146. package/templates/primitives/NumberField/NumberField.tsx +168 -0
  147. package/templates/primitives/NumberField/NumberField.types.ts +51 -0
  148. package/templates/primitives/NumberField/NumberField.variants.ts +92 -0
  149. package/templates/primitives/OtpField/OtpField.tsx +65 -0
  150. package/templates/primitives/OtpField/OtpField.types.ts +29 -0
  151. package/templates/primitives/OtpField/OtpField.variants.ts +45 -0
  152. package/templates/primitives/Popover/Popover.tsx +193 -0
  153. package/templates/primitives/Popover/Popover.types.ts +35 -0
  154. package/templates/primitives/Popover/Popover.variants.ts +68 -0
  155. package/templates/primitives/PreviewCard/PreviewCard.tsx +153 -0
  156. package/templates/primitives/PreviewCard/PreviewCard.types.ts +42 -0
  157. package/templates/primitives/PreviewCard/PreviewCard.variants.ts +24 -0
  158. package/templates/primitives/Progress/Progress.tsx +95 -0
  159. package/templates/primitives/Progress/Progress.types.ts +39 -0
  160. package/templates/primitives/Progress/Progress.variants.ts +39 -0
  161. package/templates/primitives/RadioGroup/RadioGroup.tsx +66 -0
  162. package/templates/primitives/RadioGroup/RadioGroup.types.ts +34 -0
  163. package/templates/primitives/RadioGroup/RadioGroup.variants.ts +59 -0
  164. package/templates/primitives/ScrollArea/ScrollArea.tsx +135 -0
  165. package/templates/primitives/ScrollArea/ScrollArea.types.ts +34 -0
  166. package/templates/primitives/ScrollArea/ScrollArea.variants.ts +38 -0
  167. package/templates/primitives/Select/Select.tsx +319 -0
  168. package/templates/primitives/Select/Select.types.ts +74 -0
  169. package/templates/primitives/Select/Select.variants.ts +94 -0
  170. package/templates/primitives/Separator/Separator.tsx +30 -0
  171. package/templates/primitives/Separator/Separator.types.ts +13 -0
  172. package/templates/primitives/Separator/Separator.variants.ts +19 -0
  173. package/templates/primitives/Slider/Slider.tsx +124 -0
  174. package/templates/primitives/Slider/Slider.types.ts +51 -0
  175. package/templates/primitives/Slider/Slider.variants.ts +38 -0
  176. package/templates/primitives/Switch/Switch.tsx +61 -0
  177. package/templates/primitives/Switch/Switch.types.ts +29 -0
  178. package/templates/primitives/Switch/Switch.variants.ts +48 -0
  179. package/templates/primitives/Tabs/Tabs.tsx +70 -0
  180. package/templates/primitives/Tabs/Tabs.types.ts +23 -0
  181. package/templates/primitives/Tabs/Tabs.variants.ts +29 -0
  182. package/templates/primitives/Textarea/Textarea.tsx +42 -0
  183. package/templates/primitives/Textarea/Textarea.types.ts +31 -0
  184. package/templates/primitives/Textarea/Textarea.variants.ts +46 -0
  185. package/templates/primitives/Toast/Toast.tsx +195 -0
  186. package/templates/primitives/Toast/Toast.types.ts +52 -0
  187. package/templates/primitives/Toast/Toast.variants.ts +88 -0
  188. package/templates/primitives/Toggle/Toggle.tsx +24 -0
  189. package/templates/primitives/Toggle/Toggle.types.ts +19 -0
  190. package/templates/primitives/Toggle/Toggle.variants.ts +32 -0
  191. package/templates/primitives/ToggleGroup/ToggleGroup.tsx +34 -0
  192. package/templates/primitives/ToggleGroup/ToggleGroup.types.ts +19 -0
  193. package/templates/primitives/ToggleGroup/ToggleGroup.variants.ts +32 -0
  194. package/templates/primitives/Toolbar/Toolbar.tsx +118 -0
  195. package/templates/primitives/Toolbar/Toolbar.types.ts +32 -0
  196. package/templates/primitives/Toolbar/Toolbar.variants.ts +84 -0
  197. package/templates/primitives/Tooltip/Tooltip.tsx +98 -0
  198. package/templates/primitives/Tooltip/Tooltip.types.ts +22 -0
  199. package/templates/primitives/Tooltip/Tooltip.variants.ts +24 -0
  200. package/templates/shared/utils/cn.ts +46 -0
  201. package/templates/styles/theme.css +311 -0
  202. package/templates/styles/tokens.css +1445 -0
  203. package/templates/templates/DashboardShell/DashboardShell.tsx +124 -0
  204. package/templates/templates/DashboardShell/DashboardShell.types.ts +37 -0
  205. package/templates/templates/DashboardShell/DashboardShell.variants.ts +25 -0
  206. package/templates/tsconfig.json +5 -0
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Checkbox.variants.ts
3
+ *
4
+ * Defines visual variants using class composition.
5
+ */
6
+
7
+ import { cva } from "class-variance-authority"
8
+
9
+ export const checkboxVariants = cva(
10
+ [
11
+ "inline-flex shrink-0 items-center justify-center rounded-(--lsys-checkbox-radius) border",
12
+ "border-(--lsys-checkbox-border-color) bg-(--lsys-checkbox-background) text-(--lsys-checkbox-foreground)",
13
+ "transition-colors duration-(--lsys-checkbox-transition-duration) ease-(--lsys-checkbox-transition-easing)",
14
+ "outline-none data-[checked]:border-(--lsys-checkbox-checked-border-color) data-[checked]:bg-(--lsys-checkbox-checked-background) data-[checked]:text-(--lsys-checkbox-checked-foreground)",
15
+ "data-[indeterminate]:border-(--lsys-checkbox-checked-border-color) data-[indeterminate]:bg-(--lsys-checkbox-checked-background)",
16
+ "data-[focused]:ring-(length:--lsys-checkbox-focus-ring-width) data-[focused]:ring-(--lsys-checkbox-focus-ring-color) data-[focused]:ring-offset-(length:--lsys-checkbox-focus-ring-offset) data-[focused]:ring-offset-(--lsys-checkbox-focus-ring-offset-color)",
17
+ "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-(--lsys-opacity-disabled)",
18
+ ].join(" "),
19
+ {
20
+ variants: {
21
+ size: {
22
+ sm: "size-(--lsys-checkbox-size-sm) text-(length:--lsys-checkbox-indicator-font-size-sm)",
23
+ md: "size-(--lsys-checkbox-size-md) text-(length:--lsys-checkbox-indicator-font-size-md)",
24
+ lg: "size-(--lsys-checkbox-size-lg) text-(length:--lsys-checkbox-indicator-font-size-lg)",
25
+ },
26
+ },
27
+ defaultVariants: {
28
+ size: "md",
29
+ },
30
+ },
31
+ )
32
+
33
+ export const checkboxLabelVariants = cva(
34
+ "inline-flex items-center gap-(--lsys-checkbox-label-gap) text-(length:--lsys-checkbox-label-font-size) font-(--lsys-checkbox-label-font-weight) leading-(--lsys-checkbox-label-font-line-height) text-(--lsys-checkbox-label-foreground)",
35
+ )
36
+
37
+ export const checkboxIndicatorVariants = cva(
38
+ "leading-(--lsys-checkbox-label-font-line-height)",
39
+ )
@@ -0,0 +1,32 @@
1
+ /**
2
+ * CheckboxGroup.tsx
3
+ *
4
+ * Reference CheckboxGroup component implementation.
5
+ */
6
+
7
+ import { CheckboxGroup as BaseCheckboxGroup } from "@base-ui/react/checkbox-group"
8
+ import type { CheckboxGroupProps } from "./CheckboxGroup.types"
9
+ import { checkboxGroupVariants } from "./CheckboxGroup.variants"
10
+ import { mergeClassName } from "@/lib/utils"
11
+
12
+ const CheckboxGroup = ({
13
+ ref,
14
+ orientation = "vertical",
15
+ className,
16
+ ...props
17
+ }: CheckboxGroupProps) => {
18
+ return (
19
+ <BaseCheckboxGroup
20
+ ref={ref}
21
+ className={mergeClassName(
22
+ checkboxGroupVariants({ orientation }),
23
+ className,
24
+ )}
25
+ {...props}
26
+ />
27
+ )
28
+ }
29
+
30
+ CheckboxGroup.displayName = "CheckboxGroup"
31
+
32
+ export { CheckboxGroup }
@@ -0,0 +1,17 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * CheckboxGroup.types.ts
4
+ *
5
+ * Public and internal types for CheckboxGroup component.
6
+ */
7
+
8
+ import type { CheckboxGroup as BaseCheckboxGroup } from "@base-ui/react/checkbox-group"
9
+
10
+ export interface CheckboxGroupProps extends Omit<
11
+ BaseCheckboxGroup.Props,
12
+ "className"
13
+ > {
14
+ ref?: Ref<HTMLDivElement>
15
+ orientation?: "horizontal" | "vertical"
16
+ className?: BaseCheckboxGroup.Props["className"]
17
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * CheckboxGroup.variants.ts
3
+ *
4
+ * Defines visual variants using class composition.
5
+ */
6
+
7
+ import { cva } from "class-variance-authority"
8
+
9
+ export const checkboxGroupVariants = cva(
10
+ [
11
+ "grid gap-(--lsys-checkbox-label-gap) text-(length:--lsys-checkbox-label-font-size) font-(--lsys-checkbox-label-font-weight) leading-(--lsys-checkbox-label-font-line-height) text-(--lsys-checkbox-label-foreground)",
12
+ "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-(--lsys-opacity-disabled)",
13
+ ].join(" "),
14
+ {
15
+ variants: {
16
+ orientation: {
17
+ horizontal: "grid-flow-col justify-start",
18
+ vertical: "grid-flow-row",
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ orientation: "vertical",
23
+ },
24
+ },
25
+ )
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Collapsible.tsx
3
+ *
4
+ * Reference Collapsible component implementation.
5
+ */
6
+
7
+ import { Collapsible as BaseCollapsible } from "@base-ui/react/collapsible"
8
+ import { Plus } from "lucide-react"
9
+ import type {
10
+ CollapsiblePanelProps,
11
+ CollapsibleProps,
12
+ CollapsibleTriggerProps,
13
+ } from "./Collapsible.types"
14
+ import {
15
+ collapsiblePanelVariants,
16
+ collapsibleTriggerVariants,
17
+ collapsibleVariants,
18
+ } from "./Collapsible.variants"
19
+ import { mergeClassName } from "@/lib/utils"
20
+
21
+ const Collapsible = ({
22
+ ref,
23
+ variant,
24
+ className,
25
+ ...props
26
+ }: CollapsibleProps) => {
27
+ return (
28
+ <BaseCollapsible.Root
29
+ ref={ref}
30
+ className={mergeClassName(collapsibleVariants({ variant }), className)}
31
+ {...props}
32
+ />
33
+ )
34
+ }
35
+
36
+ Collapsible.displayName = "Collapsible"
37
+
38
+ const CollapsibleTrigger = ({
39
+ ref,
40
+ className,
41
+ children,
42
+ ...props
43
+ }: CollapsibleTriggerProps) => {
44
+ return (
45
+ <BaseCollapsible.Trigger
46
+ ref={ref}
47
+ className={mergeClassName(collapsibleTriggerVariants(), className)}
48
+ {...props}
49
+ >
50
+ <span>{children}</span>
51
+ <Plus aria-hidden="true" />
52
+ </BaseCollapsible.Trigger>
53
+ )
54
+ }
55
+
56
+ CollapsibleTrigger.displayName = "CollapsibleTrigger"
57
+
58
+ const CollapsiblePanel = ({
59
+ ref,
60
+ className,
61
+ ...props
62
+ }: CollapsiblePanelProps) => {
63
+ return (
64
+ <BaseCollapsible.Panel
65
+ ref={ref}
66
+ className={mergeClassName(collapsiblePanelVariants(), className)}
67
+ {...props}
68
+ />
69
+ )
70
+ }
71
+
72
+ CollapsiblePanel.displayName = "CollapsiblePanel"
73
+
74
+ export { Collapsible, CollapsibleTrigger, CollapsiblePanel }
@@ -0,0 +1,28 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * Collapsible.types.ts
4
+ *
5
+ * Public and internal types for Collapsible component.
6
+ */
7
+
8
+ import type { Collapsible as BaseCollapsible } from "@base-ui/react/collapsible"
9
+
10
+ export type CollapsibleVariant = "surface" | "plain"
11
+
12
+ export interface CollapsibleProps extends Omit<
13
+ BaseCollapsible.Root.Props,
14
+ "className"
15
+ > {
16
+ ref?: Ref<HTMLDivElement>
17
+ variant?: CollapsibleVariant
18
+ className?: BaseCollapsible.Root.Props["className"]
19
+ }
20
+
21
+ export interface CollapsibleTriggerProps extends Omit<
22
+ BaseCollapsible.Trigger.Props,
23
+ "className"
24
+ > {
25
+ className?: BaseCollapsible.Trigger.Props["className"]
26
+ }
27
+
28
+ export type CollapsiblePanelProps = BaseCollapsible.Panel.Props
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Collapsible.variants.ts
3
+ *
4
+ * Defines visual variants using class composition.
5
+ */
6
+
7
+ import { cva } from "class-variance-authority"
8
+ import { disabledStateClasses } from "@/lib/utils"
9
+
10
+ export const collapsibleVariants = cva(
11
+ "grid rounded-(--lsys-collapsible-radius) text-(--lsys-collapsible-foreground)",
12
+ {
13
+ variants: {
14
+ variant: {
15
+ surface:
16
+ "border border-(--lsys-collapsible-border-color) bg-(--lsys-collapsible-background)",
17
+ plain: "bg-transparent",
18
+ },
19
+ },
20
+ defaultVariants: {
21
+ variant: "surface",
22
+ },
23
+ },
24
+ )
25
+
26
+ export const collapsibleTriggerVariants = cva(
27
+ [
28
+ "flex w-full items-center justify-between gap-(--lsys-collapsible-trigger-gap) px-(--lsys-collapsible-trigger-padding-x) py-(--lsys-collapsible-trigger-padding-y) text-left",
29
+ "text-(length:--lsys-collapsible-trigger-font-size) font-(--lsys-collapsible-trigger-font-weight) leading-(--lsys-collapsible-trigger-font-line-height)",
30
+ "transition-colors duration-(--lsys-collapsible-transition-duration) ease-(--lsys-collapsible-transition-easing)",
31
+ "outline-none hover:bg-(--lsys-collapsible-trigger-background-hover) focus-visible:ring-(length:--lsys-collapsible-focus-ring-width) focus-visible:ring-inset focus-visible:ring-(--lsys-collapsible-focus-ring-color)",
32
+ disabledStateClasses,
33
+ "[&>svg]:size-(--lsys-collapsible-trigger-icon-size) [&>svg]:transition-transform data-[panel-open]:[&>svg]:rotate-45",
34
+ ].join(" "),
35
+ )
36
+
37
+ export const collapsiblePanelVariants = cva(
38
+ [
39
+ "overflow-hidden px-(--lsys-collapsible-panel-padding-x) pb-(--lsys-collapsible-panel-padding-bottom)",
40
+ "text-(length:--lsys-collapsible-panel-font-size) leading-(--lsys-collapsible-panel-font-line-height) text-(--lsys-collapsible-panel-foreground)",
41
+ "transition-[height,opacity] duration-(--lsys-collapsible-transition-duration) ease-(--lsys-collapsible-transition-easing)",
42
+ "data-[starting-style]:h-0 data-[starting-style]:opacity-0 data-[ending-style]:h-0 data-[ending-style]:opacity-0",
43
+ ].join(" "),
44
+ )
@@ -0,0 +1,450 @@
1
+ /**
2
+ * Combobox.tsx
3
+ *
4
+ * Reference Combobox component implementation.
5
+ */
6
+
7
+ import { Check, ChevronDown, X } from "lucide-react"
8
+ import { Combobox as BaseCombobox } from "@base-ui/react/combobox"
9
+ import type {
10
+ ComboboxArrowProps,
11
+ ComboboxBackdropProps,
12
+ ComboboxChipProps,
13
+ ComboboxChipRemoveProps,
14
+ ComboboxChipsProps,
15
+ ComboboxClearProps,
16
+ ComboboxCollectionProps,
17
+ ComboboxEmptyProps,
18
+ ComboboxGroupLabelProps,
19
+ ComboboxGroupProps,
20
+ ComboboxIconProps,
21
+ ComboboxInputGroupProps,
22
+ ComboboxInputProps,
23
+ ComboboxItemIndicatorProps,
24
+ ComboboxItemProps,
25
+ ComboboxLabelProps,
26
+ ComboboxListProps,
27
+ ComboboxPopupProps,
28
+ ComboboxPortalProps,
29
+ ComboboxPositionerProps,
30
+ ComboboxProps,
31
+ ComboboxRowProps,
32
+ ComboboxSeparatorProps,
33
+ ComboboxStatusProps,
34
+ ComboboxTriggerProps,
35
+ ComboboxValueProps,
36
+ } from "./Combobox.types"
37
+ import {
38
+ comboboxArrowVariants,
39
+ comboboxBackdropVariants,
40
+ comboboxChipRemoveVariants,
41
+ comboboxChipVariants,
42
+ comboboxChipsVariants,
43
+ comboboxClearVariants,
44
+ comboboxEmptyVariants,
45
+ comboboxGroupLabelVariants,
46
+ comboboxGroupVariants,
47
+ comboboxIconVariants,
48
+ comboboxInputGroupVariants,
49
+ comboboxInputVariants,
50
+ comboboxItemIndicatorVariants,
51
+ comboboxItemVariants,
52
+ comboboxLabelVariants,
53
+ comboboxListVariants,
54
+ comboboxPopupVariants,
55
+ comboboxPositionerVariants,
56
+ comboboxRowVariants,
57
+ comboboxSeparatorVariants,
58
+ comboboxStatusVariants,
59
+ comboboxTriggerVariants,
60
+ } from "./Combobox.variants"
61
+ import { mergeClassName } from "@/lib/utils"
62
+ import { overlayPositionerSideOffset } from "@/lib/utils"
63
+
64
+ const Combobox = <Value = string, Multiple extends boolean | undefined = false>(
65
+ props: ComboboxProps<Value, Multiple>,
66
+ ) => {
67
+ return <BaseCombobox.Root {...props} />
68
+ }
69
+
70
+ Combobox.displayName = "Combobox"
71
+
72
+ const ComboboxLabel = ({ ref, className, ...props }: ComboboxLabelProps) => {
73
+ return (
74
+ <BaseCombobox.Label
75
+ ref={ref}
76
+ className={mergeClassName(comboboxLabelVariants(), className)}
77
+ {...props}
78
+ />
79
+ )
80
+ }
81
+
82
+ ComboboxLabel.displayName = "ComboboxLabel"
83
+
84
+ const ComboboxTrigger = ({
85
+ ref,
86
+ size,
87
+ className,
88
+ ...props
89
+ }: ComboboxTriggerProps) => {
90
+ return (
91
+ <BaseCombobox.Trigger
92
+ ref={ref}
93
+ className={mergeClassName(comboboxTriggerVariants({ size }), className)}
94
+ {...props}
95
+ />
96
+ )
97
+ }
98
+
99
+ ComboboxTrigger.displayName = "ComboboxTrigger"
100
+
101
+ const ComboboxInputGroup = ({
102
+ ref,
103
+ size,
104
+ className,
105
+ ...props
106
+ }: ComboboxInputGroupProps) => {
107
+ return (
108
+ <BaseCombobox.InputGroup
109
+ ref={ref}
110
+ className={mergeClassName(
111
+ comboboxInputGroupVariants({ size }),
112
+ className,
113
+ )}
114
+ {...props}
115
+ />
116
+ )
117
+ }
118
+
119
+ ComboboxInputGroup.displayName = "ComboboxInputGroup"
120
+
121
+ const ComboboxInput = ({
122
+ ref,
123
+ size,
124
+ className,
125
+ ...props
126
+ }: ComboboxInputProps) => {
127
+ return (
128
+ <BaseCombobox.Input
129
+ ref={ref}
130
+ className={mergeClassName(comboboxInputVariants({ size }), className)}
131
+ {...props}
132
+ />
133
+ )
134
+ }
135
+
136
+ ComboboxInput.displayName = "ComboboxInput"
137
+
138
+ const ComboboxValue = (props: ComboboxValueProps) => {
139
+ return <BaseCombobox.Value {...props} />
140
+ }
141
+
142
+ ComboboxValue.displayName = "ComboboxValue"
143
+
144
+ const ComboboxIcon = ({
145
+ ref,
146
+ className,
147
+ children,
148
+ ...props
149
+ }: ComboboxIconProps) => {
150
+ return (
151
+ <BaseCombobox.Icon
152
+ ref={ref}
153
+ className={mergeClassName(comboboxIconVariants(), className)}
154
+ {...props}
155
+ >
156
+ {children ?? <ChevronDown aria-hidden="true" size={16} />}
157
+ </BaseCombobox.Icon>
158
+ )
159
+ }
160
+
161
+ ComboboxIcon.displayName = "ComboboxIcon"
162
+
163
+ const ComboboxClear = ({
164
+ ref,
165
+ className,
166
+ children,
167
+ ...props
168
+ }: ComboboxClearProps) => {
169
+ return (
170
+ <BaseCombobox.Clear
171
+ ref={ref}
172
+ className={mergeClassName(comboboxClearVariants(), className)}
173
+ {...props}
174
+ >
175
+ {children ?? <X aria-hidden="true" size={14} />}
176
+ </BaseCombobox.Clear>
177
+ )
178
+ }
179
+
180
+ ComboboxClear.displayName = "ComboboxClear"
181
+
182
+ const ComboboxPortal = (props: ComboboxPortalProps) => {
183
+ return <BaseCombobox.Portal {...props} />
184
+ }
185
+
186
+ ComboboxPortal.displayName = "ComboboxPortal"
187
+
188
+ const ComboboxBackdrop = ({
189
+ ref,
190
+ className,
191
+ ...props
192
+ }: ComboboxBackdropProps) => {
193
+ return (
194
+ <BaseCombobox.Backdrop
195
+ ref={ref}
196
+ className={mergeClassName(comboboxBackdropVariants(), className)}
197
+ {...props}
198
+ />
199
+ )
200
+ }
201
+
202
+ ComboboxBackdrop.displayName = "ComboboxBackdrop"
203
+
204
+ const ComboboxPositioner = ({
205
+ ref,
206
+ className,
207
+ sideOffset = overlayPositionerSideOffset,
208
+ ...props
209
+ }: ComboboxPositionerProps) => {
210
+ return (
211
+ <BaseCombobox.Positioner
212
+ ref={ref}
213
+ sideOffset={sideOffset}
214
+ className={mergeClassName(comboboxPositionerVariants(), className)}
215
+ {...props}
216
+ />
217
+ )
218
+ }
219
+
220
+ ComboboxPositioner.displayName = "ComboboxPositioner"
221
+
222
+ const ComboboxPopup = ({ ref, className, ...props }: ComboboxPopupProps) => {
223
+ return (
224
+ <BaseCombobox.Popup
225
+ ref={ref}
226
+ className={mergeClassName(comboboxPopupVariants(), className)}
227
+ {...props}
228
+ />
229
+ )
230
+ }
231
+
232
+ ComboboxPopup.displayName = "ComboboxPopup"
233
+
234
+ const ComboboxList = ({ ref, className, ...props }: ComboboxListProps) => {
235
+ return (
236
+ <BaseCombobox.List
237
+ ref={ref}
238
+ className={mergeClassName(comboboxListVariants(), className)}
239
+ {...props}
240
+ />
241
+ )
242
+ }
243
+
244
+ ComboboxList.displayName = "ComboboxList"
245
+
246
+ const ComboboxItem = ({ ref, className, ...props }: ComboboxItemProps) => {
247
+ return (
248
+ <BaseCombobox.Item
249
+ ref={ref}
250
+ className={mergeClassName(comboboxItemVariants(), className)}
251
+ {...props}
252
+ />
253
+ )
254
+ }
255
+
256
+ ComboboxItem.displayName = "ComboboxItem"
257
+
258
+ const ComboboxItemIndicator = ({
259
+ ref,
260
+ className,
261
+ children,
262
+ ...props
263
+ }: ComboboxItemIndicatorProps) => {
264
+ return (
265
+ <BaseCombobox.ItemIndicator
266
+ ref={ref}
267
+ className={mergeClassName(comboboxItemIndicatorVariants(), className)}
268
+ {...props}
269
+ >
270
+ {children ?? <Check aria-hidden="true" size={14} />}
271
+ </BaseCombobox.ItemIndicator>
272
+ )
273
+ }
274
+
275
+ ComboboxItemIndicator.displayName = "ComboboxItemIndicator"
276
+
277
+ const ComboboxArrow = ({ ref, className, ...props }: ComboboxArrowProps) => {
278
+ return (
279
+ <BaseCombobox.Arrow
280
+ ref={ref}
281
+ className={mergeClassName(comboboxArrowVariants(), className)}
282
+ {...props}
283
+ />
284
+ )
285
+ }
286
+
287
+ ComboboxArrow.displayName = "ComboboxArrow"
288
+
289
+ const ComboboxGroup = ({ ref, className, ...props }: ComboboxGroupProps) => {
290
+ return (
291
+ <BaseCombobox.Group
292
+ ref={ref}
293
+ className={mergeClassName(comboboxGroupVariants(), className)}
294
+ {...props}
295
+ />
296
+ )
297
+ }
298
+
299
+ ComboboxGroup.displayName = "ComboboxGroup"
300
+
301
+ const ComboboxGroupLabel = ({
302
+ ref,
303
+ className,
304
+ ...props
305
+ }: ComboboxGroupLabelProps) => {
306
+ return (
307
+ <BaseCombobox.GroupLabel
308
+ ref={ref}
309
+ className={mergeClassName(comboboxGroupLabelVariants(), className)}
310
+ {...props}
311
+ />
312
+ )
313
+ }
314
+
315
+ ComboboxGroupLabel.displayName = "ComboboxGroupLabel"
316
+
317
+ const ComboboxEmpty = ({ ref, className, ...props }: ComboboxEmptyProps) => {
318
+ return (
319
+ <BaseCombobox.Empty
320
+ ref={ref}
321
+ className={mergeClassName(comboboxEmptyVariants(), className)}
322
+ {...props}
323
+ />
324
+ )
325
+ }
326
+
327
+ ComboboxEmpty.displayName = "ComboboxEmpty"
328
+
329
+ const ComboboxStatus = ({ ref, className, ...props }: ComboboxStatusProps) => {
330
+ return (
331
+ <BaseCombobox.Status
332
+ ref={ref}
333
+ className={mergeClassName(comboboxStatusVariants(), className)}
334
+ {...props}
335
+ />
336
+ )
337
+ }
338
+
339
+ ComboboxStatus.displayName = "ComboboxStatus"
340
+
341
+ const ComboboxChips = ({ ref, className, ...props }: ComboboxChipsProps) => {
342
+ return (
343
+ <BaseCombobox.Chips
344
+ ref={ref}
345
+ className={mergeClassName(comboboxChipsVariants(), className)}
346
+ {...props}
347
+ />
348
+ )
349
+ }
350
+
351
+ ComboboxChips.displayName = "ComboboxChips"
352
+
353
+ const ComboboxChip = ({ ref, className, ...props }: ComboboxChipProps) => {
354
+ return (
355
+ <BaseCombobox.Chip
356
+ ref={ref}
357
+ className={mergeClassName(comboboxChipVariants(), className)}
358
+ {...props}
359
+ />
360
+ )
361
+ }
362
+
363
+ ComboboxChip.displayName = "ComboboxChip"
364
+
365
+ const ComboboxChipRemove = ({
366
+ ref,
367
+ className,
368
+ children,
369
+ ...props
370
+ }: ComboboxChipRemoveProps) => {
371
+ return (
372
+ <BaseCombobox.ChipRemove
373
+ ref={ref}
374
+ className={mergeClassName(comboboxChipRemoveVariants(), className)}
375
+ {...props}
376
+ >
377
+ {children ?? <X aria-hidden="true" size={12} />}
378
+ </BaseCombobox.ChipRemove>
379
+ )
380
+ }
381
+
382
+ ComboboxChipRemove.displayName = "ComboboxChipRemove"
383
+
384
+ const ComboboxRow = ({ ref, className, ...props }: ComboboxRowProps) => {
385
+ return (
386
+ <BaseCombobox.Row
387
+ ref={ref}
388
+ className={mergeClassName(comboboxRowVariants(), className)}
389
+ {...props}
390
+ />
391
+ )
392
+ }
393
+
394
+ ComboboxRow.displayName = "ComboboxRow"
395
+
396
+ const ComboboxCollection = (props: ComboboxCollectionProps) => {
397
+ return <BaseCombobox.Collection {...props} />
398
+ }
399
+
400
+ ComboboxCollection.displayName = "ComboboxCollection"
401
+
402
+ const ComboboxSeparator = ({
403
+ ref,
404
+ className,
405
+ ...props
406
+ }: ComboboxSeparatorProps) => {
407
+ return (
408
+ <BaseCombobox.Separator
409
+ ref={ref}
410
+ className={mergeClassName(comboboxSeparatorVariants(), className)}
411
+ {...props}
412
+ />
413
+ )
414
+ }
415
+
416
+ ComboboxSeparator.displayName = "ComboboxSeparator"
417
+
418
+ const useComboboxFilter = BaseCombobox.useFilter
419
+ const useComboboxFilteredItems = BaseCombobox.useFilteredItems
420
+
421
+ export {
422
+ Combobox,
423
+ ComboboxLabel,
424
+ ComboboxTrigger,
425
+ ComboboxInputGroup,
426
+ ComboboxInput,
427
+ ComboboxValue,
428
+ ComboboxIcon,
429
+ ComboboxClear,
430
+ ComboboxPortal,
431
+ ComboboxBackdrop,
432
+ ComboboxPositioner,
433
+ ComboboxPopup,
434
+ ComboboxList,
435
+ ComboboxItem,
436
+ ComboboxItemIndicator,
437
+ ComboboxArrow,
438
+ ComboboxGroup,
439
+ ComboboxGroupLabel,
440
+ ComboboxEmpty,
441
+ ComboboxStatus,
442
+ ComboboxChips,
443
+ ComboboxChip,
444
+ ComboboxChipRemove,
445
+ ComboboxRow,
446
+ ComboboxCollection,
447
+ ComboboxSeparator,
448
+ useComboboxFilter,
449
+ useComboboxFilteredItems,
450
+ }