@starwind-ui/core 1.12.0 → 1.12.1

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 (166) hide show
  1. package/package.json +1 -1
  2. package/dist/index.d.ts +0 -28
  3. package/dist/index.js +0 -81
  4. package/dist/index.js.map +0 -1
  5. package/dist/src/components/accordion/Accordion.astro +0 -247
  6. package/dist/src/components/accordion/AccordionContent.astro +0 -33
  7. package/dist/src/components/accordion/AccordionItem.astro +0 -27
  8. package/dist/src/components/accordion/AccordionTrigger.astro +0 -32
  9. package/dist/src/components/accordion/index.ts +0 -15
  10. package/dist/src/components/alert/Alert.astro +0 -31
  11. package/dist/src/components/alert/AlertDescription.astro +0 -14
  12. package/dist/src/components/alert/AlertTitle.astro +0 -16
  13. package/dist/src/components/alert/index.ts +0 -13
  14. package/dist/src/components/alert-dialog/AlertDialog.astro +0 -273
  15. package/dist/src/components/alert-dialog/AlertDialogAction.astro +0 -44
  16. package/dist/src/components/alert-dialog/AlertDialogCancel.astro +0 -45
  17. package/dist/src/components/alert-dialog/AlertDialogContent.astro +0 -52
  18. package/dist/src/components/alert-dialog/AlertDialogDescription.astro +0 -18
  19. package/dist/src/components/alert-dialog/AlertDialogFooter.astro +0 -16
  20. package/dist/src/components/alert-dialog/AlertDialogHeader.astro +0 -14
  21. package/dist/src/components/alert-dialog/AlertDialogTitle.astro +0 -20
  22. package/dist/src/components/alert-dialog/AlertDialogTrigger.astro +0 -47
  23. package/dist/src/components/alert-dialog/index.ts +0 -46
  24. package/dist/src/components/aspect-ratio/AspectRatio.astro +0 -32
  25. package/dist/src/components/aspect-ratio/index.ts +0 -7
  26. package/dist/src/components/avatar/Avatar.astro +0 -29
  27. package/dist/src/components/avatar/AvatarFallback.astro +0 -18
  28. package/dist/src/components/avatar/AvatarImage.astro +0 -49
  29. package/dist/src/components/avatar/index.ts +0 -13
  30. package/dist/src/components/badge/Badge.astro +0 -51
  31. package/dist/src/components/badge/index.ts +0 -7
  32. package/dist/src/components/breadcrumb/Breadcrumb.astro +0 -11
  33. package/dist/src/components/breadcrumb/BreadcrumbEllipsis.astro +0 -28
  34. package/dist/src/components/breadcrumb/BreadcrumbItem.astro +0 -14
  35. package/dist/src/components/breadcrumb/BreadcrumbLink.astro +0 -22
  36. package/dist/src/components/breadcrumb/BreadcrumbList.astro +0 -16
  37. package/dist/src/components/breadcrumb/BreadcrumbPage.astro +0 -21
  38. package/dist/src/components/breadcrumb/BreadcrumbSeparator.astro +0 -23
  39. package/dist/src/components/breadcrumb/index.ts +0 -37
  40. package/dist/src/components/button/Button.astro +0 -53
  41. package/dist/src/components/button/index.ts +0 -7
  42. package/dist/src/components/button-group/ButtonGroup.astro +0 -62
  43. package/dist/src/components/button-group/ButtonGroupSeparator.astro +0 -27
  44. package/dist/src/components/button-group/ButtonGroupText.astro +0 -19
  45. package/dist/src/components/button-group/index.ts +0 -17
  46. package/dist/src/components/card/Card.astro +0 -14
  47. package/dist/src/components/card/CardContent.astro +0 -14
  48. package/dist/src/components/card/CardDescription.astro +0 -14
  49. package/dist/src/components/card/CardFooter.astro +0 -14
  50. package/dist/src/components/card/CardHeader.astro +0 -14
  51. package/dist/src/components/card/CardTitle.astro +0 -14
  52. package/dist/src/components/card/index.ts +0 -26
  53. package/dist/src/components/carousel/Carousel.astro +0 -55
  54. package/dist/src/components/carousel/CarouselContent.astro +0 -26
  55. package/dist/src/components/carousel/CarouselItem.astro +0 -26
  56. package/dist/src/components/carousel/CarouselNext.astro +0 -37
  57. package/dist/src/components/carousel/CarouselPrevious.astro +0 -37
  58. package/dist/src/components/carousel/carousel-script.ts +0 -191
  59. package/dist/src/components/carousel/index.ts +0 -32
  60. package/dist/src/components/checkbox/Checkbox.astro +0 -127
  61. package/dist/src/components/checkbox/index.ts +0 -7
  62. package/dist/src/components/dialog/Dialog.astro +0 -263
  63. package/dist/src/components/dialog/DialogClose.astro +0 -35
  64. package/dist/src/components/dialog/DialogContent.astro +0 -67
  65. package/dist/src/components/dialog/DialogDescription.astro +0 -14
  66. package/dist/src/components/dialog/DialogFooter.astro +0 -14
  67. package/dist/src/components/dialog/DialogHeader.astro +0 -14
  68. package/dist/src/components/dialog/DialogTitle.astro +0 -20
  69. package/dist/src/components/dialog/DialogTrigger.astro +0 -47
  70. package/dist/src/components/dialog/index.ts +0 -45
  71. package/dist/src/components/dropdown/Dropdown.astro +0 -375
  72. package/dist/src/components/dropdown/DropdownContent.astro +0 -81
  73. package/dist/src/components/dropdown/DropdownItem.astro +0 -48
  74. package/dist/src/components/dropdown/DropdownLabel.astro +0 -29
  75. package/dist/src/components/dropdown/DropdownSeparator.astro +0 -21
  76. package/dist/src/components/dropdown/DropdownTrigger.astro +0 -52
  77. package/dist/src/components/dropdown/index.ts +0 -33
  78. package/dist/src/components/dropzone/Dropzone.astro +0 -233
  79. package/dist/src/components/dropzone/DropzoneFilesList.astro +0 -26
  80. package/dist/src/components/dropzone/DropzoneLoadingIndicator.astro +0 -10
  81. package/dist/src/components/dropzone/DropzoneUploadIndicator.astro +0 -10
  82. package/dist/src/components/dropzone/index.ts +0 -24
  83. package/dist/src/components/input/Input.astro +0 -24
  84. package/dist/src/components/input/index.ts +0 -7
  85. package/dist/src/components/item/Item.astro +0 -52
  86. package/dist/src/components/item/ItemActions.astro +0 -16
  87. package/dist/src/components/item/ItemContent.astro +0 -16
  88. package/dist/src/components/item/ItemDescription.astro +0 -19
  89. package/dist/src/components/item/ItemFooter.astro +0 -16
  90. package/dist/src/components/item/ItemGroup.astro +0 -16
  91. package/dist/src/components/item/ItemHeader.astro +0 -16
  92. package/dist/src/components/item/ItemMedia.astro +0 -40
  93. package/dist/src/components/item/ItemSeparator.astro +0 -21
  94. package/dist/src/components/item/ItemTitle.astro +0 -16
  95. package/dist/src/components/item/index.ts +0 -50
  96. package/dist/src/components/kbd/Kbd.astro +0 -21
  97. package/dist/src/components/kbd/KbdGroup.astro +0 -16
  98. package/dist/src/components/kbd/index.ts +0 -11
  99. package/dist/src/components/label/Label.astro +0 -22
  100. package/dist/src/components/label/index.ts +0 -7
  101. package/dist/src/components/pagination/Pagination.astro +0 -20
  102. package/dist/src/components/pagination/PaginationContent.astro +0 -16
  103. package/dist/src/components/pagination/PaginationEllipsis.astro +0 -35
  104. package/dist/src/components/pagination/PaginationItem.astro +0 -16
  105. package/dist/src/components/pagination/PaginationLink.astro +0 -24
  106. package/dist/src/components/pagination/PaginationNext.astro +0 -30
  107. package/dist/src/components/pagination/PaginationPrevious.astro +0 -30
  108. package/dist/src/components/pagination/index.ts +0 -38
  109. package/dist/src/components/progress/Progress.astro +0 -154
  110. package/dist/src/components/progress/index.ts +0 -10
  111. package/dist/src/components/radio-group/RadioGroup.astro +0 -157
  112. package/dist/src/components/radio-group/RadioGroupItem.astro +0 -129
  113. package/dist/src/components/radio-group/RadioGroupTypes.ts +0 -6
  114. package/dist/src/components/radio-group/index.ts +0 -23
  115. package/dist/src/components/select/Select.astro +0 -696
  116. package/dist/src/components/select/SelectContent.astro +0 -94
  117. package/dist/src/components/select/SelectGroup.astro +0 -9
  118. package/dist/src/components/select/SelectItem.astro +0 -51
  119. package/dist/src/components/select/SelectLabel.astro +0 -14
  120. package/dist/src/components/select/SelectSearch.astro +0 -49
  121. package/dist/src/components/select/SelectSeparator.astro +0 -12
  122. package/dist/src/components/select/SelectTrigger.astro +0 -58
  123. package/dist/src/components/select/SelectTypes.ts +0 -13
  124. package/dist/src/components/select/SelectValue.astro +0 -19
  125. package/dist/src/components/select/index.ts +0 -49
  126. package/dist/src/components/separator/Separator.astro +0 -36
  127. package/dist/src/components/separator/index.ts +0 -7
  128. package/dist/src/components/sheet/Sheet.astro +0 -13
  129. package/dist/src/components/sheet/SheetClose.astro +0 -13
  130. package/dist/src/components/sheet/SheetContent.astro +0 -92
  131. package/dist/src/components/sheet/SheetDescription.astro +0 -16
  132. package/dist/src/components/sheet/SheetFooter.astro +0 -16
  133. package/dist/src/components/sheet/SheetHeader.astro +0 -16
  134. package/dist/src/components/sheet/SheetTitle.astro +0 -16
  135. package/dist/src/components/sheet/SheetTrigger.astro +0 -13
  136. package/dist/src/components/sheet/index.ts +0 -41
  137. package/dist/src/components/skeleton/Skeleton.astro +0 -14
  138. package/dist/src/components/skeleton/index.ts +0 -9
  139. package/dist/src/components/spinner/Spinner.astro +0 -21
  140. package/dist/src/components/spinner/index.ts +0 -7
  141. package/dist/src/components/switch/Switch.astro +0 -191
  142. package/dist/src/components/switch/SwitchTypes.ts +0 -6
  143. package/dist/src/components/switch/index.ts +0 -12
  144. package/dist/src/components/table/Table.astro +0 -18
  145. package/dist/src/components/table/TableBody.astro +0 -16
  146. package/dist/src/components/table/TableCaption.astro +0 -16
  147. package/dist/src/components/table/TableCell.astro +0 -16
  148. package/dist/src/components/table/TableFoot.astro +0 -16
  149. package/dist/src/components/table/TableHead.astro +0 -16
  150. package/dist/src/components/table/TableHeader.astro +0 -16
  151. package/dist/src/components/table/TableRow.astro +0 -16
  152. package/dist/src/components/table/index.ts +0 -42
  153. package/dist/src/components/tabs/Tabs.astro +0 -269
  154. package/dist/src/components/tabs/TabsContent.astro +0 -28
  155. package/dist/src/components/tabs/TabsList.astro +0 -22
  156. package/dist/src/components/tabs/TabsTrigger.astro +0 -34
  157. package/dist/src/components/tabs/index.ts +0 -20
  158. package/dist/src/components/textarea/Textarea.astro +0 -28
  159. package/dist/src/components/textarea/index.ts +0 -9
  160. package/dist/src/components/toggle/Toggle.astro +0 -172
  161. package/dist/src/components/toggle/ToggleTypes.ts +0 -14
  162. package/dist/src/components/toggle/index.ts +0 -8
  163. package/dist/src/components/tooltip/Tooltip.astro +0 -237
  164. package/dist/src/components/tooltip/TooltipContent.astro +0 -114
  165. package/dist/src/components/tooltip/TooltipTrigger.astro +0 -10
  166. package/dist/src/components/tooltip/index.ts +0 -16
@@ -1,11 +0,0 @@
1
- import Kbd, { kbd } from "./Kbd.astro";
2
- import KbdGroup, { kbdGroup } from "./KbdGroup.astro";
3
-
4
- const KbdVariants = { kbd, kbdGroup };
5
-
6
- export { Kbd, KbdGroup, KbdVariants };
7
-
8
- export default {
9
- Root: Kbd,
10
- Group: KbdGroup,
11
- };
@@ -1,22 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { tv, type VariantProps } from "tailwind-variants";
4
-
5
- type Props = HTMLAttributes<"label"> & VariantProps<typeof label>;
6
-
7
- export const label = tv({
8
- base: [
9
- "text-foreground leading-none font-medium",
10
- "peer-disabled:cursor-not-allowed peer-disabled:opacity-70 has-[+:disabled]:cursor-not-allowed has-[+:disabled]:opacity-70",
11
- ],
12
- variants: { size: { sm: "text-sm", md: "text-base", lg: "text-lg" } },
13
- defaultVariants: { size: "md" },
14
- });
15
-
16
- const { size, class: className, ...rest } = Astro.props;
17
- ---
18
-
19
- {/* eslint-disable-next-line astro/jsx-a11y/label-has-associated-control */}
20
- <label class={label({ size, class: className })} data-slot="label" {...rest}>
21
- <slot />
22
- </label>
@@ -1,7 +0,0 @@
1
- import Label, { label } from "./Label.astro";
2
-
3
- const LabelVariants = { label };
4
-
5
- export { Label, LabelVariants };
6
-
7
- export default Label;
@@ -1,20 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { tv } from "tailwind-variants";
4
-
5
- type Props = HTMLAttributes<"nav">;
6
-
7
- export const pagination = tv({ base: "mx-auto flex w-full justify-center" });
8
-
9
- const { class: className, ...rest } = Astro.props;
10
- ---
11
-
12
- <nav
13
- role="navigation"
14
- aria-label="pagination"
15
- class={pagination({ class: className })}
16
- data-slot="pagination"
17
- {...rest}
18
- >
19
- <slot />
20
- </nav>
@@ -1,16 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { tv } from "tailwind-variants";
4
-
5
- type Props = HTMLAttributes<"ul"> & {
6
- children: any;
7
- };
8
-
9
- export const paginationContent = tv({ base: "flex flex-row items-center gap-1" });
10
-
11
- const { class: className, ...rest } = Astro.props;
12
- ---
13
-
14
- <ul class={paginationContent({ class: className })} data-slot="pagination-content" {...rest}>
15
- <slot />
16
- </ul>
@@ -1,35 +0,0 @@
1
- ---
2
- import Dots from "@tabler/icons/outline/dots.svg";
3
- import type { HTMLAttributes } from "astro/types";
4
- import { tv, type VariantProps } from "tailwind-variants";
5
-
6
- type Props = HTMLAttributes<"span"> & VariantProps<typeof paginationEllipsis>;
7
-
8
- export const paginationEllipsis = tv({
9
- base: "flex items-center justify-center",
10
- variants: {
11
- size: {
12
- "icon-sm": "size-9",
13
- icon: "size-11",
14
- "icon-lg": "size-12",
15
- },
16
- },
17
- defaultVariants: { size: "icon" },
18
- });
19
-
20
- const { class: className, size, ...rest } = Astro.props;
21
- ---
22
-
23
- <span
24
- aria-hidden
25
- class={paginationEllipsis({ size, class: className })}
26
- data-slot="pagination-ellipsis"
27
- {...rest}
28
- >
29
- <slot name="icon">
30
- <Dots class="size-4" />
31
- </slot>
32
- <slot>
33
- <span class="sr-only">More pages</span>
34
- </slot>
35
- </span>
@@ -1,16 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { tv } from "tailwind-variants";
4
-
5
- type Props = HTMLAttributes<"li"> & {
6
- children: any;
7
- };
8
-
9
- export const paginationItem = tv({ base: "" });
10
-
11
- const { class: className, ...rest } = Astro.props;
12
- ---
13
-
14
- <li class={paginationItem({ class: className })} data-slot="pagination-item" {...rest}>
15
- <slot />
16
- </li>
@@ -1,24 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import type { VariantProps } from "tailwind-variants";
4
-
5
- import { ButtonVariants } from "@/components/starwind/button";
6
-
7
- type Props = HTMLAttributes<"a"> &
8
- Omit<VariantProps<typeof ButtonVariants.button>, "variant"> & {
9
- isActive?: boolean;
10
- };
11
-
12
- export const paginationLink = ButtonVariants.button;
13
-
14
- const { class: className, isActive, size = "icon", ...rest } = Astro.props;
15
- ---
16
-
17
- <a
18
- aria-current={isActive ? "page" : undefined}
19
- class={ButtonVariants.button({ variant: isActive ? "outline" : "ghost", size, class: className })}
20
- data-slot="pagination-link"
21
- {...rest}
22
- >
23
- <slot />
24
- </a>
@@ -1,30 +0,0 @@
1
- ---
2
- import ChevronRight from "@tabler/icons/outline/chevron-right.svg";
3
- import type { HTMLAttributes } from "astro/types";
4
- import { tv, type VariantProps } from "tailwind-variants";
5
-
6
- import { ButtonVariants } from "@/components/starwind/button";
7
-
8
- import PaginationLink from "./PaginationLink.astro";
9
-
10
- type Props = HTMLAttributes<"a"> & {
11
- size?: VariantProps<typeof ButtonVariants.button>["size"];
12
- };
13
-
14
- export const paginationNext = tv({ base: "group gap-1" });
15
-
16
- const { class: className, size = "md", ...rest } = Astro.props;
17
- ---
18
-
19
- <PaginationLink
20
- aria-label="Go to next page"
21
- size={size}
22
- class={paginationNext({ class: className })}
23
- data-slot="pagination-next"
24
- {...rest}
25
- >
26
- <slot />
27
- <slot name="icon">
28
- <ChevronRight class="size-4 transition-transform group-hover:translate-x-1" />
29
- </slot>
30
- </PaginationLink>
@@ -1,30 +0,0 @@
1
- ---
2
- import ChevronLeft from "@tabler/icons/outline/chevron-left.svg";
3
- import type { HTMLAttributes } from "astro/types";
4
- import { tv, type VariantProps } from "tailwind-variants";
5
-
6
- import { ButtonVariants } from "@/components/starwind/button";
7
-
8
- import PaginationLink from "./PaginationLink.astro";
9
-
10
- type Props = HTMLAttributes<"a"> & {
11
- size?: VariantProps<typeof ButtonVariants.button>["size"];
12
- };
13
-
14
- export const paginationPrevious = tv({ base: "group gap-1" });
15
-
16
- const { class: className, size = "md", ...rest } = Astro.props;
17
- ---
18
-
19
- <PaginationLink
20
- aria-label="Go to previous page"
21
- size={size}
22
- class={paginationPrevious({ class: className })}
23
- data-slot="pagination-previous"
24
- {...rest}
25
- >
26
- <slot name="icon">
27
- <ChevronLeft class="size-4 transition-transform group-hover:-translate-x-1" />
28
- </slot>
29
- <slot />
30
- </PaginationLink>
@@ -1,38 +0,0 @@
1
- import Pagination, { pagination } from "./Pagination.astro";
2
- import PaginationContent, { paginationContent } from "./PaginationContent.astro";
3
- import PaginationEllipsis, { paginationEllipsis } from "./PaginationEllipsis.astro";
4
- import PaginationItem, { paginationItem } from "./PaginationItem.astro";
5
- import PaginationLink, { paginationLink } from "./PaginationLink.astro";
6
- import PaginationNext, { paginationNext } from "./PaginationNext.astro";
7
- import PaginationPrevious, { paginationPrevious } from "./PaginationPrevious.astro";
8
-
9
- const PaginationVariants = {
10
- pagination,
11
- paginationContent,
12
- paginationEllipsis,
13
- paginationItem,
14
- paginationLink,
15
- paginationNext,
16
- paginationPrevious,
17
- };
18
-
19
- export {
20
- Pagination,
21
- PaginationContent,
22
- PaginationEllipsis,
23
- PaginationItem,
24
- PaginationLink,
25
- PaginationNext,
26
- PaginationPrevious,
27
- PaginationVariants,
28
- };
29
-
30
- export default {
31
- Root: Pagination,
32
- Content: PaginationContent,
33
- Ellipsis: PaginationEllipsis,
34
- Item: PaginationItem,
35
- Link: PaginationLink,
36
- Next: PaginationNext,
37
- Previous: PaginationPrevious,
38
- };
@@ -1,154 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { tv } from "tailwind-variants";
4
-
5
- type Props = HTMLAttributes<"div"> & {
6
- /**
7
- * Current value of the progress bar (omit for indeterminate state)
8
- */
9
- value?: number;
10
- /**
11
- * Maximum value for the progress bar (default: 100)
12
- */
13
- max?: number;
14
- /**
15
- * Color variant for the progress indicator (default: default)
16
- */
17
- variant?: "default" | "primary" | "secondary" | "info" | "success" | "warning" | "error";
18
- };
19
-
20
- const { class: className, value, max = 100, variant = "default", ...rest } = Astro.props;
21
-
22
- const isIndeterminate = value == null;
23
- const valuePercent = isIndeterminate ? undefined : Math.round((value / max) * 100);
24
- const valueText = isIndeterminate ? undefined : `${valuePercent}%`;
25
-
26
- export const progress = tv({
27
- base: ["starwind-progress-bar", "bg-muted h-2 w-full overflow-hidden rounded-full"],
28
- variants: {
29
- variant: {
30
- indeterminate: "relative",
31
- },
32
- },
33
- });
34
-
35
- export const progressIndicator = tv({
36
- base: ["starwind-progress-indicator", "h-full w-full flex-1 transition-transform"],
37
- variants: {
38
- variant: {
39
- indeterminate: "absolute inset-y-0 start-0 w-3/4",
40
- },
41
- color: {
42
- primary: "bg-primary",
43
- secondary: "bg-secondary",
44
- default: "bg-foreground",
45
- info: "bg-info",
46
- success: "bg-success",
47
- warning: "bg-warning",
48
- error: "bg-error",
49
- },
50
- },
51
- defaultVariants: {
52
- color: "primary",
53
- },
54
- });
55
-
56
- const indicator = progressIndicator;
57
-
58
- const progressClasses = progress({
59
- variant: isIndeterminate ? "indeterminate" : undefined,
60
- class: className,
61
- });
62
-
63
- const indicatorClasses = indicator({
64
- variant: isIndeterminate ? "indeterminate" : undefined,
65
- color: variant,
66
- });
67
-
68
- const indicatorStyle = isIndeterminate
69
- ? ""
70
- : `transform: translateX(-${100 - (valuePercent ?? 0)}%);`;
71
- ---
72
-
73
- <div
74
- role="progressbar"
75
- aria-valuemin={0}
76
- aria-valuemax={max}
77
- aria-valuenow={isIndeterminate ? undefined : value}
78
- aria-valuetext={valueText}
79
- class:list={[progressClasses]}
80
- data-value={value}
81
- data-max={max}
82
- data-indeterminate={isIndeterminate}
83
- data-slot="progress"
84
- {...rest}
85
- >
86
- <div class:list={[indicatorClasses]} style={indicatorStyle}></div>
87
- </div>
88
-
89
- <script>
90
- class ProgressHandler {
91
- private progressElement: HTMLElement;
92
- private observer!: MutationObserver;
93
-
94
- constructor(progressElement: HTMLElement) {
95
- this.progressElement = progressElement;
96
- this.setupMutationObserver();
97
- this.updateProgress(); // Initial update
98
- }
99
-
100
- private setupMutationObserver(): void {
101
- // Create a MutationObserver to watch for data-value attribute changes
102
- this.observer = new MutationObserver((mutations) => {
103
- mutations.forEach((mutation) => {
104
- if (mutation.attributeName === "data-value" || mutation.attributeName === "data-max") {
105
- this.updateProgress();
106
- }
107
- });
108
- });
109
-
110
- // Start observing
111
- this.observer.observe(this.progressElement, { attributes: true });
112
- }
113
-
114
- private updateProgress(): void {
115
- const value = Number(this.progressElement.getAttribute("data-value"));
116
- const max = Number(this.progressElement.getAttribute("data-max") || 100);
117
- const isIndeterminate = this.progressElement.hasAttribute("data-indeterminate")
118
- ? this.progressElement.getAttribute("data-indeterminate") === "true"
119
- : value == null;
120
-
121
- // Update ARIA attributes
122
- if (!isIndeterminate) {
123
- const valuePercent = Math.round((value / max) * 100);
124
- this.progressElement.setAttribute("aria-valuenow", String(value));
125
- this.progressElement.setAttribute("aria-valuetext", `${valuePercent}%`);
126
-
127
- // Update indicator position
128
- const indicator = this.progressElement.querySelector("div");
129
- if (indicator) {
130
- indicator.style.transform = `translateX(-${100 - valuePercent}%)`;
131
- }
132
- }
133
- }
134
-
135
- // Clean up method to disconnect observer
136
- public destroy(): void {
137
- this.observer.disconnect();
138
- }
139
- }
140
-
141
- // Store instances in a WeakMap to avoid memory leaks
142
- const progressInstances = new WeakMap<HTMLElement, ProgressHandler>();
143
-
144
- const setupProgressBars = () => {
145
- document.querySelectorAll<HTMLElement>(".starwind-progress-bar").forEach((progressElement) => {
146
- if (!progressInstances.has(progressElement)) {
147
- progressInstances.set(progressElement, new ProgressHandler(progressElement));
148
- }
149
- });
150
- };
151
-
152
- setupProgressBars();
153
- document.addEventListener("astro:after-swap", setupProgressBars);
154
- </script>
@@ -1,10 +0,0 @@
1
- import Progress, { progress, progressIndicator } from "./Progress.astro";
2
-
3
- const ProgressVariants = {
4
- progress,
5
- progressIndicator,
6
- };
7
-
8
- export { Progress, ProgressVariants };
9
-
10
- export default Progress;
@@ -1,157 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { tv } from "tailwind-variants";
4
-
5
- type Props = HTMLAttributes<"fieldset"> & {
6
- /**
7
- * Value for the radio group
8
- */
9
- value?: string;
10
- /**
11
- * Default value for the radio group
12
- */
13
- defaultValue?: string;
14
- /**
15
- * Legend for the radio group
16
- */
17
- legend?: string;
18
- /**
19
- * Whether the radio group is disabled
20
- */
21
- disabled?: boolean;
22
- /**
23
- * Orientation of the radio group
24
- */
25
- orientation?: "horizontal" | "vertical";
26
- };
27
-
28
- export const radioGroup = tv({
29
- base: "starwind-radio-group disabled:cursor-not-allowed disabled:opacity-70",
30
- variants: {
31
- orientation: {
32
- vertical: "grid gap-3",
33
- horizontal: "flex flex-row items-center gap-3",
34
- },
35
- },
36
- defaultVariants: {
37
- orientation: "vertical",
38
- },
39
- });
40
-
41
- const {
42
- class: className,
43
- value,
44
- defaultValue,
45
- legend,
46
- disabled = false,
47
- orientation = "vertical",
48
- ...rest
49
- } = Astro.props;
50
- ---
51
-
52
- <fieldset
53
- class:list={[radioGroup({ orientation, class: className })]}
54
- data-value={value || defaultValue}
55
- disabled={disabled}
56
- data-slot="radio-group"
57
- {...rest}
58
- >
59
- {legend && <legend class="sr-only">{legend}</legend>}
60
- <slot />
61
- </fieldset>
62
-
63
- <script>
64
- import type { RadioGroupChangeEvent } from "./RadioGroupTypes";
65
-
66
- class RadioGroupHandler {
67
- private radioGroup: HTMLFieldSetElement;
68
- private radioInputs: NodeListOf<HTMLInputElement> | undefined;
69
- private radioGroupId: string | undefined;
70
-
71
- constructor(radioGroup: HTMLFieldSetElement, idx: number) {
72
- this.radioGroup = radioGroup;
73
- this.radioGroupId = radioGroup.id || `starwind-radio-group-${idx}`;
74
- this.radioInputs = radioGroup.querySelectorAll<HTMLInputElement>('input[type="radio"]');
75
- this.init();
76
- }
77
-
78
- private init() {
79
- // Initialize checked state based on data-value
80
- this.syncWithDataValue();
81
-
82
- // Setup event listeners
83
- this.setupEvents();
84
- }
85
-
86
- private syncWithDataValue() {
87
- const initialValue = this.radioGroup.dataset.value;
88
- if (!initialValue || !this.radioInputs) return;
89
-
90
- // Find the radio input with the matching value and check it
91
- this.radioInputs.forEach((input) => {
92
- if (input.value === initialValue) {
93
- input.checked = true;
94
- } else {
95
- input.checked = false;
96
- }
97
- });
98
- }
99
-
100
- private setupEvents() {
101
- // Listen for changes to update the fieldset's data-value attribute
102
- this.radioGroup.addEventListener("change", this.handleChange.bind(this));
103
- }
104
-
105
- private handleChange(e: Event) {
106
- const target = e.target as HTMLInputElement;
107
- // console.log("target", target);
108
- if (target.type !== "radio") return;
109
-
110
- // Update the data-value attribute
111
- this.radioGroup.dataset.value = target.value;
112
-
113
- // Ensure all other radio buttons in the group are unchecked
114
- if (this.radioInputs) {
115
- this.radioInputs.forEach((radio) => {
116
- if (radio !== target) {
117
- radio.checked = false;
118
- }
119
- });
120
- }
121
-
122
- // Explicitly mark the clicked radio as checked
123
- target.checked = true;
124
-
125
- // Dispatch custom event for external listeners
126
- this.dispatchChangeEvent(target.value);
127
- }
128
-
129
- private dispatchChangeEvent(value: string) {
130
- const event = new CustomEvent<RadioGroupChangeEvent["detail"]>("starwind:value-change", {
131
- bubbles: true,
132
- detail: {
133
- value: value,
134
- radioGroupId: this.radioGroupId,
135
- },
136
- });
137
- this.radioGroup.dispatchEvent(event);
138
- }
139
- }
140
-
141
- // Store instances in a WeakMap to avoid memory leaks
142
- const radioGroupInstances = new WeakMap<HTMLElement, RadioGroupHandler>();
143
-
144
- const setupRadioGroups = () => {
145
- document
146
- .querySelectorAll<HTMLFieldSetElement>(".starwind-radio-group")
147
- .forEach((radioGroup, idx) => {
148
- if (!radioGroupInstances.has(radioGroup)) {
149
- radioGroupInstances.set(radioGroup, new RadioGroupHandler(radioGroup, idx));
150
- }
151
- });
152
- };
153
-
154
- // Initialize on page load and after Astro view transitions
155
- setupRadioGroups();
156
- document.addEventListener("astro:after-swap", setupRadioGroups);
157
- </script>