@aback-ui/ui 0.0.0-stage → 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.
Files changed (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -2
  3. package/dist/components/accordion.d.ts +8 -0
  4. package/dist/components/accordion.d.ts.map +1 -0
  5. package/dist/components/accordion.js +17 -0
  6. package/dist/components/accordion.js.map +1 -0
  7. package/dist/components/alert-dialog.d.ts +15 -0
  8. package/dist/components/alert-dialog.d.ts.map +1 -0
  9. package/dist/components/alert-dialog.js +38 -0
  10. package/dist/components/alert-dialog.js.map +1 -0
  11. package/dist/components/alert.d.ts +12 -0
  12. package/dist/components/alert.d.ts.map +1 -0
  13. package/dist/components/alert.js +28 -0
  14. package/dist/components/alert.js.map +1 -0
  15. package/dist/components/avatar.d.ts +25 -0
  16. package/dist/components/avatar.d.ts.map +1 -0
  17. package/dist/components/avatar.js +34 -0
  18. package/dist/components/avatar.js.map +1 -0
  19. package/dist/components/badge.d.ts +15 -0
  20. package/dist/components/badge.d.ts.map +1 -0
  21. package/dist/components/badge.js +27 -0
  22. package/dist/components/badge.js.map +1 -0
  23. package/dist/components/breadcrumbs.d.ts +11 -0
  24. package/dist/components/breadcrumbs.d.ts.map +1 -0
  25. package/dist/components/breadcrumbs.js +11 -0
  26. package/dist/components/breadcrumbs.js.map +1 -0
  27. package/dist/components/button.d.ts +12 -0
  28. package/dist/components/button.d.ts.map +1 -0
  29. package/dist/components/button.js +43 -0
  30. package/dist/components/button.js.map +1 -0
  31. package/dist/components/calendar.d.ts +25 -0
  32. package/dist/components/calendar.d.ts.map +1 -0
  33. package/dist/components/calendar.js +87 -0
  34. package/dist/components/calendar.js.map +1 -0
  35. package/dist/components/card.d.ts +12 -0
  36. package/dist/components/card.d.ts.map +1 -0
  37. package/dist/components/card.js +25 -0
  38. package/dist/components/card.js.map +1 -0
  39. package/dist/components/checkbox.d.ts +5 -0
  40. package/dist/components/checkbox.d.ts.map +1 -0
  41. package/dist/components/checkbox.js +10 -0
  42. package/dist/components/checkbox.js.map +1 -0
  43. package/dist/components/code-block.d.ts +25 -0
  44. package/dist/components/code-block.d.ts.map +1 -0
  45. package/dist/components/code-block.js +19 -0
  46. package/dist/components/code-block.js.map +1 -0
  47. package/dist/components/collapsible.d.ts +7 -0
  48. package/dist/components/collapsible.d.ts.map +1 -0
  49. package/dist/components/collapsible.js +11 -0
  50. package/dist/components/collapsible.js.map +1 -0
  51. package/dist/components/combobox.d.ts +40 -0
  52. package/dist/components/combobox.d.ts.map +1 -0
  53. package/dist/components/combobox.js +27 -0
  54. package/dist/components/combobox.js.map +1 -0
  55. package/dist/components/command.d.ts +24 -0
  56. package/dist/components/command.d.ts.map +1 -0
  57. package/dist/components/command.js +35 -0
  58. package/dist/components/command.js.map +1 -0
  59. package/dist/components/copy-button.d.ts +32 -0
  60. package/dist/components/copy-button.d.ts.map +1 -0
  61. package/dist/components/copy-button.js +65 -0
  62. package/dist/components/copy-button.js.map +1 -0
  63. package/dist/components/date-picker.d.ts +66 -0
  64. package/dist/components/date-picker.d.ts.map +1 -0
  65. package/dist/components/date-picker.js +75 -0
  66. package/dist/components/date-picker.js.map +1 -0
  67. package/dist/components/description-list.d.ts +29 -0
  68. package/dist/components/description-list.d.ts.map +1 -0
  69. package/dist/components/description-list.js +28 -0
  70. package/dist/components/description-list.js.map +1 -0
  71. package/dist/components/dialog.d.ts +16 -0
  72. package/dist/components/dialog.d.ts.map +1 -0
  73. package/dist/components/dialog.js +29 -0
  74. package/dist/components/dialog.js.map +1 -0
  75. package/dist/components/dropdown-menu.d.ts +26 -0
  76. package/dist/components/dropdown-menu.d.ts.map +1 -0
  77. package/dist/components/dropdown-menu.js +41 -0
  78. package/dist/components/dropdown-menu.js.map +1 -0
  79. package/dist/components/dropzone.d.ts +47 -0
  80. package/dist/components/dropzone.d.ts.map +1 -0
  81. package/dist/components/dropzone.js +125 -0
  82. package/dist/components/dropzone.js.map +1 -0
  83. package/dist/components/empty-state.d.ts +10 -0
  84. package/dist/components/empty-state.d.ts.map +1 -0
  85. package/dist/components/empty-state.js +8 -0
  86. package/dist/components/empty-state.js.map +1 -0
  87. package/dist/components/field.d.ts +17 -0
  88. package/dist/components/field.d.ts.map +1 -0
  89. package/dist/components/field.js +13 -0
  90. package/dist/components/field.js.map +1 -0
  91. package/dist/components/hover-card.d.ts +7 -0
  92. package/dist/components/hover-card.d.ts.map +1 -0
  93. package/dist/components/hover-card.js +11 -0
  94. package/dist/components/hover-card.js.map +1 -0
  95. package/dist/components/input-group.d.ts +26 -0
  96. package/dist/components/input-group.d.ts.map +1 -0
  97. package/dist/components/input-group.js +41 -0
  98. package/dist/components/input-group.js.map +1 -0
  99. package/dist/components/input.d.ts +5 -0
  100. package/dist/components/input.d.ts.map +1 -0
  101. package/dist/components/input.js +19 -0
  102. package/dist/components/input.js.map +1 -0
  103. package/dist/components/kbd.d.ts +4 -0
  104. package/dist/components/kbd.d.ts.map +1 -0
  105. package/dist/components/kbd.js +7 -0
  106. package/dist/components/kbd.js.map +1 -0
  107. package/dist/components/label.d.ts +4 -0
  108. package/dist/components/label.d.ts.map +1 -0
  109. package/dist/components/label.js +9 -0
  110. package/dist/components/label.js.map +1 -0
  111. package/dist/components/layout.d.ts +69 -0
  112. package/dist/components/layout.d.ts.map +1 -0
  113. package/dist/components/layout.js +61 -0
  114. package/dist/components/layout.js.map +1 -0
  115. package/dist/components/page-header.d.ts +20 -0
  116. package/dist/components/page-header.d.ts.map +1 -0
  117. package/dist/components/page-header.js +11 -0
  118. package/dist/components/page-header.js.map +1 -0
  119. package/dist/components/pagination.d.ts +20 -0
  120. package/dist/components/pagination.d.ts.map +1 -0
  121. package/dist/components/pagination.js +51 -0
  122. package/dist/components/pagination.js.map +1 -0
  123. package/dist/components/popover.d.ts +8 -0
  124. package/dist/components/popover.d.ts.map +1 -0
  125. package/dist/components/popover.js +12 -0
  126. package/dist/components/popover.js.map +1 -0
  127. package/dist/components/progress.d.ts +12 -0
  128. package/dist/components/progress.d.ts.map +1 -0
  129. package/dist/components/progress.js +11 -0
  130. package/dist/components/progress.js.map +1 -0
  131. package/dist/components/radio-group.d.ts +6 -0
  132. package/dist/components/radio-group.d.ts.map +1 -0
  133. package/dist/components/radio-group.js +12 -0
  134. package/dist/components/radio-group.js.map +1 -0
  135. package/dist/components/rating.d.ts +33 -0
  136. package/dist/components/rating.d.ts.map +1 -0
  137. package/dist/components/rating.js +52 -0
  138. package/dist/components/rating.js.map +1 -0
  139. package/dist/components/reading-progress.d.ts +16 -0
  140. package/dist/components/reading-progress.d.ts.map +1 -0
  141. package/dist/components/reading-progress.js +54 -0
  142. package/dist/components/reading-progress.js.map +1 -0
  143. package/dist/components/relative-time.d.ts +26 -0
  144. package/dist/components/relative-time.d.ts.map +1 -0
  145. package/dist/components/relative-time.js +83 -0
  146. package/dist/components/relative-time.js.map +1 -0
  147. package/dist/components/scroll-area.d.ts +10 -0
  148. package/dist/components/scroll-area.d.ts.map +1 -0
  149. package/dist/components/scroll-area.js +9 -0
  150. package/dist/components/scroll-area.js.map +1 -0
  151. package/dist/components/section-heading.d.ts +28 -0
  152. package/dist/components/section-heading.d.ts.map +1 -0
  153. package/dist/components/section-heading.js +23 -0
  154. package/dist/components/section-heading.js.map +1 -0
  155. package/dist/components/select.d.ts +5 -0
  156. package/dist/components/select.d.ts.map +1 -0
  157. package/dist/components/select.js +17 -0
  158. package/dist/components/select.js.map +1 -0
  159. package/dist/components/separator.d.ts +5 -0
  160. package/dist/components/separator.d.ts.map +1 -0
  161. package/dist/components/separator.js +9 -0
  162. package/dist/components/separator.js.map +1 -0
  163. package/dist/components/share-buttons.d.ts +25 -0
  164. package/dist/components/share-buttons.d.ts.map +1 -0
  165. package/dist/components/share-buttons.js +67 -0
  166. package/dist/components/share-buttons.js.map +1 -0
  167. package/dist/components/sheet.d.ts +18 -0
  168. package/dist/components/sheet.d.ts.map +1 -0
  169. package/dist/components/sheet.js +35 -0
  170. package/dist/components/sheet.js.map +1 -0
  171. package/dist/components/skeleton.d.ts +4 -0
  172. package/dist/components/skeleton.d.ts.map +1 -0
  173. package/dist/components/skeleton.js +7 -0
  174. package/dist/components/skeleton.js.map +1 -0
  175. package/dist/components/skip-link.d.ts +13 -0
  176. package/dist/components/skip-link.d.ts.map +1 -0
  177. package/dist/components/skip-link.js +12 -0
  178. package/dist/components/skip-link.js.map +1 -0
  179. package/dist/components/slider.d.ts +9 -0
  180. package/dist/components/slider.d.ts.map +1 -0
  181. package/dist/components/slider.js +9 -0
  182. package/dist/components/slider.js.map +1 -0
  183. package/dist/components/spinner.d.ts +14 -0
  184. package/dist/components/spinner.d.ts.map +1 -0
  185. package/dist/components/spinner.js +13 -0
  186. package/dist/components/spinner.js.map +1 -0
  187. package/dist/components/stat.d.ts +54 -0
  188. package/dist/components/stat.d.ts.map +1 -0
  189. package/dist/components/stat.js +62 -0
  190. package/dist/components/stat.js.map +1 -0
  191. package/dist/components/steps.d.ts +21 -0
  192. package/dist/components/steps.d.ts.map +1 -0
  193. package/dist/components/steps.js +26 -0
  194. package/dist/components/steps.js.map +1 -0
  195. package/dist/components/switch.d.ts +5 -0
  196. package/dist/components/switch.d.ts.map +1 -0
  197. package/dist/components/switch.js +9 -0
  198. package/dist/components/switch.js.map +1 -0
  199. package/dist/components/table-of-contents.d.ts +28 -0
  200. package/dist/components/table-of-contents.d.ts.map +1 -0
  201. package/dist/components/table-of-contents.js +79 -0
  202. package/dist/components/table-of-contents.js.map +1 -0
  203. package/dist/components/table.d.ts +15 -0
  204. package/dist/components/table.d.ts.map +1 -0
  205. package/dist/components/table.js +29 -0
  206. package/dist/components/table.js.map +1 -0
  207. package/dist/components/tabs.d.ts +8 -0
  208. package/dist/components/tabs.d.ts.map +1 -0
  209. package/dist/components/tabs.js +16 -0
  210. package/dist/components/tabs.js.map +1 -0
  211. package/dist/components/textarea.d.ts +5 -0
  212. package/dist/components/textarea.d.ts.map +1 -0
  213. package/dist/components/textarea.js +18 -0
  214. package/dist/components/textarea.js.map +1 -0
  215. package/dist/components/theme-toggle.d.ts +43 -0
  216. package/dist/components/theme-toggle.d.ts.map +1 -0
  217. package/dist/components/theme-toggle.js +99 -0
  218. package/dist/components/theme-toggle.js.map +1 -0
  219. package/dist/components/toaster.d.ts +27 -0
  220. package/dist/components/toaster.d.ts.map +1 -0
  221. package/dist/components/toaster.js +52 -0
  222. package/dist/components/toaster.js.map +1 -0
  223. package/dist/components/toggle-group.d.ts +12 -0
  224. package/dist/components/toggle-group.d.ts.map +1 -0
  225. package/dist/components/toggle-group.js +39 -0
  226. package/dist/components/toggle-group.js.map +1 -0
  227. package/dist/components/tooltip.d.ts +10 -0
  228. package/dist/components/tooltip.d.ts.map +1 -0
  229. package/dist/components/tooltip.js +14 -0
  230. package/dist/components/tooltip.js.map +1 -0
  231. package/dist/index.d.ts +59 -0
  232. package/dist/index.d.ts.map +1 -0
  233. package/dist/index.js +59 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/lib/utils.d.ts +3 -0
  236. package/dist/lib/utils.d.ts.map +1 -0
  237. package/dist/lib/utils.js +6 -0
  238. package/dist/lib/utils.js.map +1 -0
  239. package/package.json +76 -4
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { HoverCard as HoverCardPrimitive } from "radix-ui";
4
+ import { cn } from "../lib/utils.js";
5
+ const HoverCard = HoverCardPrimitive.Root;
6
+ const HoverCardTrigger = HoverCardPrimitive.Trigger;
7
+ function HoverCardContent({ className, align = "center", sideOffset = 8, ...props }) {
8
+ return (_jsx(HoverCardPrimitive.Portal, { children: _jsx(HoverCardPrimitive.Content, { "data-slot": "hover-card-content", align: align, sideOffset: sideOffset, className: cn("z-50 w-64 border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none", "duration-150 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95", "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", className), ...props }) }));
9
+ }
10
+ export { HoverCard, HoverCardTrigger, HoverCardContent };
11
+ //# sourceMappingURL=hover-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover-card.js","sourceRoot":"","sources":["../../src/components/hover-card.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC;AAC1C,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC;AAEpD,SAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,KAAK,GAAG,QAAQ,EAChB,UAAU,GAAG,CAAC,EACd,GAAG,KAAK,EACgD;IACxD,OAAO,CACL,KAAC,kBAAkB,CAAC,MAAM,cACxB,KAAC,kBAAkB,CAAC,OAAO,iBACf,oBAAoB,EAC9B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE,CACX,8FAA8F,EAC9F,oGAAoG,EACpG,gGAAgG,EAChG,SAAS,CACV,KACG,KAAK,GACT,GACwB,CAC7B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import * as React from "react";
2
+ /**
3
+ * A 36px input frame that joins a control with prefixes and suffixes: units,
4
+ * currency, a search icon, or a small button. The frame owns the border and
5
+ * the focus ring, so the affixes and the field read as one control.
6
+ */
7
+ declare function InputGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
8
+ /** The text control inside an InputGroup. Accepts every native input prop. */
9
+ declare const InputGroupInput: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
10
+ export interface InputGroupAddonProps extends React.ComponentProps<"div"> {
11
+ /** Which side of the control the addon sits on. Sets the dividing border. */
12
+ align?: "start" | "end";
13
+ /**
14
+ * `text` is a boxed segment for units and prefixes ("$", "%", "https://").
15
+ * `inline` sits inside the field for an icon or a compact button.
16
+ */
17
+ variant?: "text" | "inline";
18
+ }
19
+ /**
20
+ * A prefix or suffix. Clicking a non-interactive addon focuses the control,
21
+ * the way a native label would. Give the addon an id and add it to the
22
+ * control's `aria-describedby` when it carries meaning, such as a unit.
23
+ */
24
+ declare function InputGroupAddon({ align, variant, className, onMouseDown, ...props }: InputGroupAddonProps): React.JSX.Element;
25
+ export { InputGroup, InputGroupAddon, InputGroupInput };
26
+ //# sourceMappingURL=input-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-group.d.ts","sourceRoot":"","sources":["../../src/components/input-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B;;;;GAIG;AACH,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAiBvE;AAED,8EAA8E;AAC9E,QAAA,MAAM,eAAe,8KAepB,CAAC;AAGF,MAAM,WAAW,oBAAqB,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IACvE,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC7B;AAED;;;;GAIG;AACH,iBAAS,eAAe,CAAC,EACvB,KAAe,EACf,OAAgB,EAChB,SAAS,EACT,WAAW,EACX,GAAG,KAAK,EACT,EAAE,oBAAoB,qBA8BtB;AAED,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/utils.js";
4
+ import { Input } from "./input.js";
5
+ const CONTROL_SELECTOR = "[data-slot='input-group-control']";
6
+ /**
7
+ * A 36px input frame that joins a control with prefixes and suffixes: units,
8
+ * currency, a search icon, or a small button. The frame owns the border and
9
+ * the focus ring, so the affixes and the field read as one control.
10
+ */
11
+ function InputGroup({ className, ...props }) {
12
+ return (_jsx("div", { "data-slot": "input-group", className: cn("flex h-9 w-full min-w-0 items-stretch border border-input bg-transparent shadow-xs dark:bg-input/30", "transition-[border-color,box-shadow] duration-200", "has-[[data-slot=input-group-control]:focus-visible]:border-ring", "has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-focus-ring", "has-[[data-slot=input-group-control]:focus-visible]:ring-offset-2 has-[[data-slot=input-group-control]:focus-visible]:ring-offset-background", "has-[[data-slot=input-group-control][aria-invalid=true]]:border-destructive", "has-[[data-slot=input-group-control]:disabled]:cursor-not-allowed has-[[data-slot=input-group-control]:disabled]:opacity-50", className), ...props }));
13
+ }
14
+ /** The text control inside an InputGroup. Accepts every native input prop. */
15
+ const InputGroupInput = React.forwardRef(function InputGroupInput({ className, ...props }, ref) {
16
+ return (_jsx(Input, { ref: ref, "data-slot": "input-group-control", className: cn("h-full min-w-0 flex-1 border-0 bg-transparent shadow-none", "focus-visible:ring-0 focus-visible:ring-offset-0 dark:bg-transparent", className), ...props }));
17
+ });
18
+ InputGroupInput.displayName = "InputGroupInput";
19
+ /**
20
+ * A prefix or suffix. Clicking a non-interactive addon focuses the control,
21
+ * the way a native label would. Give the addon an id and add it to the
22
+ * control's `aria-describedby` when it carries meaning, such as a unit.
23
+ */
24
+ function InputGroupAddon({ align = "start", variant = "text", className, onMouseDown, ...props }) {
25
+ function handleMouseDown(event) {
26
+ onMouseDown?.(event);
27
+ if (event.defaultPrevented)
28
+ return;
29
+ const target = event.target;
30
+ if (target.closest("button, a, input, select, textarea"))
31
+ return;
32
+ const control = event.currentTarget.parentElement?.querySelector(CONTROL_SELECTOR);
33
+ if (!control)
34
+ return;
35
+ event.preventDefault();
36
+ control.focus();
37
+ }
38
+ return (_jsx("div", { "data-slot": "input-group-addon", "data-align": align, "data-variant": variant, onMouseDown: handleMouseDown, className: cn("flex shrink-0 select-none items-center whitespace-nowrap text-sm text-muted-foreground", "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", variant === "text" && "border-input bg-muted/40 px-3", variant === "text" && (align === "start" ? "border-r" : "border-l"), variant === "inline" && (align === "start" ? "pl-3" : "gap-1 pr-2"), align === "end" && "order-last", className), ...props }));
39
+ }
40
+ export { InputGroup, InputGroupAddon, InputGroupInput };
41
+ //# sourceMappingURL=input-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-group.js","sourceRoot":"","sources":["../../src/components/input-group.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAE7D;;;;GAIG;AACH,SAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACtE,OAAO,CACL,2BACY,aAAa,EACvB,SAAS,EAAE,EAAE,CACX,qGAAqG,EACrG,mDAAmD,EACnD,iEAAiE,EACjE,gIAAgI,EAChI,8IAA8I,EAC9I,6EAA6E,EAC7E,6HAA6H,EAC7H,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CACtC,SAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IACnD,OAAO,CACL,KAAC,KAAK,IACJ,GAAG,EAAE,GAAG,eACE,qBAAqB,EAC/B,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D,sEAAsE,EACtE,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AACF,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAYhD;;;;GAIG;AACH,SAAS,eAAe,CAAC,EACvB,KAAK,GAAG,OAAO,EACf,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,WAAW,EACX,GAAG,KAAK,EACa;IACrB,SAAS,eAAe,CAAC,KAAuC;QAC9D,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,gBAAgB;YAAE,OAAO;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,IAAI,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC;YAAE,OAAO;QACjE,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,aAAa,CAAc,gBAAgB,CAAC,CAAC;QAChG,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,OAAO,CACL,2BACY,mBAAmB,gBACjB,KAAK,kBACH,OAAO,EACrB,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAE,EAAE,CACX,wFAAwF,EACxF,mFAAmF,EACnF,OAAO,KAAK,MAAM,IAAI,+BAA+B,EACrD,OAAO,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,EACnE,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EACnE,KAAK,KAAK,KAAK,IAAI,YAAY,EAC/B,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import * as React from "react";
2
+ declare const inputClassName: string;
3
+ declare const Input: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
4
+ export { Input, inputClassName };
5
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,cAAc,QAST,CAAC;AAEZ,QAAA,MAAM,KAAK,8KAYV,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/utils.js";
4
+ const inputClassName = [
5
+ "flex h-9 w-full min-w-0 border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-xs",
6
+ "outline-none transition-[color,background-color,border-color,box-shadow] duration-200",
7
+ "placeholder:text-muted-foreground",
8
+ "file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground",
9
+ "focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
10
+ "disabled:cursor-not-allowed disabled:opacity-50",
11
+ "aria-invalid:border-destructive aria-invalid:ring-destructive/20",
12
+ "dark:bg-input/30",
13
+ ].join(" ");
14
+ const Input = React.forwardRef(function Input({ className, type, ...props }, ref) {
15
+ return (_jsx("input", { ref: ref, type: type, "data-slot": "input", className: cn(inputClassName, className), ...props }));
16
+ });
17
+ Input.displayName = "Input";
18
+ export { Input, inputClassName };
19
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,cAAc,GAAG;IACrB,wGAAwG;IACxG,uFAAuF;IACvF,mCAAmC;IACnC,gHAAgH;IAChH,+IAA+I;IAC/I,iDAAiD;IACjD,kEAAkE;IAClE,kBAAkB;CACnB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAC5B,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC/C,OAAO,CACL,gBACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,eACA,OAAO,EACjB,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,KACpC,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ declare function Kbd({ className, ...props }: React.ComponentProps<"kbd">): React.JSX.Element;
3
+ export { Kbd };
4
+ //# sourceMappingURL=kbd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../src/components/kbd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,iBAAS,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAahE;AAED,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ function Kbd({ className, ...props }) {
4
+ return (_jsx("kbd", { "data-slot": "kbd", className: cn("inline-flex h-5 min-w-5 items-center justify-center border border-border/60 bg-background px-1", "font-sans text-[10px] font-bold uppercase tracking-[0.12em] text-muted-foreground", "shadow-[0_1px_0_0_rgb(0_0_0/0.04)] dark:shadow-[0_1px_0_0_rgb(255_255_255/0.04)]", className), ...props }));
5
+ }
6
+ export { Kbd };
7
+ //# sourceMappingURL=kbd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kbd.js","sourceRoot":"","sources":["../../src/components/kbd.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IAC/D,OAAO,CACL,2BACY,KAAK,EACf,SAAS,EAAE,EAAE,CACX,gGAAgG,EAChG,mFAAmF,EACnF,kFAAkF,EAClF,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import * as React from "react";
2
+ declare const Label: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, "ref"> & React.RefAttributes<HTMLLabelElement>>;
3
+ export { Label };
4
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/components/label.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,KAAK,8KAgBT,CAAC;AAGH,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/utils.js";
4
+ const Label = React.forwardRef(function Label({ className, ...props }, ref) {
5
+ return (_jsx("label", { ref: ref, "data-slot": "label", className: cn("flex items-center gap-1 text-sm font-medium leading-none text-foreground", "peer-disabled:cursor-not-allowed peer-disabled:opacity-70", className), ...props }));
6
+ });
7
+ Label.displayName = "Label";
8
+ export { Label };
9
+ //# sourceMappingURL=label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.js","sourceRoot":"","sources":["../../src/components/label.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAG5B,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG;IAC3C,OAAO,CACL,gBACE,GAAG,EAAE,GAAG,eACE,OAAO,EACjB,SAAS,EAAE,EAAE,CACX,0EAA0E,EAC1E,2DAA2D,EAC3D,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,69 @@
1
+ import * as React from "react";
2
+ declare const gapClasses: {
3
+ readonly none: "gap-0";
4
+ readonly xs: "gap-1";
5
+ readonly sm: "gap-2";
6
+ readonly md: "gap-4";
7
+ readonly lg: "gap-6";
8
+ readonly xl: "gap-8";
9
+ };
10
+ export type LayoutGap = keyof typeof gapClasses;
11
+ interface LayoutProps extends React.ComponentProps<"div"> {
12
+ /** Render the child element instead of a div, such as a `<main>` or `<section>`. */
13
+ asChild?: boolean;
14
+ }
15
+ declare const containerSizes: {
16
+ readonly sm: "max-w-2xl";
17
+ readonly md: "max-w-4xl";
18
+ readonly lg: "max-w-6xl";
19
+ readonly xl: "max-w-7xl";
20
+ readonly full: "max-w-full";
21
+ };
22
+ export interface ContainerProps extends LayoutProps {
23
+ size?: keyof typeof containerSizes;
24
+ }
25
+ /** A centred page column with the standard gutter: 16px on phones, 24px from md. */
26
+ declare function Container({ size, asChild, className, ...props }: ContainerProps): React.JSX.Element;
27
+ export interface StackProps extends LayoutProps {
28
+ gap?: LayoutGap;
29
+ }
30
+ /** A vertical flow with one gap between children. */
31
+ declare function Stack({ gap, asChild, className, ...props }: StackProps): React.JSX.Element;
32
+ declare const alignClasses: {
33
+ readonly start: "items-start";
34
+ readonly center: "items-center";
35
+ readonly end: "items-end";
36
+ readonly baseline: "items-baseline";
37
+ readonly stretch: "items-stretch";
38
+ };
39
+ declare const justifyClasses: {
40
+ readonly start: "justify-start";
41
+ readonly center: "justify-center";
42
+ readonly end: "justify-end";
43
+ readonly between: "justify-between";
44
+ };
45
+ export interface GroupProps extends LayoutProps {
46
+ gap?: LayoutGap;
47
+ align?: keyof typeof alignClasses;
48
+ justify?: keyof typeof justifyClasses;
49
+ /** Wrap onto new lines on narrow screens. On by default, so rows never overflow. */
50
+ wrap?: boolean;
51
+ }
52
+ /** A horizontal row for toolbars and action groups. */
53
+ declare function Group({ gap, align, justify, wrap, asChild, className, ...props }: GroupProps): React.JSX.Element;
54
+ declare const gridColumns: {
55
+ readonly 1: "grid-cols-1";
56
+ readonly 2: "grid-cols-1 sm:grid-cols-2";
57
+ readonly 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3";
58
+ readonly 4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4";
59
+ readonly 6: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-6";
60
+ };
61
+ export interface GridProps extends LayoutProps {
62
+ /** Columns at the widest breakpoint. Narrower screens step down to one or two. */
63
+ columns?: keyof typeof gridColumns;
64
+ gap?: LayoutGap;
65
+ }
66
+ /** A responsive card grid that starts at one column on phones. */
67
+ declare function Grid({ columns, gap, asChild, className, ...props }: GridProps): React.JSX.Element;
68
+ export { Container, Grid, Group, Stack };
69
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/components/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,QAAA,MAAM,UAAU;;;;;;;CAON,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,UAAU,CAAC;AAEhD,UAAU,WAAY,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IACvD,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,QAAA,MAAM,cAAc;;;;;;CAMV,CAAC;AAEX,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,IAAI,CAAC,EAAE,MAAM,OAAO,cAAc,CAAC;CACpC;AAED,oFAAoF;AACpF,iBAAS,SAAS,CAAC,EAAE,IAAW,EAAE,OAAe,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,qBASvF;AAED,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,qDAAqD;AACrD,iBAAS,KAAK,CAAC,EAAE,GAAU,EAAE,OAAe,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,qBAS9E;AAED,QAAA,MAAM,YAAY;;;;;;CAMR,CAAC;AAEX,QAAA,MAAM,cAAc;;;;;CAKV,CAAC;AAEX,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,OAAO,YAAY,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,OAAO,cAAc,CAAC;IACtC,oFAAoF;IACpF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,uDAAuD;AACvD,iBAAS,KAAK,CAAC,EACb,GAAU,EACV,KAAgB,EAChB,OAAiB,EACjB,IAAW,EACX,OAAe,EACf,SAAS,EACT,GAAG,KAAK,EACT,EAAE,UAAU,qBAgBZ;AAED,QAAA,MAAM,WAAW;;;;;;CAMP,CAAC;AAEX,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC5C,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,OAAO,WAAW,CAAC;IACnC,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED,kEAAkE;AAClE,iBAAS,IAAI,CAAC,EAAE,OAAW,EAAE,GAAU,EAAE,OAAe,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,qBASzF;AAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Slot } from "radix-ui";
3
+ import { cn } from "../lib/utils.js";
4
+ // Literal class names, so Tailwind can find every one of them in the source.
5
+ const gapClasses = {
6
+ none: "gap-0",
7
+ xs: "gap-1",
8
+ sm: "gap-2",
9
+ md: "gap-4",
10
+ lg: "gap-6",
11
+ xl: "gap-8",
12
+ };
13
+ const containerSizes = {
14
+ sm: "max-w-2xl",
15
+ md: "max-w-4xl",
16
+ lg: "max-w-6xl",
17
+ xl: "max-w-7xl",
18
+ full: "max-w-full",
19
+ };
20
+ /** A centred page column with the standard gutter: 16px on phones, 24px from md. */
21
+ function Container({ size = "lg", asChild = false, className, ...props }) {
22
+ const Comp = asChild ? Slot.Root : "div";
23
+ return (_jsx(Comp, { "data-slot": "container", className: cn("mx-auto w-full px-4 md:px-6", containerSizes[size], className), ...props }));
24
+ }
25
+ /** A vertical flow with one gap between children. */
26
+ function Stack({ gap = "md", asChild = false, className, ...props }) {
27
+ const Comp = asChild ? Slot.Root : "div";
28
+ return (_jsx(Comp, { "data-slot": "stack", className: cn("flex flex-col", gapClasses[gap], className), ...props }));
29
+ }
30
+ const alignClasses = {
31
+ start: "items-start",
32
+ center: "items-center",
33
+ end: "items-end",
34
+ baseline: "items-baseline",
35
+ stretch: "items-stretch",
36
+ };
37
+ const justifyClasses = {
38
+ start: "justify-start",
39
+ center: "justify-center",
40
+ end: "justify-end",
41
+ between: "justify-between",
42
+ };
43
+ /** A horizontal row for toolbars and action groups. */
44
+ function Group({ gap = "sm", align = "center", justify = "start", wrap = true, asChild = false, className, ...props }) {
45
+ const Comp = asChild ? Slot.Root : "div";
46
+ return (_jsx(Comp, { "data-slot": "group", className: cn("flex flex-row", wrap && "flex-wrap", gapClasses[gap], alignClasses[align], justifyClasses[justify], className), ...props }));
47
+ }
48
+ const gridColumns = {
49
+ 1: "grid-cols-1",
50
+ 2: "grid-cols-1 sm:grid-cols-2",
51
+ 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
52
+ 4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",
53
+ 6: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-6",
54
+ };
55
+ /** A responsive card grid that starts at one column on phones. */
56
+ function Grid({ columns = 3, gap = "md", asChild = false, className, ...props }) {
57
+ const Comp = asChild ? Slot.Root : "div";
58
+ return (_jsx(Comp, { "data-slot": "grid", className: cn("grid", gridColumns[columns], gapClasses[gap], className), ...props }));
59
+ }
60
+ export { Container, Grid, Group, Stack };
61
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/components/layout.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ export interface PageHeaderProps extends Omit<React.ComponentProps<"header">, "title"> {
3
+ title: React.ReactNode;
4
+ description?: React.ReactNode;
5
+ eyebrow?: React.ReactNode;
6
+ actions?: React.ReactNode;
7
+ /**
8
+ * Heading element for the title. Defaults to `h1`, which is the correct
9
+ * choice for a page. Pass `h2` or `h3` only when the header introduces a
10
+ * section below an existing page heading, such as a documentation preview.
11
+ */
12
+ as?: "h1" | "h2" | "h3";
13
+ }
14
+ /**
15
+ * The page title block. It renders the page's single <h1> by default.
16
+ * Breadcrumbs belong directly below this block, not inside it.
17
+ */
18
+ declare function PageHeader({ title, description, eyebrow, actions, as: Heading, className, ...props }: PageHeaderProps): React.JSX.Element;
19
+ export { PageHeader };
20
+ //# sourceMappingURL=page-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../src/components/page-header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACpF,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;;OAIG;IACH,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,iBAAS,UAAU,CAAC,EAClB,KAAK,EACL,WAAW,EACX,OAAO,EACP,OAAO,EACP,EAAE,EAAE,OAAc,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,qBAuBjB;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ /**
4
+ * The page title block. It renders the page's single <h1> by default.
5
+ * Breadcrumbs belong directly below this block, not inside it.
6
+ */
7
+ function PageHeader({ title, description, eyebrow, actions, as: Heading = "h1", className, ...props }) {
8
+ return (_jsxs("header", { "data-slot": "page-header", className: cn("flex flex-col gap-2", className), ...props, children: [eyebrow ? (_jsx("p", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: eyebrow })) : null, _jsx(Heading, { className: "text-3xl font-bold leading-tight tracking-tight text-foreground text-balance", children: title }), description ? (_jsx("p", { className: "max-w-3xl text-base leading-relaxed text-muted-foreground", children: description })) : null, actions ? _jsx("div", { className: "mt-2 flex flex-wrap items-center gap-2", children: actions }) : null] }));
9
+ }
10
+ export { PageHeader };
11
+ //# sourceMappingURL=page-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-header.js","sourceRoot":"","sources":["../../src/components/page-header.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAelC;;;GAGG;AACH,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,WAAW,EACX,OAAO,EACP,OAAO,EACP,EAAE,EAAE,OAAO,GAAG,IAAI,EAClB,SAAS,EACT,GAAG,KAAK,EACQ;IAChB,OAAO,CACL,+BACY,aAAa,EACvB,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,KAC3C,KAAK,aAER,OAAO,CAAC,CAAC,CAAC,CACT,YAAG,SAAS,EAAC,mEAAmE,YAC7E,OAAO,GACN,CACL,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,OAAO,IAAC,SAAS,EAAC,8EAA8E,YAC9F,KAAK,GACE,EACT,WAAW,CAAC,CAAC,CAAC,CACb,YAAG,SAAS,EAAC,2DAA2D,YACrE,WAAW,GACV,CACL,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,wCAAwC,YAAE,OAAO,GAAO,CAAC,CAAC,CAAC,IAAI,IAClF,CACV,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ export interface PaginationLabels {
3
+ previous?: string;
4
+ next?: string;
5
+ navigation?: string;
6
+ }
7
+ export interface PaginationProps extends Omit<React.ComponentProps<"nav">, "onChange"> {
8
+ page: number;
9
+ pageCount: number;
10
+ onPageChange?: (page: number) => void;
11
+ /** Render links instead of buttons. Use this for server-rendered pages. */
12
+ hrefFor?: (page: number) => string;
13
+ siblingCount?: number;
14
+ labels?: PaginationLabels;
15
+ }
16
+ type PageItem = number | "ellipsis";
17
+ export declare function getPageItems(page: number, pageCount: number, siblingCount?: number): PageItem[];
18
+ declare function Pagination({ page, pageCount, onPageChange, hrefFor, siblingCount, labels, className, ...props }: PaginationProps): React.JSX.Element;
19
+ export { Pagination };
20
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/components/pagination.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,KAAK,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAMpC,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,SAAI,GACf,QAAQ,EAAE,CAuBZ;AAKD,iBAAS,UAAU,CAAC,EAClB,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,OAAO,EACP,YAAgB,EAChB,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,qBA2EjB;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/utils.js";
3
+ function range(start, end) {
4
+ return Array.from({ length: Math.max(0, end - start + 1) }, (_, index) => start + index);
5
+ }
6
+ export function getPageItems(page, pageCount, siblingCount = 1) {
7
+ const total = Math.max(1, pageCount);
8
+ const current = Math.min(Math.max(1, page), total);
9
+ const visible = siblingCount * 2 + 5;
10
+ if (total <= visible)
11
+ return range(1, total);
12
+ const left = Math.max(2, current - siblingCount);
13
+ const right = Math.min(total - 1, current + siblingCount);
14
+ const showLeftEllipsis = left > 2;
15
+ const showRightEllipsis = right < total - 1;
16
+ if (!showLeftEllipsis && showRightEllipsis) {
17
+ const count = 3 + siblingCount * 2;
18
+ return [...range(1, count), "ellipsis", total];
19
+ }
20
+ if (showLeftEllipsis && !showRightEllipsis) {
21
+ const count = 3 + siblingCount * 2;
22
+ return [1, "ellipsis", ...range(total - count + 1, total)];
23
+ }
24
+ return [1, "ellipsis", ...range(left, right), "ellipsis", total];
25
+ }
26
+ const base = "inline-flex h-8 min-w-8 items-center justify-center border px-2 text-sm font-medium tabular-nums transition-colors outline-none focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background";
27
+ function Pagination({ page, pageCount, onPageChange, hrefFor, siblingCount = 1, labels, className, ...props }) {
28
+ const total = Math.max(1, pageCount);
29
+ const current = Math.min(Math.max(1, page), total);
30
+ const items = getPageItems(current, total, siblingCount);
31
+ function renderItem(target, label, key, disabled = false) {
32
+ const isCurrent = target === current;
33
+ if (isCurrent) {
34
+ return (_jsx("span", { "aria-current": "page", className: cn(base, "border-primary bg-primary text-primary-foreground"), children: label }, key));
35
+ }
36
+ if (disabled) {
37
+ return (_jsx("span", { "aria-disabled": "true", className: cn(base, "border-border text-muted-foreground opacity-50"), children: label }, key));
38
+ }
39
+ const common = {
40
+ "aria-label": typeof label === "string" ? label : `Go to page ${label}`,
41
+ className: cn(base, "border-border bg-background text-foreground hover:bg-muted"),
42
+ };
43
+ if (hrefFor) {
44
+ return (_jsx("a", { href: hrefFor(target), ...common, children: label }, key));
45
+ }
46
+ return (_jsx("button", { type: "button", onClick: () => onPageChange?.(target), ...common, children: label }, key));
47
+ }
48
+ return (_jsxs("nav", { "aria-label": labels?.navigation ?? "Pagination", className: cn("flex flex-wrap items-center gap-1", className), ...props, children: [renderItem(current - 1, labels?.previous ?? "Previous", "previous", current <= 1), items.map((item, index) => item === "ellipsis" ? (_jsx("span", { "aria-hidden": "true", className: "inline-flex size-8 items-center justify-center text-sm text-muted-foreground", children: "\u2026" }, `ellipsis-${index}`)) : (renderItem(item, item, `page-${item}`))), renderItem(current + 1, labels?.next ?? "Next", "next", current >= total)] }));
49
+ }
50
+ export { Pagination };
51
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/components/pagination.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ import { Popover as PopoverPrimitive } from "radix-ui";
3
+ declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
4
+ declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const PopoverAnchor: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
6
+ declare function PopoverContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>): React.JSX.Element;
7
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
8
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIvD,QAAA,MAAM,OAAO,yCAAwB,CAAC;AACtC,QAAA,MAAM,cAAc,gHAA2B,CAAC;AAChD,QAAA,MAAM,aAAa,4GAA0B,CAAC;AAE9C,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,qBAkBvD;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Popover as PopoverPrimitive } from "radix-ui";
4
+ import { cn } from "../lib/utils.js";
5
+ const Popover = PopoverPrimitive.Root;
6
+ const PopoverTrigger = PopoverPrimitive.Trigger;
7
+ const PopoverAnchor = PopoverPrimitive.Anchor;
8
+ function PopoverContent({ className, align = "center", sideOffset = 6, ...props }) {
9
+ return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, sideOffset: sideOffset, className: cn("z-50 w-72 border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none", "max-h-[var(--radix-popover-content-available-height)] overflow-y-auto", "duration-150 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95", "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", className), ...props }) }));
10
+ }
11
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
12
+ //# sourceMappingURL=popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.js","sourceRoot":"","sources":["../../src/components/popover.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC;AACtC,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAChD,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC;AAE9C,SAAS,cAAc,CAAC,EACtB,SAAS,EACT,KAAK,GAAG,QAAQ,EAChB,UAAU,GAAG,CAAC,EACd,GAAG,KAAK,EAC8C;IACtD,OAAO,CACL,KAAC,gBAAgB,CAAC,MAAM,cACtB,KAAC,gBAAgB,CAAC,OAAO,iBACb,iBAAiB,EAC3B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE,CACX,8FAA8F,EAC9F,uEAAuE,EACvE,oGAAoG,EACpG,gGAAgG,EAChG,SAAS,CACV,KACG,KAAK,GACT,GACsB,CAC3B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+ import { Progress as ProgressPrimitive } from "radix-ui";
3
+ export interface ProgressProps extends React.ComponentProps<typeof ProgressPrimitive.Root> {
4
+ /** Accessible name. A progress bar without a name is not usable. */
5
+ label?: string;
6
+ /** Optional visible value, for example `64%`. Enable when the number matters. */
7
+ showValue?: boolean;
8
+ indicatorClassName?: string;
9
+ }
10
+ declare function Progress({ className, value, max, label, showValue, indicatorClassName, ...props }: ProgressProps): React.JSX.Element;
11
+ export { Progress };
12
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAIzD,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,iBAAiB,CAAC,IAAI,CAAC;IACxF,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,KAAK,EACL,GAAS,EACT,KAAK,EACL,SAAiB,EACjB,kBAAkB,EAClB,GAAG,KAAK,EACT,EAAE,aAAa,qBAoCf;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Progress as ProgressPrimitive } from "radix-ui";
4
+ import { cn } from "../lib/utils.js";
5
+ function Progress({ className, value, max = 100, label, showValue = false, indicatorClassName, ...props }) {
6
+ const bounded = value === null || value === undefined ? null : Math.min(Math.max(value, 0), max);
7
+ const percent = bounded === null ? 0 : max > 0 ? (bounded / max) * 100 : 0;
8
+ return (_jsxs("div", { "data-slot": "progress", className: "flex w-full flex-col gap-1.5", children: [label || showValue ? (_jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [label ? _jsx("span", { className: "text-sm font-medium text-foreground", children: label }) : _jsx("span", {}), showValue ? (_jsx("span", { className: "text-xs tabular-nums text-muted-foreground", children: bounded === null ? "Working" : `${Math.round(percent)}%` })) : null] })) : null, _jsx(ProgressPrimitive.Root, { "data-slot": "progress-root", ...props, value: bounded, max: max, "aria-label": label ?? props["aria-label"], className: cn("relative h-1.5 w-full overflow-hidden bg-muted", className), children: _jsx(ProgressPrimitive.Indicator, { "data-slot": "progress-indicator", className: cn("h-full w-full flex-1 bg-primary-500 transition-transform duration-300 motion-reduce:transition-none", bounded === null ? "animate-pulse" : "", indicatorClassName), style: { transform: `translateX(-${100 - percent}%)` } }) })] }));
9
+ }
10
+ export { Progress };
11
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/components/progress.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAUlC,SAAS,QAAQ,CAAC,EAChB,SAAS,EACT,KAAK,EACL,GAAG,GAAG,GAAG,EACT,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,kBAAkB,EAClB,GAAG,KAAK,EACM;IACd,MAAM,OAAO,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3E,OAAO,CACL,4BAAe,UAAU,EAAC,SAAS,EAAC,8BAA8B,aAC/D,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CACpB,eAAK,SAAS,EAAC,2CAA2C,aACvD,KAAK,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,qCAAqC,YAAE,KAAK,GAAQ,CAAC,CAAC,CAAC,gBAAQ,EACvF,SAAS,CAAC,CAAC,CAAC,CACX,eAAM,SAAS,EAAC,4CAA4C,YACzD,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GACpD,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,iBAAiB,CAAC,IAAI,iBACX,eAAe,KACrB,KAAK,EACT,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,GAAG,gBACI,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,EACxC,SAAS,EAAE,EAAE,CAAC,gDAAgD,EAAE,SAAS,CAAC,YAE1E,KAAC,iBAAiB,CAAC,SAAS,iBAChB,oBAAoB,EAC9B,SAAS,EAAE,EAAE,CACX,qGAAqG,EACrG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EACvC,kBAAkB,CACnB,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,eAAe,GAAG,GAAG,OAAO,IAAI,EAAE,GACtD,GACqB,IACrB,CACP,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import * as React from "react";
2
+ import { RadioGroup as RadioGroupPrimitive } from "radix-ui";
3
+ declare function RadioGroup({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Root>): React.JSX.Element;
4
+ declare function RadioGroupItem({ className, ...props }: React.ComponentProps<typeof RadioGroupPrimitive.Item>): React.JSX.Element;
5
+ export { RadioGroup, RadioGroupItem };
6
+ //# sourceMappingURL=radio-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-group.d.ts","sourceRoot":"","sources":["../../src/components/radio-group.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,IAAI,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAI7D,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,qBAQvD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,qBAuBvD;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { RadioGroup as RadioGroupPrimitive } from "radix-ui";
4
+ import { cn } from "../lib/utils.js";
5
+ function RadioGroup({ className, ...props }) {
6
+ return (_jsx(RadioGroupPrimitive.Root, { "data-slot": "radio-group", className: cn("grid gap-2", className), ...props }));
7
+ }
8
+ function RadioGroupItem({ className, ...props }) {
9
+ return (_jsx(RadioGroupPrimitive.Item, { "data-slot": "radio-group-item", className: cn("peer size-4 shrink-0 border border-input bg-background outline-none transition-colors", "hover:border-foreground/40", "focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background", "disabled:cursor-not-allowed disabled:opacity-50", "data-[state=checked]:border-primary data-[state=checked]:bg-primary", "aria-invalid:border-destructive", className), ...props, children: _jsx(RadioGroupPrimitive.Indicator, { "data-slot": "radio-group-indicator", className: "flex items-center justify-center", children: _jsx("span", { "aria-hidden": "true", className: "size-1.5 bg-primary-foreground" }) }) }));
10
+ }
11
+ export { RadioGroup, RadioGroupItem };
12
+ //# sourceMappingURL=radio-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-group.js","sourceRoot":"","sources":["../../src/components/radio-group.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,UAAU,IAAI,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,SAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EAC8C;IACtD,OAAO,CACL,KAAC,mBAAmB,CAAC,IAAI,iBACb,aAAa,EACvB,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,KAClC,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,SAAS,EACT,GAAG,KAAK,EAC8C;IACtD,OAAO,CACL,KAAC,mBAAmB,CAAC,IAAI,iBACb,kBAAkB,EAC5B,SAAS,EAAE,EAAE,CACX,uFAAuF,EACvF,4BAA4B,EAC5B,qHAAqH,EACrH,iDAAiD,EACjD,qEAAqE,EACrE,iCAAiC,EACjC,SAAS,CACV,KACG,KAAK,YAET,KAAC,mBAAmB,CAAC,SAAS,iBAClB,uBAAuB,EACjC,SAAS,EAAC,kCAAkC,YAE5C,8BAAkB,MAAM,EAAC,SAAS,EAAC,gCAAgC,GAAG,GACxC,GACP,CAC5B,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import * as React from "react";
2
+ type RatingSize = "sm" | "default" | "lg";
3
+ export interface RatingProps extends Omit<React.ComponentProps<"div">, "onChange" | "defaultValue" | "dir"> {
4
+ /** Controlled value. 0 means no rating. */
5
+ value?: number;
6
+ defaultValue?: number;
7
+ onValueChange?: (value: number) => void;
8
+ /** Number of stars. */
9
+ max?: number;
10
+ /** Form field name. The checked radio submits its value with the form. */
11
+ name?: string;
12
+ /**
13
+ * Display a value instead of collecting one. Accepts fractions such as 4.5
14
+ * and renders a single image with a text alternative.
15
+ */
16
+ readOnly?: boolean;
17
+ disabled?: boolean;
18
+ /** Let a second press on the selected star clear the rating. */
19
+ clearable?: boolean;
20
+ size?: RatingSize;
21
+ /** Accessible name for each option. Defaults to "3 stars". */
22
+ getItemLabel?: (value: number, max: number) => string;
23
+ /** Text alternative in read-only mode. Defaults to "Rated 4.5 out of 5". */
24
+ getValueLabel?: (value: number, max: number) => string;
25
+ }
26
+ /**
27
+ * A star rating. Interactive ratings are a native radio group, so arrow keys,
28
+ * Tab, and form submission work without custom key handling. Name the group
29
+ * with `aria-label` or `aria-labelledby`.
30
+ */
31
+ declare function Rating({ value: valueProp, defaultValue, onValueChange, max, name, readOnly, disabled, clearable, size, getItemLabel, getValueLabel, className, onMouseLeave, ...props }: RatingProps): React.JSX.Element;
32
+ export { Rating };
33
+ //# sourceMappingURL=rating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rating.d.ts","sourceRoot":"","sources":["../../src/components/rating.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,KAAK,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;AA4B1C,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,KAAK,CAAC;IAC9E,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,uBAAuB;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,4EAA4E;IAC5E,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACxD;AAED;;;;GAIG;AACH,iBAAS,MAAM,CAAC,EACd,KAAK,EAAE,SAAS,EAChB,YAAgB,EAChB,aAAa,EACb,GAAO,EACP,IAAI,EACJ,QAAgB,EAChB,QAAgB,EAChB,SAAiB,EACjB,IAAgB,EAChB,YAA+B,EAC/B,aAAkE,EAClE,SAAS,EACT,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,WAAW,qBA4Eb;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}