@spatika/react 1.0.0 → 1.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 (369) hide show
  1. package/AGENTS.md +71 -0
  2. package/README.md +4 -3
  3. package/dist/composites/AccentRule.d.ts +6 -0
  4. package/dist/composites/AccentRule.d.ts.map +1 -0
  5. package/dist/composites/AccentRule.js +6 -0
  6. package/dist/composites/AvailabilityBadge.d.ts +9 -0
  7. package/dist/composites/AvailabilityBadge.d.ts.map +1 -0
  8. package/dist/composites/AvailabilityBadge.js +9 -0
  9. package/dist/composites/Card.d.ts +7 -1
  10. package/dist/composites/Card.d.ts.map +1 -1
  11. package/dist/composites/Card.js +10 -0
  12. package/dist/composites/CareerCard.d.ts +20 -0
  13. package/dist/composites/CareerCard.d.ts.map +1 -0
  14. package/dist/composites/CareerCard.js +17 -0
  15. package/dist/composites/ChartDataGrid.d.ts +33 -0
  16. package/dist/composites/ChartDataGrid.d.ts.map +1 -0
  17. package/dist/composites/ChartDataGrid.js +77 -0
  18. package/dist/composites/ContactLink.d.ts +15 -0
  19. package/dist/composites/ContactLink.d.ts.map +1 -0
  20. package/dist/composites/ContactLink.js +8 -0
  21. package/dist/composites/CoverHero.d.ts +1 -1
  22. package/dist/composites/CoverHero.d.ts.map +1 -1
  23. package/dist/composites/CoverHero.js +2 -2
  24. package/dist/composites/DisplayHeading.d.ts +9 -0
  25. package/dist/composites/DisplayHeading.d.ts.map +1 -0
  26. package/dist/composites/DisplayHeading.js +6 -0
  27. package/dist/composites/EntityMediaCard.d.ts +1 -1
  28. package/dist/composites/EntityMediaCard.d.ts.map +1 -1
  29. package/dist/composites/EntityMediaCard.js +12 -4
  30. package/dist/composites/EventCalendar.d.ts +35 -0
  31. package/dist/composites/EventCalendar.d.ts.map +1 -0
  32. package/dist/composites/EventCalendar.js +339 -0
  33. package/dist/composites/EventEditor.d.ts +22 -0
  34. package/dist/composites/EventEditor.d.ts.map +1 -0
  35. package/dist/composites/EventEditor.js +86 -0
  36. package/dist/composites/EventTimeline.d.ts +24 -0
  37. package/dist/composites/EventTimeline.d.ts.map +1 -0
  38. package/dist/composites/EventTimeline.js +184 -0
  39. package/dist/composites/FloatChip.d.ts +15 -0
  40. package/dist/composites/FloatChip.d.ts.map +1 -0
  41. package/dist/composites/FloatChip.js +7 -0
  42. package/dist/composites/GradientText.d.ts +11 -0
  43. package/dist/composites/GradientText.d.ts.map +1 -0
  44. package/dist/composites/GradientText.js +6 -0
  45. package/dist/composites/IconTile.d.ts +10 -0
  46. package/dist/composites/IconTile.d.ts.map +1 -0
  47. package/dist/composites/IconTile.js +7 -0
  48. package/dist/composites/MapChart.d.ts +24 -0
  49. package/dist/composites/MapChart.d.ts.map +1 -0
  50. package/dist/composites/MapChart.js +58 -0
  51. package/dist/composites/MetaChip.d.ts +9 -0
  52. package/dist/composites/MetaChip.d.ts.map +1 -0
  53. package/dist/composites/MetaChip.js +6 -0
  54. package/dist/composites/PresenceDot.d.ts +10 -0
  55. package/dist/composites/PresenceDot.d.ts.map +1 -0
  56. package/dist/composites/PresenceDot.js +10 -0
  57. package/dist/composites/ProfileHero.d.ts +6 -4
  58. package/dist/composites/ProfileHero.d.ts.map +1 -1
  59. package/dist/composites/ProfileHero.js +8 -8
  60. package/dist/composites/ProjectCard.d.ts +12 -0
  61. package/dist/composites/ProjectCard.d.ts.map +1 -0
  62. package/dist/composites/ProjectCard.js +9 -0
  63. package/dist/composites/ScatterWebGL.d.ts +22 -0
  64. package/dist/composites/ScatterWebGL.d.ts.map +1 -0
  65. package/dist/composites/ScatterWebGL.js +45 -0
  66. package/dist/composites/SectionHeading.d.ts +16 -0
  67. package/dist/composites/SectionHeading.d.ts.map +1 -0
  68. package/dist/composites/SectionHeading.js +12 -0
  69. package/dist/composites/SiteFooter.d.ts +18 -0
  70. package/dist/composites/SiteFooter.d.ts.map +1 -0
  71. package/dist/composites/SiteFooter.js +15 -0
  72. package/dist/composites/SiteNav.d.ts +25 -0
  73. package/dist/composites/SiteNav.d.ts.map +1 -0
  74. package/dist/composites/SiteNav.js +44 -0
  75. package/dist/composites/StatCard.d.ts +7 -1
  76. package/dist/composites/StatCard.d.ts.map +1 -1
  77. package/dist/composites/StatCard.js +5 -2
  78. package/dist/composites/StatusDot.d.ts +1 -1
  79. package/dist/composites/Tag.d.ts +11 -0
  80. package/dist/composites/Tag.d.ts.map +1 -0
  81. package/dist/composites/Tag.js +33 -0
  82. package/dist/composites/Wordmark.d.ts +19 -0
  83. package/dist/composites/Wordmark.d.ts.map +1 -0
  84. package/dist/composites/Wordmark.js +15 -0
  85. package/dist/composites/cartesian-charts.d.ts +138 -0
  86. package/dist/composites/cartesian-charts.d.ts.map +1 -0
  87. package/dist/composites/cartesian-charts.js +401 -0
  88. package/dist/composites/chart-composition.d.ts +139 -0
  89. package/dist/composites/chart-composition.d.ts.map +1 -0
  90. package/dist/composites/chart-composition.js +486 -0
  91. package/dist/composites/chart-ui.d.ts +83 -0
  92. package/dist/composites/chart-ui.d.ts.map +1 -0
  93. package/dist/composites/chart-ui.js +108 -0
  94. package/dist/composites/charts-3d.d.ts +37 -0
  95. package/dist/composites/charts-3d.d.ts.map +1 -0
  96. package/dist/composites/charts-3d.js +121 -0
  97. package/dist/composites/flow-charts.d.ts +89 -0
  98. package/dist/composites/flow-charts.d.ts.map +1 -0
  99. package/dist/composites/flow-charts.js +186 -0
  100. package/dist/composites/radial-charts.d.ts +109 -0
  101. package/dist/composites/radial-charts.d.ts.map +1 -0
  102. package/dist/composites/radial-charts.js +176 -0
  103. package/dist/composites/scheduler-ui.d.ts +43 -0
  104. package/dist/composites/scheduler-ui.d.ts.map +1 -0
  105. package/dist/composites/scheduler-ui.js +71 -0
  106. package/dist/index.d.ts +83 -7
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +74 -7
  109. package/dist/lib/chart-export.d.ts +10 -0
  110. package/dist/lib/chart-export.d.ts.map +1 -0
  111. package/dist/lib/chart-export.js +102 -0
  112. package/dist/lib/charts.d.ts +235 -0
  113. package/dist/lib/charts.d.ts.map +1 -0
  114. package/dist/lib/charts.js +744 -0
  115. package/dist/lib/geo.d.ts +39 -0
  116. package/dist/lib/geo.d.ts.map +1 -0
  117. package/dist/lib/geo.js +101 -0
  118. package/dist/lib/iso.d.ts +21 -0
  119. package/dist/lib/iso.d.ts.map +1 -0
  120. package/dist/lib/iso.js +56 -0
  121. package/dist/lib/rrule.d.ts +20 -0
  122. package/dist/lib/rrule.d.ts.map +1 -0
  123. package/dist/lib/rrule.js +236 -0
  124. package/dist/lib/scheduler.d.ts +152 -0
  125. package/dist/lib/scheduler.d.ts.map +1 -0
  126. package/dist/lib/scheduler.js +501 -0
  127. package/dist/lib/webgl-scatter.d.ts +44 -0
  128. package/dist/lib/webgl-scatter.d.ts.map +1 -0
  129. package/dist/lib/webgl-scatter.js +185 -0
  130. package/dist/primitives/Accordion.d.ts +44 -20
  131. package/dist/primitives/Accordion.d.ts.map +1 -1
  132. package/dist/primitives/Accordion.js +82 -22
  133. package/dist/primitives/AppBar.d.ts +13 -0
  134. package/dist/primitives/AppBar.d.ts.map +1 -0
  135. package/dist/primitives/AppBar.js +27 -0
  136. package/dist/primitives/Autocomplete.d.ts +28 -0
  137. package/dist/primitives/Autocomplete.d.ts.map +1 -0
  138. package/dist/primitives/Autocomplete.js +118 -0
  139. package/dist/primitives/Avatar.d.ts +13 -1
  140. package/dist/primitives/Avatar.d.ts.map +1 -1
  141. package/dist/primitives/Avatar.js +17 -2
  142. package/dist/primitives/Backdrop.d.ts +17 -0
  143. package/dist/primitives/Backdrop.d.ts.map +1 -0
  144. package/dist/primitives/Backdrop.js +17 -0
  145. package/dist/primitives/BottomNavigation.d.ts +23 -0
  146. package/dist/primitives/BottomNavigation.d.ts.map +1 -0
  147. package/dist/primitives/BottomNavigation.js +30 -0
  148. package/dist/primitives/Button.d.ts +4 -4
  149. package/dist/primitives/Button.d.ts.map +1 -1
  150. package/dist/primitives/Button.js +2 -0
  151. package/dist/primitives/ButtonBase.d.ts +14 -0
  152. package/dist/primitives/ButtonBase.d.ts.map +1 -0
  153. package/dist/primitives/ButtonBase.js +13 -0
  154. package/dist/primitives/ButtonGroup.d.ts +25 -0
  155. package/dist/primitives/ButtonGroup.d.ts.map +1 -0
  156. package/dist/primitives/ButtonGroup.js +44 -0
  157. package/dist/primitives/CircularProgress.d.ts +16 -0
  158. package/dist/primitives/CircularProgress.d.ts.map +1 -0
  159. package/dist/primitives/CircularProgress.js +17 -0
  160. package/dist/primitives/ClickAwayListener.d.ts +16 -0
  161. package/dist/primitives/ClickAwayListener.d.ts.map +1 -0
  162. package/dist/primitives/ClickAwayListener.js +33 -0
  163. package/dist/primitives/Collapse.d.ts +19 -0
  164. package/dist/primitives/Collapse.d.ts.map +1 -0
  165. package/dist/primitives/Collapse.js +14 -0
  166. package/dist/primitives/Container.d.ts +13 -0
  167. package/dist/primitives/Container.d.ts.map +1 -0
  168. package/dist/primitives/Container.js +26 -0
  169. package/dist/primitives/Fab.d.ts +22 -0
  170. package/dist/primitives/Fab.d.ts.map +1 -0
  171. package/dist/primitives/Fab.js +42 -0
  172. package/dist/primitives/FormControl.d.ts +27 -0
  173. package/dist/primitives/FormControl.d.ts.map +1 -0
  174. package/dist/primitives/FormControl.js +24 -0
  175. package/dist/primitives/FormControlLabel.d.ts +18 -0
  176. package/dist/primitives/FormControlLabel.d.ts.map +1 -0
  177. package/dist/primitives/FormControlLabel.js +19 -0
  178. package/dist/primitives/Grid.d.ts +32 -0
  179. package/dist/primitives/Grid.d.ts.map +1 -0
  180. package/dist/primitives/Grid.js +50 -0
  181. package/dist/primitives/IconButton.d.ts +22 -0
  182. package/dist/primitives/IconButton.d.ts.map +1 -0
  183. package/dist/primitives/IconButton.js +39 -0
  184. package/dist/primitives/ImageList.d.ts +31 -0
  185. package/dist/primitives/ImageList.d.ts.map +1 -0
  186. package/dist/primitives/ImageList.js +33 -0
  187. package/dist/primitives/InputAdornment.d.ts +28 -0
  188. package/dist/primitives/InputAdornment.d.ts.map +1 -0
  189. package/dist/primitives/InputAdornment.js +13 -0
  190. package/dist/primitives/Link.d.ts +17 -0
  191. package/dist/primitives/Link.d.ts.map +1 -0
  192. package/dist/primitives/Link.js +29 -0
  193. package/dist/primitives/List.d.ts +41 -0
  194. package/dist/primitives/List.d.ts.map +1 -0
  195. package/dist/primitives/List.js +22 -0
  196. package/dist/primitives/Masonry.d.ts +14 -0
  197. package/dist/primitives/Masonry.d.ts.map +1 -0
  198. package/dist/primitives/Masonry.js +15 -0
  199. package/dist/primitives/Menu.d.ts +28 -0
  200. package/dist/primitives/Menu.d.ts.map +1 -0
  201. package/dist/primitives/Menu.js +54 -0
  202. package/dist/primitives/MobileStepper.d.ts +15 -0
  203. package/dist/primitives/MobileStepper.d.ts.map +1 -0
  204. package/dist/primitives/MobileStepper.js +8 -0
  205. package/dist/primitives/Modal.d.ts +18 -0
  206. package/dist/primitives/Modal.d.ts.map +1 -0
  207. package/dist/primitives/Modal.js +29 -0
  208. package/dist/primitives/NoSsr.d.ts +15 -0
  209. package/dist/primitives/NoSsr.d.ts.map +1 -0
  210. package/dist/primitives/NoSsr.js +19 -0
  211. package/dist/primitives/Paper.d.ts +22 -0
  212. package/dist/primitives/Paper.d.ts.map +1 -0
  213. package/dist/primitives/Paper.js +33 -0
  214. package/dist/primitives/Progress.d.ts +6 -2
  215. package/dist/primitives/Progress.d.ts.map +1 -1
  216. package/dist/primitives/Progress.js +8 -3
  217. package/dist/primitives/Snackbar.d.ts +23 -0
  218. package/dist/primitives/Snackbar.d.ts.map +1 -0
  219. package/dist/primitives/Snackbar.js +33 -0
  220. package/dist/primitives/SpeedDial.d.ts +26 -0
  221. package/dist/primitives/SpeedDial.d.ts.map +1 -0
  222. package/dist/primitives/SpeedDial.js +26 -0
  223. package/dist/primitives/Stack.d.ts +15 -0
  224. package/dist/primitives/Stack.d.ts.map +1 -0
  225. package/dist/primitives/Stack.js +45 -0
  226. package/dist/primitives/StarRating.d.ts +19 -1
  227. package/dist/primitives/StarRating.d.ts.map +1 -1
  228. package/dist/primitives/StarRating.js +36 -6
  229. package/dist/primitives/Stepper.d.ts +36 -0
  230. package/dist/primitives/Stepper.d.ts.map +1 -0
  231. package/dist/primitives/Stepper.js +53 -0
  232. package/dist/primitives/TablePagination.d.ts +16 -0
  233. package/dist/primitives/TablePagination.d.ts.map +1 -0
  234. package/dist/primitives/TablePagination.js +12 -0
  235. package/dist/primitives/TextField.d.ts +24 -0
  236. package/dist/primitives/TextField.d.ts.map +1 -0
  237. package/dist/primitives/TextField.js +19 -0
  238. package/dist/primitives/TextareaAutosize.d.ts +11 -0
  239. package/dist/primitives/TextareaAutosize.d.ts.map +1 -0
  240. package/dist/primitives/TextareaAutosize.js +26 -0
  241. package/dist/primitives/ToggleButton.d.ts +28 -0
  242. package/dist/primitives/ToggleButton.d.ts.map +1 -0
  243. package/dist/primitives/ToggleButton.js +56 -0
  244. package/dist/primitives/TransferList.d.ts +21 -0
  245. package/dist/primitives/TransferList.d.ts.map +1 -0
  246. package/dist/primitives/TransferList.js +40 -0
  247. package/dist/primitives/Typography.d.ts +23 -0
  248. package/dist/primitives/Typography.d.ts.map +1 -0
  249. package/dist/primitives/Typography.js +69 -0
  250. package/dist/primitives/transitions.d.ts +29 -0
  251. package/dist/primitives/transitions.d.ts.map +1 -0
  252. package/dist/primitives/transitions.js +52 -0
  253. package/package.json +30 -5
  254. package/skills/spatika-ui/SKILL.md +96 -0
  255. package/src/composites/AccentRule.tsx +12 -0
  256. package/src/composites/AvailabilityBadge.tsx +32 -0
  257. package/src/composites/Card.tsx +51 -1
  258. package/src/composites/CareerCard.tsx +111 -0
  259. package/src/composites/ChartDataGrid.test.tsx +57 -0
  260. package/src/composites/ChartDataGrid.tsx +196 -0
  261. package/src/composites/ContactLink.tsx +66 -0
  262. package/src/composites/CoverHero.test.tsx +38 -0
  263. package/src/composites/CoverHero.tsx +29 -22
  264. package/src/composites/DisplayHeading.tsx +27 -0
  265. package/src/composites/EntityMediaCard.test.tsx +58 -0
  266. package/src/composites/EntityMediaCard.tsx +31 -13
  267. package/src/composites/EventCalendar.tsx +928 -0
  268. package/src/composites/EventEditor.tsx +268 -0
  269. package/src/composites/EventTimeline.tsx +357 -0
  270. package/src/composites/FloatChip.tsx +63 -0
  271. package/src/composites/GradientText.tsx +31 -0
  272. package/src/composites/IconTile.tsx +33 -0
  273. package/src/composites/MapChart.test.tsx +39 -0
  274. package/src/composites/MapChart.tsx +130 -0
  275. package/src/composites/MetaChip.tsx +24 -0
  276. package/src/composites/PresenceDot.tsx +42 -0
  277. package/src/composites/ProfileHero.test.tsx +33 -0
  278. package/src/composites/ProfileHero.tsx +96 -79
  279. package/src/composites/ProjectCard.tsx +65 -0
  280. package/src/composites/ScatterWebGL.test.tsx +25 -0
  281. package/src/composites/ScatterWebGL.tsx +79 -0
  282. package/src/composites/SectionHeading.tsx +61 -0
  283. package/src/composites/SiteFooter.test.tsx +37 -0
  284. package/src/composites/SiteFooter.tsx +79 -0
  285. package/src/composites/SiteNav.test.tsx +46 -0
  286. package/src/composites/SiteNav.tsx +150 -0
  287. package/src/composites/StatCard.test.tsx +30 -0
  288. package/src/composites/StatCard.tsx +36 -1
  289. package/src/composites/Tag.tsx +50 -0
  290. package/src/composites/Wordmark.test.tsx +23 -0
  291. package/src/composites/Wordmark.tsx +46 -0
  292. package/src/composites/cartesian-charts.test.tsx +52 -0
  293. package/src/composites/cartesian-charts.tsx +1287 -0
  294. package/src/composites/chart-composition.test.tsx +53 -0
  295. package/src/composites/chart-composition.tsx +898 -0
  296. package/src/composites/chart-ui.tsx +328 -0
  297. package/src/composites/charts-3d.test.tsx +25 -0
  298. package/src/composites/charts-3d.tsx +318 -0
  299. package/src/composites/charts.test.tsx +254 -0
  300. package/src/composites/chrome.test.tsx +29 -0
  301. package/src/composites/flow-charts.test.tsx +79 -0
  302. package/src/composites/flow-charts.tsx +607 -0
  303. package/src/composites/marketing.test.tsx +192 -0
  304. package/src/composites/radial-charts.test.tsx +74 -0
  305. package/src/composites/radial-charts.tsx +617 -0
  306. package/src/composites/scheduler-ui.tsx +304 -0
  307. package/src/composites/scheduler.test.tsx +194 -0
  308. package/src/index.test.ts +22 -0
  309. package/src/index.ts +300 -5
  310. package/src/lib/chart-export.test.ts +20 -0
  311. package/src/lib/chart-export.ts +99 -0
  312. package/src/lib/charts-platform.test.ts +93 -0
  313. package/src/lib/charts.test.ts +132 -0
  314. package/src/lib/charts.ts +1021 -0
  315. package/src/lib/geo.test.ts +42 -0
  316. package/src/lib/geo.ts +138 -0
  317. package/src/lib/iso.test.ts +22 -0
  318. package/src/lib/iso.ts +102 -0
  319. package/src/lib/rrule.test.ts +53 -0
  320. package/src/lib/rrule.ts +281 -0
  321. package/src/lib/scheduler.test.ts +186 -0
  322. package/src/lib/scheduler.ts +688 -0
  323. package/src/lib/tokens.test.ts +2 -2
  324. package/src/lib/webgl-scatter.test.ts +36 -0
  325. package/src/lib/webgl-scatter.ts +230 -0
  326. package/src/primitives/Accordion.tsx +218 -63
  327. package/src/primitives/AppBar.tsx +39 -0
  328. package/src/primitives/Autocomplete.tsx +236 -0
  329. package/src/primitives/Avatar.tsx +52 -1
  330. package/src/primitives/Backdrop.tsx +48 -0
  331. package/src/primitives/BottomNavigation.tsx +102 -0
  332. package/src/primitives/Button.tsx +3 -0
  333. package/src/primitives/ButtonBase.tsx +34 -0
  334. package/src/primitives/ButtonGroup.tsx +90 -0
  335. package/src/primitives/CircularProgress.tsx +104 -0
  336. package/src/primitives/ClickAwayListener.tsx +46 -0
  337. package/src/primitives/Collapse.tsx +39 -0
  338. package/src/primitives/Container.tsx +40 -0
  339. package/src/primitives/Fab.tsx +62 -0
  340. package/src/primitives/FormControl.tsx +90 -0
  341. package/src/primitives/FormControlLabel.tsx +51 -0
  342. package/src/primitives/Grid.tsx +101 -0
  343. package/src/primitives/IconButton.tsx +59 -0
  344. package/src/primitives/ImageList.test.tsx +48 -0
  345. package/src/primitives/ImageList.tsx +112 -0
  346. package/src/primitives/InputAdornment.tsx +86 -0
  347. package/src/primitives/Link.tsx +48 -0
  348. package/src/primitives/List.tsx +121 -0
  349. package/src/primitives/Masonry.tsx +32 -0
  350. package/src/primitives/Menu.tsx +112 -0
  351. package/src/primitives/MobileStepper.tsx +64 -0
  352. package/src/primitives/Modal.tsx +70 -0
  353. package/src/primitives/NoSsr.tsx +28 -0
  354. package/src/primitives/Paper.tsx +55 -0
  355. package/src/primitives/Progress.tsx +25 -7
  356. package/src/primitives/Snackbar.tsx +83 -0
  357. package/src/primitives/SpeedDial.tsx +110 -0
  358. package/src/primitives/Stack.tsx +88 -0
  359. package/src/primitives/StarRating.tsx +87 -28
  360. package/src/primitives/Stepper.tsx +184 -0
  361. package/src/primitives/TablePagination.tsx +58 -0
  362. package/src/primitives/TextField.tsx +105 -0
  363. package/src/primitives/TextareaAutosize.tsx +49 -0
  364. package/src/primitives/ToggleButton.tsx +148 -0
  365. package/src/primitives/TransferList.tsx +110 -0
  366. package/src/primitives/Typography.tsx +90 -0
  367. package/src/primitives/mui-more.test.tsx +76 -0
  368. package/src/primitives/mui.test.tsx +134 -0
  369. 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 };
@@ -1,12 +1,12 @@
1
1
  import * as React from "react";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "glass" | null | undefined;
5
- size?: "default" | "icon" | "touch" | "sm" | "lg" | "icon-touch" | null | undefined;
4
+ variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "glass" | "gradient" | null | undefined;
5
+ size?: "default" | "icon" | "touch" | "sm" | "lg" | "xl" | "icon-touch" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  declare const Button: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<(props?: ({
8
- variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "glass" | null | undefined;
9
- size?: "default" | "icon" | "touch" | "sm" | "lg" | "icon-touch" | null | undefined;
8
+ variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "glass" | "gradient" | null | undefined;
9
+ size?: "default" | "icon" | "touch" | "sm" | "lg" | "xl" | "icon-touch" | null | undefined;
10
10
  } & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
11
11
  asChild?: boolean;
12
12
  }, "ref"> & React.RefAttributes<HTMLButtonElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/primitives/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,cAAc;;;8EA+BnB,CAAC;AAEF,QAAA,MAAM,MAAM;;;;cAII,OAAO;mDAYrB,CAAC;AAGH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/primitives/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlE,QAAA,MAAM,cAAc;;;8EAkCnB,CAAC;AAEF,QAAA,MAAM,MAAM;;;;cAII,OAAO;mDAYrB,CAAC;AAGH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
@@ -13,11 +13,13 @@ const buttonVariants = cva("inline-flex items-center justify-center gap-2 whites
13
13
  ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
14
14
  link: "text-primary underline-offset-4 hover:underline",
15
15
  glass: "glass border-border/50 text-foreground hover:border-primary/30 hover:text-primary",
16
+ gradient: "rounded-full bg-gradient-to-r from-primary to-[color-mix(in_srgb,var(--primary)_72%,var(--chart-2))] text-primary-foreground shadow-[0_10px_32px_color-mix(in_srgb,var(--primary)_38%,transparent)] hover:brightness-105 hover:-translate-y-0.5 hover:shadow-[0_14px_40px_color-mix(in_srgb,var(--chart-3)_22%,transparent)]",
16
17
  },
17
18
  size: {
18
19
  default: "h-9 px-4 py-2 has-[>svg]:px-3",
19
20
  sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
20
21
  lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
22
+ xl: "h-auto rounded-full px-8 py-4 text-[15px] font-bold has-[>svg]:px-7",
21
23
  /** Mobile-first ≥44px touch target */
22
24
  touch: "min-h-11 h-11 rounded-md px-5 has-[>svg]:px-4",
23
25
  icon: "size-9 rounded-md",
@@ -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 };