@cl-light-ds/ui 0.2.0 → 0.3.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 (283) hide show
  1. package/README.md +45 -45
  2. package/package.json +1 -1
  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/card/CHANGELOG.md +162 -119
  40. package/src/components/card/Card.astro +197 -182
  41. package/src/components/card/CardAction.astro +26 -26
  42. package/src/components/card/CardContent.astro +28 -28
  43. package/src/components/card/CardDescription.astro +28 -28
  44. package/src/components/card/CardFooter.astro +24 -24
  45. package/src/components/card/CardHeader.astro +30 -30
  46. package/src/components/card/CardMedia.astro +27 -27
  47. package/src/components/card/CardMediaActions.astro +21 -0
  48. package/src/components/card/CardMediaSelect.astro +21 -0
  49. package/src/components/card/CardOverlay.astro +32 -32
  50. package/src/components/card/CardTitle.astro +21 -21
  51. package/src/components/card/index.ts +12 -10
  52. package/src/components/carousel/CHANGELOG.md +5 -5
  53. package/src/components/carousel/Carousel.astro +106 -106
  54. package/src/components/carousel/CarouselSlide.astro +22 -22
  55. package/src/components/carousel/index.ts +3 -3
  56. package/src/components/checkbox/CHANGELOG.md +58 -58
  57. package/src/components/checkbox/Checkbox.astro +159 -159
  58. package/src/components/checkbox/index.ts +1 -1
  59. package/src/components/collapsible/CHANGELOG.md +5 -5
  60. package/src/components/collapsible/Collapsible.astro +202 -202
  61. package/src/components/collapsible/CollapsibleContent.astro +36 -36
  62. package/src/components/collapsible/CollapsibleTrigger.astro +34 -34
  63. package/src/components/collapsible/index.ts +4 -4
  64. package/src/components/combobox/CHANGELOG.md +27 -27
  65. package/src/components/combobox/Combobox.astro +365 -365
  66. package/src/components/combobox/ComboboxContent.astro +37 -37
  67. package/src/components/combobox/ComboboxEmpty.astro +18 -18
  68. package/src/components/combobox/ComboboxGroup.astro +19 -19
  69. package/src/components/combobox/ComboboxInput.astro +74 -74
  70. package/src/components/combobox/ComboboxItem.astro +39 -39
  71. package/src/components/combobox/ComboboxLabel.astro +18 -18
  72. package/src/components/combobox/ComboboxList.astro +21 -21
  73. package/src/components/combobox/ComboboxSeparator.astro +17 -17
  74. package/src/components/combobox/ComboboxTrigger.astro +30 -30
  75. package/src/components/combobox/ComboboxValue.astro +22 -22
  76. package/src/components/combobox/index.ts +11 -11
  77. package/src/components/date/CHANGELOG.md +18 -18
  78. package/src/components/date/Date.astro +137 -137
  79. package/src/components/date/index.ts +2 -2
  80. package/src/components/dialog/CHANGELOG.md +39 -39
  81. package/src/components/dialog/Dialog.astro +196 -196
  82. package/src/components/dialog/DialogClose.astro +23 -23
  83. package/src/components/dialog/DialogContent.astro +42 -42
  84. package/src/components/dialog/DialogDescription.astro +18 -18
  85. package/src/components/dialog/DialogFooter.astro +18 -18
  86. package/src/components/dialog/DialogHeader.astro +18 -18
  87. package/src/components/dialog/DialogOverlay.astro +19 -19
  88. package/src/components/dialog/DialogTitle.astro +18 -18
  89. package/src/components/dialog/DialogTrigger.astro +37 -37
  90. package/src/components/dialog/index.ts +9 -9
  91. package/src/components/dropdown-menu/CHANGELOG.md +194 -194
  92. package/src/components/dropdown-menu/DropdownMenu.astro +226 -226
  93. package/src/components/dropdown-menu/DropdownMenuCheckboxItem.astro +114 -114
  94. package/src/components/dropdown-menu/DropdownMenuContent.astro +42 -42
  95. package/src/components/dropdown-menu/DropdownMenuGroup.astro +19 -19
  96. package/src/components/dropdown-menu/DropdownMenuItem.astro +220 -220
  97. package/src/components/dropdown-menu/DropdownMenuItemContent.astro +79 -79
  98. package/src/components/dropdown-menu/DropdownMenuLabel.astro +20 -20
  99. package/src/components/dropdown-menu/DropdownMenuPortal.astro +13 -13
  100. package/src/components/dropdown-menu/DropdownMenuRadioGroup.astro +13 -13
  101. package/src/components/dropdown-menu/DropdownMenuRadioItem.astro +101 -101
  102. package/src/components/dropdown-menu/DropdownMenuSeparator.astro +18 -18
  103. package/src/components/dropdown-menu/DropdownMenuShortcut.astro +18 -18
  104. package/src/components/dropdown-menu/DropdownMenuTrigger.astro +49 -49
  105. package/src/components/dropdown-menu/dropdown-menu-item-variants.ts +24 -24
  106. package/src/components/dropdown-menu/index.ts +12 -12
  107. package/src/components/field/CHANGELOG.md +33 -33
  108. package/src/components/field/Field.astro +664 -664
  109. package/src/components/field/FieldContent.astro +20 -20
  110. package/src/components/field/FieldDescription.astro +22 -22
  111. package/src/components/field/FieldError.astro +51 -51
  112. package/src/components/field/FieldGroup.astro +20 -20
  113. package/src/components/field/FieldLabel.astro +22 -22
  114. package/src/components/field/FieldLegend.astro +23 -23
  115. package/src/components/field/FieldSeparator.astro +30 -30
  116. package/src/components/field/FieldSet.astro +20 -20
  117. package/src/components/field/FieldTitle.astro +20 -20
  118. package/src/components/field/index.ts +10 -10
  119. package/src/components/hover-card/CHANGELOG.md +20 -20
  120. package/src/components/hover-card/HoverCard.astro +235 -235
  121. package/src/components/hover-card/HoverCardContent.astro +54 -54
  122. package/src/components/hover-card/HoverCardTrigger.astro +38 -38
  123. package/src/components/hover-card/index.ts +3 -3
  124. package/src/components/input/CHANGELOG.md +29 -29
  125. package/src/components/input/Input.astro +130 -130
  126. package/src/components/input/index.ts +2 -2
  127. package/src/components/input-group/CHANGELOG.md +49 -49
  128. package/src/components/input-group/InputGroup.astro +135 -135
  129. package/src/components/input-group/InputGroupAddon.astro +49 -49
  130. package/src/components/input-group/InputGroupButton.astro +58 -58
  131. package/src/components/input-group/InputGroupInput.astro +18 -18
  132. package/src/components/input-group/InputGroupText.astro +21 -21
  133. package/src/components/input-group/InputGroupTextarea.astro +17 -17
  134. package/src/components/input-group/controlClasses.ts +2 -2
  135. package/src/components/input-group/index.ts +6 -6
  136. package/src/components/item/CHANGELOG.md +27 -27
  137. package/src/components/item/Item.astro +122 -122
  138. package/src/components/item/ItemActions.astro +21 -21
  139. package/src/components/item/ItemContent.astro +25 -25
  140. package/src/components/item/ItemDescription.astro +25 -25
  141. package/src/components/item/ItemFooter.astro +24 -24
  142. package/src/components/item/ItemGroup.astro +24 -24
  143. package/src/components/item/ItemHeader.astro +24 -24
  144. package/src/components/item/ItemMedia.astro +47 -47
  145. package/src/components/item/ItemSeparator.astro +21 -21
  146. package/src/components/item/ItemTitle.astro +25 -25
  147. package/src/components/item/index.ts +10 -10
  148. package/src/components/kbd/CHANGELOG.md +5 -5
  149. package/src/components/kbd/Kbd.astro +145 -145
  150. package/src/components/kbd/KbdGroup.astro +55 -55
  151. package/src/components/kbd/index.ts +2 -2
  152. package/src/components/label/CHANGELOG.md +28 -28
  153. package/src/components/label/Label.astro +97 -97
  154. package/src/components/label/index.ts +2 -2
  155. package/src/components/link-group/CHANGELOG.md +75 -75
  156. package/src/components/link-group/LinkGroup.astro +67 -67
  157. package/src/components/link-group/LinkGroupItem.astro +32 -32
  158. package/src/components/link-group/LinkGroupList.astro +25 -25
  159. package/src/components/link-group/LinkGroupTitle.astro +22 -22
  160. package/src/components/link-group/index.ts +5 -5
  161. package/src/components/link-group/link-group-list-variants.ts +15 -15
  162. package/src/components/marquee/CHANGELOG.md +5 -5
  163. package/src/components/marquee/Marquee.astro +119 -119
  164. package/src/components/marquee/index.ts +2 -2
  165. package/src/components/native-select/CHANGELOG.md +5 -5
  166. package/src/components/native-select/NativeSelect.astro +125 -125
  167. package/src/components/native-select/NativeSelectOptGroup.astro +14 -14
  168. package/src/components/native-select/NativeSelectOption.astro +9 -9
  169. package/src/components/native-select/index.ts +3 -3
  170. package/src/components/navigation-menu/CHANGELOG.md +63 -63
  171. package/src/components/navigation-menu/NavigationMenu.astro +414 -414
  172. package/src/components/navigation-menu/NavigationMenuContent.astro +37 -37
  173. package/src/components/navigation-menu/NavigationMenuIndicator.astro +24 -24
  174. package/src/components/navigation-menu/NavigationMenuItem.astro +22 -22
  175. package/src/components/navigation-menu/NavigationMenuLink.astro +18 -18
  176. package/src/components/navigation-menu/NavigationMenuList.astro +21 -21
  177. package/src/components/navigation-menu/NavigationMenuPositioner.astro +44 -44
  178. package/src/components/navigation-menu/NavigationMenuTrigger.astro +30 -30
  179. package/src/components/navigation-menu/NavigationMenuViewport.astro +19 -19
  180. package/src/components/navigation-menu/index.ts +10 -10
  181. package/src/components/organisms/lightning-sidebar-nav/CHANGELOG.md +50 -0
  182. package/src/components/organisms/lightning-sidebar-nav/LightningSidebarNav.astro +176 -0
  183. package/src/components/organisms/lightning-sidebar-nav/SidebarNav.astro +50 -0
  184. package/src/components/organisms/lightning-sidebar-nav/SidebarNavGroup.astro +74 -0
  185. package/src/components/organisms/lightning-sidebar-nav/SidebarNavItem.astro +94 -0
  186. package/src/components/organisms/lightning-sidebar-nav/SidebarNavProBadge.astro +26 -0
  187. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSection.astro +71 -0
  188. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSkeleton.astro +67 -0
  189. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSubItem.astro +69 -0
  190. package/src/components/organisms/lightning-sidebar-nav/SidebarNavUsage.astro +78 -0
  191. package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceAvatar.astro +46 -0
  192. package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceSwitcher.astro +130 -0
  193. package/src/components/organisms/lightning-sidebar-nav/icons.ts +46 -0
  194. package/src/components/organisms/lightning-sidebar-nav/index.ts +18 -0
  195. package/src/components/organisms/lightning-sidebar-nav/types.ts +77 -0
  196. package/src/components/popover/CHANGELOG.md +20 -20
  197. package/src/components/popover/Popover.astro +211 -211
  198. package/src/components/popover/PopoverClose.astro +18 -18
  199. package/src/components/popover/PopoverContent.astro +50 -50
  200. package/src/components/popover/PopoverDescription.astro +18 -18
  201. package/src/components/popover/PopoverHeader.astro +18 -18
  202. package/src/components/popover/PopoverTitle.astro +18 -18
  203. package/src/components/popover/PopoverTrigger.astro +35 -35
  204. package/src/components/popover/index.ts +7 -7
  205. package/src/components/radio-group/CHANGELOG.md +31 -31
  206. package/src/components/radio-group/RadioGroup.astro +81 -81
  207. package/src/components/radio-group/RadioGroupItem.astro +51 -51
  208. package/src/components/radio-group/index.ts +3 -3
  209. package/src/components/select/CHANGELOG.md +39 -39
  210. package/src/components/select/Select.astro +373 -373
  211. package/src/components/select/SelectContent.astro +91 -91
  212. package/src/components/select/SelectGroup.astro +19 -19
  213. package/src/components/select/SelectItem.astro +48 -48
  214. package/src/components/select/SelectLabel.astro +18 -18
  215. package/src/components/select/SelectSeparator.astro +17 -17
  216. package/src/components/select/SelectTrigger.astro +34 -34
  217. package/src/components/select/SelectValue.astro +22 -22
  218. package/src/components/select/index.ts +8 -8
  219. package/src/components/separator/CHANGELOG.md +5 -5
  220. package/src/components/separator/Separator.astro +60 -60
  221. package/src/components/separator/index.ts +2 -2
  222. package/src/components/skeleton/CHANGELOG.md +5 -5
  223. package/src/components/skeleton/Skeleton.astro +121 -121
  224. package/src/components/skeleton/index.ts +1 -1
  225. package/src/components/slider/CHANGELOG.md +5 -5
  226. package/src/components/slider/Slider.astro +198 -198
  227. package/src/components/slider/index.ts +1 -1
  228. package/src/components/spinner/CHANGELOG.md +18 -18
  229. package/src/components/spinner/Spinner.astro +135 -135
  230. package/src/components/spinner/index.ts +1 -1
  231. package/src/components/sticky-surface/CHANGELOG.md +5 -5
  232. package/src/components/sticky-surface/StickySurface.astro +152 -152
  233. package/src/components/sticky-surface/index.ts +2 -2
  234. package/src/components/switch/CHANGELOG.md +29 -29
  235. package/src/components/switch/Switch.astro +106 -106
  236. package/src/components/switch/index.ts +1 -1
  237. package/src/components/table/CHANGELOG.md +24 -24
  238. package/src/components/table/Table.astro +358 -251
  239. package/src/components/table/TableBody.astro +17 -18
  240. package/src/components/table/TableBulkToolbar.astro +37 -0
  241. package/src/components/table/TableCaption.astro +17 -17
  242. package/src/components/table/TableCell.astro +45 -21
  243. package/src/components/table/TableCellText.astro +17 -0
  244. package/src/components/table/TableColumnMenu.astro +50 -0
  245. package/src/components/table/TableEditableCell.astro +287 -0
  246. package/src/components/table/TableEmpty.astro +17 -0
  247. package/src/components/table/TableFolderCell.astro +38 -0
  248. package/src/components/table/TableFooter.astro +21 -21
  249. package/src/components/table/TableHead.astro +90 -21
  250. package/src/components/table/TableHeader.astro +17 -17
  251. package/src/components/table/TablePagination.astro +57 -0
  252. package/src/components/table/TableRow.astro +52 -21
  253. package/src/components/table/TableSelectAllBanner.astro +34 -0
  254. package/src/components/table/TableSelectCell.astro +50 -0
  255. package/src/components/table/TableSkeletonRow.astro +21 -0
  256. package/src/components/table/index.ts +19 -9
  257. package/src/components/table/table-cell-variants.ts +29 -0
  258. package/src/components/tabs/CHANGELOG.md +5 -5
  259. package/src/components/tabs/Tabs.astro +306 -306
  260. package/src/components/tabs/TabsContent.astro +47 -47
  261. package/src/components/tabs/TabsList.astro +69 -69
  262. package/src/components/tabs/TabsTrigger.astro +40 -40
  263. package/src/components/tabs/index.ts +6 -6
  264. package/src/components/textarea/CHANGELOG.md +22 -22
  265. package/src/components/textarea/Textarea.astro +58 -58
  266. package/src/components/textarea/index.ts +2 -2
  267. package/src/components/toggle/CHANGELOG.md +23 -23
  268. package/src/components/toggle/Toggle.astro +150 -150
  269. package/src/components/toggle/index.ts +1 -1
  270. package/src/components/toggle-group/CHANGELOG.md +18 -18
  271. package/src/components/toggle-group/ToggleGroup.astro +236 -236
  272. package/src/components/toggle-group/ToggleGroupItem.astro +48 -48
  273. package/src/components/toggle-group/index.ts +2 -2
  274. package/src/components/tooltip/CHANGELOG.md +22 -22
  275. package/src/components/tooltip/Tooltip.astro +357 -357
  276. package/src/components/tooltip/TooltipContent.astro +85 -85
  277. package/src/components/tooltip/TooltipTrigger.astro +34 -34
  278. package/src/components/tooltip/index.ts +3 -3
  279. package/src/lib/table-controller.ts +1090 -0
  280. package/src/lib/toggle-group-controller.ts +113 -113
  281. package/src/lib/toggle-shared.ts +27 -27
  282. package/src/lib/utils.ts +6 -6
  283. package/src/styles/globals.css +197 -177
@@ -1,135 +1,135 @@
1
- ---
2
- /**
3
- * @component InputGroup
4
- * @title Input Group
5
- * @description An input field with attached addons like icons, buttons, or text labels.
6
- * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=2282-6923
7
- *
8
- * @preview
9
- *
10
- * <div class="grid w-full max-w-sm gap-6">
11
- * <InputGroup>
12
- * <InputGroupInput placeholder="Search..." />
13
- * <InputGroupAddon>
14
- * <SearchIcon />
15
- * </InputGroupAddon>
16
- * <InputGroupAddon align="inline-end">12 results</InputGroupAddon>
17
- * </InputGroup>
18
- *
19
- * <InputGroup>
20
- * <InputGroupInput placeholder="example.com" />
21
- * <InputGroupAddon>
22
- * <InputGroupText>https://</InputGroupText>
23
- * </InputGroupAddon>
24
- * <InputGroupAddon align="inline-end">
25
- * <InputGroupButton size="xs">Check</InputGroupButton>
26
- * </InputGroupAddon>
27
- * </InputGroup>
28
- *
29
- * <InputGroup>
30
- * <InputGroupTextarea placeholder="Ask, Search or Chat..." />
31
- * <InputGroupAddon align="block-end">
32
- * <InputGroupButton size="icon-sm" class="rounded-full">
33
- * <PlusIcon />
34
- * </InputGroupButton>
35
- * <InputGroupButton variant="ghost">Auto</InputGroupButton>
36
- * <InputGroupText class="ml-auto">52% used</InputGroupText>
37
- * <Separator orientation="vertical" class="!h-4" />
38
- * <InputGroupButton size="icon-sm" variant="default" class="rounded-full">
39
- * <ArrowUpIcon />
40
- * <span class="sr-only">Send</span>
41
- * </InputGroupButton>
42
- * </InputGroupAddon>
43
- * </InputGroup>
44
- * </div>
45
- *
46
- * @usage
47
- *
48
- * ```astro nocollapse
49
- * ---
50
- * import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton, InputGroupText } from '@bejamas/ui/components/input-group';
51
- * ---
52
- *
53
- * <InputGroup>
54
- * <InputGroupInput placeholder="Search..." />
55
- * <InputGroupAddon><SearchIcon /></InputGroupAddon>
56
- * </InputGroup>
57
- * ```
58
- *
59
- * @examples
60
- *
61
- * ### Sizes
62
- *
63
- * <div class="grid w-full max-w-sm gap-3">
64
- * <InputGroup size="sm">
65
- * <InputGroupInput placeholder="Small (h-8)" />
66
- * </InputGroup>
67
- * <InputGroup>
68
- * <InputGroupInput placeholder="Default (h-9)" />
69
- * </InputGroup>
70
- * <InputGroup size="lg">
71
- * <InputGroupInput placeholder="Large (h-10)" />
72
- * </InputGroup>
73
- * </div>
74
- *
75
- * @api
76
- *
77
- * | Prop | Type | Default |
78
- * | --- | --- | --- |
79
- * | `size` | `"sm" \| "default" \| "lg"` | `"default"` |
80
- */
81
- import type { HTMLAttributes } from "astro/types";
82
- import { cn } from "@cl-light-ds/ui/lib/utils";
83
-
84
- interface Props extends HTMLAttributes<"div"> {
85
- size?: "sm" | "default" | "lg";
86
- class?: string;
87
- }
88
-
89
- const {
90
- size = "default",
91
- class: className = "",
92
- ...rest
93
- } = Astro.props as Props;
94
- ---
95
-
96
- <div
97
- {...rest}
98
- role="group"
99
- data-slot="input-group"
100
- data-size={size}
101
- class={cn(
102
- "group/input-group border-input bg-card has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 data-[size=sm]:h-8 data-[size=default]:h-9 data-[size=lg]:h-10 rounded-lg border shadow-xs transition-[color,box-shadow] in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto! has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto! has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5 relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto!",
103
- className,
104
- )}
105
- >
106
- <slot />
107
- </div>
108
-
109
- <script is:inline type="module">
110
- // Focus the nearest input when clicking on addons (unless clicking a button)
111
- document.addEventListener("click", (e) => {
112
- const addon = e.target.closest("[data-slot='input-group-addon']");
113
- if (!addon) return;
114
- if (e.target.closest("button")) return;
115
- const root = addon.closest("[data-slot='input-group']");
116
- if (!root) return;
117
- const input = root.querySelector(
118
- "[data-input-group-control], [data-slot='input-group-control']",
119
- );
120
- input?.focus();
121
- });
122
- // Disabled styling passthrough when any control is disabled
123
- document.querySelectorAll("[data-slot='input-group']").forEach((group) => {
124
- const updateDisabled = () => {
125
- const ctrl = group.querySelector(
126
- "[data-input-group-control], [data-slot='input-group-control']",
127
- );
128
- group.dataset.disabled = ctrl?.hasAttribute("disabled")
129
- ? "true"
130
- : "false";
131
- };
132
- updateDisabled();
133
- group.addEventListener("change", updateDisabled, { capture: true });
134
- });
135
- </script>
1
+ ---
2
+ /**
3
+ * @component InputGroup
4
+ * @title Input Group
5
+ * @description An input field with attached addons like icons, buttons, or text labels.
6
+ * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=2282-6923
7
+ *
8
+ * @preview
9
+ *
10
+ * <div class="grid w-full max-w-sm gap-6">
11
+ * <InputGroup>
12
+ * <InputGroupInput placeholder="Search..." />
13
+ * <InputGroupAddon>
14
+ * <SearchIcon />
15
+ * </InputGroupAddon>
16
+ * <InputGroupAddon align="inline-end">12 results</InputGroupAddon>
17
+ * </InputGroup>
18
+ *
19
+ * <InputGroup>
20
+ * <InputGroupInput placeholder="example.com" />
21
+ * <InputGroupAddon>
22
+ * <InputGroupText>https://</InputGroupText>
23
+ * </InputGroupAddon>
24
+ * <InputGroupAddon align="inline-end">
25
+ * <InputGroupButton size="xs">Check</InputGroupButton>
26
+ * </InputGroupAddon>
27
+ * </InputGroup>
28
+ *
29
+ * <InputGroup>
30
+ * <InputGroupTextarea placeholder="Ask, Search or Chat..." />
31
+ * <InputGroupAddon align="block-end">
32
+ * <InputGroupButton size="icon-sm" class="rounded-full">
33
+ * <PlusIcon />
34
+ * </InputGroupButton>
35
+ * <InputGroupButton variant="ghost">Auto</InputGroupButton>
36
+ * <InputGroupText class="ml-auto">52% used</InputGroupText>
37
+ * <Separator orientation="vertical" class="!h-4" />
38
+ * <InputGroupButton size="icon-sm" variant="default" class="rounded-full">
39
+ * <ArrowUpIcon />
40
+ * <span class="sr-only">Send</span>
41
+ * </InputGroupButton>
42
+ * </InputGroupAddon>
43
+ * </InputGroup>
44
+ * </div>
45
+ *
46
+ * @usage
47
+ *
48
+ * ```astro nocollapse
49
+ * ---
50
+ * import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton, InputGroupText } from '@bejamas/ui/components/input-group';
51
+ * ---
52
+ *
53
+ * <InputGroup>
54
+ * <InputGroupInput placeholder="Search..." />
55
+ * <InputGroupAddon><SearchIcon /></InputGroupAddon>
56
+ * </InputGroup>
57
+ * ```
58
+ *
59
+ * @examples
60
+ *
61
+ * ### Sizes
62
+ *
63
+ * <div class="grid w-full max-w-sm gap-3">
64
+ * <InputGroup size="sm">
65
+ * <InputGroupInput placeholder="Small (h-8)" />
66
+ * </InputGroup>
67
+ * <InputGroup>
68
+ * <InputGroupInput placeholder="Default (h-9)" />
69
+ * </InputGroup>
70
+ * <InputGroup size="lg">
71
+ * <InputGroupInput placeholder="Large (h-10)" />
72
+ * </InputGroup>
73
+ * </div>
74
+ *
75
+ * @api
76
+ *
77
+ * | Prop | Type | Default |
78
+ * | --- | --- | --- |
79
+ * | `size` | `"sm" \| "default" \| "lg"` | `"default"` |
80
+ */
81
+ import type { HTMLAttributes } from "astro/types";
82
+ import { cn } from "@cl-light-ds/ui/lib/utils";
83
+
84
+ interface Props extends HTMLAttributes<"div"> {
85
+ size?: "sm" | "default" | "lg";
86
+ class?: string;
87
+ }
88
+
89
+ const {
90
+ size = "default",
91
+ class: className = "",
92
+ ...rest
93
+ } = Astro.props as Props;
94
+ ---
95
+
96
+ <div
97
+ {...rest}
98
+ role="group"
99
+ data-slot="input-group"
100
+ data-size={size}
101
+ class={cn(
102
+ "group/input-group border-input bg-card has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 data-[size=sm]:h-8 data-[size=default]:h-9 data-[size=lg]:h-10 rounded-lg border shadow-xs transition-[color,box-shadow] in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto! has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto! has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5 relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto!",
103
+ className,
104
+ )}
105
+ >
106
+ <slot />
107
+ </div>
108
+
109
+ <script is:inline type="module">
110
+ // Focus the nearest input when clicking on addons (unless clicking a button)
111
+ document.addEventListener("click", (e) => {
112
+ const addon = e.target.closest("[data-slot='input-group-addon']");
113
+ if (!addon) return;
114
+ if (e.target.closest("button")) return;
115
+ const root = addon.closest("[data-slot='input-group']");
116
+ if (!root) return;
117
+ const input = root.querySelector(
118
+ "[data-input-group-control], [data-slot='input-group-control']",
119
+ );
120
+ input?.focus();
121
+ });
122
+ // Disabled styling passthrough when any control is disabled
123
+ document.querySelectorAll("[data-slot='input-group']").forEach((group) => {
124
+ const updateDisabled = () => {
125
+ const ctrl = group.querySelector(
126
+ "[data-input-group-control], [data-slot='input-group-control']",
127
+ );
128
+ group.dataset.disabled = ctrl?.hasAttribute("disabled")
129
+ ? "true"
130
+ : "false";
131
+ };
132
+ updateDisabled();
133
+ group.addEventListener("change", updateDisabled, { capture: true });
134
+ });
135
+ </script>
@@ -1,49 +1,49 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cva } from "class-variance-authority";
4
- import { cn } from "@cl-light-ds/ui/lib/utils";
5
-
6
- type Align = "inline-start" | "inline-end" | "block-start" | "block-end";
7
-
8
- interface Props extends HTMLAttributes<"div"> {
9
- align?: Align;
10
- class?: string;
11
- }
12
-
13
- const {
14
- align = "inline-start",
15
- class: className = "",
16
- ...rest
17
- } = Astro.props as Props;
18
-
19
- const addonVariants = cva(
20
- "text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none",
21
- {
22
- variants: {
23
- align: {
24
- "inline-start":
25
- "pl-2 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem] order-first",
26
- "inline-end":
27
- "pr-2 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem] order-last",
28
- "block-start":
29
- "px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2 order-first w-full justify-start",
30
- "block-end":
31
- "px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2 order-last w-full justify-start",
32
- },
33
- },
34
- defaultVariants: {
35
- align: "inline-start",
36
- },
37
- },
38
- );
39
- ---
40
-
41
- <div
42
- {...rest}
43
- role="group"
44
- data-slot="input-group-addon"
45
- data-align={align}
46
- class={cn(addonVariants({ align }), className)}
47
- >
48
- <slot />
49
- </div>
1
+ ---
2
+ import type { HTMLAttributes } from "astro/types";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "@cl-light-ds/ui/lib/utils";
5
+
6
+ type Align = "inline-start" | "inline-end" | "block-start" | "block-end";
7
+
8
+ interface Props extends HTMLAttributes<"div"> {
9
+ align?: Align;
10
+ class?: string;
11
+ }
12
+
13
+ const {
14
+ align = "inline-start",
15
+ class: className = "",
16
+ ...rest
17
+ } = Astro.props as Props;
18
+
19
+ const addonVariants = cva(
20
+ "text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none",
21
+ {
22
+ variants: {
23
+ align: {
24
+ "inline-start":
25
+ "pl-2 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem] order-first",
26
+ "inline-end":
27
+ "pr-2 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem] order-last",
28
+ "block-start":
29
+ "px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2 order-first w-full justify-start",
30
+ "block-end":
31
+ "px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2 order-last w-full justify-start",
32
+ },
33
+ },
34
+ defaultVariants: {
35
+ align: "inline-start",
36
+ },
37
+ },
38
+ );
39
+ ---
40
+
41
+ <div
42
+ {...rest}
43
+ role="group"
44
+ data-slot="input-group-addon"
45
+ data-align={align}
46
+ class={cn(addonVariants({ align }), className)}
47
+ >
48
+ <slot />
49
+ </div>
@@ -1,58 +1,58 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cva } from "class-variance-authority";
4
- import { cn } from "@cl-light-ds/ui/lib/utils";
5
- import { Button } from "../button";
6
-
7
- type GroupButtonSize = "xs" | "sm" | "icon-xs" | "icon-sm";
8
-
9
- interface Props extends HTMLAttributes<"button"> {
10
- size?: GroupButtonSize;
11
- variant?:
12
- | "default"
13
- | "secondary"
14
- | "outline"
15
- | "ghost"
16
- | "destructive"
17
- | "link";
18
- type?: "button" | "submit" | "reset";
19
- class?: string;
20
- }
21
-
22
- const {
23
- size = "xs",
24
- variant = "ghost",
25
- type = "button",
26
- class: className = "",
27
- ...rest
28
- } = Astro.props as Props;
29
-
30
- const inputGroupButtonVariants = cva(
31
- "gap-2 text-sm flex items-center shadow-none",
32
- {
33
- variants: {
34
- size: {
35
- xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
36
- sm: "h-8 gap-1 px-2 text-xs [&>svg:not([class*='size-'])]:size-3.5",
37
- "icon-xs":
38
- "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
39
- "icon-sm": "size-8 p-0 has-[>svg]:p-0",
40
- },
41
- },
42
- defaultVariants: {
43
- size: "xs",
44
- },
45
- },
46
- );
47
- ---
48
-
49
- <Button
50
- type={type}
51
- data-size={size}
52
- variant={variant}
53
- data-slot="input-group-button"
54
- class={cn(inputGroupButtonVariants({ size }), className)}
55
- {...rest}
56
- >
57
- <slot />
58
- </Button>
1
+ ---
2
+ import type { HTMLAttributes } from "astro/types";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "@cl-light-ds/ui/lib/utils";
5
+ import { Button } from "../button";
6
+
7
+ type GroupButtonSize = "xs" | "sm" | "icon-xs" | "icon-sm";
8
+
9
+ interface Props extends HTMLAttributes<"button"> {
10
+ size?: GroupButtonSize;
11
+ variant?:
12
+ | "default"
13
+ | "secondary"
14
+ | "outline"
15
+ | "ghost"
16
+ | "destructive"
17
+ | "link";
18
+ type?: "button" | "submit" | "reset";
19
+ class?: string;
20
+ }
21
+
22
+ const {
23
+ size = "xs",
24
+ variant = "ghost",
25
+ type = "button",
26
+ class: className = "",
27
+ ...rest
28
+ } = Astro.props as Props;
29
+
30
+ const inputGroupButtonVariants = cva(
31
+ "gap-2 text-sm flex items-center shadow-none",
32
+ {
33
+ variants: {
34
+ size: {
35
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
36
+ sm: "h-8 gap-1 px-2 text-xs [&>svg:not([class*='size-'])]:size-3.5",
37
+ "icon-xs":
38
+ "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
39
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0",
40
+ },
41
+ },
42
+ defaultVariants: {
43
+ size: "xs",
44
+ },
45
+ },
46
+ );
47
+ ---
48
+
49
+ <Button
50
+ type={type}
51
+ data-size={size}
52
+ variant={variant}
53
+ data-slot="input-group-button"
54
+ class={cn(inputGroupButtonVariants({ size }), className)}
55
+ {...rest}
56
+ >
57
+ <slot />
58
+ </Button>
@@ -1,18 +1,18 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cn } from "@cl-light-ds/ui/lib/utils";
4
- import { Input } from "../input";
5
- import { inputGroupControlClasses } from "./controlClasses";
6
-
7
- interface Props extends HTMLAttributes<"input"> {
8
- class?: string;
9
- }
10
-
11
- const { class: className = "", ...rest } = Astro.props as Props;
12
- ---
13
-
14
- <Input
15
- data-slot="input-group-control"
16
- class={cn(inputGroupControlClasses, className)}
17
- {...rest}
18
- />
1
+ ---
2
+ import type { HTMLAttributes } from "astro/types";
3
+ import { cn } from "@cl-light-ds/ui/lib/utils";
4
+ import { Input } from "../input";
5
+ import { inputGroupControlClasses } from "./controlClasses";
6
+
7
+ interface Props extends HTMLAttributes<"input"> {
8
+ class?: string;
9
+ }
10
+
11
+ const { class: className = "", ...rest } = Astro.props as Props;
12
+ ---
13
+
14
+ <Input
15
+ data-slot="input-group-control"
16
+ class={cn(inputGroupControlClasses, className)}
17
+ {...rest}
18
+ />
@@ -1,21 +1,21 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cn } from "@cl-light-ds/ui/lib/utils";
4
-
5
- interface Props extends HTMLAttributes<"span"> {
6
- class?: string;
7
- }
8
-
9
- const { class: className = "", ...rest } = Astro.props as Props;
10
- ---
11
-
12
- <span
13
- {...rest}
14
- data-slot="input-group-text"
15
- class={cn(
16
- "text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 flex items-center [&_svg]:pointer-events-none",
17
- className,
18
- )}
19
- >
20
- <slot />
21
- </span>
1
+ ---
2
+ import type { HTMLAttributes } from "astro/types";
3
+ import { cn } from "@cl-light-ds/ui/lib/utils";
4
+
5
+ interface Props extends HTMLAttributes<"span"> {
6
+ class?: string;
7
+ }
8
+
9
+ const { class: className = "", ...rest } = Astro.props as Props;
10
+ ---
11
+
12
+ <span
13
+ {...rest}
14
+ data-slot="input-group-text"
15
+ class={cn(
16
+ "text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4 flex items-center [&_svg]:pointer-events-none",
17
+ className,
18
+ )}
19
+ >
20
+ <slot />
21
+ </span>
@@ -1,17 +1,17 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cn } from "@cl-light-ds/ui/lib/utils";
4
- import { Textarea } from "../textarea";
5
-
6
- interface Props extends HTMLAttributes<"textarea"> {
7
- class?: string;
8
- }
9
-
10
- const { class: className = "", ...rest } = Astro.props as Props;
11
- ---
12
-
13
- <Textarea
14
- data-slot="input-group-control"
15
- class={cn("rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent flex-1 resize-none", className)}
16
- {...rest}
17
- />
1
+ ---
2
+ import type { HTMLAttributes } from "astro/types";
3
+ import { cn } from "@cl-light-ds/ui/lib/utils";
4
+ import { Textarea } from "../textarea";
5
+
6
+ interface Props extends HTMLAttributes<"textarea"> {
7
+ class?: string;
8
+ }
9
+
10
+ const { class: className = "", ...rest } = Astro.props as Props;
11
+ ---
12
+
13
+ <Textarea
14
+ data-slot="input-group-control"
15
+ class={cn("rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent flex-1 resize-none", className)}
16
+ {...rest}
17
+ />
@@ -1,2 +1,2 @@
1
- export const inputGroupControlClasses =
2
- "rounded-none border-0 bg-transparent text-base shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent flex-1 min-w-0 group-data-[size=sm]/input-group:h-8! group-data-[size=sm]/input-group:px-2.5! group-data-[size=sm]/input-group:py-1! group-data-[size=sm]/input-group:md:text-xs! group-data-[size=default]/input-group:h-9! group-data-[size=default]/input-group:px-3! group-data-[size=default]/input-group:py-1! group-data-[size=default]/input-group:md:text-sm! group-data-[size=lg]/input-group:h-10! group-data-[size=lg]/input-group:px-3.5! group-data-[size=lg]/input-group:py-1.5! group-data-[size=lg]/input-group:md:text-base!";
1
+ export const inputGroupControlClasses =
2
+ "rounded-none border-0 bg-transparent text-base shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent flex-1 min-w-0 group-data-[size=sm]/input-group:h-8! group-data-[size=sm]/input-group:px-2.5! group-data-[size=sm]/input-group:py-1! group-data-[size=sm]/input-group:md:text-xs! group-data-[size=default]/input-group:h-9! group-data-[size=default]/input-group:px-3! group-data-[size=default]/input-group:py-1! group-data-[size=default]/input-group:md:text-sm! group-data-[size=lg]/input-group:h-10! group-data-[size=lg]/input-group:px-3.5! group-data-[size=lg]/input-group:py-1.5! group-data-[size=lg]/input-group:md:text-base!";
@@ -1,6 +1,6 @@
1
- export { default as InputGroup } from "./InputGroup.astro";
2
- export { default as InputGroupAddon } from "./InputGroupAddon.astro";
3
- export { default as InputGroupButton } from "./InputGroupButton.astro";
4
- export { default as InputGroupInput } from "./InputGroupInput.astro";
5
- export { default as InputGroupText } from "./InputGroupText.astro";
6
- export { default as InputGroupTextarea } from "./InputGroupTextarea.astro";
1
+ export { default as InputGroup } from "./InputGroup.astro";
2
+ export { default as InputGroupAddon } from "./InputGroupAddon.astro";
3
+ export { default as InputGroupButton } from "./InputGroupButton.astro";
4
+ export { default as InputGroupInput } from "./InputGroupInput.astro";
5
+ export { default as InputGroupText } from "./InputGroupText.astro";
6
+ export { default as InputGroupTextarea } from "./InputGroupTextarea.astro";