@cl-light-ds/ui 0.1.0 → 0.2.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.
- package/README.md +45 -45
- package/package.json +1 -1
- package/src/components/accordion/Accordion.astro +248 -248
- package/src/components/accordion/AccordionContent.astro +26 -26
- package/src/components/accordion/AccordionItem.astro +36 -36
- package/src/components/accordion/AccordionTrigger.astro +118 -118
- package/src/components/alert/Alert.astro +167 -167
- package/src/components/alert/AlertDescription.astro +24 -24
- package/src/components/alert/AlertTitle.astro +24 -24
- package/src/components/avatar/Avatar.astro +197 -197
- package/src/components/avatar/AvatarBadge.astro +44 -44
- package/src/components/avatar/AvatarFallback.astro +26 -26
- package/src/components/avatar/AvatarGroup.astro +26 -26
- package/src/components/avatar/AvatarGroupCount.astro +30 -30
- package/src/components/avatar/AvatarImage.astro +46 -46
- package/src/components/badge/Badge.astro +167 -167
- package/src/components/breadcrumb/Breadcrumb.astro +76 -76
- package/src/components/breadcrumb/BreadcrumbItem.astro +32 -32
- package/src/components/breadcrumb/BreadcrumbList.astro +26 -26
- package/src/components/breadcrumb/BreadcrumbSeparator.astro +26 -26
- package/src/components/button/Button.astro +233 -233
- package/src/components/button-group/ButtonGroup.astro +130 -130
- package/src/components/button-group/ButtonGroupSeparator.astro +30 -30
- package/src/components/button-group/ButtonGroupText.astro +21 -21
- package/src/components/card/Card.astro +182 -182
- package/src/components/card/CardAction.astro +26 -26
- package/src/components/card/CardContent.astro +28 -28
- package/src/components/card/CardDescription.astro +28 -28
- package/src/components/card/CardFooter.astro +24 -24
- package/src/components/card/CardHeader.astro +30 -30
- package/src/components/card/CardMedia.astro +27 -27
- package/src/components/card/CardOverlay.astro +32 -32
- package/src/components/card/CardTitle.astro +21 -21
- package/src/components/carousel/Carousel.astro +106 -106
- package/src/components/carousel/CarouselSlide.astro +22 -22
- package/src/components/checkbox/Checkbox.astro +159 -159
- package/src/components/collapsible/Collapsible.astro +202 -202
- package/src/components/collapsible/CollapsibleContent.astro +36 -36
- package/src/components/collapsible/CollapsibleTrigger.astro +34 -34
- package/src/components/combobox/Combobox.astro +365 -365
- package/src/components/combobox/ComboboxContent.astro +37 -37
- package/src/components/combobox/ComboboxEmpty.astro +18 -18
- package/src/components/combobox/ComboboxGroup.astro +19 -19
- package/src/components/combobox/ComboboxInput.astro +74 -74
- package/src/components/combobox/ComboboxItem.astro +39 -39
- package/src/components/combobox/ComboboxLabel.astro +18 -18
- package/src/components/combobox/ComboboxList.astro +21 -21
- package/src/components/combobox/ComboboxSeparator.astro +17 -17
- package/src/components/combobox/ComboboxTrigger.astro +30 -30
- package/src/components/combobox/ComboboxValue.astro +22 -22
- package/src/components/date/Date.astro +137 -137
- package/src/components/dialog/Dialog.astro +196 -196
- package/src/components/dialog/DialogClose.astro +23 -23
- package/src/components/dialog/DialogContent.astro +42 -42
- package/src/components/dialog/DialogDescription.astro +18 -18
- package/src/components/dialog/DialogFooter.astro +18 -18
- package/src/components/dialog/DialogHeader.astro +18 -18
- package/src/components/dialog/DialogOverlay.astro +19 -19
- package/src/components/dialog/DialogTitle.astro +18 -18
- package/src/components/dialog/DialogTrigger.astro +37 -37
- package/src/components/dropdown-menu/DropdownMenu.astro +226 -226
- package/src/components/dropdown-menu/DropdownMenuCheckboxItem.astro +114 -114
- package/src/components/dropdown-menu/DropdownMenuContent.astro +42 -42
- package/src/components/dropdown-menu/DropdownMenuGroup.astro +19 -19
- package/src/components/dropdown-menu/DropdownMenuItem.astro +220 -220
- package/src/components/dropdown-menu/DropdownMenuLabel.astro +20 -20
- package/src/components/dropdown-menu/DropdownMenuRadioItem.astro +101 -101
- package/src/components/dropdown-menu/DropdownMenuSeparator.astro +18 -18
- package/src/components/dropdown-menu/DropdownMenuShortcut.astro +18 -18
- package/src/components/dropdown-menu/DropdownMenuTrigger.astro +49 -49
- package/src/components/field/Field.astro +664 -664
- package/src/components/field/FieldContent.astro +20 -20
- package/src/components/field/FieldDescription.astro +22 -22
- package/src/components/field/FieldError.astro +51 -51
- package/src/components/field/FieldGroup.astro +20 -20
- package/src/components/field/FieldLabel.astro +22 -22
- package/src/components/field/FieldLegend.astro +23 -23
- package/src/components/field/FieldSeparator.astro +30 -30
- package/src/components/field/FieldSet.astro +20 -20
- package/src/components/field/FieldTitle.astro +20 -20
- package/src/components/hover-card/HoverCard.astro +235 -235
- package/src/components/hover-card/HoverCardContent.astro +54 -54
- package/src/components/hover-card/HoverCardTrigger.astro +38 -38
- package/src/components/input/Input.astro +130 -130
- package/src/components/input-group/InputGroup.astro +135 -135
- package/src/components/input-group/InputGroupAddon.astro +49 -49
- package/src/components/input-group/InputGroupButton.astro +58 -58
- package/src/components/input-group/InputGroupInput.astro +18 -18
- package/src/components/input-group/InputGroupText.astro +21 -21
- package/src/components/input-group/InputGroupTextarea.astro +17 -17
- package/src/components/item/Item.astro +122 -122
- package/src/components/item/ItemActions.astro +21 -21
- package/src/components/item/ItemContent.astro +25 -25
- package/src/components/item/ItemDescription.astro +25 -25
- package/src/components/item/ItemFooter.astro +24 -24
- package/src/components/item/ItemGroup.astro +24 -24
- package/src/components/item/ItemHeader.astro +24 -24
- package/src/components/item/ItemMedia.astro +47 -47
- package/src/components/item/ItemSeparator.astro +21 -21
- package/src/components/item/ItemTitle.astro +25 -25
- package/src/components/kbd/Kbd.astro +145 -145
- package/src/components/kbd/KbdGroup.astro +55 -55
- package/src/components/label/Label.astro +97 -97
- package/src/components/link-group/LinkGroup.astro +67 -67
- package/src/components/link-group/LinkGroupItem.astro +32 -32
- package/src/components/link-group/LinkGroupList.astro +25 -25
- package/src/components/link-group/LinkGroupTitle.astro +22 -22
- package/src/components/marquee/Marquee.astro +119 -119
- package/src/components/native-select/NativeSelect.astro +125 -125
- package/src/components/native-select/NativeSelectOptGroup.astro +14 -14
- package/src/components/navigation-menu/NavigationMenu.astro +414 -414
- package/src/components/navigation-menu/NavigationMenuContent.astro +37 -37
- package/src/components/navigation-menu/NavigationMenuIndicator.astro +24 -24
- package/src/components/navigation-menu/NavigationMenuItem.astro +22 -22
- package/src/components/navigation-menu/NavigationMenuLink.astro +18 -18
- package/src/components/navigation-menu/NavigationMenuList.astro +21 -21
- package/src/components/navigation-menu/NavigationMenuPositioner.astro +44 -44
- package/src/components/navigation-menu/NavigationMenuTrigger.astro +30 -30
- package/src/components/navigation-menu/NavigationMenuViewport.astro +19 -19
- package/src/components/popover/CHANGELOG.md +17 -2
- package/src/components/popover/Popover.astro +211 -210
- package/src/components/popover/PopoverClose.astro +18 -18
- package/src/components/popover/PopoverContent.astro +50 -49
- package/src/components/popover/PopoverDescription.astro +18 -18
- package/src/components/popover/PopoverHeader.astro +18 -18
- package/src/components/popover/PopoverTitle.astro +18 -18
- package/src/components/popover/PopoverTrigger.astro +35 -29
- package/src/components/radio-group/CHANGELOG.md +23 -1
- package/src/components/radio-group/RadioGroup.astro +81 -81
- package/src/components/radio-group/RadioGroupItem.astro +51 -42
- package/src/components/select/Select.astro +373 -373
- package/src/components/select/SelectContent.astro +91 -91
- package/src/components/select/SelectGroup.astro +19 -19
- package/src/components/select/SelectItem.astro +48 -48
- package/src/components/select/SelectLabel.astro +18 -18
- package/src/components/select/SelectSeparator.astro +17 -17
- package/src/components/select/SelectTrigger.astro +34 -34
- package/src/components/select/SelectValue.astro +22 -22
- package/src/components/separator/Separator.astro +60 -60
- package/src/components/skeleton/Skeleton.astro +121 -121
- package/src/components/slider/Slider.astro +198 -198
- package/src/components/spinner/CHANGELOG.md +14 -1
- package/src/components/spinner/Spinner.astro +135 -134
- package/src/components/sticky-surface/StickySurface.astro +152 -152
- package/src/components/switch/CHANGELOG.md +20 -0
- package/src/components/switch/Switch.astro +106 -106
- package/src/components/table/CHANGELOG.md +21 -2
- package/src/components/table/Table.astro +251 -250
- package/src/components/table/TableBody.astro +18 -18
- package/src/components/table/TableCaption.astro +17 -17
- package/src/components/table/TableCell.astro +21 -21
- package/src/components/table/TableFooter.astro +21 -21
- package/src/components/table/TableHead.astro +21 -21
- package/src/components/table/TableHeader.astro +17 -17
- package/src/components/table/TableRow.astro +21 -21
- package/src/components/tabs/Tabs.astro +306 -306
- package/src/components/tabs/TabsContent.astro +47 -47
- package/src/components/tabs/TabsList.astro +69 -69
- package/src/components/tabs/TabsTrigger.astro +40 -40
- package/src/components/textarea/CHANGELOG.md +18 -1
- package/src/components/textarea/Textarea.astro +58 -36
- package/src/components/toggle/CHANGELOG.md +19 -1
- package/src/components/toggle/Toggle.astro +150 -138
- package/src/components/toggle-group/CHANGELOG.md +14 -1
- package/src/components/toggle-group/ToggleGroup.astro +236 -224
- package/src/components/toggle-group/ToggleGroupItem.astro +48 -48
- package/src/components/tooltip/CHANGELOG.md +19 -2
- package/src/components/tooltip/Tooltip.astro +357 -331
- package/src/components/tooltip/TooltipContent.astro +85 -60
- package/src/components/tooltip/TooltipTrigger.astro +34 -34
- package/src/lib/toggle-shared.ts +3 -2
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
---
|
|
2
|
-
/**
|
|
3
|
-
* @component Input
|
|
4
|
-
* @title Input
|
|
5
|
-
* @description Base input field used in forms.
|
|
6
|
-
* @description A field for collecting user input.
|
|
7
|
-
* @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=145-3
|
|
8
|
-
* @status stable
|
|
9
|
-
* @since 0.1.0
|
|
10
|
-
*
|
|
11
|
-
* @preview
|
|
12
|
-
*
|
|
13
|
-
* <Input type="text" placeholder="Enter your name" />
|
|
14
|
-
*
|
|
15
|
-
* @usage
|
|
16
|
-
*
|
|
17
|
-
* ```astro nocollapse
|
|
18
|
-
* ---
|
|
19
|
-
* import { Input } from '@bejamas/ui/components/input';
|
|
20
|
-
* ---
|
|
21
|
-
* <Input type="email" placeholder="Enter your email" />
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* @examples
|
|
25
|
-
*
|
|
26
|
-
* ### Default
|
|
27
|
-
*
|
|
28
|
-
* <Input type="email" placeholder="Enter your email" />
|
|
29
|
-
*
|
|
30
|
-
* ### Disabled
|
|
31
|
-
*
|
|
32
|
-
* <Input type="email" placeholder="Enter your email" disabled />
|
|
33
|
-
*
|
|
34
|
-
* ### Sizes
|
|
35
|
-
*
|
|
36
|
-
* <div class="grid w-full max-w-sm gap-3">
|
|
37
|
-
* <div class="flex items-center gap-2">
|
|
38
|
-
* <Input size="sm" placeholder="Small input (h-8)" />
|
|
39
|
-
* <Button size="sm" variant="outline">
|
|
40
|
-
* Small
|
|
41
|
-
* </Button>
|
|
42
|
-
* </div>
|
|
43
|
-
* <div class="flex items-center gap-2">
|
|
44
|
-
* <Input placeholder="Default input (h-9)" />
|
|
45
|
-
* <Button variant="outline">Default</Button>
|
|
46
|
-
* </div>
|
|
47
|
-
* <div class="flex items-center gap-2">
|
|
48
|
-
* <Input size="lg" placeholder="Large input (h-10)" />
|
|
49
|
-
* <Button size="lg" variant="outline">
|
|
50
|
-
* Large
|
|
51
|
-
* </Button>
|
|
52
|
-
* </div>
|
|
53
|
-
* </div>
|
|
54
|
-
*
|
|
55
|
-
* ### File
|
|
56
|
-
*
|
|
57
|
-
* <div class="grid w-full max-w-sm items-center gap-3">
|
|
58
|
-
* <Label htmlFor="picture">Picture</Label>
|
|
59
|
-
* <Input id="picture" type="file" />
|
|
60
|
-
* </div>
|
|
61
|
-
*
|
|
62
|
-
* ### With Label
|
|
63
|
-
*
|
|
64
|
-
* <div class="grid w-full max-w-sm items-center gap-3">
|
|
65
|
-
* <Label htmlFor="email">Email</Label>
|
|
66
|
-
* <Input id="email" type="email" placeholder="Enter your email" />
|
|
67
|
-
* </div>
|
|
68
|
-
*
|
|
69
|
-
* ### With Button
|
|
70
|
-
*
|
|
71
|
-
* <div class="flex w-full max-w-sm items-center gap-2">
|
|
72
|
-
* <Input type="email" placeholder="Email" />
|
|
73
|
-
* <Button type="submit" variant="outline">
|
|
74
|
-
* Subscribe
|
|
75
|
-
* </Button>
|
|
76
|
-
* </div>
|
|
77
|
-
*/
|
|
78
|
-
|
|
79
|
-
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
80
|
-
import { cva, type VariantProps } from "class-variance-authority";
|
|
81
|
-
import type { HTMLAttributes } from "astro/types";
|
|
82
|
-
|
|
83
|
-
const inputVariants = cva(
|
|
84
|
-
"w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed",
|
|
85
|
-
{
|
|
86
|
-
variants: {
|
|
87
|
-
size: {
|
|
88
|
-
sm: "data-[size=sm]",
|
|
89
|
-
default: "data-[size=default]",
|
|
90
|
-
lg: "data-[size=lg]",
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
defaultVariants: {
|
|
94
|
-
size: "default",
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
type InputUiSize = NonNullable<VariantProps<typeof inputVariants>["size"]>;
|
|
100
|
-
type NativeInputSize = HTMLAttributes<"input">["size"];
|
|
101
|
-
|
|
102
|
-
interface Props extends Omit<HTMLAttributes<"input">, "size"> {
|
|
103
|
-
size?: InputUiSize | NativeInputSize;
|
|
104
|
-
nativeSize?: NativeInputSize;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const {
|
|
108
|
-
class: className = "",
|
|
109
|
-
type = "text",
|
|
110
|
-
size: sizeProp,
|
|
111
|
-
nativeSize,
|
|
112
|
-
...props
|
|
113
|
-
} = Astro.props as Props;
|
|
114
|
-
|
|
115
|
-
const isUiSize = (value: unknown): value is InputUiSize =>
|
|
116
|
-
value === "sm" || value === "default" || value === "lg";
|
|
117
|
-
|
|
118
|
-
const resolvedUiSize = isUiSize(sizeProp) ? sizeProp : "default";
|
|
119
|
-
const resolvedNativeSize =
|
|
120
|
-
nativeSize ?? (!isUiSize(sizeProp) ? sizeProp : undefined);
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
<input
|
|
124
|
-
type={type}
|
|
125
|
-
size={resolvedNativeSize}
|
|
126
|
-
data-slot={props["data-slot"] ?? "input"}
|
|
127
|
-
data-size={resolvedUiSize}
|
|
128
|
-
class={cn("border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 active:border-ring rounded-lg border bg-card shadow-xs transition-[color,box-shadow] file:h-7 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 disabled:bg-muted disabled:text-muted-foreground data-[size=sm]:h-8 data-[size=sm]:px-2.5 data-[size=sm]:py-1 data-[size=sm]:md:text-xs data-[size=default]:h-9 data-[size=default]:px-2.5 data-[size=default]:py-1 data-[size=default]:md:text-sm data-[size=lg]:h-10 data-[size=lg]:px-3.5 data-[size=lg]:py-1.5 data-[size=lg]:md:text-base", inputVariants({ size: resolvedUiSize }), className)}
|
|
129
|
-
{...props}
|
|
130
|
-
/>
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* @component Input
|
|
4
|
+
* @title Input
|
|
5
|
+
* @description Base input field used in forms.
|
|
6
|
+
* @description A field for collecting user input.
|
|
7
|
+
* @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=145-3
|
|
8
|
+
* @status stable
|
|
9
|
+
* @since 0.1.0
|
|
10
|
+
*
|
|
11
|
+
* @preview
|
|
12
|
+
*
|
|
13
|
+
* <Input type="text" placeholder="Enter your name" />
|
|
14
|
+
*
|
|
15
|
+
* @usage
|
|
16
|
+
*
|
|
17
|
+
* ```astro nocollapse
|
|
18
|
+
* ---
|
|
19
|
+
* import { Input } from '@bejamas/ui/components/input';
|
|
20
|
+
* ---
|
|
21
|
+
* <Input type="email" placeholder="Enter your email" />
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @examples
|
|
25
|
+
*
|
|
26
|
+
* ### Default
|
|
27
|
+
*
|
|
28
|
+
* <Input type="email" placeholder="Enter your email" />
|
|
29
|
+
*
|
|
30
|
+
* ### Disabled
|
|
31
|
+
*
|
|
32
|
+
* <Input type="email" placeholder="Enter your email" disabled />
|
|
33
|
+
*
|
|
34
|
+
* ### Sizes
|
|
35
|
+
*
|
|
36
|
+
* <div class="grid w-full max-w-sm gap-3">
|
|
37
|
+
* <div class="flex items-center gap-2">
|
|
38
|
+
* <Input size="sm" placeholder="Small input (h-8)" />
|
|
39
|
+
* <Button size="sm" variant="outline">
|
|
40
|
+
* Small
|
|
41
|
+
* </Button>
|
|
42
|
+
* </div>
|
|
43
|
+
* <div class="flex items-center gap-2">
|
|
44
|
+
* <Input placeholder="Default input (h-9)" />
|
|
45
|
+
* <Button variant="outline">Default</Button>
|
|
46
|
+
* </div>
|
|
47
|
+
* <div class="flex items-center gap-2">
|
|
48
|
+
* <Input size="lg" placeholder="Large input (h-10)" />
|
|
49
|
+
* <Button size="lg" variant="outline">
|
|
50
|
+
* Large
|
|
51
|
+
* </Button>
|
|
52
|
+
* </div>
|
|
53
|
+
* </div>
|
|
54
|
+
*
|
|
55
|
+
* ### File
|
|
56
|
+
*
|
|
57
|
+
* <div class="grid w-full max-w-sm items-center gap-3">
|
|
58
|
+
* <Label htmlFor="picture">Picture</Label>
|
|
59
|
+
* <Input id="picture" type="file" />
|
|
60
|
+
* </div>
|
|
61
|
+
*
|
|
62
|
+
* ### With Label
|
|
63
|
+
*
|
|
64
|
+
* <div class="grid w-full max-w-sm items-center gap-3">
|
|
65
|
+
* <Label htmlFor="email">Email</Label>
|
|
66
|
+
* <Input id="email" type="email" placeholder="Enter your email" />
|
|
67
|
+
* </div>
|
|
68
|
+
*
|
|
69
|
+
* ### With Button
|
|
70
|
+
*
|
|
71
|
+
* <div class="flex w-full max-w-sm items-center gap-2">
|
|
72
|
+
* <Input type="email" placeholder="Email" />
|
|
73
|
+
* <Button type="submit" variant="outline">
|
|
74
|
+
* Subscribe
|
|
75
|
+
* </Button>
|
|
76
|
+
* </div>
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
80
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
81
|
+
import type { HTMLAttributes } from "astro/types";
|
|
82
|
+
|
|
83
|
+
const inputVariants = cva(
|
|
84
|
+
"w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed",
|
|
85
|
+
{
|
|
86
|
+
variants: {
|
|
87
|
+
size: {
|
|
88
|
+
sm: "data-[size=sm]",
|
|
89
|
+
default: "data-[size=default]",
|
|
90
|
+
lg: "data-[size=lg]",
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
defaultVariants: {
|
|
94
|
+
size: "default",
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
type InputUiSize = NonNullable<VariantProps<typeof inputVariants>["size"]>;
|
|
100
|
+
type NativeInputSize = HTMLAttributes<"input">["size"];
|
|
101
|
+
|
|
102
|
+
interface Props extends Omit<HTMLAttributes<"input">, "size"> {
|
|
103
|
+
size?: InputUiSize | NativeInputSize;
|
|
104
|
+
nativeSize?: NativeInputSize;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const {
|
|
108
|
+
class: className = "",
|
|
109
|
+
type = "text",
|
|
110
|
+
size: sizeProp,
|
|
111
|
+
nativeSize,
|
|
112
|
+
...props
|
|
113
|
+
} = Astro.props as Props;
|
|
114
|
+
|
|
115
|
+
const isUiSize = (value: unknown): value is InputUiSize =>
|
|
116
|
+
value === "sm" || value === "default" || value === "lg";
|
|
117
|
+
|
|
118
|
+
const resolvedUiSize = isUiSize(sizeProp) ? sizeProp : "default";
|
|
119
|
+
const resolvedNativeSize =
|
|
120
|
+
nativeSize ?? (!isUiSize(sizeProp) ? sizeProp : undefined);
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
<input
|
|
124
|
+
type={type}
|
|
125
|
+
size={resolvedNativeSize}
|
|
126
|
+
data-slot={props["data-slot"] ?? "input"}
|
|
127
|
+
data-size={resolvedUiSize}
|
|
128
|
+
class={cn("border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 active:border-ring rounded-lg border bg-card shadow-xs transition-[color,box-shadow] file:h-7 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 disabled:bg-muted disabled:text-muted-foreground data-[size=sm]:h-8 data-[size=sm]:px-2.5 data-[size=sm]:py-1 data-[size=sm]:md:text-xs data-[size=default]:h-9 data-[size=default]:px-2.5 data-[size=default]:py-1 data-[size=default]:md:text-sm data-[size=lg]:h-10 data-[size=lg]:px-3.5 data-[size=lg]:py-1.5 data-[size=lg]:md:text-base", inputVariants({ size: resolvedUiSize }), className)}
|
|
129
|
+
{...props}
|
|
130
|
+
/>
|
|
@@ -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>
|