@cl-light-ds/ui 0.2.0 → 0.4.0

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 (293) hide show
  1. package/README.md +45 -45
  2. package/package.json +2 -2
  3. package/src/components/accordion/Accordion.astro +248 -248
  4. package/src/components/accordion/AccordionContent.astro +26 -26
  5. package/src/components/accordion/AccordionItem.astro +36 -36
  6. package/src/components/accordion/AccordionTrigger.astro +118 -118
  7. package/src/components/accordion/CHANGELOG.md +41 -41
  8. package/src/components/accordion/index.ts +4 -4
  9. package/src/components/alert/Alert.astro +167 -167
  10. package/src/components/alert/AlertDescription.astro +24 -24
  11. package/src/components/alert/AlertTitle.astro +24 -24
  12. package/src/components/alert/CHANGELOG.md +5 -5
  13. package/src/components/alert/index.ts +4 -4
  14. package/src/components/avatar/Avatar.astro +197 -197
  15. package/src/components/avatar/AvatarBadge.astro +44 -44
  16. package/src/components/avatar/AvatarFallback.astro +26 -26
  17. package/src/components/avatar/AvatarGroup.astro +26 -26
  18. package/src/components/avatar/AvatarGroupCount.astro +30 -30
  19. package/src/components/avatar/AvatarImage.astro +46 -46
  20. package/src/components/avatar/CHANGELOG.md +44 -44
  21. package/src/components/avatar/index.ts +6 -6
  22. package/src/components/badge/Badge.astro +167 -167
  23. package/src/components/badge/CHANGELOG.md +49 -49
  24. package/src/components/badge/index.ts +2 -2
  25. package/src/components/breadcrumb/Breadcrumb.astro +76 -76
  26. package/src/components/breadcrumb/BreadcrumbItem.astro +32 -32
  27. package/src/components/breadcrumb/BreadcrumbList.astro +26 -26
  28. package/src/components/breadcrumb/BreadcrumbSeparator.astro +26 -26
  29. package/src/components/breadcrumb/CHANGELOG.md +24 -24
  30. package/src/components/breadcrumb/index.ts +5 -5
  31. package/src/components/button/Button.astro +233 -233
  32. package/src/components/button/CHANGELOG.md +41 -41
  33. package/src/components/button/index.ts +2 -2
  34. package/src/components/button-group/ButtonGroup.astro +130 -130
  35. package/src/components/button-group/ButtonGroupSeparator.astro +30 -30
  36. package/src/components/button-group/ButtonGroupText.astro +21 -21
  37. package/src/components/button-group/CHANGELOG.md +34 -34
  38. package/src/components/button-group/index.ts +3 -3
  39. package/src/components/callout/CHANGELOG.md +32 -0
  40. package/src/components/callout/Callout.astro +147 -0
  41. package/src/components/callout/CalloutDescription.astro +16 -0
  42. package/src/components/callout/CalloutTitle.astro +16 -0
  43. package/src/components/callout/index.ts +3 -0
  44. package/src/components/card/CHANGELOG.md +162 -119
  45. package/src/components/card/Card.astro +197 -182
  46. package/src/components/card/CardAction.astro +26 -26
  47. package/src/components/card/CardContent.astro +28 -28
  48. package/src/components/card/CardDescription.astro +28 -28
  49. package/src/components/card/CardFooter.astro +24 -24
  50. package/src/components/card/CardHeader.astro +30 -30
  51. package/src/components/card/CardMedia.astro +27 -27
  52. package/src/components/card/CardMediaActions.astro +21 -0
  53. package/src/components/card/CardMediaSelect.astro +21 -0
  54. package/src/components/card/CardOverlay.astro +32 -32
  55. package/src/components/card/CardTitle.astro +21 -21
  56. package/src/components/card/index.ts +12 -10
  57. package/src/components/carousel/CHANGELOG.md +5 -5
  58. package/src/components/carousel/Carousel.astro +106 -106
  59. package/src/components/carousel/CarouselSlide.astro +22 -22
  60. package/src/components/carousel/index.ts +3 -3
  61. package/src/components/checkbox/CHANGELOG.md +58 -58
  62. package/src/components/checkbox/Checkbox.astro +159 -159
  63. package/src/components/checkbox/index.ts +1 -1
  64. package/src/components/collapsible/CHANGELOG.md +5 -5
  65. package/src/components/collapsible/Collapsible.astro +202 -202
  66. package/src/components/collapsible/CollapsibleContent.astro +36 -36
  67. package/src/components/collapsible/CollapsibleTrigger.astro +34 -34
  68. package/src/components/collapsible/index.ts +4 -4
  69. package/src/components/combobox/CHANGELOG.md +27 -27
  70. package/src/components/combobox/Combobox.astro +365 -365
  71. package/src/components/combobox/ComboboxContent.astro +37 -37
  72. package/src/components/combobox/ComboboxEmpty.astro +18 -18
  73. package/src/components/combobox/ComboboxGroup.astro +19 -19
  74. package/src/components/combobox/ComboboxInput.astro +74 -74
  75. package/src/components/combobox/ComboboxItem.astro +39 -39
  76. package/src/components/combobox/ComboboxLabel.astro +18 -18
  77. package/src/components/combobox/ComboboxList.astro +21 -21
  78. package/src/components/combobox/ComboboxSeparator.astro +17 -17
  79. package/src/components/combobox/ComboboxTrigger.astro +30 -30
  80. package/src/components/combobox/ComboboxValue.astro +22 -22
  81. package/src/components/combobox/index.ts +11 -11
  82. package/src/components/date/CHANGELOG.md +18 -18
  83. package/src/components/date/Date.astro +137 -137
  84. package/src/components/date/index.ts +2 -2
  85. package/src/components/dialog/CHANGELOG.md +39 -39
  86. package/src/components/dialog/Dialog.astro +196 -196
  87. package/src/components/dialog/DialogClose.astro +23 -23
  88. package/src/components/dialog/DialogContent.astro +42 -42
  89. package/src/components/dialog/DialogDescription.astro +18 -18
  90. package/src/components/dialog/DialogFooter.astro +18 -18
  91. package/src/components/dialog/DialogHeader.astro +18 -18
  92. package/src/components/dialog/DialogOverlay.astro +19 -19
  93. package/src/components/dialog/DialogTitle.astro +18 -18
  94. package/src/components/dialog/DialogTrigger.astro +37 -37
  95. package/src/components/dialog/index.ts +9 -9
  96. package/src/components/dropdown-menu/CHANGELOG.md +194 -194
  97. package/src/components/dropdown-menu/DropdownMenu.astro +226 -226
  98. package/src/components/dropdown-menu/DropdownMenuCheckboxItem.astro +114 -114
  99. package/src/components/dropdown-menu/DropdownMenuContent.astro +42 -42
  100. package/src/components/dropdown-menu/DropdownMenuGroup.astro +19 -19
  101. package/src/components/dropdown-menu/DropdownMenuItem.astro +220 -220
  102. package/src/components/dropdown-menu/DropdownMenuItemContent.astro +79 -79
  103. package/src/components/dropdown-menu/DropdownMenuLabel.astro +20 -20
  104. package/src/components/dropdown-menu/DropdownMenuPortal.astro +13 -13
  105. package/src/components/dropdown-menu/DropdownMenuRadioGroup.astro +13 -13
  106. package/src/components/dropdown-menu/DropdownMenuRadioItem.astro +101 -101
  107. package/src/components/dropdown-menu/DropdownMenuSeparator.astro +18 -18
  108. package/src/components/dropdown-menu/DropdownMenuShortcut.astro +18 -18
  109. package/src/components/dropdown-menu/DropdownMenuTrigger.astro +49 -49
  110. package/src/components/dropdown-menu/dropdown-menu-item-variants.ts +24 -24
  111. package/src/components/dropdown-menu/index.ts +12 -12
  112. package/src/components/field/CHANGELOG.md +33 -33
  113. package/src/components/field/Field.astro +664 -664
  114. package/src/components/field/FieldContent.astro +20 -20
  115. package/src/components/field/FieldDescription.astro +22 -22
  116. package/src/components/field/FieldError.astro +51 -51
  117. package/src/components/field/FieldGroup.astro +20 -20
  118. package/src/components/field/FieldLabel.astro +22 -22
  119. package/src/components/field/FieldLegend.astro +23 -23
  120. package/src/components/field/FieldSeparator.astro +30 -30
  121. package/src/components/field/FieldSet.astro +20 -20
  122. package/src/components/field/FieldTitle.astro +20 -20
  123. package/src/components/field/index.ts +10 -10
  124. package/src/components/hover-card/CHANGELOG.md +20 -20
  125. package/src/components/hover-card/HoverCard.astro +235 -235
  126. package/src/components/hover-card/HoverCardContent.astro +54 -54
  127. package/src/components/hover-card/HoverCardTrigger.astro +38 -38
  128. package/src/components/hover-card/index.ts +3 -3
  129. package/src/components/input/CHANGELOG.md +44 -29
  130. package/src/components/input/Input.astro +130 -130
  131. package/src/components/input/InputOTP.astro +211 -0
  132. package/src/components/input/index.ts +2 -2
  133. package/src/components/input-group/CHANGELOG.md +49 -49
  134. package/src/components/input-group/InputGroup.astro +135 -135
  135. package/src/components/input-group/InputGroupAddon.astro +49 -49
  136. package/src/components/input-group/InputGroupButton.astro +58 -58
  137. package/src/components/input-group/InputGroupInput.astro +18 -18
  138. package/src/components/input-group/InputGroupText.astro +21 -21
  139. package/src/components/input-group/InputGroupTextarea.astro +17 -17
  140. package/src/components/input-group/controlClasses.ts +2 -2
  141. package/src/components/input-group/index.ts +6 -6
  142. package/src/components/item/CHANGELOG.md +27 -27
  143. package/src/components/item/Item.astro +122 -122
  144. package/src/components/item/ItemActions.astro +21 -21
  145. package/src/components/item/ItemContent.astro +25 -25
  146. package/src/components/item/ItemDescription.astro +25 -25
  147. package/src/components/item/ItemFooter.astro +24 -24
  148. package/src/components/item/ItemGroup.astro +24 -24
  149. package/src/components/item/ItemHeader.astro +24 -24
  150. package/src/components/item/ItemMedia.astro +47 -47
  151. package/src/components/item/ItemSeparator.astro +21 -21
  152. package/src/components/item/ItemTitle.astro +25 -25
  153. package/src/components/item/index.ts +10 -10
  154. package/src/components/kbd/CHANGELOG.md +5 -5
  155. package/src/components/kbd/Kbd.astro +145 -145
  156. package/src/components/kbd/KbdGroup.astro +55 -55
  157. package/src/components/kbd/index.ts +2 -2
  158. package/src/components/label/CHANGELOG.md +28 -28
  159. package/src/components/label/Label.astro +97 -97
  160. package/src/components/label/index.ts +2 -2
  161. package/src/components/link-group/CHANGELOG.md +75 -75
  162. package/src/components/link-group/LinkGroup.astro +67 -67
  163. package/src/components/link-group/LinkGroupItem.astro +32 -32
  164. package/src/components/link-group/LinkGroupList.astro +25 -25
  165. package/src/components/link-group/LinkGroupTitle.astro +22 -22
  166. package/src/components/link-group/index.ts +5 -5
  167. package/src/components/link-group/link-group-list-variants.ts +15 -15
  168. package/src/components/logo/CHANGELOG.md +17 -0
  169. package/src/components/logo/Logo.astro +90 -0
  170. package/src/components/logo/index.ts +3 -0
  171. package/src/components/logo/logo-paths.ts +57 -0
  172. package/src/components/marquee/CHANGELOG.md +5 -5
  173. package/src/components/marquee/Marquee.astro +119 -119
  174. package/src/components/marquee/index.ts +2 -2
  175. package/src/components/native-select/CHANGELOG.md +5 -5
  176. package/src/components/native-select/NativeSelect.astro +125 -125
  177. package/src/components/native-select/NativeSelectOptGroup.astro +14 -14
  178. package/src/components/native-select/NativeSelectOption.astro +9 -9
  179. package/src/components/native-select/index.ts +3 -3
  180. package/src/components/navigation-menu/CHANGELOG.md +63 -63
  181. package/src/components/navigation-menu/NavigationMenu.astro +414 -414
  182. package/src/components/navigation-menu/NavigationMenuContent.astro +37 -37
  183. package/src/components/navigation-menu/NavigationMenuIndicator.astro +24 -24
  184. package/src/components/navigation-menu/NavigationMenuItem.astro +22 -22
  185. package/src/components/navigation-menu/NavigationMenuLink.astro +18 -18
  186. package/src/components/navigation-menu/NavigationMenuList.astro +21 -21
  187. package/src/components/navigation-menu/NavigationMenuPositioner.astro +44 -44
  188. package/src/components/navigation-menu/NavigationMenuTrigger.astro +30 -30
  189. package/src/components/navigation-menu/NavigationMenuViewport.astro +19 -19
  190. package/src/components/navigation-menu/index.ts +10 -10
  191. package/src/components/organisms/lightning-sidebar-nav/CHANGELOG.md +50 -0
  192. package/src/components/organisms/lightning-sidebar-nav/LightningSidebarNav.astro +176 -0
  193. package/src/components/organisms/lightning-sidebar-nav/SidebarNav.astro +50 -0
  194. package/src/components/organisms/lightning-sidebar-nav/SidebarNavGroup.astro +74 -0
  195. package/src/components/organisms/lightning-sidebar-nav/SidebarNavItem.astro +94 -0
  196. package/src/components/organisms/lightning-sidebar-nav/SidebarNavProBadge.astro +26 -0
  197. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSection.astro +71 -0
  198. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSkeleton.astro +67 -0
  199. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSubItem.astro +69 -0
  200. package/src/components/organisms/lightning-sidebar-nav/SidebarNavUsage.astro +78 -0
  201. package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceAvatar.astro +46 -0
  202. package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceSwitcher.astro +130 -0
  203. package/src/components/organisms/lightning-sidebar-nav/icons.ts +46 -0
  204. package/src/components/organisms/lightning-sidebar-nav/index.ts +18 -0
  205. package/src/components/organisms/lightning-sidebar-nav/types.ts +77 -0
  206. package/src/components/popover/CHANGELOG.md +20 -20
  207. package/src/components/popover/Popover.astro +211 -211
  208. package/src/components/popover/PopoverClose.astro +18 -18
  209. package/src/components/popover/PopoverContent.astro +50 -50
  210. package/src/components/popover/PopoverDescription.astro +18 -18
  211. package/src/components/popover/PopoverHeader.astro +18 -18
  212. package/src/components/popover/PopoverTitle.astro +18 -18
  213. package/src/components/popover/PopoverTrigger.astro +35 -35
  214. package/src/components/popover/index.ts +7 -7
  215. package/src/components/radio-group/CHANGELOG.md +31 -31
  216. package/src/components/radio-group/RadioGroup.astro +81 -81
  217. package/src/components/radio-group/RadioGroupItem.astro +51 -51
  218. package/src/components/radio-group/index.ts +3 -3
  219. package/src/components/select/CHANGELOG.md +39 -39
  220. package/src/components/select/Select.astro +373 -373
  221. package/src/components/select/SelectContent.astro +91 -91
  222. package/src/components/select/SelectGroup.astro +19 -19
  223. package/src/components/select/SelectItem.astro +48 -48
  224. package/src/components/select/SelectLabel.astro +18 -18
  225. package/src/components/select/SelectSeparator.astro +17 -17
  226. package/src/components/select/SelectTrigger.astro +34 -34
  227. package/src/components/select/SelectValue.astro +22 -22
  228. package/src/components/select/index.ts +8 -8
  229. package/src/components/separator/CHANGELOG.md +5 -5
  230. package/src/components/separator/Separator.astro +60 -60
  231. package/src/components/separator/index.ts +2 -2
  232. package/src/components/skeleton/CHANGELOG.md +5 -5
  233. package/src/components/skeleton/Skeleton.astro +121 -121
  234. package/src/components/skeleton/index.ts +1 -1
  235. package/src/components/slider/CHANGELOG.md +5 -5
  236. package/src/components/slider/Slider.astro +198 -198
  237. package/src/components/slider/index.ts +1 -1
  238. package/src/components/spinner/CHANGELOG.md +18 -18
  239. package/src/components/spinner/Spinner.astro +135 -135
  240. package/src/components/spinner/index.ts +1 -1
  241. package/src/components/sticky-surface/CHANGELOG.md +5 -5
  242. package/src/components/sticky-surface/StickySurface.astro +152 -152
  243. package/src/components/sticky-surface/index.ts +2 -2
  244. package/src/components/switch/CHANGELOG.md +29 -29
  245. package/src/components/switch/Switch.astro +106 -106
  246. package/src/components/switch/index.ts +1 -1
  247. package/src/components/table/CHANGELOG.md +24 -24
  248. package/src/components/table/Table.astro +358 -251
  249. package/src/components/table/TableBody.astro +17 -18
  250. package/src/components/table/TableBulkToolbar.astro +37 -0
  251. package/src/components/table/TableCaption.astro +17 -17
  252. package/src/components/table/TableCell.astro +45 -21
  253. package/src/components/table/TableCellText.astro +17 -0
  254. package/src/components/table/TableColumnMenu.astro +50 -0
  255. package/src/components/table/TableEditableCell.astro +287 -0
  256. package/src/components/table/TableEmpty.astro +17 -0
  257. package/src/components/table/TableFolderCell.astro +38 -0
  258. package/src/components/table/TableFooter.astro +21 -21
  259. package/src/components/table/TableHead.astro +90 -21
  260. package/src/components/table/TableHeader.astro +17 -17
  261. package/src/components/table/TablePagination.astro +57 -0
  262. package/src/components/table/TableRow.astro +52 -21
  263. package/src/components/table/TableSelectAllBanner.astro +34 -0
  264. package/src/components/table/TableSelectCell.astro +50 -0
  265. package/src/components/table/TableSkeletonRow.astro +21 -0
  266. package/src/components/table/index.ts +19 -9
  267. package/src/components/table/table-cell-variants.ts +29 -0
  268. package/src/components/tabs/CHANGELOG.md +5 -5
  269. package/src/components/tabs/Tabs.astro +306 -306
  270. package/src/components/tabs/TabsContent.astro +47 -47
  271. package/src/components/tabs/TabsList.astro +69 -69
  272. package/src/components/tabs/TabsTrigger.astro +40 -40
  273. package/src/components/tabs/index.ts +6 -6
  274. package/src/components/textarea/CHANGELOG.md +22 -22
  275. package/src/components/textarea/Textarea.astro +58 -58
  276. package/src/components/textarea/index.ts +2 -2
  277. package/src/components/toggle/CHANGELOG.md +23 -23
  278. package/src/components/toggle/Toggle.astro +150 -150
  279. package/src/components/toggle/index.ts +1 -1
  280. package/src/components/toggle-group/CHANGELOG.md +18 -18
  281. package/src/components/toggle-group/ToggleGroup.astro +236 -236
  282. package/src/components/toggle-group/ToggleGroupItem.astro +48 -48
  283. package/src/components/toggle-group/index.ts +2 -2
  284. package/src/components/tooltip/CHANGELOG.md +22 -22
  285. package/src/components/tooltip/Tooltip.astro +357 -357
  286. package/src/components/tooltip/TooltipContent.astro +85 -85
  287. package/src/components/tooltip/TooltipTrigger.astro +34 -34
  288. package/src/components/tooltip/index.ts +3 -3
  289. package/src/lib/table-controller.ts +1090 -0
  290. package/src/lib/toggle-group-controller.ts +113 -113
  291. package/src/lib/toggle-shared.ts +27 -27
  292. package/src/lib/utils.ts +6 -6
  293. package/src/styles/globals.css +209 -177
@@ -1,113 +1,113 @@
1
- import {
2
- createToggleGroup as createBaseToggleGroup,
3
- type ToggleGroupController,
4
- type ToggleGroupOptions,
5
- } from "@data-slot/toggle-group";
6
- import {
7
- TOGGLE_SIZES,
8
- TOGGLE_VARIANTS,
9
- toggleVariants,
10
- type ToggleSize,
11
- type ToggleVariant,
12
- } from "./toggle-shared";
13
-
14
- type ToggleOrientation = "horizontal" | "vertical";
15
-
16
- interface ToggleGroupControllerOptions extends ToggleGroupOptions {
17
- size?: ToggleSize;
18
- spacing?: number;
19
- variant?: ToggleVariant;
20
- }
21
-
22
- function parseOrientation(value: string | undefined): ToggleOrientation {
23
- return value === "vertical" ? "vertical" : "horizontal";
24
- }
25
-
26
- function parseVariant(value: string | undefined): ToggleVariant | null {
27
- return TOGGLE_VARIANTS.includes(value as ToggleVariant)
28
- ? (value as ToggleVariant)
29
- : null;
30
- }
31
-
32
- function parseSize(value: string | undefined): ToggleSize | null {
33
- return TOGGLE_SIZES.includes(value as ToggleSize)
34
- ? (value as ToggleSize)
35
- : null;
36
- }
37
-
38
- function parseSpacing(value: string | undefined): number {
39
- const nextValue = Number(value);
40
- return Number.isFinite(nextValue) ? nextValue : 0;
41
- }
42
-
43
- function setPresenceAttribute(
44
- element: HTMLElement,
45
- attribute: string,
46
- active: boolean,
47
- ) {
48
- if (active) {
49
- element.setAttribute(attribute, "");
50
- return;
51
- }
52
-
53
- element.removeAttribute(attribute);
54
- }
55
-
56
- function syncRootAttributes(
57
- root: HTMLElement,
58
- orientation: ToggleOrientation,
59
- spacing: number,
60
- ) {
61
- root.dataset.orientation = orientation;
62
- root.dataset.spacing = String(spacing);
63
- root.style.setProperty("--gap", String(spacing));
64
- setPresenceAttribute(root, "data-horizontal", orientation === "horizontal");
65
- setPresenceAttribute(root, "data-vertical", orientation === "vertical");
66
- }
67
-
68
- function syncItemAttributes(
69
- item: HTMLElement,
70
- variant: ToggleVariant,
71
- size: ToggleSize,
72
- spacing: number,
73
- ) {
74
- const itemVariant = parseVariant(item.dataset.variant) ?? variant;
75
- const itemSize = parseSize(item.dataset.size) ?? size;
76
-
77
- item.dataset.variant = itemVariant;
78
- item.dataset.size = itemSize;
79
- item.dataset.spacing = String(spacing);
80
-
81
- for (const className of toggleVariants({
82
- variant: itemVariant,
83
- size: itemSize,
84
- }).split(/\s+/)) {
85
- if (className) {
86
- item.classList.add(className);
87
- }
88
- }
89
- }
90
-
91
- export function createToggleGroup(
92
- root: HTMLElement,
93
- options?: ToggleGroupControllerOptions,
94
- ): ToggleGroupController {
95
- const orientation = parseOrientation(
96
- options?.orientation ?? root.dataset.orientation,
97
- );
98
- const variant = parseVariant(options?.variant ?? root.dataset.variant) ?? "default";
99
- const size = parseSize(options?.size ?? root.dataset.size) ?? "default";
100
- const spacing =
101
- options?.spacing ?? parseSpacing(root.dataset.spacing ?? root.style.getPropertyValue("--gap"));
102
-
103
- syncRootAttributes(root, orientation, spacing);
104
-
105
- root
106
- .querySelectorAll<HTMLElement>('[data-slot="toggle-group-item"]')
107
- .forEach((item) => syncItemAttributes(item, variant, size, spacing));
108
-
109
- return createBaseToggleGroup(root, {
110
- ...options,
111
- orientation,
112
- });
113
- }
1
+ import {
2
+ createToggleGroup as createBaseToggleGroup,
3
+ type ToggleGroupController,
4
+ type ToggleGroupOptions,
5
+ } from "@data-slot/toggle-group";
6
+ import {
7
+ TOGGLE_SIZES,
8
+ TOGGLE_VARIANTS,
9
+ toggleVariants,
10
+ type ToggleSize,
11
+ type ToggleVariant,
12
+ } from "./toggle-shared";
13
+
14
+ type ToggleOrientation = "horizontal" | "vertical";
15
+
16
+ interface ToggleGroupControllerOptions extends ToggleGroupOptions {
17
+ size?: ToggleSize;
18
+ spacing?: number;
19
+ variant?: ToggleVariant;
20
+ }
21
+
22
+ function parseOrientation(value: string | undefined): ToggleOrientation {
23
+ return value === "vertical" ? "vertical" : "horizontal";
24
+ }
25
+
26
+ function parseVariant(value: string | undefined): ToggleVariant | null {
27
+ return TOGGLE_VARIANTS.includes(value as ToggleVariant)
28
+ ? (value as ToggleVariant)
29
+ : null;
30
+ }
31
+
32
+ function parseSize(value: string | undefined): ToggleSize | null {
33
+ return TOGGLE_SIZES.includes(value as ToggleSize)
34
+ ? (value as ToggleSize)
35
+ : null;
36
+ }
37
+
38
+ function parseSpacing(value: string | undefined): number {
39
+ const nextValue = Number(value);
40
+ return Number.isFinite(nextValue) ? nextValue : 0;
41
+ }
42
+
43
+ function setPresenceAttribute(
44
+ element: HTMLElement,
45
+ attribute: string,
46
+ active: boolean,
47
+ ) {
48
+ if (active) {
49
+ element.setAttribute(attribute, "");
50
+ return;
51
+ }
52
+
53
+ element.removeAttribute(attribute);
54
+ }
55
+
56
+ function syncRootAttributes(
57
+ root: HTMLElement,
58
+ orientation: ToggleOrientation,
59
+ spacing: number,
60
+ ) {
61
+ root.dataset.orientation = orientation;
62
+ root.dataset.spacing = String(spacing);
63
+ root.style.setProperty("--gap", String(spacing));
64
+ setPresenceAttribute(root, "data-horizontal", orientation === "horizontal");
65
+ setPresenceAttribute(root, "data-vertical", orientation === "vertical");
66
+ }
67
+
68
+ function syncItemAttributes(
69
+ item: HTMLElement,
70
+ variant: ToggleVariant,
71
+ size: ToggleSize,
72
+ spacing: number,
73
+ ) {
74
+ const itemVariant = parseVariant(item.dataset.variant) ?? variant;
75
+ const itemSize = parseSize(item.dataset.size) ?? size;
76
+
77
+ item.dataset.variant = itemVariant;
78
+ item.dataset.size = itemSize;
79
+ item.dataset.spacing = String(spacing);
80
+
81
+ for (const className of toggleVariants({
82
+ variant: itemVariant,
83
+ size: itemSize,
84
+ }).split(/\s+/)) {
85
+ if (className) {
86
+ item.classList.add(className);
87
+ }
88
+ }
89
+ }
90
+
91
+ export function createToggleGroup(
92
+ root: HTMLElement,
93
+ options?: ToggleGroupControllerOptions,
94
+ ): ToggleGroupController {
95
+ const orientation = parseOrientation(
96
+ options?.orientation ?? root.dataset.orientation,
97
+ );
98
+ const variant = parseVariant(options?.variant ?? root.dataset.variant) ?? "default";
99
+ const size = parseSize(options?.size ?? root.dataset.size) ?? "default";
100
+ const spacing =
101
+ options?.spacing ?? parseSpacing(root.dataset.spacing ?? root.style.getPropertyValue("--gap"));
102
+
103
+ syncRootAttributes(root, orientation, spacing);
104
+
105
+ root
106
+ .querySelectorAll<HTMLElement>('[data-slot="toggle-group-item"]')
107
+ .forEach((item) => syncItemAttributes(item, variant, size, spacing));
108
+
109
+ return createBaseToggleGroup(root, {
110
+ ...options,
111
+ orientation,
112
+ });
113
+ }
@@ -1,27 +1,27 @@
1
- import { cva, type VariantProps } from "class-variance-authority";
2
-
3
- export const TOGGLE_VARIANTS = ["default", "outline"] as const;
4
- export const TOGGLE_SIZES = ["xs", "default", "sm", "lg"] as const;
5
-
6
- export type ToggleVariant = (typeof TOGGLE_VARIANTS)[number];
7
- export type ToggleSize = (typeof TOGGLE_SIZES)[number];
8
-
9
- export const toggleVariants = cva(
10
- "hover:text-foreground aria-pressed:bg-background-hover focus-visible:border-ring focus-visible:ring-ring aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive gap-1 rounded-md text-sm font-medium transition-[color,box-shadow] [&_svg:not([class*='size-'])]:size-4 group/toggle inline-flex items-center justify-center whitespace-nowrap outline-none hover:bg-background-hover focus-visible:ring-[3px] disabled:pointer-events-none disabled:bg-muted disabled:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0",
11
- {
12
- variants: {
13
- variant: {
14
- default: "bg-transparent",
15
- outline: "border-input hover:bg-background-hover border bg-transparent shadow-xs",
16
- },
17
- size: {
18
- xs: "h-7 min-w-7 px-1",
19
- default: "h-9 min-w-9 px-2",
20
- sm: "h-8 min-w-8 px-1.5",
21
- lg: "h-10 min-w-10 px-2.5",
22
- },
23
- },
24
- },
25
- );
26
-
27
- export type ToggleVariantProps = VariantProps<typeof toggleVariants>;
1
+ import { cva, type VariantProps } from "class-variance-authority";
2
+
3
+ export const TOGGLE_VARIANTS = ["default", "outline"] as const;
4
+ export const TOGGLE_SIZES = ["xs", "default", "sm", "lg"] as const;
5
+
6
+ export type ToggleVariant = (typeof TOGGLE_VARIANTS)[number];
7
+ export type ToggleSize = (typeof TOGGLE_SIZES)[number];
8
+
9
+ export const toggleVariants = cva(
10
+ "hover:text-foreground aria-pressed:bg-background-hover focus-visible:border-ring focus-visible:ring-ring aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive gap-1 rounded-md text-sm font-medium transition-[color,box-shadow] [&_svg:not([class*='size-'])]:size-4 group/toggle inline-flex items-center justify-center whitespace-nowrap outline-none hover:bg-background-hover focus-visible:ring-[3px] disabled:pointer-events-none disabled:bg-muted disabled:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0",
11
+ {
12
+ variants: {
13
+ variant: {
14
+ default: "bg-transparent",
15
+ outline: "border-input hover:bg-background-hover border bg-transparent shadow-xs",
16
+ },
17
+ size: {
18
+ xs: "h-7 min-w-7 px-1",
19
+ default: "h-9 min-w-9 px-2",
20
+ sm: "h-8 min-w-8 px-1.5",
21
+ lg: "h-10 min-w-10 px-2.5",
22
+ },
23
+ },
24
+ },
25
+ );
26
+
27
+ export type ToggleVariantProps = VariantProps<typeof toggleVariants>;
package/src/lib/utils.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { clsx, type ClassValue } from "clsx"
2
- import { twMerge } from "tailwind-merge"
3
-
4
- export function cn(...inputs: ClassValue[]) {
5
- return twMerge(clsx(inputs))
6
- }
1
+ import { clsx, type ClassValue } from "clsx"
2
+ import { twMerge } from "tailwind-merge"
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }