@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,52 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * Toast.types.ts
4
+ *
5
+ * Public and internal types for Toast component.
6
+ */
7
+
8
+ import type { Toast as BaseToast } from "@base-ui/react/toast"
9
+
10
+ export type ToastPlacement =
11
+ | "top-right"
12
+ | "top-left"
13
+ | "bottom-right"
14
+ | "bottom-left"
15
+
16
+ export type ToastProviderProps = BaseToast.Provider.Props
17
+ export type ToastPortalProps = BaseToast.Portal.Props & {
18
+ ref?: Ref<HTMLDivElement>
19
+ }
20
+ export type ToastObject<Data extends object = object> =
21
+ BaseToast.Root.ToastObject<Data>
22
+
23
+ export interface ToastProps extends Omit<BaseToast.Root.Props, "className"> {
24
+ className?: BaseToast.Root.Props["className"]
25
+ }
26
+
27
+ export interface ToastViewportProps extends Omit<
28
+ BaseToast.Viewport.Props,
29
+ "className"
30
+ > {
31
+ placement?: ToastPlacement
32
+ className?: BaseToast.Viewport.Props["className"]
33
+ }
34
+
35
+ export interface ToastPositionerProps extends Omit<
36
+ BaseToast.Positioner.Props,
37
+ "className"
38
+ > {
39
+ className?: BaseToast.Positioner.Props["className"]
40
+ }
41
+
42
+ export type ToastContentProps = BaseToast.Content.Props
43
+
44
+ export type ToastArrowProps = BaseToast.Arrow.Props
45
+
46
+ export type ToastTitleProps = BaseToast.Title.Props
47
+
48
+ export type ToastDescriptionProps = BaseToast.Description.Props
49
+
50
+ export type ToastActionProps = BaseToast.Action.Props
51
+
52
+ export type ToastCloseProps = BaseToast.Close.Props
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Toast.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 toastViewportVariants = cva(
11
+ [
12
+ "fixed z-(--lsys-toast-viewport-z-index) flex max-h-(--lsys-toast-viewport-max-height) w-[min(calc(100vw-(var(--lsys-toast-viewport-inset)*2)),var(--lsys-toast-viewport-width))] flex-col gap-(--lsys-toast-viewport-gap) p-(--lsys-toast-viewport-padding)",
13
+ "data-[expanded]:gap-(--lsys-toast-viewport-gap-expanded)",
14
+ ].join(" "),
15
+ {
16
+ variants: {
17
+ placement: {
18
+ "top-right": "right-0 top-0",
19
+ "top-left": "left-0 top-0",
20
+ "bottom-right": "bottom-0 right-0",
21
+ "bottom-left": "bottom-0 left-0",
22
+ },
23
+ },
24
+ defaultVariants: {
25
+ placement: "bottom-right",
26
+ },
27
+ },
28
+ )
29
+
30
+ const toastTypeSurfaceClasses = [
31
+ "border-(--lsys-toast-border-color) bg-(--lsys-toast-background) text-(--lsys-toast-foreground)",
32
+ "data-[type=success]:border-(--lsys-toast-success-border-color) data-[type=success]:bg-(--lsys-toast-success-background) data-[type=success]:text-(--lsys-toast-success-foreground)",
33
+ "data-[type=info]:border-(--lsys-toast-info-border-color) data-[type=info]:bg-(--lsys-toast-info-background) data-[type=info]:text-(--lsys-toast-info-foreground)",
34
+ "data-[type=destructive]:border-(--lsys-toast-danger-border-color) data-[type=destructive]:bg-(--lsys-toast-danger-background) data-[type=destructive]:text-(--lsys-toast-danger-foreground)",
35
+ ].join(" ")
36
+
37
+ export const toastVariants = cva(
38
+ [
39
+ "relative grid gap-(--lsys-toast-gap) rounded-(--lsys-toast-radius) border p-(--lsys-toast-padding) pr-(--lsys-toast-padding-end) shadow-(--lsys-toast-shadow) outline-none",
40
+ toastTypeSurfaceClasses,
41
+ "transition-[opacity,transform] duration-(--lsys-toast-transition-duration) ease-(--lsys-toast-transition-easing)",
42
+ "data-[starting-style]:translate-y-(--lsys-toast-motion-offset-y) data-[starting-style]:opacity-0 data-[ending-style]:translate-y-(--lsys-toast-motion-offset-y) data-[ending-style]:opacity-0 data-[swiping]:transition-none",
43
+ "translate-x-[var(--toast-swipe-movement-x,0px)] translate-y-[var(--toast-swipe-movement-y,0px)]",
44
+ ].join(" "),
45
+ )
46
+
47
+ export const toastContentVariants = cva(
48
+ "grid gap-(--lsys-toast-content-gap) data-[behind]:opacity-(--lsys-toast-content-behind-opacity)",
49
+ )
50
+
51
+ export const toastPositionerVariants = cva(
52
+ "z-(--lsys-toast-viewport-z-index) max-w-[min(var(--available-width,calc(100vw-(var(--lsys-toast-viewport-inset)*2))),var(--lsys-toast-viewport-width))]",
53
+ )
54
+
55
+ export const toastArrowVariants = cva(
56
+ [
57
+ "size-(--lsys-toast-arrow-size) rotate-45 border",
58
+ toastTypeSurfaceClasses,
59
+ ].join(" "),
60
+ )
61
+
62
+ export const toastTitleVariants = cva(
63
+ "text-(length:--lsys-toast-title-font-size) font-(--lsys-toast-title-font-weight) leading-(--lsys-toast-title-font-line-height)",
64
+ )
65
+
66
+ export const toastDescriptionVariants = cva(
67
+ [
68
+ "text-(length:--lsys-toast-description-font-size) font-(--lsys-toast-description-font-weight) leading-(--lsys-toast-description-font-line-height)",
69
+ "text-(--lsys-toast-description-foreground) data-[type=success]:text-(--lsys-toast-success-foreground) data-[type=info]:text-(--lsys-toast-info-foreground) data-[type=destructive]:text-(--lsys-toast-danger-foreground)",
70
+ ].join(" "),
71
+ )
72
+
73
+ export const toastActionVariants = cva(
74
+ [
75
+ "inline-flex h-(--lsys-toast-action-height) items-center justify-center rounded-(--lsys-toast-action-radius) border border-(--lsys-toast-action-border-color) px-(--lsys-toast-action-padding-x)",
76
+ "text-(length:--lsys-toast-action-font-size) font-(--lsys-toast-action-font-weight) leading-(--lsys-toast-action-font-line-height) text-(--lsys-toast-action-foreground)",
77
+ "outline-none transition-colors duration-(--lsys-toast-transition-duration) ease-(--lsys-toast-transition-easing) hover:bg-(--lsys-toast-action-hover-background) focus-visible:ring-(length:--lsys-toast-focus-ring-width) focus-visible:ring-(--lsys-toast-focus-ring-color)",
78
+ disabledStateClasses,
79
+ ].join(" "),
80
+ )
81
+
82
+ export const toastCloseVariants = cva(
83
+ [
84
+ "absolute right-(--lsys-toast-close-inset) top-(--lsys-toast-close-inset) inline-flex size-(--lsys-toast-close-size) items-center justify-center rounded-(--lsys-toast-close-radius)",
85
+ "text-(--lsys-toast-close-foreground) outline-none transition-colors duration-(--lsys-toast-transition-duration) ease-(--lsys-toast-transition-easing) hover:bg-(--lsys-toast-close-hover-background) focus-visible:ring-(length:--lsys-toast-focus-ring-width) focus-visible:ring-(--lsys-toast-focus-ring-color)",
86
+ disabledStateClasses,
87
+ ].join(" "),
88
+ )
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Toggle.tsx
3
+ *
4
+ * Reference Toggle component implementation.
5
+ */
6
+
7
+ import { Toggle as BaseToggle } from "@base-ui/react/toggle"
8
+ import type { ToggleProps } from "./Toggle.types"
9
+ import { toggleVariants } from "./Toggle.variants"
10
+ import { mergeClassName } from "@/lib/utils"
11
+
12
+ const Toggle = ({ ref, size, className, ...props }: ToggleProps) => {
13
+ return (
14
+ <BaseToggle
15
+ ref={ref}
16
+ className={mergeClassName(toggleVariants({ size }), className)}
17
+ {...props}
18
+ />
19
+ )
20
+ }
21
+
22
+ Toggle.displayName = "Toggle"
23
+
24
+ export { Toggle }
@@ -0,0 +1,19 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * Toggle.types.ts
4
+ *
5
+ * Public and internal types for Toggle component.
6
+ */
7
+
8
+ import type { Toggle as BaseToggle } from "@base-ui/react/toggle"
9
+
10
+ export type ToggleSize = "sm" | "md" | "lg"
11
+
12
+ export interface ToggleProps extends Omit<
13
+ BaseToggle.Props,
14
+ "className" | "size"
15
+ > {
16
+ ref?: Ref<HTMLButtonElement>
17
+ size?: ToggleSize
18
+ className?: BaseToggle.Props["className"]
19
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Toggle.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 toggleVariants = cva(
11
+ [
12
+ "inline-flex items-center justify-center rounded-(--lsys-toggle-radius) border",
13
+ "border-(--lsys-toggle-border-color) bg-(--lsys-toggle-background) text-(--lsys-toggle-foreground)",
14
+ "font-(family-name:--lsys-toggle-font-family) font-(--lsys-toggle-font-weight) leading-(--lsys-toggle-font-line-height) tracking-(--lsys-toggle-font-letter-spacing)",
15
+ "transition-colors duration-(--lsys-toggle-transition-duration) ease-(--lsys-toggle-transition-easing)",
16
+ "outline-none hover:bg-(--lsys-toggle-hover-background) data-[pressed]:border-(--lsys-toggle-pressed-border-color) data-[pressed]:bg-(--lsys-toggle-pressed-background) data-[pressed]:text-(--lsys-toggle-pressed-foreground)",
17
+ "focus-visible:ring-(length:--lsys-toggle-focus-ring-width) focus-visible:ring-(--lsys-toggle-focus-ring-color) focus-visible:ring-offset-(length:--lsys-toggle-focus-ring-offset) focus-visible:ring-offset-(--lsys-toggle-focus-ring-offset-color)",
18
+ disabledStateClasses,
19
+ ].join(" "),
20
+ {
21
+ variants: {
22
+ size: {
23
+ sm: "h-(--lsys-toggle-height-sm) px-(--lsys-toggle-padding-x-sm) text-(length:--lsys-toggle-font-size-sm)",
24
+ md: "h-(--lsys-toggle-height-md) px-(--lsys-toggle-padding-x-md) text-(length:--lsys-toggle-font-size-md)",
25
+ lg: "h-(--lsys-toggle-height-lg) px-(--lsys-toggle-padding-x-lg) text-(length:--lsys-toggle-font-size-lg)",
26
+ },
27
+ },
28
+ defaultVariants: {
29
+ size: "md",
30
+ },
31
+ },
32
+ )
@@ -0,0 +1,34 @@
1
+ /**
2
+ * ToggleGroup.tsx
3
+ *
4
+ * Reference ToggleGroup component implementation.
5
+ */
6
+
7
+ import { ToggleGroup as BaseToggleGroup } from "@base-ui/react/toggle-group"
8
+ import type { ToggleGroupProps } from "./ToggleGroup.types"
9
+ import { toggleGroupVariants } from "./ToggleGroup.variants"
10
+ import { mergeClassName } from "@/lib/utils"
11
+
12
+ const ToggleGroup = ({
13
+ ref,
14
+ size,
15
+ orientation = "horizontal",
16
+ className,
17
+ ...props
18
+ }: ToggleGroupProps) => {
19
+ return (
20
+ <BaseToggleGroup
21
+ ref={ref}
22
+ orientation={orientation}
23
+ className={mergeClassName(
24
+ toggleGroupVariants({ size, orientation }),
25
+ className,
26
+ )}
27
+ {...props}
28
+ />
29
+ )
30
+ }
31
+
32
+ ToggleGroup.displayName = "ToggleGroup"
33
+
34
+ export { ToggleGroup }
@@ -0,0 +1,19 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * ToggleGroup.types.ts
4
+ *
5
+ * Public and internal types for ToggleGroup component.
6
+ */
7
+
8
+ import type { ToggleGroup as BaseToggleGroup } from "@base-ui/react/toggle-group"
9
+
10
+ export type ToggleGroupSize = "sm" | "md" | "lg"
11
+
12
+ export interface ToggleGroupProps<Value extends string = string> extends Omit<
13
+ BaseToggleGroup.Props<Value>,
14
+ "className" | "size"
15
+ > {
16
+ ref?: Ref<HTMLDivElement>
17
+ size?: ToggleGroupSize
18
+ className?: BaseToggleGroup.Props<Value>["className"]
19
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * ToggleGroup.variants.ts
3
+ *
4
+ * Defines visual variants using class composition.
5
+ */
6
+
7
+ import { cva } from "class-variance-authority"
8
+
9
+ export const toggleGroupVariants = cva(
10
+ [
11
+ "inline-flex rounded-(--lsys-toggle-group-radius) border border-(--lsys-toggle-group-border-color)",
12
+ "bg-(--lsys-toggle-group-background) p-(--lsys-toggle-group-padding)",
13
+ "[&_[data-toggle]]:border-0 [&_[data-toggle]]:shadow-none",
14
+ ].join(" "),
15
+ {
16
+ variants: {
17
+ orientation: {
18
+ horizontal: "flex-row",
19
+ vertical: "flex-col",
20
+ },
21
+ size: {
22
+ sm: "gap-(--lsys-toggle-group-gap-sm)",
23
+ md: "gap-(--lsys-toggle-group-gap-md)",
24
+ lg: "gap-(--lsys-toggle-group-gap-lg)",
25
+ },
26
+ },
27
+ defaultVariants: {
28
+ orientation: "horizontal",
29
+ size: "md",
30
+ },
31
+ },
32
+ )
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Toolbar.tsx
3
+ *
4
+ * Reference Toolbar component implementation.
5
+ */
6
+
7
+ import { Toolbar as BaseToolbar } from "@base-ui/react/toolbar"
8
+ import type {
9
+ ToolbarButtonProps,
10
+ ToolbarGroupProps,
11
+ ToolbarInputProps,
12
+ ToolbarLinkProps,
13
+ ToolbarProps,
14
+ ToolbarSeparatorProps,
15
+ } from "./Toolbar.types"
16
+ import {
17
+ toolbarButtonVariants,
18
+ toolbarGroupVariants,
19
+ toolbarInputVariants,
20
+ toolbarLinkVariants,
21
+ toolbarRootVariants,
22
+ toolbarSeparatorVariants,
23
+ } from "./Toolbar.variants"
24
+ import { mergeClassName } from "@/lib/utils"
25
+
26
+ const Toolbar = ({ ref, className, orientation, ...props }: ToolbarProps) => {
27
+ return (
28
+ <BaseToolbar.Root
29
+ ref={ref}
30
+ orientation={orientation}
31
+ className={mergeClassName(
32
+ toolbarRootVariants({ orientation }),
33
+ className,
34
+ )}
35
+ {...props}
36
+ />
37
+ )
38
+ }
39
+
40
+ Toolbar.displayName = "Toolbar"
41
+
42
+ const ToolbarGroup = ({ ref, className, ...props }: ToolbarGroupProps) => {
43
+ return (
44
+ <BaseToolbar.Group
45
+ ref={ref}
46
+ className={mergeClassName(toolbarGroupVariants(), className)}
47
+ {...props}
48
+ />
49
+ )
50
+ }
51
+
52
+ ToolbarGroup.displayName = "ToolbarGroup"
53
+
54
+ const ToolbarButton = ({ ref, className, ...props }: ToolbarButtonProps) => {
55
+ return (
56
+ <BaseToolbar.Button
57
+ ref={ref}
58
+ className={mergeClassName(toolbarButtonVariants(), className)}
59
+ {...props}
60
+ />
61
+ )
62
+ }
63
+
64
+ ToolbarButton.displayName = "ToolbarButton"
65
+
66
+ const ToolbarLink = ({ ref, className, ...props }: ToolbarLinkProps) => {
67
+ return (
68
+ <BaseToolbar.Link
69
+ ref={ref}
70
+ className={mergeClassName(toolbarLinkVariants(), className)}
71
+ {...props}
72
+ />
73
+ )
74
+ }
75
+
76
+ ToolbarLink.displayName = "ToolbarLink"
77
+
78
+ const ToolbarInput = ({ ref, className, ...props }: ToolbarInputProps) => {
79
+ return (
80
+ <BaseToolbar.Input
81
+ ref={ref}
82
+ className={mergeClassName(toolbarInputVariants(), className)}
83
+ {...props}
84
+ />
85
+ )
86
+ }
87
+
88
+ ToolbarInput.displayName = "ToolbarInput"
89
+
90
+ const ToolbarSeparator = ({
91
+ ref,
92
+ className,
93
+ orientation = "vertical",
94
+ ...props
95
+ }: ToolbarSeparatorProps) => {
96
+ return (
97
+ <BaseToolbar.Separator
98
+ ref={ref}
99
+ orientation={orientation}
100
+ className={mergeClassName(
101
+ toolbarSeparatorVariants({ orientation }),
102
+ className,
103
+ )}
104
+ {...props}
105
+ />
106
+ )
107
+ }
108
+
109
+ ToolbarSeparator.displayName = "ToolbarSeparator"
110
+
111
+ export {
112
+ Toolbar,
113
+ ToolbarGroup,
114
+ ToolbarButton,
115
+ ToolbarLink,
116
+ ToolbarInput,
117
+ ToolbarSeparator,
118
+ }
@@ -0,0 +1,32 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * Toolbar.types.ts
4
+ *
5
+ * Public and internal types for Toolbar component.
6
+ */
7
+
8
+ import type { Toolbar as BaseToolbar } from "@base-ui/react/toolbar"
9
+
10
+ export type ToolbarProps = BaseToolbar.Root.Props & {
11
+ ref?: Ref<HTMLDivElement>
12
+ }
13
+
14
+ export type ToolbarGroupProps = BaseToolbar.Group.Props & {
15
+ ref?: Ref<HTMLDivElement>
16
+ }
17
+
18
+ export type ToolbarButtonProps = BaseToolbar.Button.Props & {
19
+ ref?: Ref<HTMLButtonElement>
20
+ }
21
+
22
+ export type ToolbarLinkProps = BaseToolbar.Link.Props & {
23
+ ref?: Ref<HTMLAnchorElement>
24
+ }
25
+
26
+ export type ToolbarInputProps = BaseToolbar.Input.Props & {
27
+ ref?: Ref<HTMLInputElement>
28
+ }
29
+
30
+ export type ToolbarSeparatorProps = BaseToolbar.Separator.Props & {
31
+ ref?: Ref<HTMLDivElement>
32
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Toolbar.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 toolbarRootVariants = cva(
11
+ "flex items-center gap-(--lsys-button-padding-x-sm) rounded-(--lsys-button-radius) border border-(--lsys-button-secondary-border-color) bg-(--lsys-button-secondary-background) p-(--lsys-button-padding-x-sm)",
12
+ {
13
+ variants: {
14
+ orientation: {
15
+ horizontal: "flex-row",
16
+ vertical: "flex-col",
17
+ },
18
+ },
19
+ defaultVariants: {
20
+ orientation: "horizontal",
21
+ },
22
+ },
23
+ )
24
+
25
+ export const toolbarGroupVariants = cva(
26
+ "flex items-center gap-(--lsys-space-1)",
27
+ {
28
+ variants: {
29
+ orientation: {
30
+ horizontal: "flex-row",
31
+ vertical: "flex-col",
32
+ },
33
+ },
34
+ defaultVariants: {
35
+ orientation: "horizontal",
36
+ },
37
+ },
38
+ )
39
+
40
+ export const toolbarButtonVariants = cva(
41
+ [
42
+ "inline-flex h-(--lsys-button-height-sm) items-center justify-center rounded-(--lsys-button-radius) border border-transparent px-(--lsys-button-padding-x-sm)",
43
+ "text-(length:--lsys-button-font-size-sm) font-(--lsys-button-font-weight) leading-(--lsys-button-font-line-height) text-(--lsys-button-secondary-foreground)",
44
+ "transition-colors duration-(--lsys-button-transition-duration) ease-(--lsys-button-transition-easing)",
45
+ "outline-none hover:bg-(--lsys-button-secondary-hover-background) focus-visible:ring-(length:--lsys-button-focus-ring-width) focus-visible:ring-(--lsys-button-focus-ring-color) focus-visible:ring-offset-(length:--lsys-button-focus-ring-offset) focus-visible:ring-offset-(--lsys-button-focus-ring-offset-color)",
46
+ disabledStateClasses,
47
+ ].join(" "),
48
+ )
49
+
50
+ export const toolbarLinkVariants = cva(
51
+ [
52
+ "inline-flex h-(--lsys-button-height-sm) items-center justify-center rounded-(--lsys-button-radius) px-(--lsys-button-padding-x-sm)",
53
+ "text-(length:--lsys-button-font-size-sm) font-(--lsys-button-font-weight) leading-(--lsys-button-font-line-height) text-(--lsys-button-secondary-foreground)",
54
+ "transition-colors duration-(--lsys-button-transition-duration) ease-(--lsys-button-transition-easing)",
55
+ "outline-none hover:bg-(--lsys-button-secondary-hover-background) focus-visible:ring-(length:--lsys-button-focus-ring-width) focus-visible:ring-(--lsys-button-focus-ring-color) focus-visible:ring-offset-(length:--lsys-button-focus-ring-offset) focus-visible:ring-offset-(--lsys-button-focus-ring-offset-color)",
56
+ disabledStateClasses,
57
+ ].join(" "),
58
+ )
59
+
60
+ export const toolbarInputVariants = cva(
61
+ [
62
+ "h-(--lsys-input-height-sm) min-w-0 rounded-(--lsys-input-radius) border border-(--lsys-input-border-color) bg-(--lsys-input-background) px-(--lsys-input-padding-x-sm)",
63
+ "text-(length:--lsys-input-font-size-sm) font-(family-name:--lsys-input-font-family) font-(--lsys-input-font-weight) leading-(--lsys-input-font-line-height) text-(--lsys-input-foreground)",
64
+ "placeholder:text-(--lsys-input-placeholder-color)",
65
+ "transition-colors duration-(--lsys-input-transition-duration) ease-(--lsys-input-transition-easing)",
66
+ "outline-none focus-visible:border-(--lsys-input-focus-border-color) focus-visible:ring-(length:--lsys-input-focus-ring-width) focus-visible:ring-(--lsys-input-focus-ring-color) focus-visible:ring-offset-(length:--lsys-input-focus-ring-offset) focus-visible:ring-offset-(--lsys-input-focus-ring-offset-color)",
67
+ disabledStateClasses,
68
+ ].join(" "),
69
+ )
70
+
71
+ export const toolbarSeparatorVariants = cva(
72
+ "shrink-0 bg-(--lsys-separator-color)",
73
+ {
74
+ variants: {
75
+ orientation: {
76
+ horizontal: "mx-(--lsys-space-1) h-(--lsys-separator-thickness) w-full",
77
+ vertical: "my-(--lsys-space-1) h-full w-(--lsys-separator-thickness)",
78
+ },
79
+ },
80
+ defaultVariants: {
81
+ orientation: "vertical",
82
+ },
83
+ },
84
+ )
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Tooltip.tsx
3
+ *
4
+ * Reference Tooltip component implementation.
5
+ */
6
+
7
+ import { Tooltip as BaseTooltip } from "@base-ui/react/tooltip"
8
+ import type {
9
+ TooltipArrowProps,
10
+ TooltipPopupProps,
11
+ TooltipPositionerProps,
12
+ TooltipPortalProps,
13
+ TooltipProps,
14
+ TooltipTriggerProps,
15
+ } from "./Tooltip.types"
16
+ import {
17
+ tooltipArrowVariants,
18
+ tooltipPopupVariants,
19
+ tooltipPositionerVariants,
20
+ tooltipTriggerVariants,
21
+ } from "./Tooltip.variants"
22
+ import { mergeClassName } from "@/lib/utils"
23
+ import { overlayPositionerSideOffset } from "@/lib/utils"
24
+
25
+ const Tooltip = (props: TooltipProps) => {
26
+ return <BaseTooltip.Root {...props} />
27
+ }
28
+
29
+ Tooltip.displayName = "Tooltip"
30
+
31
+ const TooltipTrigger = ({ ref, className, ...props }: TooltipTriggerProps) => {
32
+ return (
33
+ <BaseTooltip.Trigger
34
+ ref={ref}
35
+ className={mergeClassName(tooltipTriggerVariants(), className)}
36
+ {...props}
37
+ />
38
+ )
39
+ }
40
+
41
+ TooltipTrigger.displayName = "TooltipTrigger"
42
+
43
+ const TooltipPortal = (props: TooltipPortalProps) => {
44
+ return <BaseTooltip.Portal {...props} />
45
+ }
46
+
47
+ TooltipPortal.displayName = "TooltipPortal"
48
+
49
+ const TooltipPositioner = ({
50
+ ref,
51
+ className,
52
+ sideOffset = overlayPositionerSideOffset,
53
+ ...props
54
+ }: TooltipPositionerProps) => {
55
+ return (
56
+ <BaseTooltip.Positioner
57
+ ref={ref}
58
+ sideOffset={sideOffset}
59
+ className={mergeClassName(tooltipPositionerVariants(), className)}
60
+ {...props}
61
+ />
62
+ )
63
+ }
64
+
65
+ TooltipPositioner.displayName = "TooltipPositioner"
66
+
67
+ const TooltipPopup = ({ ref, className, ...props }: TooltipPopupProps) => {
68
+ return (
69
+ <BaseTooltip.Popup
70
+ ref={ref}
71
+ className={mergeClassName(tooltipPopupVariants(), className)}
72
+ {...props}
73
+ />
74
+ )
75
+ }
76
+
77
+ TooltipPopup.displayName = "TooltipPopup"
78
+
79
+ const TooltipArrow = ({ ref, className, ...props }: TooltipArrowProps) => {
80
+ return (
81
+ <BaseTooltip.Arrow
82
+ ref={ref}
83
+ className={mergeClassName(tooltipArrowVariants(), className)}
84
+ {...props}
85
+ />
86
+ )
87
+ }
88
+
89
+ TooltipArrow.displayName = "TooltipArrow"
90
+
91
+ export {
92
+ Tooltip,
93
+ TooltipTrigger,
94
+ TooltipPortal,
95
+ TooltipPositioner,
96
+ TooltipPopup,
97
+ TooltipArrow,
98
+ }
@@ -0,0 +1,22 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * Tooltip.types.ts
4
+ *
5
+ * Public and internal types for Tooltip component.
6
+ */
7
+
8
+ import type { Tooltip as BaseTooltip } from "@base-ui/react/tooltip"
9
+
10
+ export type TooltipProps = BaseTooltip.Root.Props
11
+
12
+ export type TooltipTriggerProps = BaseTooltip.Trigger.Props & {
13
+ ref?: Ref<HTMLButtonElement>
14
+ }
15
+
16
+ export type TooltipPortalProps = BaseTooltip.Portal.Props
17
+
18
+ export type TooltipPositionerProps = BaseTooltip.Positioner.Props
19
+
20
+ export type TooltipPopupProps = BaseTooltip.Popup.Props
21
+
22
+ export type TooltipArrowProps = BaseTooltip.Arrow.Props
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Tooltip.variants.ts
3
+ *
4
+ * Defines visual variants using class composition.
5
+ */
6
+
7
+ import { cva } from "class-variance-authority"
8
+
9
+ export const tooltipTriggerVariants = cva("inline-flex")
10
+
11
+ export const tooltipPositionerVariants = cva(
12
+ "z-(--lsys-tooltip-positioner-z-index)",
13
+ )
14
+
15
+ export const tooltipPopupVariants = cva(
16
+ [
17
+ "rounded-(--lsys-tooltip-radius) border border-(--lsys-tooltip-border-color) bg-(--lsys-tooltip-background) px-(--lsys-tooltip-padding-x) py-(--lsys-tooltip-padding-y) text-(--lsys-tooltip-foreground) shadow-(--lsys-tooltip-shadow)",
18
+ "text-(length:--lsys-tooltip-font-size) font-(--lsys-tooltip-font-weight) leading-(--lsys-tooltip-font-line-height)",
19
+ "data-[starting-style]:opacity-0 data-[ending-style]:opacity-0",
20
+ "transition-opacity duration-(--lsys-tooltip-transition-duration) ease-(--lsys-tooltip-transition-easing)",
21
+ ].join(" "),
22
+ )
23
+
24
+ export const tooltipArrowVariants = cva("fill-(--lsys-tooltip-background)")