@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,104 @@
1
+ /**
2
+ * SettingsPanel.tsx
3
+ *
4
+ * Reference SettingsPanel block — compound Card settings section.
5
+ */
6
+
7
+ import {
8
+ Card,
9
+ CardContent,
10
+ CardDescription,
11
+ CardFooter,
12
+ CardHeader,
13
+ CardTitle,
14
+ } from "../../primitives/Card/Card"
15
+ import type {
16
+ SettingsPanelContentProps,
17
+ SettingsPanelDescriptionProps,
18
+ SettingsPanelFooterProps,
19
+ SettingsPanelHeaderProps,
20
+ SettingsPanelProps,
21
+ SettingsPanelTitleProps,
22
+ } from "./SettingsPanel.types"
23
+ import { settingsPanelVariants } from "./SettingsPanel.variants"
24
+ import { cn } from "@/lib/utils"
25
+
26
+ const SettingsPanel = ({
27
+ ref,
28
+ variant,
29
+ className,
30
+ children,
31
+ ...cardProps
32
+ }: SettingsPanelProps) => {
33
+ return (
34
+ <Card
35
+ ref={ref}
36
+ variant={variant}
37
+ className={cn(settingsPanelVariants(), className)}
38
+ {...cardProps}
39
+ >
40
+ {children}
41
+ </Card>
42
+ )
43
+ }
44
+
45
+ SettingsPanel.displayName = "SettingsPanel"
46
+
47
+ const SettingsPanelHeader = ({
48
+ ref,
49
+ className,
50
+ ...props
51
+ }: SettingsPanelHeaderProps) => {
52
+ return <CardHeader ref={ref} className={className} {...props} />
53
+ }
54
+
55
+ SettingsPanelHeader.displayName = "SettingsPanelHeader"
56
+
57
+ const SettingsPanelTitle = ({
58
+ ref,
59
+ className,
60
+ ...props
61
+ }: SettingsPanelTitleProps) => {
62
+ return <CardTitle ref={ref} className={className} {...props} />
63
+ }
64
+
65
+ SettingsPanelTitle.displayName = "SettingsPanelTitle"
66
+
67
+ const SettingsPanelDescription = ({
68
+ ref,
69
+ className,
70
+ ...props
71
+ }: SettingsPanelDescriptionProps) => {
72
+ return <CardDescription ref={ref} className={className} {...props} />
73
+ }
74
+
75
+ SettingsPanelDescription.displayName = "SettingsPanelDescription"
76
+
77
+ const SettingsPanelContent = ({
78
+ ref,
79
+ className,
80
+ ...props
81
+ }: SettingsPanelContentProps) => {
82
+ return <CardContent ref={ref} className={className} {...props} />
83
+ }
84
+
85
+ SettingsPanelContent.displayName = "SettingsPanelContent"
86
+
87
+ const SettingsPanelFooter = ({
88
+ ref,
89
+ className,
90
+ ...props
91
+ }: SettingsPanelFooterProps) => {
92
+ return <CardFooter ref={ref} className={className} {...props} />
93
+ }
94
+
95
+ SettingsPanelFooter.displayName = "SettingsPanelFooter"
96
+
97
+ export {
98
+ SettingsPanel,
99
+ SettingsPanelHeader,
100
+ SettingsPanelTitle,
101
+ SettingsPanelDescription,
102
+ SettingsPanelContent,
103
+ SettingsPanelFooter,
104
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * SettingsPanel.types.ts
3
+ *
4
+ * Public types for the SettingsPanel block.
5
+ */
6
+
7
+ import type { ReactNode, Ref } from "react"
8
+ import type {
9
+ CardContentProps,
10
+ CardDescriptionProps,
11
+ CardFooterProps,
12
+ CardHeaderProps,
13
+ CardProps,
14
+ CardTitleProps,
15
+ } from "../../primitives/Card/Card.types"
16
+
17
+ export interface SettingsPanelProps extends Omit<CardProps, "children"> {
18
+ ref?: Ref<HTMLDivElement>
19
+ className?: CardProps["className"]
20
+ children?: ReactNode
21
+ }
22
+
23
+ export type SettingsPanelHeaderProps = CardHeaderProps
24
+
25
+ export type SettingsPanelTitleProps = CardTitleProps
26
+
27
+ export type SettingsPanelDescriptionProps = CardDescriptionProps
28
+
29
+ export type SettingsPanelContentProps = CardContentProps
30
+
31
+ export type SettingsPanelFooterProps = CardFooterProps
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SettingsPanel.variants.ts
3
+ *
4
+ * Variant classes for the SettingsPanel block.
5
+ */
6
+
7
+ export const settingsPanelVariants = (): string => {
8
+ return "lsys-settings-panel w-full text-(--lsys-color-text-primary)"
9
+ }
@@ -0,0 +1,414 @@
1
+ /**
2
+ * Sidebar.tsx
3
+ *
4
+ * Reference Sidebar block — compound navigation shell with desktop and mobile drawer.
5
+ */
6
+
7
+ import { createContext, useContext } from "react"
8
+ import { Button } from "../../primitives/Button/Button"
9
+ import {
10
+ Drawer,
11
+ DrawerBackdrop,
12
+ DrawerClose,
13
+ DrawerContent,
14
+ DrawerDescription,
15
+ DrawerPopup,
16
+ DrawerPortal,
17
+ DrawerTitle,
18
+ DrawerTrigger,
19
+ DrawerViewport,
20
+ } from "../../primitives/Drawer/Drawer"
21
+ import {
22
+ ScrollArea,
23
+ ScrollAreaContent,
24
+ ScrollAreaViewport,
25
+ } from "../../primitives/ScrollArea/ScrollArea"
26
+ import type {
27
+ SidebarContentProps,
28
+ SidebarFooterProps,
29
+ SidebarGroupContentProps,
30
+ SidebarGroupLabelProps,
31
+ SidebarGroupProps,
32
+ SidebarHeaderProps,
33
+ SidebarItemButtonProps,
34
+ SidebarItemLinkProps,
35
+ SidebarItemProps,
36
+ SidebarItemSize,
37
+ SidebarItemVariant,
38
+ SidebarListProps,
39
+ SidebarMobileHeaderProps,
40
+ SidebarProps,
41
+ SidebarTriggerProps,
42
+ } from "./Sidebar.types"
43
+ import {
44
+ sidebarBrandVariants,
45
+ sidebarDesktopVariants,
46
+ sidebarDrawerFooterVariants,
47
+ sidebarFooterVariants,
48
+ sidebarGroupContentVariants,
49
+ sidebarGroupLabelVariants,
50
+ sidebarGroupVariants,
51
+ sidebarMainVariants,
52
+ sidebarMobileHeaderVariants,
53
+ sidebarMobileTriggerVariants,
54
+ sidebarNavItemVariants,
55
+ sidebarNavListVariants,
56
+ sidebarNavVariants,
57
+ sidebarRootVariants,
58
+ } from "./Sidebar.variants"
59
+ import { cn } from "@/lib/utils"
60
+
61
+ interface SidebarContextValue {
62
+ itemVariant: SidebarItemVariant
63
+ itemSize: SidebarItemSize
64
+ }
65
+
66
+ interface SidebarMobileContextValue {
67
+ closeOnSelect: boolean
68
+ }
69
+
70
+ const SidebarContext = createContext<SidebarContextValue>({
71
+ itemVariant: "ghost",
72
+ itemSize: "sm",
73
+ })
74
+
75
+ const SidebarMobileContext = createContext<SidebarMobileContextValue>({
76
+ closeOnSelect: false,
77
+ })
78
+
79
+ const useSidebarMobileContext = () => useContext(SidebarMobileContext)
80
+
81
+ const Sidebar = ({
82
+ ref,
83
+ className,
84
+ itemVariant = "ghost",
85
+ itemSize = "sm",
86
+ children,
87
+ ...props
88
+ }: SidebarProps) => {
89
+ const sidebarBody = (
90
+ <SidebarMobileContext.Provider value={{ closeOnSelect: false }}>
91
+ {children}
92
+ </SidebarMobileContext.Provider>
93
+ )
94
+
95
+ const drawerBody = (
96
+ <SidebarMobileContext.Provider value={{ closeOnSelect: true }}>
97
+ {children}
98
+ <div className={sidebarDrawerFooterVariants()}>
99
+ <DrawerClose render={<Button variant="secondary" size="sm" />}>
100
+ Close
101
+ </DrawerClose>
102
+ </div>
103
+ </SidebarMobileContext.Provider>
104
+ )
105
+
106
+ return (
107
+ <SidebarContext.Provider value={{ itemVariant, itemSize }}>
108
+ <aside
109
+ ref={ref}
110
+ className={cn(sidebarRootVariants(), className)}
111
+ {...props}
112
+ >
113
+ <div className={sidebarDesktopVariants()}>{sidebarBody}</div>
114
+
115
+ <div className={sidebarMobileTriggerVariants()}>
116
+ <Drawer swipeDirection="left">
117
+ <DrawerTrigger render={<Button variant="secondary" size="sm" />}>
118
+ Open navigation
119
+ </DrawerTrigger>
120
+ <DrawerPortal>
121
+ <DrawerBackdrop />
122
+ <DrawerViewport side="left">
123
+ <DrawerPopup side="left" size="sm">
124
+ <DrawerClose aria-label="Close navigation" />
125
+ <DrawerContent className={sidebarMainVariants()}>
126
+ <DrawerTitle className="sr-only">Navigation</DrawerTitle>
127
+ <DrawerDescription className="sr-only">
128
+ Application navigation links
129
+ </DrawerDescription>
130
+ {drawerBody}
131
+ </DrawerContent>
132
+ </DrawerPopup>
133
+ </DrawerViewport>
134
+ </DrawerPortal>
135
+ </Drawer>
136
+ </div>
137
+ </aside>
138
+ </SidebarContext.Provider>
139
+ )
140
+ }
141
+
142
+ Sidebar.displayName = "Sidebar"
143
+
144
+ const SidebarHeader = ({
145
+ ref,
146
+ className,
147
+ children,
148
+ ...props
149
+ }: SidebarHeaderProps) => {
150
+ return (
151
+ <div ref={ref} className={cn(sidebarBrandVariants(), className)} {...props}>
152
+ {children}
153
+ </div>
154
+ )
155
+ }
156
+
157
+ SidebarHeader.displayName = "SidebarHeader"
158
+
159
+ const SidebarContent = ({
160
+ ref,
161
+ className,
162
+ children,
163
+ ...props
164
+ }: SidebarContentProps) => {
165
+ return (
166
+ <ScrollArea className={sidebarNavVariants()}>
167
+ <ScrollAreaViewport>
168
+ <ScrollAreaContent>
169
+ <nav
170
+ ref={ref}
171
+ aria-label="Application navigation"
172
+ className={className}
173
+ {...props}
174
+ >
175
+ {children}
176
+ </nav>
177
+ </ScrollAreaContent>
178
+ </ScrollAreaViewport>
179
+ </ScrollArea>
180
+ )
181
+ }
182
+
183
+ SidebarContent.displayName = "SidebarContent"
184
+
185
+ const SidebarFooter = ({
186
+ ref,
187
+ className,
188
+ children,
189
+ ...props
190
+ }: SidebarFooterProps) => {
191
+ return (
192
+ <div
193
+ ref={ref}
194
+ className={cn(sidebarFooterVariants(), className)}
195
+ {...props}
196
+ >
197
+ {children}
198
+ </div>
199
+ )
200
+ }
201
+
202
+ SidebarFooter.displayName = "SidebarFooter"
203
+
204
+ const SidebarTrigger = ({
205
+ ref,
206
+ children = "Open navigation",
207
+ variant = "secondary",
208
+ size = "sm",
209
+ className,
210
+ ...props
211
+ }: SidebarTriggerProps) => {
212
+ return (
213
+ <DrawerTrigger
214
+ render={
215
+ <Button
216
+ ref={ref}
217
+ variant={variant}
218
+ size={size}
219
+ className={className}
220
+ {...props}
221
+ />
222
+ }
223
+ >
224
+ {children}
225
+ </DrawerTrigger>
226
+ )
227
+ }
228
+
229
+ SidebarTrigger.displayName = "SidebarTrigger"
230
+
231
+ const SidebarMobileHeader = ({
232
+ ref,
233
+ className,
234
+ children,
235
+ ...props
236
+ }: SidebarMobileHeaderProps) => {
237
+ return (
238
+ <div
239
+ ref={ref}
240
+ className={cn(sidebarMobileHeaderVariants(), className)}
241
+ {...props}
242
+ >
243
+ {children}
244
+ </div>
245
+ )
246
+ }
247
+
248
+ SidebarMobileHeader.displayName = "SidebarMobileHeader"
249
+
250
+ const SidebarGroup = ({
251
+ ref,
252
+ className,
253
+ children,
254
+ ...props
255
+ }: SidebarGroupProps) => {
256
+ return (
257
+ <div ref={ref} className={cn(sidebarGroupVariants(), className)} {...props}>
258
+ {children}
259
+ </div>
260
+ )
261
+ }
262
+
263
+ SidebarGroup.displayName = "SidebarGroup"
264
+
265
+ const SidebarGroupLabel = ({
266
+ ref,
267
+ className,
268
+ children,
269
+ ...props
270
+ }: SidebarGroupLabelProps) => {
271
+ return (
272
+ <div
273
+ ref={ref}
274
+ className={cn(sidebarGroupLabelVariants(), className)}
275
+ {...props}
276
+ >
277
+ {children}
278
+ </div>
279
+ )
280
+ }
281
+
282
+ SidebarGroupLabel.displayName = "SidebarGroupLabel"
283
+
284
+ const SidebarGroupContent = ({
285
+ ref,
286
+ className,
287
+ children,
288
+ ...props
289
+ }: SidebarGroupContentProps) => {
290
+ return (
291
+ <div
292
+ ref={ref}
293
+ className={cn(sidebarGroupContentVariants(), className)}
294
+ {...props}
295
+ >
296
+ {children}
297
+ </div>
298
+ )
299
+ }
300
+
301
+ SidebarGroupContent.displayName = "SidebarGroupContent"
302
+
303
+ const SidebarList = ({
304
+ ref,
305
+ className,
306
+ children,
307
+ ...props
308
+ }: SidebarListProps) => {
309
+ return (
310
+ <ul
311
+ ref={ref}
312
+ className={cn(sidebarNavListVariants(), className)}
313
+ {...props}
314
+ >
315
+ {children}
316
+ </ul>
317
+ )
318
+ }
319
+
320
+ SidebarList.displayName = "SidebarList"
321
+
322
+ const SidebarItem = ({
323
+ ref,
324
+ className,
325
+ children,
326
+ ...props
327
+ }: SidebarItemProps) => {
328
+ return (
329
+ <li ref={ref} className={className} {...props}>
330
+ {children}
331
+ </li>
332
+ )
333
+ }
334
+
335
+ SidebarItem.displayName = "SidebarItem"
336
+
337
+ const SidebarItemLink = ({
338
+ ref,
339
+ active,
340
+ className,
341
+ children,
342
+ ...props
343
+ }: SidebarItemLinkProps) => {
344
+ const { closeOnSelect } = useSidebarMobileContext()
345
+ const linkClassName = cn(sidebarNavItemVariants(active), className)
346
+
347
+ if (!closeOnSelect) {
348
+ return (
349
+ <a ref={ref} className={linkClassName} {...props}>
350
+ {children}
351
+ </a>
352
+ )
353
+ }
354
+
355
+ return (
356
+ <DrawerClose
357
+ appearance="inline"
358
+ render={<a ref={ref} className={linkClassName} {...props} />}
359
+ >
360
+ {children}
361
+ </DrawerClose>
362
+ )
363
+ }
364
+
365
+ SidebarItemLink.displayName = "SidebarItemLink"
366
+
367
+ const SidebarItemButton = ({
368
+ ref,
369
+ active,
370
+ className,
371
+ children,
372
+ type = "button",
373
+ ...props
374
+ }: SidebarItemButtonProps) => {
375
+ const { closeOnSelect } = useSidebarMobileContext()
376
+ const buttonClassName = cn(sidebarNavItemVariants(active), className)
377
+
378
+ if (!closeOnSelect) {
379
+ return (
380
+ <button ref={ref} type={type} className={buttonClassName} {...props}>
381
+ {children}
382
+ </button>
383
+ )
384
+ }
385
+
386
+ return (
387
+ <DrawerClose
388
+ appearance="inline"
389
+ render={
390
+ <button ref={ref} type={type} className={buttonClassName} {...props} />
391
+ }
392
+ >
393
+ {children}
394
+ </DrawerClose>
395
+ )
396
+ }
397
+
398
+ SidebarItemButton.displayName = "SidebarItemButton"
399
+
400
+ export {
401
+ Sidebar,
402
+ SidebarHeader,
403
+ SidebarContent,
404
+ SidebarFooter,
405
+ SidebarGroup,
406
+ SidebarGroupLabel,
407
+ SidebarGroupContent,
408
+ SidebarList,
409
+ SidebarItem,
410
+ SidebarItemLink,
411
+ SidebarItemButton,
412
+ SidebarTrigger,
413
+ SidebarMobileHeader,
414
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Sidebar.types.ts
3
+ *
4
+ * Public types for the Sidebar block.
5
+ */
6
+
7
+ import type {
8
+ AnchorHTMLAttributes,
9
+ ButtonHTMLAttributes,
10
+ HTMLAttributes,
11
+ LiHTMLAttributes,
12
+ ReactNode,
13
+ Ref,
14
+ } from "react"
15
+ import type { ButtonProps } from "../../primitives/Button/Button.types"
16
+
17
+ export type SidebarItemVariant = ButtonProps["variant"]
18
+ export type SidebarItemSize = ButtonProps["size"]
19
+
20
+ export interface SidebarProps extends HTMLAttributes<HTMLElement> {
21
+ ref?: Ref<HTMLElement>
22
+ className?: string
23
+ itemVariant?: SidebarItemVariant
24
+ itemSize?: SidebarItemSize
25
+ children?: ReactNode
26
+ }
27
+
28
+ export interface SidebarHeaderProps extends HTMLAttributes<HTMLDivElement> {
29
+ ref?: Ref<HTMLDivElement>
30
+ className?: string
31
+ children?: ReactNode
32
+ }
33
+
34
+ export interface SidebarContentProps extends HTMLAttributes<HTMLDivElement> {
35
+ ref?: Ref<HTMLDivElement>
36
+ className?: string
37
+ children?: ReactNode
38
+ }
39
+
40
+ export interface SidebarFooterProps extends HTMLAttributes<HTMLDivElement> {
41
+ ref?: Ref<HTMLDivElement>
42
+ className?: string
43
+ children?: ReactNode
44
+ }
45
+
46
+ export interface SidebarGroupProps extends HTMLAttributes<HTMLDivElement> {
47
+ ref?: Ref<HTMLDivElement>
48
+ className?: string
49
+ children?: ReactNode
50
+ }
51
+
52
+ export interface SidebarGroupLabelProps extends HTMLAttributes<HTMLDivElement> {
53
+ ref?: Ref<HTMLDivElement>
54
+ className?: string
55
+ children?: ReactNode
56
+ }
57
+
58
+ export interface SidebarGroupContentProps extends HTMLAttributes<HTMLDivElement> {
59
+ ref?: Ref<HTMLDivElement>
60
+ className?: string
61
+ children?: ReactNode
62
+ }
63
+
64
+ export interface SidebarListProps extends HTMLAttributes<HTMLUListElement> {
65
+ ref?: Ref<HTMLUListElement>
66
+ className?: string
67
+ children?: ReactNode
68
+ }
69
+
70
+ export interface SidebarItemProps extends LiHTMLAttributes<HTMLLIElement> {
71
+ ref?: Ref<HTMLLIElement>
72
+ className?: string
73
+ children?: ReactNode
74
+ }
75
+
76
+ export interface SidebarItemLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
77
+ ref?: Ref<HTMLAnchorElement>
78
+ active?: boolean
79
+ className?: string
80
+ children?: ReactNode
81
+ }
82
+
83
+ export interface SidebarItemButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
84
+ ref?: Ref<HTMLButtonElement>
85
+ active?: boolean
86
+ className?: string
87
+ children?: ReactNode
88
+ }
89
+
90
+ export interface SidebarTriggerProps extends Omit<ButtonProps, "type"> {
91
+ ref?: Ref<HTMLButtonElement>
92
+ children?: ReactNode
93
+ }
94
+
95
+ export interface SidebarMobileHeaderProps extends HTMLAttributes<HTMLDivElement> {
96
+ ref?: Ref<HTMLDivElement>
97
+ className?: string
98
+ children?: ReactNode
99
+ }