@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,394 @@
1
+ /**
2
+ * Autocomplete.tsx
3
+ *
4
+ * Reference Autocomplete component implementation.
5
+ */
6
+
7
+ import { ChevronDown, X } from "lucide-react"
8
+ import { Autocomplete as BaseAutocomplete } from "@base-ui/react/autocomplete"
9
+ import type {
10
+ AutocompleteArrowProps,
11
+ AutocompleteBackdropProps,
12
+ AutocompleteClearProps,
13
+ AutocompleteCollectionProps,
14
+ AutocompleteEmptyProps,
15
+ AutocompleteGroupLabelProps,
16
+ AutocompleteGroupProps,
17
+ AutocompleteIconProps,
18
+ AutocompleteInputGroupProps,
19
+ AutocompleteInputProps,
20
+ AutocompleteItemProps,
21
+ AutocompleteListProps,
22
+ AutocompletePopupProps,
23
+ AutocompletePortalProps,
24
+ AutocompletePositionerProps,
25
+ AutocompleteProps,
26
+ AutocompleteRowProps,
27
+ AutocompleteSeparatorProps,
28
+ AutocompleteStatusProps,
29
+ AutocompleteTriggerProps,
30
+ AutocompleteValueProps,
31
+ } from "./Autocomplete.types"
32
+ import {
33
+ autocompleteArrowVariants,
34
+ autocompleteBackdropVariants,
35
+ autocompleteClearVariants,
36
+ autocompleteEmptyVariants,
37
+ autocompleteGroupLabelVariants,
38
+ autocompleteGroupVariants,
39
+ autocompleteIconVariants,
40
+ autocompleteInputGroupVariants,
41
+ autocompleteInputVariants,
42
+ autocompleteItemVariants,
43
+ autocompleteListVariants,
44
+ autocompletePopupVariants,
45
+ autocompletePositionerVariants,
46
+ autocompleteRowVariants,
47
+ autocompleteSeparatorVariants,
48
+ autocompleteStatusVariants,
49
+ autocompleteTriggerVariants,
50
+ } from "./Autocomplete.variants"
51
+ import { mergeClassName } from "@/lib/utils"
52
+ import { overlayPositionerSideOffset } from "@/lib/utils"
53
+
54
+ const Autocomplete = (props: AutocompleteProps) => {
55
+ return <BaseAutocomplete.Root {...props} />
56
+ }
57
+
58
+ Autocomplete.displayName = "Autocomplete"
59
+
60
+ const AutocompleteTrigger = ({
61
+ ref,
62
+ size,
63
+ className,
64
+ ...props
65
+ }: AutocompleteTriggerProps) => {
66
+ return (
67
+ <BaseAutocomplete.Trigger
68
+ ref={ref}
69
+ className={mergeClassName(
70
+ autocompleteTriggerVariants({ size }),
71
+ className,
72
+ )}
73
+ {...props}
74
+ />
75
+ )
76
+ }
77
+
78
+ AutocompleteTrigger.displayName = "AutocompleteTrigger"
79
+
80
+ const AutocompleteInputGroup = ({
81
+ ref,
82
+ size,
83
+ className,
84
+ ...props
85
+ }: AutocompleteInputGroupProps) => {
86
+ return (
87
+ <BaseAutocomplete.InputGroup
88
+ ref={ref}
89
+ className={mergeClassName(
90
+ autocompleteInputGroupVariants({ size }),
91
+ className,
92
+ )}
93
+ {...props}
94
+ />
95
+ )
96
+ }
97
+
98
+ AutocompleteInputGroup.displayName = "AutocompleteInputGroup"
99
+
100
+ const AutocompleteInput = ({
101
+ ref,
102
+ size,
103
+ className,
104
+ ...props
105
+ }: AutocompleteInputProps) => {
106
+ return (
107
+ <BaseAutocomplete.Input
108
+ ref={ref}
109
+ className={mergeClassName(autocompleteInputVariants({ size }), className)}
110
+ {...props}
111
+ />
112
+ )
113
+ }
114
+
115
+ AutocompleteInput.displayName = "AutocompleteInput"
116
+
117
+ const AutocompleteValue = (props: AutocompleteValueProps) => {
118
+ return <BaseAutocomplete.Value {...props} />
119
+ }
120
+
121
+ AutocompleteValue.displayName = "AutocompleteValue"
122
+
123
+ const AutocompleteIcon = ({
124
+ ref,
125
+ className,
126
+ children,
127
+ ...props
128
+ }: AutocompleteIconProps) => {
129
+ return (
130
+ <BaseAutocomplete.Icon
131
+ ref={ref}
132
+ className={mergeClassName(autocompleteIconVariants(), className)}
133
+ {...props}
134
+ >
135
+ {children ?? <ChevronDown aria-hidden="true" size={16} />}
136
+ </BaseAutocomplete.Icon>
137
+ )
138
+ }
139
+
140
+ AutocompleteIcon.displayName = "AutocompleteIcon"
141
+
142
+ const AutocompleteClear = ({
143
+ ref,
144
+ className,
145
+ children,
146
+ ...props
147
+ }: AutocompleteClearProps) => {
148
+ return (
149
+ <BaseAutocomplete.Clear
150
+ ref={ref}
151
+ className={mergeClassName(autocompleteClearVariants(), className)}
152
+ {...props}
153
+ >
154
+ {children ?? <X aria-hidden="true" size={14} />}
155
+ </BaseAutocomplete.Clear>
156
+ )
157
+ }
158
+
159
+ AutocompleteClear.displayName = "AutocompleteClear"
160
+
161
+ const AutocompletePortal = (props: AutocompletePortalProps) => {
162
+ return <BaseAutocomplete.Portal {...props} />
163
+ }
164
+
165
+ AutocompletePortal.displayName = "AutocompletePortal"
166
+
167
+ const AutocompleteBackdrop = ({
168
+ ref,
169
+ className,
170
+ ...props
171
+ }: AutocompleteBackdropProps) => {
172
+ return (
173
+ <BaseAutocomplete.Backdrop
174
+ ref={ref}
175
+ className={mergeClassName(autocompleteBackdropVariants(), className)}
176
+ {...props}
177
+ />
178
+ )
179
+ }
180
+
181
+ AutocompleteBackdrop.displayName = "AutocompleteBackdrop"
182
+
183
+ const AutocompletePositioner = ({
184
+ ref,
185
+ className,
186
+ sideOffset = overlayPositionerSideOffset,
187
+ ...props
188
+ }: AutocompletePositionerProps) => {
189
+ return (
190
+ <BaseAutocomplete.Positioner
191
+ ref={ref}
192
+ sideOffset={sideOffset}
193
+ className={mergeClassName(autocompletePositionerVariants(), className)}
194
+ {...props}
195
+ />
196
+ )
197
+ }
198
+
199
+ AutocompletePositioner.displayName = "AutocompletePositioner"
200
+
201
+ const AutocompletePopup = ({
202
+ ref,
203
+ className,
204
+ ...props
205
+ }: AutocompletePopupProps) => {
206
+ return (
207
+ <BaseAutocomplete.Popup
208
+ ref={ref}
209
+ className={mergeClassName(autocompletePopupVariants(), className)}
210
+ {...props}
211
+ />
212
+ )
213
+ }
214
+
215
+ AutocompletePopup.displayName = "AutocompletePopup"
216
+
217
+ const AutocompleteList = ({
218
+ ref,
219
+ className,
220
+ ...props
221
+ }: AutocompleteListProps) => {
222
+ return (
223
+ <BaseAutocomplete.List
224
+ ref={ref}
225
+ className={mergeClassName(autocompleteListVariants(), className)}
226
+ {...props}
227
+ />
228
+ )
229
+ }
230
+
231
+ AutocompleteList.displayName = "AutocompleteList"
232
+
233
+ const AutocompleteItem = ({
234
+ ref,
235
+ className,
236
+ ...props
237
+ }: AutocompleteItemProps) => {
238
+ return (
239
+ <BaseAutocomplete.Item
240
+ ref={ref}
241
+ className={mergeClassName(autocompleteItemVariants(), className)}
242
+ {...props}
243
+ />
244
+ )
245
+ }
246
+
247
+ AutocompleteItem.displayName = "AutocompleteItem"
248
+
249
+ const AutocompleteArrow = ({
250
+ ref,
251
+ className,
252
+ ...props
253
+ }: AutocompleteArrowProps) => {
254
+ return (
255
+ <BaseAutocomplete.Arrow
256
+ ref={ref}
257
+ className={mergeClassName(autocompleteArrowVariants(), className)}
258
+ {...props}
259
+ />
260
+ )
261
+ }
262
+
263
+ AutocompleteArrow.displayName = "AutocompleteArrow"
264
+
265
+ const AutocompleteGroup = ({
266
+ ref,
267
+ className,
268
+ ...props
269
+ }: AutocompleteGroupProps) => {
270
+ return (
271
+ <BaseAutocomplete.Group
272
+ ref={ref}
273
+ className={mergeClassName(autocompleteGroupVariants(), className)}
274
+ {...props}
275
+ />
276
+ )
277
+ }
278
+
279
+ AutocompleteGroup.displayName = "AutocompleteGroup"
280
+
281
+ const AutocompleteGroupLabel = ({
282
+ ref,
283
+ className,
284
+ ...props
285
+ }: AutocompleteGroupLabelProps) => {
286
+ return (
287
+ <BaseAutocomplete.GroupLabel
288
+ ref={ref}
289
+ className={mergeClassName(autocompleteGroupLabelVariants(), className)}
290
+ {...props}
291
+ />
292
+ )
293
+ }
294
+
295
+ AutocompleteGroupLabel.displayName = "AutocompleteGroupLabel"
296
+
297
+ const AutocompleteEmpty = ({
298
+ ref,
299
+ className,
300
+ ...props
301
+ }: AutocompleteEmptyProps) => {
302
+ return (
303
+ <BaseAutocomplete.Empty
304
+ ref={ref}
305
+ className={mergeClassName(autocompleteEmptyVariants(), className)}
306
+ {...props}
307
+ />
308
+ )
309
+ }
310
+
311
+ AutocompleteEmpty.displayName = "AutocompleteEmpty"
312
+
313
+ const AutocompleteStatus = ({
314
+ ref,
315
+ className,
316
+ ...props
317
+ }: AutocompleteStatusProps) => {
318
+ return (
319
+ <BaseAutocomplete.Status
320
+ ref={ref}
321
+ className={mergeClassName(autocompleteStatusVariants(), className)}
322
+ {...props}
323
+ />
324
+ )
325
+ }
326
+
327
+ AutocompleteStatus.displayName = "AutocompleteStatus"
328
+
329
+ const AutocompleteRow = ({
330
+ ref,
331
+ className,
332
+ ...props
333
+ }: AutocompleteRowProps) => {
334
+ return (
335
+ <BaseAutocomplete.Row
336
+ ref={ref}
337
+ className={mergeClassName(autocompleteRowVariants(), className)}
338
+ {...props}
339
+ />
340
+ )
341
+ }
342
+
343
+ AutocompleteRow.displayName = "AutocompleteRow"
344
+
345
+ const AutocompleteCollection = (props: AutocompleteCollectionProps) => {
346
+ return <BaseAutocomplete.Collection {...props} />
347
+ }
348
+
349
+ AutocompleteCollection.displayName = "AutocompleteCollection"
350
+
351
+ const AutocompleteSeparator = ({
352
+ ref,
353
+ className,
354
+ ...props
355
+ }: AutocompleteSeparatorProps) => {
356
+ return (
357
+ <BaseAutocomplete.Separator
358
+ ref={ref}
359
+ className={mergeClassName(autocompleteSeparatorVariants(), className)}
360
+ {...props}
361
+ />
362
+ )
363
+ }
364
+
365
+ AutocompleteSeparator.displayName = "AutocompleteSeparator"
366
+
367
+ const useAutocompleteFilter = BaseAutocomplete.useFilter
368
+ const useAutocompleteFilteredItems = BaseAutocomplete.useFilteredItems
369
+
370
+ export {
371
+ Autocomplete,
372
+ AutocompleteTrigger,
373
+ AutocompleteInputGroup,
374
+ AutocompleteInput,
375
+ AutocompleteValue,
376
+ AutocompleteIcon,
377
+ AutocompleteClear,
378
+ AutocompletePortal,
379
+ AutocompleteBackdrop,
380
+ AutocompletePositioner,
381
+ AutocompletePopup,
382
+ AutocompleteList,
383
+ AutocompleteItem,
384
+ AutocompleteArrow,
385
+ AutocompleteGroup,
386
+ AutocompleteGroupLabel,
387
+ AutocompleteEmpty,
388
+ AutocompleteStatus,
389
+ AutocompleteRow,
390
+ AutocompleteCollection,
391
+ AutocompleteSeparator,
392
+ useAutocompleteFilter,
393
+ useAutocompleteFilteredItems,
394
+ }
@@ -0,0 +1,82 @@
1
+ import type { Ref } from "react"
2
+ import type { ComponentProps } from "react"
3
+ /**
4
+ * Autocomplete.types.ts
5
+ *
6
+ * Public and internal types for Autocomplete component.
7
+ */
8
+
9
+ import type { Autocomplete as BaseAutocomplete } from "@base-ui/react/autocomplete"
10
+
11
+ export type AutocompleteSize = "sm" | "md" | "lg"
12
+
13
+ export type AutocompleteProps = ComponentProps<typeof BaseAutocomplete.Root>
14
+
15
+ export interface AutocompleteTriggerProps extends Omit<
16
+ BaseAutocomplete.Trigger.Props,
17
+ "className" | "size"
18
+ > {
19
+ ref?: Ref<HTMLButtonElement>
20
+ size?: AutocompleteSize
21
+ className?: BaseAutocomplete.Trigger.Props["className"]
22
+ }
23
+
24
+ export interface AutocompleteInputGroupProps extends Omit<
25
+ BaseAutocomplete.InputGroup.Props,
26
+ "className" | "size"
27
+ > {
28
+ ref?: Ref<HTMLDivElement>
29
+ size?: AutocompleteSize
30
+ className?: BaseAutocomplete.InputGroup.Props["className"]
31
+ }
32
+
33
+ export interface AutocompleteInputProps extends Omit<
34
+ BaseAutocomplete.Input.Props,
35
+ "className" | "size"
36
+ > {
37
+ ref?: Ref<HTMLInputElement>
38
+ size?: AutocompleteSize
39
+ className?: BaseAutocomplete.Input.Props["className"]
40
+ }
41
+
42
+ export type AutocompleteValueProps = BaseAutocomplete.Value.Props
43
+
44
+ export type AutocompleteIconProps = BaseAutocomplete.Icon.Props
45
+
46
+ export type AutocompleteClearProps = BaseAutocomplete.Clear.Props
47
+
48
+ export type AutocompletePortalProps = BaseAutocomplete.Portal.Props
49
+
50
+ export type AutocompleteBackdropProps = BaseAutocomplete.Backdrop.Props
51
+
52
+ export type AutocompletePositionerProps = BaseAutocomplete.Positioner.Props
53
+
54
+ export type AutocompletePopupProps = BaseAutocomplete.Popup.Props
55
+
56
+ export type AutocompleteListProps = BaseAutocomplete.List.Props
57
+
58
+ export interface AutocompleteItemProps extends Omit<
59
+ BaseAutocomplete.Item.Props,
60
+ "className" | "ref"
61
+ > {
62
+ ref?: Ref<HTMLDivElement>
63
+ className?: BaseAutocomplete.Item.Props["className"]
64
+ }
65
+
66
+ export type AutocompleteArrowProps = BaseAutocomplete.Arrow.Props
67
+
68
+ export type AutocompleteGroupProps = BaseAutocomplete.Group.Props
69
+
70
+ export type AutocompleteGroupLabelProps = BaseAutocomplete.GroupLabel.Props
71
+
72
+ export type AutocompleteEmptyProps = BaseAutocomplete.Empty.Props
73
+
74
+ export type AutocompleteStatusProps = BaseAutocomplete.Status.Props
75
+
76
+ export type AutocompleteRowProps = BaseAutocomplete.Row.Props
77
+
78
+ export type AutocompleteCollectionProps = BaseAutocomplete.Collection.Props
79
+
80
+ export type AutocompleteSeparatorProps = ComponentProps<
81
+ typeof BaseAutocomplete.Separator
82
+ >
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Autocomplete.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 autocompleteTriggerVariants = cva(
11
+ [
12
+ "inline-flex w-full min-w-0 items-center justify-between gap-(--lsys-select-trigger-gap) rounded-(--lsys-select-radius) border",
13
+ "border-(--lsys-select-border-color) bg-(--lsys-select-background) text-(--lsys-select-foreground)",
14
+ "font-(family-name:--lsys-select-font-family) font-(--lsys-select-font-weight) leading-(--lsys-select-font-line-height) tracking-(--lsys-select-font-letter-spacing)",
15
+ "transition-colors duration-(--lsys-select-transition-duration) ease-(--lsys-select-transition-easing)",
16
+ "outline-none data-[focused]:border-(--lsys-select-focus-border-color) data-[focused]:ring-(length:--lsys-select-focus-ring-width) data-[focused]:ring-(--lsys-select-focus-ring-color) data-[focused]:ring-offset-(length:--lsys-select-focus-ring-offset) data-[focused]:ring-offset-(--lsys-select-focus-ring-offset-color)",
17
+ "data-[invalid]:border-(--lsys-select-invalid-border-color) data-[invalid]:ring-(length:--lsys-select-invalid-ring-width) data-[invalid]:ring-(--lsys-select-invalid-ring-color)",
18
+ "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-(--lsys-opacity-disabled)",
19
+ ].join(" "),
20
+ {
21
+ variants: {
22
+ size: {
23
+ sm: "h-(--lsys-select-height-sm) px-(--lsys-select-padding-x-sm) text-(length:--lsys-select-font-size-sm)",
24
+ md: "h-(--lsys-select-height-md) px-(--lsys-select-padding-x-md) text-(length:--lsys-select-font-size-md)",
25
+ lg: "h-(--lsys-select-height-lg) px-(--lsys-select-padding-x-lg) text-(length:--lsys-select-font-size-lg)",
26
+ },
27
+ },
28
+ defaultVariants: {
29
+ size: "md",
30
+ },
31
+ },
32
+ )
33
+
34
+ export const autocompleteInputGroupVariants = cva(
35
+ [
36
+ "inline-flex w-full min-w-0 items-center gap-(--lsys-select-trigger-gap) rounded-(--lsys-select-radius) border",
37
+ "border-(--lsys-select-border-color) bg-(--lsys-select-background) text-(--lsys-select-foreground)",
38
+ "font-(family-name:--lsys-select-font-family) font-(--lsys-select-font-weight) leading-(--lsys-select-font-line-height) tracking-(--lsys-select-font-letter-spacing)",
39
+ "transition-colors duration-(--lsys-select-transition-duration) ease-(--lsys-select-transition-easing)",
40
+ "outline-none data-[focused]:border-(--lsys-select-focus-border-color) data-[focused]:ring-(length:--lsys-select-focus-ring-width) data-[focused]:ring-(--lsys-select-focus-ring-color) data-[focused]:ring-offset-(length:--lsys-select-focus-ring-offset) data-[focused]:ring-offset-(--lsys-select-focus-ring-offset-color)",
41
+ "data-[invalid]:border-(--lsys-select-invalid-border-color) data-[invalid]:ring-(length:--lsys-select-invalid-ring-width) data-[invalid]:ring-(--lsys-select-invalid-ring-color)",
42
+ "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-(--lsys-opacity-disabled)",
43
+ ].join(" "),
44
+ {
45
+ variants: {
46
+ size: {
47
+ sm: "h-(--lsys-select-height-sm) px-(--lsys-select-padding-x-sm) text-(length:--lsys-select-font-size-sm)",
48
+ md: "h-(--lsys-select-height-md) px-(--lsys-select-padding-x-md) text-(length:--lsys-select-font-size-md)",
49
+ lg: "h-(--lsys-select-height-lg) px-(--lsys-select-padding-x-lg) text-(length:--lsys-select-font-size-lg)",
50
+ },
51
+ },
52
+ defaultVariants: {
53
+ size: "md",
54
+ },
55
+ },
56
+ )
57
+
58
+ export const autocompleteInputVariants = cva(
59
+ [
60
+ "min-w-0 flex-1 border-0 bg-transparent text-(--lsys-select-foreground) outline-none",
61
+ "font-(family-name:--lsys-select-font-family) font-(--lsys-select-font-weight) leading-(--lsys-select-font-line-height) tracking-(--lsys-select-font-letter-spacing)",
62
+ "placeholder:text-(--lsys-select-placeholder-color)",
63
+ "disabled:cursor-not-allowed",
64
+ disabledStateClasses,
65
+ ].join(" "),
66
+ {
67
+ variants: {
68
+ size: {
69
+ sm: "text-(length:--lsys-select-font-size-sm)",
70
+ md: "text-(length:--lsys-select-font-size-md)",
71
+ lg: "text-(length:--lsys-select-font-size-lg)",
72
+ },
73
+ },
74
+ defaultVariants: {
75
+ size: "md",
76
+ },
77
+ },
78
+ )
79
+
80
+ export const autocompleteValueVariants = cva(
81
+ "min-w-0 flex-1 truncate text-left data-[placeholder]:text-(--lsys-select-placeholder-color)",
82
+ )
83
+
84
+ export const autocompleteIconVariants = cva(
85
+ "inline-flex size-(--lsys-select-icon-size) shrink-0 items-center justify-center text-(--lsys-select-icon-foreground) transition-transform duration-(--lsys-select-transition-duration) ease-(--lsys-select-transition-easing) data-[open]:rotate-180",
86
+ )
87
+
88
+ export const autocompleteClearVariants = cva(
89
+ [
90
+ "inline-flex size-(--lsys-select-icon-size) shrink-0 items-center justify-center rounded-(--lsys-select-item-radius) text-(--lsys-select-icon-foreground)",
91
+ "transition-colors duration-(--lsys-select-transition-duration) ease-(--lsys-select-transition-easing)",
92
+ "hover:bg-(--lsys-select-item-highlight-background) hover:text-(--lsys-select-item-highlight-foreground)",
93
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-(--lsys-opacity-disabled)",
94
+ ].join(" "),
95
+ )
96
+
97
+ export const autocompleteBackdropVariants = cva(
98
+ "fixed inset-0 z-(--lsys-select-backdrop-z-index) bg-(--lsys-select-backdrop-background) opacity-(--lsys-select-backdrop-opacity) data-[starting-style]:opacity-0 data-[ending-style]:opacity-0",
99
+ )
100
+
101
+ export const autocompletePositionerVariants = cva(
102
+ "z-(--lsys-select-positioner-z-index)",
103
+ )
104
+
105
+ export const autocompletePopupVariants = cva(
106
+ [
107
+ "min-w-[var(--anchor-width)] overflow-hidden rounded-(--lsys-select-radius) border",
108
+ "border-(--lsys-select-popup-border-color) bg-(--lsys-select-popup-background) text-(--lsys-select-popup-foreground) shadow-(--lsys-select-popup-shadow)",
109
+ "data-[starting-style]:scale-95 data-[starting-style]:opacity-0 data-[ending-style]:scale-95 data-[ending-style]:opacity-0",
110
+ "origin-[var(--transform-origin)] transition-[opacity,transform] duration-(--lsys-select-transition-duration) ease-(--lsys-select-transition-easing)",
111
+ ].join(" "),
112
+ )
113
+
114
+ export const autocompleteListVariants = cva(
115
+ "grid max-h-(--lsys-select-popup-max-height) gap-(--lsys-select-list-gap) overflow-y-auto p-(--lsys-select-list-padding)",
116
+ )
117
+
118
+ export const autocompleteItemVariants = cva(
119
+ [
120
+ "relative flex min-w-0 cursor-default select-none items-center gap-(--lsys-select-item-gap) rounded-(--lsys-select-item-radius) px-(--lsys-select-item-padding-x) py-(--lsys-select-item-padding-y)",
121
+ "text-(length:--lsys-select-item-font-size) font-(--lsys-select-item-font-weight) leading-(--lsys-select-item-font-line-height) text-(--lsys-select-item-foreground) outline-none",
122
+ "data-[highlighted]:bg-(--lsys-select-item-highlight-background) data-[highlighted]:text-(--lsys-select-item-highlight-foreground)",
123
+ "data-[selected]:bg-(--lsys-select-item-selected-background) data-[selected]:text-(--lsys-select-item-selected-foreground)",
124
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-(--lsys-opacity-disabled)",
125
+ ].join(" "),
126
+ )
127
+
128
+ export const autocompleteArrowVariants = cva(
129
+ "size-(--lsys-select-arrow-size) rotate-45 border border-(--lsys-select-popup-border-color) bg-(--lsys-select-popup-background)",
130
+ )
131
+
132
+ export const autocompleteGroupVariants = cva(
133
+ "grid gap-(--lsys-select-group-gap)",
134
+ )
135
+
136
+ export const autocompleteGroupLabelVariants = cva(
137
+ "px-(--lsys-select-item-padding-x) py-(--lsys-select-group-label-padding-y) text-(length:--lsys-select-group-label-font-size) font-(--lsys-select-group-label-font-weight) leading-(--lsys-select-group-label-font-line-height) text-(--lsys-select-group-label-foreground)",
138
+ )
139
+
140
+ export const autocompleteEmptyVariants = cva(
141
+ "px-(--lsys-select-item-padding-x) py-(--lsys-select-item-padding-y) text-(length:--lsys-select-item-font-size) text-(--lsys-select-placeholder-color)",
142
+ )
143
+
144
+ export const autocompleteStatusVariants = cva(
145
+ "px-(--lsys-select-item-padding-x) py-(--lsys-select-item-padding-y) text-(length:--lsys-select-item-font-size) text-(--lsys-select-placeholder-color)",
146
+ )
147
+
148
+ export const autocompleteRowVariants = cva("flex min-w-0 items-center")
149
+
150
+ export const autocompleteCollectionVariants = cva("contents")
151
+
152
+ export const autocompleteSeparatorVariants = cva(
153
+ "mx-(--lsys-select-item-padding-x) my-(--lsys-select-group-label-padding-y) h-(--lsys-separator-thickness) bg-(--lsys-separator-color)",
154
+ )
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Avatar.tsx
3
+ *
4
+ * Reference Avatar component implementation.
5
+ */
6
+
7
+ import { Avatar as BaseAvatar } from "@base-ui/react/avatar"
8
+ import type {
9
+ AvatarFallbackProps,
10
+ AvatarImageProps,
11
+ AvatarProps,
12
+ } from "./Avatar.types"
13
+ import {
14
+ avatarFallbackVariants,
15
+ avatarImageVariants,
16
+ avatarVariants,
17
+ } from "./Avatar.variants"
18
+ import { mergeClassName } from "@/lib/utils"
19
+
20
+ const Avatar = ({ ref, size, shape, className, ...props }: AvatarProps) => {
21
+ return (
22
+ <BaseAvatar.Root
23
+ ref={ref}
24
+ className={mergeClassName(avatarVariants({ size, shape }), className)}
25
+ {...props}
26
+ />
27
+ )
28
+ }
29
+
30
+ Avatar.displayName = "Avatar"
31
+
32
+ const AvatarImage = ({ ref, className, ...props }: AvatarImageProps) => {
33
+ return (
34
+ <BaseAvatar.Image
35
+ ref={ref}
36
+ className={mergeClassName(avatarImageVariants(), className)}
37
+ {...props}
38
+ />
39
+ )
40
+ }
41
+
42
+ AvatarImage.displayName = "AvatarImage"
43
+
44
+ const AvatarFallback = ({ ref, className, ...props }: AvatarFallbackProps) => {
45
+ return (
46
+ <BaseAvatar.Fallback
47
+ ref={ref}
48
+ className={mergeClassName(avatarFallbackVariants(), className)}
49
+ {...props}
50
+ />
51
+ )
52
+ }
53
+
54
+ AvatarFallback.displayName = "AvatarFallback"
55
+
56
+ export { Avatar, AvatarImage, AvatarFallback }