@spatika/react 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/AGENTS.md +71 -0
  2. package/README.md +4 -3
  3. package/dist/composites/Card.d.ts +7 -1
  4. package/dist/composites/Card.d.ts.map +1 -1
  5. package/dist/composites/Card.js +10 -0
  6. package/dist/composites/ChartDataGrid.d.ts +33 -0
  7. package/dist/composites/ChartDataGrid.d.ts.map +1 -0
  8. package/dist/composites/ChartDataGrid.js +77 -0
  9. package/dist/composites/CoverHero.d.ts +1 -1
  10. package/dist/composites/CoverHero.d.ts.map +1 -1
  11. package/dist/composites/CoverHero.js +2 -2
  12. package/dist/composites/EntityMediaCard.d.ts +1 -1
  13. package/dist/composites/EntityMediaCard.d.ts.map +1 -1
  14. package/dist/composites/EntityMediaCard.js +12 -4
  15. package/dist/composites/EventCalendar.d.ts +72 -0
  16. package/dist/composites/EventCalendar.d.ts.map +1 -0
  17. package/dist/composites/EventCalendar.js +371 -0
  18. package/dist/composites/EventEditor.d.ts +22 -0
  19. package/dist/composites/EventEditor.d.ts.map +1 -0
  20. package/dist/composites/EventEditor.js +86 -0
  21. package/dist/composites/EventTimeline.d.ts +29 -0
  22. package/dist/composites/EventTimeline.d.ts.map +1 -0
  23. package/dist/composites/EventTimeline.js +186 -0
  24. package/dist/composites/MapChart.d.ts +24 -0
  25. package/dist/composites/MapChart.d.ts.map +1 -0
  26. package/dist/composites/MapChart.js +58 -0
  27. package/dist/composites/ProfileHero.d.ts +6 -4
  28. package/dist/composites/ProfileHero.d.ts.map +1 -1
  29. package/dist/composites/ProfileHero.js +8 -8
  30. package/dist/composites/ScatterWebGL.d.ts +22 -0
  31. package/dist/composites/ScatterWebGL.d.ts.map +1 -0
  32. package/dist/composites/ScatterWebGL.js +45 -0
  33. package/dist/composites/SiteFooter.d.ts +1 -1
  34. package/dist/composites/SiteFooter.js +1 -1
  35. package/dist/composites/SiteNav.d.ts +7 -2
  36. package/dist/composites/SiteNav.d.ts.map +1 -1
  37. package/dist/composites/SiteNav.js +9 -5
  38. package/dist/composites/StatCard.d.ts +2 -1
  39. package/dist/composites/StatCard.d.ts.map +1 -1
  40. package/dist/composites/StatCard.js +3 -3
  41. package/dist/composites/StatusDot.d.ts +1 -1
  42. package/dist/composites/Wordmark.d.ts +2 -2
  43. package/dist/composites/Wordmark.d.ts.map +1 -1
  44. package/dist/composites/cartesian-charts.d.ts +138 -0
  45. package/dist/composites/cartesian-charts.d.ts.map +1 -0
  46. package/dist/composites/cartesian-charts.js +401 -0
  47. package/dist/composites/chart-composition.d.ts +139 -0
  48. package/dist/composites/chart-composition.d.ts.map +1 -0
  49. package/dist/composites/chart-composition.js +486 -0
  50. package/dist/composites/chart-ui.d.ts +83 -0
  51. package/dist/composites/chart-ui.d.ts.map +1 -0
  52. package/dist/composites/chart-ui.js +108 -0
  53. package/dist/composites/charts-3d.d.ts +37 -0
  54. package/dist/composites/charts-3d.d.ts.map +1 -0
  55. package/dist/composites/charts-3d.js +121 -0
  56. package/dist/composites/flow-charts.d.ts +89 -0
  57. package/dist/composites/flow-charts.d.ts.map +1 -0
  58. package/dist/composites/flow-charts.js +186 -0
  59. package/dist/composites/radial-charts.d.ts +109 -0
  60. package/dist/composites/radial-charts.d.ts.map +1 -0
  61. package/dist/composites/radial-charts.js +176 -0
  62. package/dist/composites/scheduler-ui.d.ts +44 -0
  63. package/dist/composites/scheduler-ui.d.ts.map +1 -0
  64. package/dist/composites/scheduler-ui.js +71 -0
  65. package/dist/index.d.ts +68 -7
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +58 -7
  68. package/dist/lib/chart-export.d.ts +10 -0
  69. package/dist/lib/chart-export.d.ts.map +1 -0
  70. package/dist/lib/chart-export.js +102 -0
  71. package/dist/lib/charts.d.ts +235 -0
  72. package/dist/lib/charts.d.ts.map +1 -0
  73. package/dist/lib/charts.js +744 -0
  74. package/dist/lib/geo.d.ts +39 -0
  75. package/dist/lib/geo.d.ts.map +1 -0
  76. package/dist/lib/geo.js +101 -0
  77. package/dist/lib/iso.d.ts +21 -0
  78. package/dist/lib/iso.d.ts.map +1 -0
  79. package/dist/lib/iso.js +56 -0
  80. package/dist/lib/rrule.d.ts +20 -0
  81. package/dist/lib/rrule.d.ts.map +1 -0
  82. package/dist/lib/rrule.js +236 -0
  83. package/dist/lib/scheduler.d.ts +156 -0
  84. package/dist/lib/scheduler.d.ts.map +1 -0
  85. package/dist/lib/scheduler.js +502 -0
  86. package/dist/lib/webgl-scatter.d.ts +44 -0
  87. package/dist/lib/webgl-scatter.d.ts.map +1 -0
  88. package/dist/lib/webgl-scatter.js +185 -0
  89. package/dist/primitives/Accordion.d.ts +44 -20
  90. package/dist/primitives/Accordion.d.ts.map +1 -1
  91. package/dist/primitives/Accordion.js +82 -22
  92. package/dist/primitives/AppBar.d.ts +13 -0
  93. package/dist/primitives/AppBar.d.ts.map +1 -0
  94. package/dist/primitives/AppBar.js +27 -0
  95. package/dist/primitives/Autocomplete.d.ts +28 -0
  96. package/dist/primitives/Autocomplete.d.ts.map +1 -0
  97. package/dist/primitives/Autocomplete.js +118 -0
  98. package/dist/primitives/Avatar.d.ts +13 -1
  99. package/dist/primitives/Avatar.d.ts.map +1 -1
  100. package/dist/primitives/Avatar.js +17 -2
  101. package/dist/primitives/Backdrop.d.ts +17 -0
  102. package/dist/primitives/Backdrop.d.ts.map +1 -0
  103. package/dist/primitives/Backdrop.js +17 -0
  104. package/dist/primitives/BottomNavigation.d.ts +23 -0
  105. package/dist/primitives/BottomNavigation.d.ts.map +1 -0
  106. package/dist/primitives/BottomNavigation.js +30 -0
  107. package/dist/primitives/ButtonBase.d.ts +14 -0
  108. package/dist/primitives/ButtonBase.d.ts.map +1 -0
  109. package/dist/primitives/ButtonBase.js +13 -0
  110. package/dist/primitives/ButtonGroup.d.ts +25 -0
  111. package/dist/primitives/ButtonGroup.d.ts.map +1 -0
  112. package/dist/primitives/ButtonGroup.js +44 -0
  113. package/dist/primitives/CircularProgress.d.ts +16 -0
  114. package/dist/primitives/CircularProgress.d.ts.map +1 -0
  115. package/dist/primitives/CircularProgress.js +17 -0
  116. package/dist/primitives/ClickAwayListener.d.ts +16 -0
  117. package/dist/primitives/ClickAwayListener.d.ts.map +1 -0
  118. package/dist/primitives/ClickAwayListener.js +33 -0
  119. package/dist/primitives/Collapse.d.ts +19 -0
  120. package/dist/primitives/Collapse.d.ts.map +1 -0
  121. package/dist/primitives/Collapse.js +14 -0
  122. package/dist/primitives/Container.d.ts +13 -0
  123. package/dist/primitives/Container.d.ts.map +1 -0
  124. package/dist/primitives/Container.js +26 -0
  125. package/dist/primitives/Fab.d.ts +22 -0
  126. package/dist/primitives/Fab.d.ts.map +1 -0
  127. package/dist/primitives/Fab.js +42 -0
  128. package/dist/primitives/FormControl.d.ts +27 -0
  129. package/dist/primitives/FormControl.d.ts.map +1 -0
  130. package/dist/primitives/FormControl.js +24 -0
  131. package/dist/primitives/FormControlLabel.d.ts +18 -0
  132. package/dist/primitives/FormControlLabel.d.ts.map +1 -0
  133. package/dist/primitives/FormControlLabel.js +19 -0
  134. package/dist/primitives/Grid.d.ts +32 -0
  135. package/dist/primitives/Grid.d.ts.map +1 -0
  136. package/dist/primitives/Grid.js +50 -0
  137. package/dist/primitives/IconButton.d.ts +22 -0
  138. package/dist/primitives/IconButton.d.ts.map +1 -0
  139. package/dist/primitives/IconButton.js +39 -0
  140. package/dist/primitives/ImageList.d.ts +31 -0
  141. package/dist/primitives/ImageList.d.ts.map +1 -0
  142. package/dist/primitives/ImageList.js +33 -0
  143. package/dist/primitives/InputAdornment.d.ts +28 -0
  144. package/dist/primitives/InputAdornment.d.ts.map +1 -0
  145. package/dist/primitives/InputAdornment.js +13 -0
  146. package/dist/primitives/Link.d.ts +17 -0
  147. package/dist/primitives/Link.d.ts.map +1 -0
  148. package/dist/primitives/Link.js +29 -0
  149. package/dist/primitives/List.d.ts +41 -0
  150. package/dist/primitives/List.d.ts.map +1 -0
  151. package/dist/primitives/List.js +22 -0
  152. package/dist/primitives/Masonry.d.ts +14 -0
  153. package/dist/primitives/Masonry.d.ts.map +1 -0
  154. package/dist/primitives/Masonry.js +15 -0
  155. package/dist/primitives/Menu.d.ts +28 -0
  156. package/dist/primitives/Menu.d.ts.map +1 -0
  157. package/dist/primitives/Menu.js +54 -0
  158. package/dist/primitives/MobileStepper.d.ts +15 -0
  159. package/dist/primitives/MobileStepper.d.ts.map +1 -0
  160. package/dist/primitives/MobileStepper.js +8 -0
  161. package/dist/primitives/Modal.d.ts +18 -0
  162. package/dist/primitives/Modal.d.ts.map +1 -0
  163. package/dist/primitives/Modal.js +29 -0
  164. package/dist/primitives/NoSsr.d.ts +15 -0
  165. package/dist/primitives/NoSsr.d.ts.map +1 -0
  166. package/dist/primitives/NoSsr.js +19 -0
  167. package/dist/primitives/Paper.d.ts +22 -0
  168. package/dist/primitives/Paper.d.ts.map +1 -0
  169. package/dist/primitives/Paper.js +33 -0
  170. package/dist/primitives/Progress.d.ts +6 -2
  171. package/dist/primitives/Progress.d.ts.map +1 -1
  172. package/dist/primitives/Progress.js +8 -3
  173. package/dist/primitives/Snackbar.d.ts +23 -0
  174. package/dist/primitives/Snackbar.d.ts.map +1 -0
  175. package/dist/primitives/Snackbar.js +33 -0
  176. package/dist/primitives/SpeedDial.d.ts +26 -0
  177. package/dist/primitives/SpeedDial.d.ts.map +1 -0
  178. package/dist/primitives/SpeedDial.js +26 -0
  179. package/dist/primitives/Stack.d.ts +15 -0
  180. package/dist/primitives/Stack.d.ts.map +1 -0
  181. package/dist/primitives/Stack.js +45 -0
  182. package/dist/primitives/StarRating.d.ts +19 -1
  183. package/dist/primitives/StarRating.d.ts.map +1 -1
  184. package/dist/primitives/StarRating.js +36 -6
  185. package/dist/primitives/Stepper.d.ts +36 -0
  186. package/dist/primitives/Stepper.d.ts.map +1 -0
  187. package/dist/primitives/Stepper.js +53 -0
  188. package/dist/primitives/TablePagination.d.ts +16 -0
  189. package/dist/primitives/TablePagination.d.ts.map +1 -0
  190. package/dist/primitives/TablePagination.js +12 -0
  191. package/dist/primitives/TextField.d.ts +24 -0
  192. package/dist/primitives/TextField.d.ts.map +1 -0
  193. package/dist/primitives/TextField.js +19 -0
  194. package/dist/primitives/TextareaAutosize.d.ts +11 -0
  195. package/dist/primitives/TextareaAutosize.d.ts.map +1 -0
  196. package/dist/primitives/TextareaAutosize.js +26 -0
  197. package/dist/primitives/ToggleButton.d.ts +28 -0
  198. package/dist/primitives/ToggleButton.d.ts.map +1 -0
  199. package/dist/primitives/ToggleButton.js +56 -0
  200. package/dist/primitives/TransferList.d.ts +21 -0
  201. package/dist/primitives/TransferList.d.ts.map +1 -0
  202. package/dist/primitives/TransferList.js +40 -0
  203. package/dist/primitives/Typography.d.ts +23 -0
  204. package/dist/primitives/Typography.d.ts.map +1 -0
  205. package/dist/primitives/Typography.js +69 -0
  206. package/dist/primitives/transitions.d.ts +29 -0
  207. package/dist/primitives/transitions.d.ts.map +1 -0
  208. package/dist/primitives/transitions.js +52 -0
  209. package/package.json +28 -4
  210. package/skills/spatika-ui/SKILL.md +96 -0
  211. package/src/composites/Card.tsx +51 -1
  212. package/src/composites/ChartDataGrid.test.tsx +57 -0
  213. package/src/composites/ChartDataGrid.tsx +196 -0
  214. package/src/composites/CoverHero.test.tsx +38 -0
  215. package/src/composites/CoverHero.tsx +29 -22
  216. package/src/composites/EntityMediaCard.test.tsx +58 -0
  217. package/src/composites/EntityMediaCard.tsx +31 -13
  218. package/src/composites/EventCalendar.tsx +1030 -0
  219. package/src/composites/EventEditor.tsx +268 -0
  220. package/src/composites/EventTimeline.tsx +366 -0
  221. package/src/composites/MapChart.test.tsx +39 -0
  222. package/src/composites/MapChart.tsx +130 -0
  223. package/src/composites/ProfileHero.test.tsx +33 -0
  224. package/src/composites/ProfileHero.tsx +96 -79
  225. package/src/composites/ScatterWebGL.test.tsx +25 -0
  226. package/src/composites/ScatterWebGL.tsx +79 -0
  227. package/src/composites/SiteFooter.test.tsx +37 -0
  228. package/src/composites/SiteFooter.tsx +1 -1
  229. package/src/composites/SiteNav.test.tsx +46 -0
  230. package/src/composites/SiteNav.tsx +14 -4
  231. package/src/composites/StatCard.test.tsx +30 -0
  232. package/src/composites/StatCard.tsx +4 -0
  233. package/src/composites/Wordmark.test.tsx +23 -0
  234. package/src/composites/Wordmark.tsx +2 -2
  235. package/src/composites/cartesian-charts.test.tsx +52 -0
  236. package/src/composites/cartesian-charts.tsx +1287 -0
  237. package/src/composites/chart-composition.test.tsx +53 -0
  238. package/src/composites/chart-composition.tsx +898 -0
  239. package/src/composites/chart-ui.tsx +328 -0
  240. package/src/composites/charts-3d.test.tsx +25 -0
  241. package/src/composites/charts-3d.tsx +318 -0
  242. package/src/composites/charts.test.tsx +254 -0
  243. package/src/composites/chrome.test.tsx +29 -0
  244. package/src/composites/flow-charts.test.tsx +79 -0
  245. package/src/composites/flow-charts.tsx +607 -0
  246. package/src/composites/marketing.test.tsx +38 -34
  247. package/src/composites/radial-charts.test.tsx +74 -0
  248. package/src/composites/radial-charts.tsx +617 -0
  249. package/src/composites/scheduler-ui.tsx +306 -0
  250. package/src/composites/scheduler.test.tsx +280 -0
  251. package/src/index.test.ts +26 -0
  252. package/src/index.ts +287 -5
  253. package/src/lib/chart-export.test.ts +20 -0
  254. package/src/lib/chart-export.ts +99 -0
  255. package/src/lib/charts-platform.test.ts +93 -0
  256. package/src/lib/charts.test.ts +132 -0
  257. package/src/lib/charts.ts +1021 -0
  258. package/src/lib/geo.test.ts +42 -0
  259. package/src/lib/geo.ts +138 -0
  260. package/src/lib/iso.test.ts +22 -0
  261. package/src/lib/iso.ts +102 -0
  262. package/src/lib/rrule.test.ts +53 -0
  263. package/src/lib/rrule.ts +281 -0
  264. package/src/lib/scheduler.test.ts +199 -0
  265. package/src/lib/scheduler.ts +693 -0
  266. package/src/lib/tokens.test.ts +2 -2
  267. package/src/lib/webgl-scatter.test.ts +36 -0
  268. package/src/lib/webgl-scatter.ts +230 -0
  269. package/src/primitives/Accordion.tsx +218 -63
  270. package/src/primitives/AppBar.tsx +39 -0
  271. package/src/primitives/Autocomplete.tsx +236 -0
  272. package/src/primitives/Avatar.tsx +52 -1
  273. package/src/primitives/Backdrop.tsx +48 -0
  274. package/src/primitives/BottomNavigation.tsx +102 -0
  275. package/src/primitives/ButtonBase.tsx +34 -0
  276. package/src/primitives/ButtonGroup.tsx +90 -0
  277. package/src/primitives/CircularProgress.tsx +104 -0
  278. package/src/primitives/ClickAwayListener.tsx +46 -0
  279. package/src/primitives/Collapse.tsx +39 -0
  280. package/src/primitives/Container.tsx +40 -0
  281. package/src/primitives/Fab.tsx +62 -0
  282. package/src/primitives/FormControl.tsx +90 -0
  283. package/src/primitives/FormControlLabel.tsx +51 -0
  284. package/src/primitives/Grid.tsx +101 -0
  285. package/src/primitives/IconButton.tsx +59 -0
  286. package/src/primitives/ImageList.test.tsx +48 -0
  287. package/src/primitives/ImageList.tsx +112 -0
  288. package/src/primitives/InputAdornment.tsx +86 -0
  289. package/src/primitives/Link.tsx +48 -0
  290. package/src/primitives/List.tsx +121 -0
  291. package/src/primitives/Masonry.tsx +32 -0
  292. package/src/primitives/Menu.tsx +112 -0
  293. package/src/primitives/MobileStepper.tsx +64 -0
  294. package/src/primitives/Modal.tsx +70 -0
  295. package/src/primitives/NoSsr.tsx +28 -0
  296. package/src/primitives/Paper.tsx +55 -0
  297. package/src/primitives/Progress.tsx +25 -7
  298. package/src/primitives/Snackbar.tsx +83 -0
  299. package/src/primitives/SpeedDial.tsx +110 -0
  300. package/src/primitives/Stack.tsx +88 -0
  301. package/src/primitives/StarRating.tsx +87 -28
  302. package/src/primitives/Stepper.tsx +184 -0
  303. package/src/primitives/TablePagination.tsx +58 -0
  304. package/src/primitives/TextField.tsx +105 -0
  305. package/src/primitives/TextareaAutosize.tsx +49 -0
  306. package/src/primitives/ToggleButton.tsx +148 -0
  307. package/src/primitives/TransferList.tsx +110 -0
  308. package/src/primitives/Typography.tsx +90 -0
  309. package/src/primitives/mui-more.test.tsx +76 -0
  310. package/src/primitives/mui.test.tsx +134 -0
  311. package/src/primitives/transitions.tsx +120 -0
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ export type BackdropProps = React.ComponentPropsWithoutRef<"div"> & {
3
+ open?: boolean;
4
+ /** Skip the dimmed fill — useful as a click-catcher. */
5
+ invisible?: boolean;
6
+ /** Render in-place instead of portaling to document.body. */
7
+ contained?: boolean;
8
+ };
9
+ /**
10
+ * Full-viewport dimmer, typically paired with a modal or speed dial.
11
+ */
12
+ declare function Backdrop({ open, invisible, contained, className, style, children, ...props }: BackdropProps): React.JSX.Element | null;
13
+ declare namespace Backdrop {
14
+ var displayName: string;
15
+ }
16
+ export { Backdrop };
17
+ //# sourceMappingURL=Backdrop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Backdrop.d.ts","sourceRoot":"","sources":["../../src/primitives/Backdrop.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,iBAAS,QAAQ,CAAC,EAChB,IAAY,EACZ,SAAiB,EACjB,SAAiB,EACjB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,aAAa,4BAoBf;kBA5BQ,QAAQ;;;AA+BjB,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Portal } from "../lib/portal";
3
+ import { cn } from "../lib/cn";
4
+ import { OVERLAY_Z_INDEX, fixedLayerStyle } from "../lib/overlay-stack";
5
+ /**
6
+ * Full-viewport dimmer, typically paired with a modal or speed dial.
7
+ */
8
+ function Backdrop({ open = false, invisible = false, contained = false, className, style, children, ...props }) {
9
+ if (!open)
10
+ return null;
11
+ const node = (_jsx("div", { "data-slot": "backdrop", className: cn(contained ? "absolute inset-0" : "fixed inset-0", !invisible && "bg-[color-mix(in_srgb,var(--foreground)_28%,transparent)]", className), style: contained ? style : { ...fixedLayerStyle(OVERLAY_Z_INDEX.modal), ...style }, ...props, children: children }));
12
+ if (contained)
13
+ return node;
14
+ return _jsx(Portal, { children: node });
15
+ }
16
+ Backdrop.displayName = "Backdrop";
17
+ export { Backdrop };
@@ -0,0 +1,23 @@
1
+ import * as React from "react";
2
+ export type BottomNavigationProps = Omit<React.ComponentPropsWithoutRef<"div">, "onChange" | "defaultValue"> & {
3
+ value?: string;
4
+ defaultValue?: string;
5
+ onChange?: (event: React.SyntheticEvent, value: string) => void;
6
+ showLabels?: boolean;
7
+ };
8
+ declare function BottomNavigation({ value: valueProp, defaultValue, onChange, showLabels, className, ...props }: BottomNavigationProps): React.JSX.Element;
9
+ declare namespace BottomNavigation {
10
+ var displayName: string;
11
+ }
12
+ export type BottomNavigationActionProps = React.ComponentPropsWithoutRef<"button"> & {
13
+ value: string;
14
+ label?: React.ReactNode;
15
+ icon?: React.ReactNode;
16
+ showLabel?: boolean;
17
+ };
18
+ declare function BottomNavigationAction({ value, label, icon, showLabel, className, onClick, ...props }: BottomNavigationActionProps): React.JSX.Element;
19
+ declare namespace BottomNavigationAction {
20
+ var displayName: string;
21
+ }
22
+ export { BottomNavigation, BottomNavigationAction };
23
+ //# sourceMappingURL=BottomNavigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomNavigation.d.ts","sourceRoot":"","sources":["../../src/primitives/BottomNavigation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EACrC,UAAU,GAAG,cAAc,CAC5B,GAAG;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,iBAAS,gBAAgB,CAAC,EACxB,KAAK,EAAE,SAAS,EAChB,YAAY,EACZ,QAAQ,EACR,UAAiB,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,qBAAqB,qBAyBvB;kBAhCQ,gBAAgB;;;AAmCzB,MAAM,MAAM,2BAA2B,GAAG,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,iBAAS,sBAAsB,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAS,EACT,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACT,EAAE,2BAA2B,qBA0B7B;kBAlCQ,sBAAsB;;;AAqC/B,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { useControllableState } from "../lib/use-controllable-state";
4
+ import { cn } from "../lib/cn";
5
+ const BottomNavContext = React.createContext(null);
6
+ function BottomNavigation({ value: valueProp, defaultValue, onChange, showLabels = true, className, ...props }) {
7
+ const [value, setValue] = useControllableState({
8
+ prop: valueProp,
9
+ defaultProp: defaultValue,
10
+ onChange: (next) => {
11
+ if (next == null)
12
+ return;
13
+ onChange?.({}, next);
14
+ },
15
+ });
16
+ return (_jsx(BottomNavContext.Provider, { value: { value, setValue: (next) => setValue(next), showLabels }, children: _jsx("div", { role: "navigation", "data-slot": "bottom-navigation", className: cn("glass-tabbar flex w-full items-stretch justify-around rounded-2xl border border-border/40 px-2 py-1", className), ...props }) }));
17
+ }
18
+ BottomNavigation.displayName = "BottomNavigation";
19
+ function BottomNavigationAction({ value, label, icon, showLabel, className, onClick, ...props }) {
20
+ const ctx = React.useContext(BottomNavContext);
21
+ const selected = ctx?.value === value;
22
+ const labels = showLabel ?? ctx?.showLabels ?? true;
23
+ return (_jsxs("button", { type: "button", "data-slot": "bottom-navigation-action", "data-selected": selected ? "" : undefined, "aria-current": selected ? "page" : undefined, className: cn("flex min-h-11 flex-1 flex-col items-center justify-center gap-0.5 rounded-xl px-2 py-1.5 text-[10px] font-bold outline-none transition-colors", selected ? "text-primary" : "text-muted-foreground hover:text-foreground", className), onClick: (event) => {
24
+ onClick?.(event);
25
+ if (!event.defaultPrevented)
26
+ ctx?.setValue(value);
27
+ }, ...props, children: [_jsx("span", { className: "[&_svg]:size-5", children: icon }), labels ? _jsx("span", { children: label }) : null] }));
28
+ }
29
+ BottomNavigationAction.displayName = "BottomNavigationAction";
30
+ export { BottomNavigation, BottomNavigationAction };
@@ -0,0 +1,14 @@
1
+ import * as React from "react";
2
+ export type ButtonBaseProps = React.ComponentPropsWithoutRef<"button"> & {
3
+ asChild?: boolean;
4
+ focusRipple?: boolean;
5
+ };
6
+ /**
7
+ * Unstyled pressable — MUI ButtonBase analogue. Use Button / IconButton for styled actions.
8
+ */
9
+ declare const ButtonBase: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
10
+ asChild?: boolean;
11
+ focusRipple?: boolean;
12
+ } & React.RefAttributes<HTMLButtonElement>>;
13
+ export { ButtonBase };
14
+ //# sourceMappingURL=ButtonBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonBase.d.ts","sourceRoot":"","sources":["../../src/primitives/ButtonBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,UAAU;cAPJ,OAAO;kBACH,OAAO;2CAwBtB,CAAC;AAGF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { Slot } from "../lib/slot";
4
+ import { cn } from "../lib/cn";
5
+ /**
6
+ * Unstyled pressable — MUI ButtonBase analogue. Use Button / IconButton for styled actions.
7
+ */
8
+ const ButtonBase = React.forwardRef(({ className, asChild = false, focusRipple: _focusRipple, ...props }, ref) => {
9
+ const Comp = asChild ? Slot : "button";
10
+ return (_jsx(Comp, { ref: ref, type: asChild ? undefined : "button", "data-slot": "button-base", className: cn("inline-flex cursor-pointer items-center justify-center outline-none select-none", "focus-visible:ring-ring/50 focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50", "active:scale-[0.98]", className), ...props }));
11
+ });
12
+ ButtonBase.displayName = "ButtonBase";
13
+ export { ButtonBase };
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ import { buttonVariants } from "./Button";
4
+ declare const buttonGroupVariants: (props?: ({
5
+ orientation?: "horizontal" | "vertical" | null | undefined;
6
+ fullWidth?: boolean | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ export type ButtonGroupProps = React.ComponentPropsWithoutRef<"div"> & VariantProps<typeof buttonGroupVariants> & {
9
+ variant?: VariantProps<typeof buttonVariants>["variant"];
10
+ size?: VariantProps<typeof buttonVariants>["size"];
11
+ disabled?: boolean;
12
+ };
13
+ /**
14
+ * Connected cluster of buttons — first/last corners stay rounded.
15
+ */
16
+ declare const ButtonGroup: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & VariantProps<(props?: ({
17
+ orientation?: "horizontal" | "vertical" | null | undefined;
18
+ fullWidth?: boolean | null | undefined;
19
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
20
+ variant?: VariantProps<typeof buttonVariants>["variant"];
21
+ size?: VariantProps<typeof buttonVariants>["size"];
22
+ disabled?: boolean;
23
+ } & React.RefAttributes<HTMLDivElement>>;
24
+ export { ButtonGroup, buttonGroupVariants };
25
+ //# sourceMappingURL=ButtonGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ButtonGroup.d.ts","sourceRoot":"","sources":["../../src/primitives/ButtonGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,QAAA,MAAM,mBAAmB;;;8EAevB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAClE,YAAY,CAAC,OAAO,mBAAmB,CAAC,GAAG;IACzC,OAAO,CAAC,EAAE,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEJ;;GAEG;AACH,QAAA,MAAM,WAAW;;;;cARH,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,SAAS,CAAC;WACjD,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC;eACvC,OAAO;wCA4DrB,CAAC;AAGF,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../lib/cn";
5
+ const buttonGroupVariants = cva("inline-flex isolate", {
6
+ variants: {
7
+ orientation: {
8
+ horizontal: "flex-row",
9
+ vertical: "flex-col",
10
+ },
11
+ fullWidth: {
12
+ true: "flex w-full",
13
+ false: "",
14
+ },
15
+ },
16
+ defaultVariants: {
17
+ orientation: "horizontal",
18
+ fullWidth: false,
19
+ },
20
+ });
21
+ /**
22
+ * Connected cluster of buttons — first/last corners stay rounded.
23
+ */
24
+ const ButtonGroup = React.forwardRef(({ className, orientation = "horizontal", fullWidth = false, variant, size, disabled, children, ...props }, ref) => {
25
+ const items = React.Children.toArray(children);
26
+ const vertical = orientation === "vertical";
27
+ return (_jsx("div", { ref: ref, role: "group", "data-slot": "button-group", "data-orientation": orientation, className: cn(buttonGroupVariants({ orientation, fullWidth }), className), ...props, children: items.map((child, index) => {
28
+ if (!React.isValidElement(child)) {
29
+ return child;
30
+ }
31
+ const first = index === 0;
32
+ const last = index === items.length - 1;
33
+ return React.cloneElement(child, {
34
+ disabled: disabled || child.props.disabled,
35
+ variant: child.props.variant ?? variant ?? undefined,
36
+ size: child.props.size ?? size ?? undefined,
37
+ className: cn(child.props.className, "focus-visible:z-10", vertical
38
+ ? cn(!first && "-mt-px rounded-t-none", !last && "rounded-b-none")
39
+ : cn(!first && "-ml-px rounded-l-none", !last && "rounded-r-none"), fullWidth && "flex-1"),
40
+ });
41
+ }) }));
42
+ });
43
+ ButtonGroup.displayName = "ButtonGroup";
44
+ export { ButtonGroup, buttonGroupVariants };
@@ -0,0 +1,16 @@
1
+ import * as React from "react";
2
+ export type CircularProgressProps = React.ComponentPropsWithoutRef<"span"> & {
3
+ variant?: "indeterminate" | "determinate";
4
+ value?: number;
5
+ size?: number;
6
+ thickness?: number;
7
+ };
8
+ /**
9
+ * Circular indicator. Indeterminate spins; determinate fills an SVG track.
10
+ */
11
+ declare function CircularProgress({ variant, value, size, thickness, className, ...props }: CircularProgressProps): React.JSX.Element;
12
+ declare namespace CircularProgress {
13
+ var displayName: string;
14
+ }
15
+ export { CircularProgress };
16
+ //# sourceMappingURL=CircularProgress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CircularProgress.d.ts","sourceRoot":"","sources":["../../src/primitives/CircularProgress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,GAAG;IAC3E,OAAO,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,iBAAS,gBAAgB,CAAC,EACxB,OAAyB,EACzB,KAAS,EACT,IAAS,EACT,SAAa,EACb,SAAS,EACT,GAAG,KAAK,EACT,EAAE,qBAAqB,qBAgFvB;kBAvFQ,gBAAgB;;;AA0FzB,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/cn";
3
+ /**
4
+ * Circular indicator. Indeterminate spins; determinate fills an SVG track.
5
+ */
6
+ function CircularProgress({ variant = "indeterminate", value = 0, size = 40, thickness = 4, className, ...props }) {
7
+ const pct = Math.min(100, Math.max(0, value));
8
+ const radius = (size - thickness) / 2;
9
+ const circumference = 2 * Math.PI * radius;
10
+ const offset = circumference - (pct / 100) * circumference;
11
+ if (variant === "indeterminate") {
12
+ return (_jsx("span", { role: "progressbar", "aria-label": "Loading", "data-slot": "circular-progress", className: cn("inline-flex text-primary", className), ...props, children: _jsxs("svg", { className: "animate-spin", width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [_jsx("circle", { cx: size / 2, cy: size / 2, r: radius, fill: "none", stroke: "currentColor", strokeOpacity: 0.2, strokeWidth: thickness }), _jsx("circle", { cx: size / 2, cy: size / 2, r: radius, fill: "none", stroke: "currentColor", strokeWidth: thickness, strokeLinecap: "round", strokeDasharray: `${circumference * 0.25} ${circumference}` })] }) }));
13
+ }
14
+ return (_jsx("span", { role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": pct, "data-slot": "circular-progress", className: cn("inline-flex text-primary", className), ...props, children: _jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "-rotate-90", children: [_jsx("circle", { cx: size / 2, cy: size / 2, r: radius, fill: "none", stroke: "currentColor", strokeOpacity: 0.2, strokeWidth: thickness }), _jsx("circle", { cx: size / 2, cy: size / 2, r: radius, fill: "none", stroke: "currentColor", strokeWidth: thickness, strokeLinecap: "round", strokeDasharray: circumference, strokeDashoffset: offset, className: "transition-[stroke-dashoffset] duration-300" })] }) }));
15
+ }
16
+ CircularProgress.displayName = "CircularProgress";
17
+ export { CircularProgress };
@@ -0,0 +1,16 @@
1
+ import * as React from "react";
2
+ export type ClickAwayListenerProps = {
3
+ onClickAway: (event: MouseEvent | TouchEvent) => void;
4
+ children: React.ReactElement;
5
+ mouseEvent?: "mousedown" | "mouseup" | "click" | false;
6
+ touchEvent?: "touchstart" | "touchend" | false;
7
+ };
8
+ /**
9
+ * Invokes `onClickAway` when a pointer event occurs outside the child.
10
+ */
11
+ declare function ClickAwayListener({ onClickAway, children, mouseEvent, touchEvent, }: ClickAwayListenerProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
12
+ declare namespace ClickAwayListener {
13
+ var displayName: string;
14
+ }
15
+ export { ClickAwayListener };
16
+ //# sourceMappingURL=ClickAwayListener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClickAwayListener.d.ts","sourceRoot":"","sources":["../../src/primitives/ClickAwayListener.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,KAAK,IAAI,CAAC;IACtD,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC;IAC7B,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;IACvD,UAAU,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,KAAK,CAAC;CAChD,CAAC;AAEF;;GAEG;AACH,iBAAS,iBAAiB,CAAC,EACzB,WAAW,EACX,QAAQ,EACR,UAAwB,EACxB,UAAyB,GAC1B,EAAE,sBAAsB,0EAwBxB;kBA7BQ,iBAAiB;;;AAgC1B,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import * as React from "react";
2
+ import { composeRefs } from "../lib/compose-refs";
3
+ /**
4
+ * Invokes `onClickAway` when a pointer event occurs outside the child.
5
+ */
6
+ function ClickAwayListener({ onClickAway, children, mouseEvent = "mousedown", touchEvent = "touchstart", }) {
7
+ const ref = React.useRef(null);
8
+ React.useEffect(() => {
9
+ const handler = (event) => {
10
+ const node = ref.current;
11
+ const target = event.target;
12
+ if (!node || !target || node.contains(target))
13
+ return;
14
+ onClickAway(event);
15
+ };
16
+ if (mouseEvent)
17
+ document.addEventListener(mouseEvent, handler);
18
+ if (touchEvent)
19
+ document.addEventListener(touchEvent, handler);
20
+ return () => {
21
+ if (mouseEvent)
22
+ document.removeEventListener(mouseEvent, handler);
23
+ if (touchEvent)
24
+ document.removeEventListener(touchEvent, handler);
25
+ };
26
+ }, [onClickAway, mouseEvent, touchEvent]);
27
+ const childRef = children.ref;
28
+ return React.cloneElement(children, {
29
+ ref: composeRefs(ref, childRef),
30
+ });
31
+ }
32
+ ClickAwayListener.displayName = "ClickAwayListener";
33
+ export { ClickAwayListener };
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ export type CollapseProps = Omit<React.ComponentPropsWithoutRef<"div">, "in"> & {
3
+ /** When true, the child is expanded. */
4
+ in?: boolean;
5
+ /** Keep children mounted while collapsed. Defaults to true so height can animate. */
6
+ unmountOnExit?: boolean;
7
+ };
8
+ /**
9
+ * Height collapse used by Accordion and other expandable regions.
10
+ * Animates `grid-template-rows` (transform-safe; no `transition-all`).
11
+ */
12
+ declare const Collapse: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, "in"> & {
13
+ /** When true, the child is expanded. */
14
+ in?: boolean;
15
+ /** Keep children mounted while collapsed. Defaults to true so height can animate. */
16
+ unmountOnExit?: boolean;
17
+ } & React.RefAttributes<HTMLDivElement>>;
18
+ export { Collapse };
19
+ //# sourceMappingURL=Collapse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapse.d.ts","sourceRoot":"","sources":["../../src/primitives/Collapse.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG;IAC9E,wCAAwC;IACxC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,qFAAqF;IACrF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,QAAQ;IAVZ,wCAAwC;SACnC,OAAO;IACZ,qFAAqF;oBACrE,OAAO;wCA4BxB,CAAC;AAGF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/cn";
4
+ /**
5
+ * Height collapse used by Accordion and other expandable regions.
6
+ * Animates `grid-template-rows` (transform-safe; no `transition-all`).
7
+ */
8
+ const Collapse = React.forwardRef(({ in: open = false, unmountOnExit = false, className, children, ...props }, ref) => {
9
+ if (unmountOnExit && !open)
10
+ return null;
11
+ return (_jsx("div", { ref: ref, "data-slot": "collapse", "data-state": open ? "open" : "closed", "aria-hidden": !open, className: cn("grid transition-[grid-template-rows] duration-300 ease-out", open ? "grid-rows-[1fr]" : "grid-rows-[0fr]", className), ...props, children: _jsx("div", { className: "min-h-0 overflow-hidden", children: children }) }));
12
+ });
13
+ Collapse.displayName = "Collapse";
14
+ export { Collapse };
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const containerVariants: (props?: ({
4
+ maxWidth?: "sm" | "lg" | "xl" | "md" | "full" | null | undefined;
5
+ disableGutters?: boolean | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export type ContainerProps = React.ComponentPropsWithoutRef<"div"> & VariantProps<typeof containerVariants>;
8
+ declare const Container: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & VariantProps<(props?: ({
9
+ maxWidth?: "sm" | "lg" | "xl" | "md" | "full" | null | undefined;
10
+ disableGutters?: boolean | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
12
+ export { Container, containerVariants };
13
+ //# sourceMappingURL=Container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../src/primitives/Container.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,iBAAiB;;;8EAkBrB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAChE,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEzC,QAAA,MAAM,SAAS;;;sHASd,CAAC;AAGF,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../lib/cn";
5
+ const containerVariants = cva("mx-auto w-full", {
6
+ variants: {
7
+ maxWidth: {
8
+ sm: "max-w-screen-sm",
9
+ md: "max-w-screen-md",
10
+ lg: "max-w-screen-lg",
11
+ xl: "max-w-screen-xl",
12
+ full: "max-w-none",
13
+ },
14
+ disableGutters: {
15
+ true: "px-0",
16
+ false: "px-4 sm:px-6",
17
+ },
18
+ },
19
+ defaultVariants: {
20
+ maxWidth: "lg",
21
+ disableGutters: false,
22
+ },
23
+ });
24
+ const Container = React.forwardRef(({ className, maxWidth, disableGutters, ...props }, ref) => (_jsx("div", { ref: ref, "data-slot": "container", className: cn(containerVariants({ maxWidth, disableGutters }), className), ...props })));
25
+ Container.displayName = "Container";
26
+ export { Container, containerVariants };
@@ -0,0 +1,22 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const fabVariants: (props?: ({
4
+ variant?: "circular" | "extended" | null | undefined;
5
+ color?: "default" | "glass" | "primary" | null | undefined;
6
+ size?: "sm" | "lg" | "md" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ export type FabProps = Omit<React.ComponentPropsWithoutRef<"button">, "color"> & VariantProps<typeof fabVariants> & {
9
+ asChild?: boolean;
10
+ };
11
+ /**
12
+ * Floating action button. Use `variant="extended"` for a labeled FAB.
13
+ */
14
+ declare const Fab: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "color"> & VariantProps<(props?: ({
15
+ variant?: "circular" | "extended" | null | undefined;
16
+ color?: "default" | "glass" | "primary" | null | undefined;
17
+ size?: "sm" | "lg" | "md" | null | undefined;
18
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
19
+ asChild?: boolean;
20
+ } & React.RefAttributes<HTMLButtonElement>>;
21
+ export { Fab, fabVariants };
22
+ //# sourceMappingURL=Fab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fab.d.ts","sourceRoot":"","sources":["../../src/primitives/Fab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,WAAW;;;;8EA8BhB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,GAC5E,YAAY,CAAC,OAAO,WAAW,CAAC,GAAG;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ;;GAEG;AACH,QAAA,MAAM,GAAG;;;;;cANK,OAAO;2CAmBpB,CAAC;AAGF,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cva } from "class-variance-authority";
4
+ import { Slot } from "../lib/slot";
5
+ import { cn } from "../lib/cn";
6
+ const fabVariants = cva("inline-flex items-center justify-center gap-2 font-bold shadow-[0_10px_28px_color-mix(in_srgb,var(--foreground)_16%,transparent)] outline-none transition-[color,background-color,box-shadow,transform] duration-150 focus-visible:ring-ring/50 focus-visible:ring-[3px] active:scale-[0.98] disabled:pointer-events-none disabled:opacity-50 [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5", {
7
+ variants: {
8
+ variant: {
9
+ circular: "rounded-full",
10
+ extended: "rounded-full px-5",
11
+ },
12
+ color: {
13
+ primary: "bg-primary text-primary-foreground hover:bg-primary/90",
14
+ glass: "glass border-border/50 text-foreground hover:border-primary/30 hover:text-primary",
15
+ default: "bg-card text-foreground border border-border/50 hover:bg-muted/60",
16
+ },
17
+ size: {
18
+ sm: "size-10 text-sm",
19
+ md: "size-14 text-base",
20
+ lg: "size-16 text-lg",
21
+ },
22
+ },
23
+ compoundVariants: [
24
+ { variant: "extended", size: "sm", className: "h-10 w-auto min-w-10" },
25
+ { variant: "extended", size: "md", className: "h-12 w-auto min-w-12 size-auto" },
26
+ { variant: "extended", size: "lg", className: "h-14 w-auto min-w-14 size-auto" },
27
+ ],
28
+ defaultVariants: {
29
+ variant: "circular",
30
+ color: "primary",
31
+ size: "md",
32
+ },
33
+ });
34
+ /**
35
+ * Floating action button. Use `variant="extended"` for a labeled FAB.
36
+ */
37
+ const Fab = React.forwardRef(({ className, variant, color, size, asChild = false, ...props }, ref) => {
38
+ const Comp = asChild ? Slot : "button";
39
+ return (_jsx(Comp, { ref: ref, type: asChild ? undefined : "button", "data-slot": "fab", className: cn(fabVariants({ variant, color, size }), className), ...props }));
40
+ });
41
+ Fab.displayName = "Fab";
42
+ export { Fab, fabVariants };
@@ -0,0 +1,27 @@
1
+ import * as React from "react";
2
+ export type FormControlProps = React.ComponentPropsWithoutRef<"div"> & {
3
+ error?: boolean;
4
+ disabled?: boolean;
5
+ required?: boolean;
6
+ fullWidth?: boolean;
7
+ };
8
+ declare function FormControl({ error, disabled, required, fullWidth, className, ...props }: FormControlProps): React.JSX.Element;
9
+ declare namespace FormControl {
10
+ var displayName: string;
11
+ }
12
+ declare function FormLabel({ className, children, ...props }: React.ComponentPropsWithoutRef<"label">): React.JSX.Element;
13
+ declare namespace FormLabel {
14
+ var displayName: string;
15
+ }
16
+ declare function FormHelperText({ className, ...props }: React.ComponentPropsWithoutRef<"p">): React.JSX.Element;
17
+ declare namespace FormHelperText {
18
+ var displayName: string;
19
+ }
20
+ declare function FormGroup({ row, className, ...props }: React.ComponentPropsWithoutRef<"div"> & {
21
+ row?: boolean;
22
+ }): React.JSX.Element;
23
+ declare namespace FormGroup {
24
+ var displayName: string;
25
+ }
26
+ export { FormControl, FormLabel, FormHelperText, FormGroup };
27
+ //# sourceMappingURL=FormControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormControl.d.ts","sourceRoot":"","sources":["../../src/primitives/FormControl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,iBAAS,WAAW,CAAC,EACnB,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,GAAG,KAAK,EACT,EAAE,gBAAgB,qBAYlB;kBAnBQ,WAAW;;;AAsBpB,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,OAAO,CAAC,qBAY5F;kBAZQ,SAAS;;;AAelB,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,qBAanF;kBAbQ,cAAc;;;AAgBvB,iBAAS,SAAS,CAAC,EACjB,GAAG,EACH,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,qBAS3D;kBAbQ,SAAS;;;AAgBlB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/cn";
4
+ import { Label } from "./Label";
5
+ const FormControlContext = React.createContext(null);
6
+ function FormControl({ error, disabled, required, fullWidth, className, ...props }) {
7
+ return (_jsx(FormControlContext.Provider, { value: { error, disabled, required, fullWidth }, children: _jsx("div", { "data-slot": "form-control", "data-error": error ? "" : undefined, "data-disabled": disabled ? "" : undefined, className: cn("flex flex-col gap-1.5", fullWidth && "w-full", className), ...props }) }));
8
+ }
9
+ FormControl.displayName = "FormControl";
10
+ function FormLabel({ className, children, ...props }) {
11
+ const ctx = React.useContext(FormControlContext);
12
+ return (_jsxs(Label, { "data-slot": "form-label", className: cn(ctx?.error && "text-destructive", className), ...props, children: [children, ctx?.required ? _jsx("span", { className: "text-destructive", children: "*" }) : null] }));
13
+ }
14
+ FormLabel.displayName = "FormLabel";
15
+ function FormHelperText({ className, ...props }) {
16
+ const ctx = React.useContext(FormControlContext);
17
+ return (_jsx("p", { "data-slot": "form-helper-text", className: cn("text-xs font-medium", ctx?.error ? "text-destructive" : "text-muted-foreground", className), ...props }));
18
+ }
19
+ FormHelperText.displayName = "FormHelperText";
20
+ function FormGroup({ row, className, ...props }) {
21
+ return (_jsx("div", { "data-slot": "form-group", role: "group", className: cn("flex", row ? "flex-row flex-wrap gap-4" : "flex-col gap-2", className), ...props }));
22
+ }
23
+ FormGroup.displayName = "FormGroup";
24
+ export { FormControl, FormLabel, FormHelperText, FormGroup };
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ export type FormControlLabelProps = Omit<React.ComponentPropsWithoutRef<"label">, "control"> & {
3
+ control: React.ReactElement<{
4
+ disabled?: boolean;
5
+ }>;
6
+ label: React.ReactNode;
7
+ labelPlacement?: "end" | "start" | "top" | "bottom";
8
+ disabled?: boolean;
9
+ };
10
+ /**
11
+ * Pairs a checkbox, radio, or switch with its visible label.
12
+ */
13
+ declare function FormControlLabel({ control, label, labelPlacement, disabled, className, ...props }: FormControlLabelProps): React.JSX.Element;
14
+ declare namespace FormControlLabel {
15
+ var displayName: string;
16
+ }
17
+ export { FormControlLabel };
18
+ //# sourceMappingURL=FormControlLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormControlLabel.d.ts","sourceRoot":"","sources":["../../src/primitives/FormControlLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,GAAG;IAC7F,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AASF;;GAEG;AACH,iBAAS,gBAAgB,CAAC,EACxB,OAAO,EACP,KAAK,EACL,cAAsB,EACtB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,qBAAqB,qBAmBvB;kBA1BQ,gBAAgB;;;AA6BzB,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/cn";
4
+ import { Label } from "./Label";
5
+ const placementClass = {
6
+ end: "flex-row",
7
+ start: "flex-row-reverse",
8
+ top: "flex-col-reverse items-center",
9
+ bottom: "flex-col items-center",
10
+ };
11
+ /**
12
+ * Pairs a checkbox, radio, or switch with its visible label.
13
+ */
14
+ function FormControlLabel({ control, label, labelPlacement = "end", disabled, className, ...props }) {
15
+ const controlDisabled = disabled || control.props.disabled;
16
+ return (_jsxs(Label, { "data-slot": "form-control-label", "data-disabled": controlDisabled ? "" : undefined, className: cn("inline-flex w-fit cursor-pointer items-center gap-2", placementClass[labelPlacement], controlDisabled && "cursor-not-allowed opacity-50", className), ...props, children: [React.cloneElement(control, { disabled: controlDisabled }), _jsx("span", { className: "text-sm font-medium", children: label })] }));
17
+ }
18
+ FormControlLabel.displayName = "FormControlLabel";
19
+ export { FormControlLabel };
@@ -0,0 +1,32 @@
1
+ import * as React from "react";
2
+ export type BoxProps = React.ComponentPropsWithoutRef<"div"> & {
3
+ component?: React.ElementType;
4
+ asChild?: boolean;
5
+ };
6
+ /**
7
+ * Generic layout primitive. Prefer Stack / Grid / Paper for structured layouts.
8
+ */
9
+ declare const Box: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
10
+ component?: React.ElementType;
11
+ asChild?: boolean;
12
+ } & React.RefAttributes<HTMLDivElement>>;
13
+ export type GridProps = React.ComponentPropsWithoutRef<"div"> & {
14
+ container?: boolean;
15
+ item?: boolean;
16
+ spacing?: number;
17
+ columns?: 12;
18
+ xs?: number | "auto";
19
+ sm?: number | "auto";
20
+ md?: number | "auto";
21
+ lg?: number | "auto";
22
+ size?: number | "grow";
23
+ };
24
+ /**
25
+ * 12-column CSS grid. Use `container` on the parent and breakpoint spans on items.
26
+ */
27
+ declare function Grid({ container, item: _item, spacing, columns: _columns, xs, sm, md, lg, size, className, ...props }: GridProps): React.JSX.Element;
28
+ declare namespace Grid {
29
+ var displayName: string;
30
+ }
31
+ export { Box, Grid };
32
+ //# sourceMappingURL=Grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../src/primitives/Grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG;IAC7D,SAAS,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,GAAG;gBAPK,KAAK,CAAC,WAAW;cACnB,OAAO;wCAWlB,CAAC;AA6BF,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAG;IAC9D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,EAAE,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAOF;;GAEG;AACH,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,IAAI,EAAE,KAAK,EACX,OAAW,EACX,OAAO,EAAE,QAAa,EACtB,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACT,EAAE,SAAS,qBAmBX;kBA/BQ,IAAI;;;AAkCb,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC"}