@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,45 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * Meter.types.ts
4
+ *
5
+ * Public and internal types for Meter component.
6
+ */
7
+
8
+ import type { ReactNode } from "react"
9
+ import type { Meter as BaseMeter } from "@base-ui/react/meter"
10
+
11
+ export type MeterSize = "sm" | "md" | "lg"
12
+
13
+ export interface MeterProps extends Omit<
14
+ BaseMeter.Root.Props,
15
+ "className" | "size"
16
+ > {
17
+ ref?: Ref<HTMLDivElement>
18
+ size?: MeterSize
19
+ label?: ReactNode
20
+ showValue?: boolean
21
+ className?: BaseMeter.Root.Props["className"]
22
+ trackClassName?: BaseMeter.Track.Props["className"]
23
+ indicatorClassName?: BaseMeter.Indicator.Props["className"]
24
+ labelClassName?: BaseMeter.Label.Props["className"]
25
+ valueClassName?: BaseMeter.Value.Props["className"]
26
+ }
27
+
28
+ export interface MeterTrackProps extends Omit<
29
+ BaseMeter.Track.Props,
30
+ "className" | "size"
31
+ > {
32
+ size?: MeterSize
33
+ className?: BaseMeter.Track.Props["className"]
34
+ }
35
+
36
+ export interface MeterIndicatorProps extends Omit<
37
+ BaseMeter.Indicator.Props,
38
+ "className"
39
+ > {
40
+ className?: BaseMeter.Indicator.Props["className"]
41
+ }
42
+
43
+ export type MeterValueProps = BaseMeter.Value.Props
44
+
45
+ export type MeterLabelProps = BaseMeter.Label.Props
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Meter.variants.ts
3
+ *
4
+ * Defines visual variants using class composition.
5
+ */
6
+
7
+ import { cva } from "class-variance-authority"
8
+
9
+ export const meterVariants = cva(
10
+ "grid gap-(--lsys-meter-gap) text-(length:--lsys-meter-label-font-size) leading-(--lsys-meter-label-font-line-height) text-(--lsys-meter-label-foreground)",
11
+ )
12
+
13
+ export const meterHeaderVariants = cva(
14
+ "flex items-center justify-between gap-(--lsys-meter-header-gap)",
15
+ )
16
+
17
+ export const meterLabelVariants = cva(
18
+ "font-(--lsys-meter-label-font-weight) text-(--lsys-meter-label-foreground)",
19
+ )
20
+
21
+ export const meterValueVariants = cva(
22
+ "font-(--lsys-meter-value-font-weight) text-(--lsys-meter-value-foreground)",
23
+ )
24
+
25
+ export const meterTrackVariants = cva(
26
+ "overflow-hidden rounded-(--lsys-meter-track-radius) bg-(--lsys-meter-track-background)",
27
+ {
28
+ variants: {
29
+ size: {
30
+ sm: "h-(--lsys-meter-track-height-sm)",
31
+ md: "h-(--lsys-meter-track-height-md)",
32
+ lg: "h-(--lsys-meter-track-height-lg)",
33
+ },
34
+ },
35
+ defaultVariants: {
36
+ size: "md",
37
+ },
38
+ },
39
+ )
40
+
41
+ export const meterIndicatorVariants = cva(
42
+ [
43
+ "h-full bg-(--lsys-meter-indicator-background) transition-transform",
44
+ "duration-(--lsys-meter-transition-duration) ease-(--lsys-meter-transition-easing)",
45
+ "data-[complete]:bg-(--lsys-meter-indicator-background-complete)",
46
+ ].join(" "),
47
+ )
@@ -0,0 +1,256 @@
1
+ /**
2
+ * NavigationMenu.tsx
3
+ *
4
+ * Reference NavigationMenu component implementation.
5
+ */
6
+
7
+ import { ChevronDown } from "lucide-react"
8
+ import { NavigationMenu as BaseNavigationMenu } from "@base-ui/react/navigation-menu"
9
+ import type {
10
+ NavigationMenuArrowProps,
11
+ NavigationMenuBackdropProps,
12
+ NavigationMenuContentProps,
13
+ NavigationMenuIconProps,
14
+ NavigationMenuItemProps,
15
+ NavigationMenuLinkProps,
16
+ NavigationMenuListProps,
17
+ NavigationMenuPopupProps,
18
+ NavigationMenuPortalProps,
19
+ NavigationMenuPositionerProps,
20
+ NavigationMenuProps,
21
+ NavigationMenuTriggerProps,
22
+ NavigationMenuViewportProps,
23
+ } from "./NavigationMenu.types"
24
+ import {
25
+ navigationMenuArrowVariants,
26
+ navigationMenuBackdropVariants,
27
+ navigationMenuContentVariants,
28
+ navigationMenuIconVariants,
29
+ navigationMenuItemVariants,
30
+ navigationMenuLinkVariants,
31
+ navigationMenuListVariants,
32
+ navigationMenuPopupVariants,
33
+ navigationMenuPositionerVariants,
34
+ navigationMenuRootVariants,
35
+ navigationMenuTriggerVariants,
36
+ navigationMenuViewportVariants,
37
+ } from "./NavigationMenu.variants"
38
+ import { mergeClassName } from "@/lib/utils"
39
+ import { overlayPositionerSideOffset } from "@/lib/utils"
40
+
41
+ const NavigationMenu = <Value = unknown,>({
42
+ className,
43
+ ...props
44
+ }: NavigationMenuProps<Value>) => {
45
+ return (
46
+ <BaseNavigationMenu.Root
47
+ className={mergeClassName(navigationMenuRootVariants(), className)}
48
+ {...props}
49
+ />
50
+ )
51
+ }
52
+
53
+ NavigationMenu.displayName = "NavigationMenu"
54
+
55
+ const NavigationMenuList = ({
56
+ ref,
57
+ className,
58
+ ...props
59
+ }: NavigationMenuListProps) => {
60
+ return (
61
+ <BaseNavigationMenu.List
62
+ ref={ref}
63
+ className={mergeClassName(navigationMenuListVariants(), className)}
64
+ {...props}
65
+ />
66
+ )
67
+ }
68
+
69
+ NavigationMenuList.displayName = "NavigationMenuList"
70
+
71
+ const NavigationMenuItem = ({
72
+ ref,
73
+ className,
74
+ ...props
75
+ }: NavigationMenuItemProps) => {
76
+ return (
77
+ <BaseNavigationMenu.Item
78
+ ref={ref}
79
+ className={mergeClassName(navigationMenuItemVariants(), className)}
80
+ {...props}
81
+ />
82
+ )
83
+ }
84
+
85
+ NavigationMenuItem.displayName = "NavigationMenuItem"
86
+
87
+ const NavigationMenuContent = ({
88
+ ref,
89
+ className,
90
+ ...props
91
+ }: NavigationMenuContentProps) => {
92
+ return (
93
+ <BaseNavigationMenu.Content
94
+ ref={ref}
95
+ className={mergeClassName(navigationMenuContentVariants(), className)}
96
+ {...props}
97
+ />
98
+ )
99
+ }
100
+
101
+ NavigationMenuContent.displayName = "NavigationMenuContent"
102
+
103
+ const NavigationMenuTrigger = ({
104
+ ref,
105
+ className,
106
+ ...props
107
+ }: NavigationMenuTriggerProps) => {
108
+ return (
109
+ <BaseNavigationMenu.Trigger
110
+ ref={ref}
111
+ className={mergeClassName(navigationMenuTriggerVariants(), className)}
112
+ {...props}
113
+ />
114
+ )
115
+ }
116
+
117
+ NavigationMenuTrigger.displayName = "NavigationMenuTrigger"
118
+
119
+ const NavigationMenuPortal = (props: NavigationMenuPortalProps) => {
120
+ return <BaseNavigationMenu.Portal {...props} />
121
+ }
122
+
123
+ NavigationMenuPortal.displayName = "NavigationMenuPortal"
124
+
125
+ const NavigationMenuPositioner = ({
126
+ ref,
127
+ className,
128
+ sideOffset = overlayPositionerSideOffset,
129
+ ...props
130
+ }: NavigationMenuPositionerProps) => {
131
+ return (
132
+ <BaseNavigationMenu.Positioner
133
+ ref={ref}
134
+ sideOffset={sideOffset}
135
+ className={mergeClassName(navigationMenuPositionerVariants(), className)}
136
+ {...props}
137
+ />
138
+ )
139
+ }
140
+
141
+ NavigationMenuPositioner.displayName = "NavigationMenuPositioner"
142
+
143
+ const NavigationMenuViewport = ({
144
+ ref,
145
+ className,
146
+ ...props
147
+ }: NavigationMenuViewportProps) => {
148
+ return (
149
+ <BaseNavigationMenu.Viewport
150
+ ref={ref}
151
+ className={mergeClassName(navigationMenuViewportVariants(), className)}
152
+ {...props}
153
+ />
154
+ )
155
+ }
156
+
157
+ NavigationMenuViewport.displayName = "NavigationMenuViewport"
158
+
159
+ const NavigationMenuBackdrop = ({
160
+ ref,
161
+ className,
162
+ ...props
163
+ }: NavigationMenuBackdropProps) => {
164
+ return (
165
+ <BaseNavigationMenu.Backdrop
166
+ ref={ref}
167
+ className={mergeClassName(navigationMenuBackdropVariants(), className)}
168
+ {...props}
169
+ />
170
+ )
171
+ }
172
+
173
+ NavigationMenuBackdrop.displayName = "NavigationMenuBackdrop"
174
+
175
+ const NavigationMenuPopup = ({
176
+ ref,
177
+ className,
178
+ ...props
179
+ }: NavigationMenuPopupProps) => {
180
+ return (
181
+ <BaseNavigationMenu.Popup
182
+ ref={ref}
183
+ className={mergeClassName(navigationMenuPopupVariants(), className)}
184
+ {...props}
185
+ />
186
+ )
187
+ }
188
+
189
+ NavigationMenuPopup.displayName = "NavigationMenuPopup"
190
+
191
+ const NavigationMenuArrow = ({
192
+ ref,
193
+ className,
194
+ ...props
195
+ }: NavigationMenuArrowProps) => {
196
+ return (
197
+ <BaseNavigationMenu.Arrow
198
+ ref={ref}
199
+ className={mergeClassName(navigationMenuArrowVariants(), className)}
200
+ {...props}
201
+ />
202
+ )
203
+ }
204
+
205
+ NavigationMenuArrow.displayName = "NavigationMenuArrow"
206
+
207
+ const NavigationMenuLink = ({
208
+ ref,
209
+ className,
210
+ ...props
211
+ }: NavigationMenuLinkProps) => {
212
+ return (
213
+ <BaseNavigationMenu.Link
214
+ ref={ref}
215
+ className={mergeClassName(navigationMenuLinkVariants(), className)}
216
+ {...props}
217
+ />
218
+ )
219
+ }
220
+
221
+ NavigationMenuLink.displayName = "NavigationMenuLink"
222
+
223
+ const NavigationMenuIcon = ({
224
+ ref,
225
+ className,
226
+ children,
227
+ ...props
228
+ }: NavigationMenuIconProps) => {
229
+ return (
230
+ <BaseNavigationMenu.Icon
231
+ ref={ref}
232
+ className={mergeClassName(navigationMenuIconVariants(), className)}
233
+ {...props}
234
+ >
235
+ {children ?? <ChevronDown aria-hidden="true" size={14} />}
236
+ </BaseNavigationMenu.Icon>
237
+ )
238
+ }
239
+
240
+ NavigationMenuIcon.displayName = "NavigationMenuIcon"
241
+
242
+ export {
243
+ NavigationMenu,
244
+ NavigationMenuList,
245
+ NavigationMenuItem,
246
+ NavigationMenuContent,
247
+ NavigationMenuTrigger,
248
+ NavigationMenuPortal,
249
+ NavigationMenuPositioner,
250
+ NavigationMenuViewport,
251
+ NavigationMenuBackdrop,
252
+ NavigationMenuPopup,
253
+ NavigationMenuArrow,
254
+ NavigationMenuLink,
255
+ NavigationMenuIcon,
256
+ }
@@ -0,0 +1,58 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * NavigationMenu.types.ts
4
+ *
5
+ * Public and internal types for NavigationMenu component.
6
+ */
7
+
8
+ import type { NavigationMenu as BaseNavigationMenu } from "@base-ui/react/navigation-menu"
9
+
10
+ export type NavigationMenuProps<Value = unknown> =
11
+ BaseNavigationMenu.Root.Props<Value>
12
+
13
+ export type NavigationMenuListProps = BaseNavigationMenu.List.Props & {
14
+ ref?: Ref<HTMLUListElement>
15
+ }
16
+
17
+ export type NavigationMenuItemProps = BaseNavigationMenu.Item.Props & {
18
+ ref?: Ref<HTMLLIElement>
19
+ }
20
+
21
+ export type NavigationMenuContentProps = BaseNavigationMenu.Content.Props & {
22
+ ref?: Ref<HTMLDivElement>
23
+ }
24
+
25
+ export type NavigationMenuTriggerProps = BaseNavigationMenu.Trigger.Props & {
26
+ ref?: Ref<HTMLButtonElement>
27
+ }
28
+
29
+ export type NavigationMenuPortalProps = BaseNavigationMenu.Portal.Props
30
+
31
+ export type NavigationMenuPositionerProps =
32
+ BaseNavigationMenu.Positioner.Props & {
33
+ ref?: Ref<HTMLDivElement>
34
+ }
35
+
36
+ export type NavigationMenuViewportProps = BaseNavigationMenu.Viewport.Props & {
37
+ ref?: Ref<HTMLDivElement>
38
+ }
39
+
40
+ export type NavigationMenuBackdropProps = BaseNavigationMenu.Backdrop.Props & {
41
+ ref?: Ref<HTMLDivElement>
42
+ }
43
+
44
+ export type NavigationMenuPopupProps = BaseNavigationMenu.Popup.Props & {
45
+ ref?: Ref<HTMLDivElement>
46
+ }
47
+
48
+ export type NavigationMenuArrowProps = BaseNavigationMenu.Arrow.Props & {
49
+ ref?: Ref<HTMLDivElement>
50
+ }
51
+
52
+ export type NavigationMenuLinkProps = BaseNavigationMenu.Link.Props & {
53
+ ref?: Ref<HTMLAnchorElement>
54
+ }
55
+
56
+ export type NavigationMenuIconProps = BaseNavigationMenu.Icon.Props & {
57
+ ref?: Ref<HTMLSpanElement>
58
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * NavigationMenu.variants.ts
3
+ *
4
+ * Defines visual variants using class composition.
5
+ */
6
+
7
+ import { cva } from "class-variance-authority"
8
+ import {
9
+ menuArrowVariants,
10
+ menuBackdropVariants,
11
+ menuItemVariants,
12
+ menuPopupVariants,
13
+ menuPositionerVariants,
14
+ menuSubmenuTriggerIconVariants,
15
+ menuTriggerVariants,
16
+ menuViewportVariants,
17
+ } from "../Menu/Menu.variants"
18
+
19
+ export const navigationMenuBackdropVariants = menuBackdropVariants
20
+ export const navigationMenuPositionerVariants = menuPositionerVariants
21
+ export const navigationMenuPopupVariants = menuPopupVariants
22
+ export const navigationMenuViewportVariants = menuViewportVariants
23
+ export const navigationMenuArrowVariants = menuArrowVariants
24
+ export const navigationMenuTriggerVariants = menuTriggerVariants
25
+ export const navigationMenuLinkVariants = menuItemVariants
26
+ export const navigationMenuIconVariants = menuSubmenuTriggerIconVariants
27
+
28
+ export const navigationMenuRootVariants = cva(
29
+ "relative flex max-w-max flex-1 items-center justify-center",
30
+ )
31
+
32
+ export const navigationMenuListVariants = cva(
33
+ "flex flex-1 list-none items-center justify-center gap-(--lsys-menu-list-gap) p-(--lsys-menu-list-padding)",
34
+ )
35
+
36
+ export const navigationMenuItemVariants = cva("relative")
37
+
38
+ export const navigationMenuContentVariants = cva(
39
+ "grid gap-(--lsys-menu-list-gap) p-(--lsys-menu-list-padding)",
40
+ )
@@ -0,0 +1,168 @@
1
+ /**
2
+ * NumberField.tsx
3
+ *
4
+ * Reference NumberField component implementation.
5
+ */
6
+
7
+ import { NumberField as BaseNumberField } from "@base-ui/react/number-field"
8
+ import type {
9
+ NumberFieldDecrementProps,
10
+ NumberFieldGroupProps,
11
+ NumberFieldIncrementProps,
12
+ NumberFieldInputProps,
13
+ NumberFieldProps,
14
+ NumberFieldScrubAreaCursorProps,
15
+ NumberFieldScrubAreaProps,
16
+ } from "./NumberField.types"
17
+ import {
18
+ numberFieldButtonVariants,
19
+ numberFieldGroupVariants,
20
+ numberFieldInputVariants,
21
+ numberFieldScrubAreaCursorVariants,
22
+ numberFieldScrubAreaVariants,
23
+ numberFieldVariants,
24
+ } from "./NumberField.variants"
25
+ import { mergeClassName } from "@/lib/utils"
26
+
27
+ const NumberField = ({ ref, className, ...props }: NumberFieldProps) => {
28
+ return (
29
+ <BaseNumberField.Root
30
+ ref={ref}
31
+ className={mergeClassName(numberFieldVariants(), className)}
32
+ {...props}
33
+ />
34
+ )
35
+ }
36
+
37
+ NumberField.displayName = "NumberField"
38
+
39
+ const NumberFieldGroup = ({
40
+ ref,
41
+ size,
42
+ className,
43
+ ...props
44
+ }: NumberFieldGroupProps) => {
45
+ return (
46
+ <BaseNumberField.Group
47
+ ref={ref}
48
+ className={mergeClassName(numberFieldGroupVariants({ size }), className)}
49
+ {...props}
50
+ />
51
+ )
52
+ }
53
+
54
+ NumberFieldGroup.displayName = "NumberFieldGroup"
55
+
56
+ const NumberFieldInput = ({
57
+ ref,
58
+ size,
59
+ className,
60
+ isInvalid,
61
+ ...props
62
+ }: NumberFieldInputProps) => {
63
+ const baseInputProps: Omit<
64
+ NumberFieldInputProps,
65
+ "className" | "isInvalid" | "size"
66
+ > = isInvalid ? { ...props, "aria-invalid": true } : props
67
+
68
+ return (
69
+ <BaseNumberField.Input
70
+ ref={ref}
71
+ className={mergeClassName(numberFieldInputVariants({ size }), className)}
72
+ {...baseInputProps}
73
+ />
74
+ )
75
+ }
76
+
77
+ NumberFieldInput.displayName = "NumberFieldInput"
78
+
79
+ const NumberFieldIncrement = ({
80
+ ref,
81
+ size,
82
+ className,
83
+ children,
84
+ ...props
85
+ }: NumberFieldIncrementProps) => {
86
+ return (
87
+ <BaseNumberField.Increment
88
+ ref={ref}
89
+ className={mergeClassName(
90
+ numberFieldButtonVariants({ position: "increment", size }),
91
+ className,
92
+ )}
93
+ {...props}
94
+ >
95
+ {children ?? "+"}
96
+ </BaseNumberField.Increment>
97
+ )
98
+ }
99
+
100
+ NumberFieldIncrement.displayName = "NumberFieldIncrement"
101
+
102
+ const NumberFieldDecrement = ({
103
+ ref,
104
+ size,
105
+ className,
106
+ children,
107
+ ...props
108
+ }: NumberFieldDecrementProps) => {
109
+ return (
110
+ <BaseNumberField.Decrement
111
+ ref={ref}
112
+ className={mergeClassName(
113
+ numberFieldButtonVariants({ position: "decrement", size }),
114
+ className,
115
+ )}
116
+ {...props}
117
+ >
118
+ {children ?? "-"}
119
+ </BaseNumberField.Decrement>
120
+ )
121
+ }
122
+
123
+ NumberFieldDecrement.displayName = "NumberFieldDecrement"
124
+
125
+ const NumberFieldScrubArea = ({
126
+ ref,
127
+ className,
128
+ ...props
129
+ }: NumberFieldScrubAreaProps) => {
130
+ return (
131
+ <BaseNumberField.ScrubArea
132
+ ref={ref}
133
+ className={mergeClassName(numberFieldScrubAreaVariants(), className)}
134
+ {...props}
135
+ />
136
+ )
137
+ }
138
+
139
+ NumberFieldScrubArea.displayName = "NumberFieldScrubArea"
140
+
141
+ const NumberFieldScrubAreaCursor = ({
142
+ ref,
143
+ className,
144
+ ...props
145
+ }: NumberFieldScrubAreaCursorProps) => {
146
+ return (
147
+ <BaseNumberField.ScrubAreaCursor
148
+ ref={ref}
149
+ className={mergeClassName(
150
+ numberFieldScrubAreaCursorVariants(),
151
+ className,
152
+ )}
153
+ {...props}
154
+ />
155
+ )
156
+ }
157
+
158
+ NumberFieldScrubAreaCursor.displayName = "NumberFieldScrubAreaCursor"
159
+
160
+ export {
161
+ NumberField,
162
+ NumberFieldGroup,
163
+ NumberFieldInput,
164
+ NumberFieldIncrement,
165
+ NumberFieldDecrement,
166
+ NumberFieldScrubArea,
167
+ NumberFieldScrubAreaCursor,
168
+ }
@@ -0,0 +1,51 @@
1
+ import type { Ref } from "react"
2
+ /**
3
+ * NumberField.types.ts
4
+ *
5
+ * Public and internal types for NumberField component.
6
+ */
7
+
8
+ import type { NumberField as BaseNumberField } from "@base-ui/react/number-field"
9
+
10
+ export type NumberFieldProps = BaseNumberField.Root.Props & {
11
+ ref?: Ref<HTMLDivElement>
12
+ }
13
+
14
+ export interface NumberFieldGroupProps extends Omit<
15
+ BaseNumberField.Group.Props,
16
+ "className"
17
+ > {
18
+ size?: "sm" | "md" | "lg"
19
+ className?: BaseNumberField.Group.Props["className"]
20
+ }
21
+
22
+ export interface NumberFieldInputProps extends Omit<
23
+ BaseNumberField.Input.Props,
24
+ "aria-invalid" | "className" | "size"
25
+ > {
26
+ size?: "sm" | "md" | "lg"
27
+ isInvalid?: boolean
28
+ "aria-invalid"?: boolean | "true" | "false" | "grammar" | "spelling"
29
+ className?: BaseNumberField.Input.Props["className"]
30
+ }
31
+
32
+ export interface NumberFieldButtonProps extends Omit<
33
+ BaseNumberField.Increment.Props,
34
+ "className" | "size"
35
+ > {
36
+ size?: "sm" | "md" | "lg"
37
+ className?: BaseNumberField.Increment.Props["className"]
38
+ }
39
+
40
+ export type NumberFieldIncrementProps = NumberFieldButtonProps
41
+ export type NumberFieldDecrementProps = NumberFieldButtonProps
42
+
43
+ export interface NumberFieldScrubAreaProps extends Omit<
44
+ BaseNumberField.ScrubArea.Props,
45
+ "className"
46
+ > {
47
+ className?: BaseNumberField.ScrubArea.Props["className"]
48
+ }
49
+
50
+ export type NumberFieldScrubAreaCursorProps =
51
+ BaseNumberField.ScrubAreaCursor.Props