@cronus-ui/ui 0.6.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 (717) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +262 -0
  3. package/dist/charts/animation.d.ts +11 -0
  4. package/dist/charts/animation.js +29 -0
  5. package/dist/charts/area-chart-loading.d.ts +34 -0
  6. package/dist/charts/area-chart-loading.js +22 -0
  7. package/dist/charts/area-chart.d.ts +48 -0
  8. package/dist/charts/area-chart.js +57 -0
  9. package/dist/charts/area-gradient-defs.d.ts +20 -0
  10. package/dist/charts/area-gradient-defs.js +15 -0
  11. package/dist/charts/area.d.ts +76 -0
  12. package/dist/charts/area.js +104 -0
  13. package/dist/charts/background.d.ts +27 -0
  14. package/dist/charts/background.js +68 -0
  15. package/dist/charts/bar-chart-loading.d.ts +17 -0
  16. package/dist/charts/bar-chart-loading.js +14 -0
  17. package/dist/charts/bar-chart.d.ts +55 -0
  18. package/dist/charts/bar-chart.js +432 -0
  19. package/dist/charts/bar-depth-geometry.d.ts +33 -0
  20. package/dist/charts/bar-depth-geometry.js +38 -0
  21. package/dist/charts/bar-depth.d.ts +157 -0
  22. package/dist/charts/bar-depth.js +586 -0
  23. package/dist/charts/bar-squares-layout.d.ts +28 -0
  24. package/dist/charts/bar-squares-layout.js +47 -0
  25. package/dist/charts/bar-squares.d.ts +49 -0
  26. package/dist/charts/bar-squares.js +207 -0
  27. package/dist/charts/bar-x-axis.d.ts +14 -0
  28. package/dist/charts/bar-x-axis.js +73 -0
  29. package/dist/charts/bar-y-axis.d.ts +12 -0
  30. package/dist/charts/bar-y-axis.js +64 -0
  31. package/dist/charts/bar.d.ts +41 -0
  32. package/dist/charts/bar.js +208 -0
  33. package/dist/charts/candlestick-chart.d.ts +46 -0
  34. package/dist/charts/candlestick-chart.js +203 -0
  35. package/dist/charts/candlestick.d.ts +24 -0
  36. package/dist/charts/candlestick.js +139 -0
  37. package/dist/charts/chart-brush-handle.d.ts +15 -0
  38. package/dist/charts/chart-brush-handle.js +47 -0
  39. package/dist/charts/chart-brush-layout.d.ts +27 -0
  40. package/dist/charts/chart-brush-layout.js +42 -0
  41. package/dist/charts/chart-brush-selection-overlay.d.ts +19 -0
  42. package/dist/charts/chart-brush-selection-overlay.js +44 -0
  43. package/dist/charts/chart-brush-track-overlay.d.ts +23 -0
  44. package/dist/charts/chart-brush-track-overlay.js +65 -0
  45. package/dist/charts/chart-brush.d.ts +32 -0
  46. package/dist/charts/chart-brush.js +116 -0
  47. package/dist/charts/chart-center-typography.d.ts +12 -0
  48. package/dist/charts/chart-center-typography.js +12 -0
  49. package/dist/charts/chart-child-passthrough.d.ts +17 -0
  50. package/dist/charts/chart-child-passthrough.js +74 -0
  51. package/dist/charts/chart-config-context.d.ts +26 -0
  52. package/dist/charts/chart-config-context.js +47 -0
  53. package/dist/charts/chart-context.d.ts +199 -0
  54. package/dist/charts/chart-context.js +201 -0
  55. package/dist/charts/chart-defs.d.ts +13 -0
  56. package/dist/charts/chart-defs.js +49 -0
  57. package/dist/charts/chart-formatters.d.ts +10 -0
  58. package/dist/charts/chart-formatters.js +28 -0
  59. package/dist/charts/chart-legend-hover.d.ts +13 -0
  60. package/dist/charts/chart-legend-hover.js +18 -0
  61. package/dist/charts/chart-legend.d.ts +55 -0
  62. package/dist/charts/chart-legend.js +30 -0
  63. package/dist/charts/chart-loading-label.d.ts +10 -0
  64. package/dist/charts/chart-loading-label.js +21 -0
  65. package/dist/charts/chart-phase.d.ts +31 -0
  66. package/dist/charts/chart-phase.js +21 -0
  67. package/dist/charts/chart-reveal-clip.d.ts +24 -0
  68. package/dist/charts/chart-reveal-clip.js +24 -0
  69. package/dist/charts/chart-scale.d.ts +12 -0
  70. package/dist/charts/chart-scale.js +17 -0
  71. package/dist/charts/chart-stat-flow.d.ts +36 -0
  72. package/dist/charts/chart-stat-flow.js +23 -0
  73. package/dist/charts/choropleth/choropleth-chart.d.ts +43 -0
  74. package/dist/charts/choropleth/choropleth-chart.js +218 -0
  75. package/dist/charts/choropleth/choropleth-context.d.ts +86 -0
  76. package/dist/charts/choropleth/choropleth-context.js +106 -0
  77. package/dist/charts/choropleth/choropleth-feature.d.ts +13 -0
  78. package/dist/charts/choropleth/choropleth-feature.js +125 -0
  79. package/dist/charts/choropleth/choropleth-graticule.d.ts +11 -0
  80. package/dist/charts/choropleth/choropleth-graticule.js +12 -0
  81. package/dist/charts/choropleth/choropleth-tooltip.d.ts +31 -0
  82. package/dist/charts/choropleth/choropleth-tooltip.js +50 -0
  83. package/dist/charts/choropleth/index.d.ts +7 -0
  84. package/dist/charts/choropleth/index.js +6 -0
  85. package/dist/charts/composed-chart.d.ts +36 -0
  86. package/dist/charts/composed-chart.js +152 -0
  87. package/dist/charts/dash-tail-stroke.d.ts +18 -0
  88. package/dist/charts/dash-tail-stroke.js +13 -0
  89. package/dist/charts/decimate-time-series.d.ts +10 -0
  90. package/dist/charts/decimate-time-series.js +112 -0
  91. package/dist/charts/fade-edges.d.ts +34 -0
  92. package/dist/charts/fade-edges.js +35 -0
  93. package/dist/charts/filter-data-by-x-domain.d.ts +5 -0
  94. package/dist/charts/filter-data-by-x-domain.js +42 -0
  95. package/dist/charts/funnel-chart.d.ts +91 -0
  96. package/dist/charts/funnel-chart.js +302 -0
  97. package/dist/charts/gauge-label-layout.d.ts +22 -0
  98. package/dist/charts/gauge-label-layout.js +44 -0
  99. package/dist/charts/gauge.d.ts +56 -0
  100. package/dist/charts/gauge.js +307 -0
  101. package/dist/charts/generate-chart-skeleton-data.d.ts +16 -0
  102. package/dist/charts/generate-chart-skeleton-data.js +25 -0
  103. package/dist/charts/grid.d.ts +58 -0
  104. package/dist/charts/grid.js +80 -0
  105. package/dist/charts/heatmap/generate-heatmap-skeleton-data.d.ts +4 -0
  106. package/dist/charts/heatmap/generate-heatmap-skeleton-data.js +12 -0
  107. package/dist/charts/heatmap/heatmap-animation.d.ts +41 -0
  108. package/dist/charts/heatmap/heatmap-animation.js +85 -0
  109. package/dist/charts/heatmap/heatmap-cells.d.ts +21 -0
  110. package/dist/charts/heatmap/heatmap-cells.js +265 -0
  111. package/dist/charts/heatmap/heatmap-chart-loading.d.ts +21 -0
  112. package/dist/charts/heatmap/heatmap-chart-loading.js +14 -0
  113. package/dist/charts/heatmap/heatmap-chart.d.ts +80 -0
  114. package/dist/charts/heatmap/heatmap-chart.js +275 -0
  115. package/dist/charts/heatmap/heatmap-colors.d.ts +70 -0
  116. package/dist/charts/heatmap/heatmap-colors.js +113 -0
  117. package/dist/charts/heatmap/heatmap-context.d.ts +109 -0
  118. package/dist/charts/heatmap/heatmap-context.js +69 -0
  119. package/dist/charts/heatmap/heatmap-legend-gradient.d.ts +20 -0
  120. package/dist/charts/heatmap/heatmap-legend-gradient.js +44 -0
  121. package/dist/charts/heatmap/heatmap-legend-swatch.d.ts +8 -0
  122. package/dist/charts/heatmap/heatmap-legend-swatch.js +26 -0
  123. package/dist/charts/heatmap/heatmap-legend.d.ts +41 -0
  124. package/dist/charts/heatmap/heatmap-legend.js +68 -0
  125. package/dist/charts/heatmap/heatmap-pattern-defs.d.ts +5 -0
  126. package/dist/charts/heatmap/heatmap-pattern-defs.js +25 -0
  127. package/dist/charts/heatmap/heatmap-resolve-separator.d.ts +8 -0
  128. package/dist/charts/heatmap/heatmap-resolve-separator.js +82 -0
  129. package/dist/charts/heatmap/heatmap-separator.d.ts +63 -0
  130. package/dist/charts/heatmap/heatmap-separator.js +71 -0
  131. package/dist/charts/heatmap/heatmap-tooltip.d.ts +30 -0
  132. package/dist/charts/heatmap/heatmap-tooltip.js +20 -0
  133. package/dist/charts/heatmap/heatmap-utils.d.ts +175 -0
  134. package/dist/charts/heatmap/heatmap-utils.js +595 -0
  135. package/dist/charts/heatmap/heatmap-x-axis.d.ts +7 -0
  136. package/dist/charts/heatmap/heatmap-x-axis.js +54 -0
  137. package/dist/charts/heatmap/heatmap-y-axis.d.ts +14 -0
  138. package/dist/charts/heatmap/heatmap-y-axis.js +37 -0
  139. package/dist/charts/heatmap/index.d.ts +15 -0
  140. package/dist/charts/heatmap/index.js +15 -0
  141. package/dist/charts/heatmap/use-delayed-tooltip-data.d.ts +3 -0
  142. package/dist/charts/heatmap/use-delayed-tooltip-data.js +53 -0
  143. package/dist/charts/highlight-segment-bounds.d.ts +18 -0
  144. package/dist/charts/highlight-segment-bounds.js +36 -0
  145. package/dist/charts/highlight-segment.d.ts +22 -0
  146. package/dist/charts/highlight-segment.js +14 -0
  147. package/dist/charts/index.d.ts +106 -0
  148. package/dist/charts/index.js +133 -0
  149. package/dist/charts/indicator-fade.d.ts +15 -0
  150. package/dist/charts/indicator-fade.js +42 -0
  151. package/dist/charts/legend/index.d.ts +8 -0
  152. package/dist/charts/legend/index.js +10 -0
  153. package/dist/charts/legend/legend-context.d.ts +48 -0
  154. package/dist/charts/legend/legend-context.js +34 -0
  155. package/dist/charts/legend/legend-item.d.ts +12 -0
  156. package/dist/charts/legend/legend-item.js +11 -0
  157. package/dist/charts/legend/legend-label.d.ts +9 -0
  158. package/dist/charts/legend/legend-label.js +10 -0
  159. package/dist/charts/legend/legend-marker.d.ts +9 -0
  160. package/dist/charts/legend/legend-marker.js +11 -0
  161. package/dist/charts/legend/legend-progress.d.ts +13 -0
  162. package/dist/charts/legend/legend-progress.js +15 -0
  163. package/dist/charts/legend/legend-value.d.ts +17 -0
  164. package/dist/charts/legend/legend-value.js +11 -0
  165. package/dist/charts/legend/legend.d.ts +23 -0
  166. package/dist/charts/legend/legend.js +43 -0
  167. package/dist/charts/line-chart-loading.d.ts +34 -0
  168. package/dist/charts/line-chart-loading.js +22 -0
  169. package/dist/charts/line-chart.d.ts +46 -0
  170. package/dist/charts/line-chart.js +91 -0
  171. package/dist/charts/line-loading-pulse.d.ts +20 -0
  172. package/dist/charts/line-loading-pulse.js +124 -0
  173. package/dist/charts/line-loading-timing.d.ts +10 -0
  174. package/dist/charts/line-loading-timing.js +10 -0
  175. package/dist/charts/line-series-terminal-marker.d.ts +16 -0
  176. package/dist/charts/line-series-terminal-marker.js +46 -0
  177. package/dist/charts/line.d.ts +64 -0
  178. package/dist/charts/line.js +96 -0
  179. package/dist/charts/live-line-chart.d.ts +35 -0
  180. package/dist/charts/live-line-chart.js +374 -0
  181. package/dist/charts/live-line.d.ts +39 -0
  182. package/dist/charts/live-line.js +78 -0
  183. package/dist/charts/live-x-axis.d.ts +12 -0
  184. package/dist/charts/live-x-axis.js +85 -0
  185. package/dist/charts/live-y-axis.d.ts +16 -0
  186. package/dist/charts/live-y-axis.js +137 -0
  187. package/dist/charts/loading-sweep.d.ts +66 -0
  188. package/dist/charts/loading-sweep.js +174 -0
  189. package/dist/charts/markers/chart-markers.d.ts +25 -0
  190. package/dist/charts/markers/chart-markers.js +87 -0
  191. package/dist/charts/markers/index.d.ts +3 -0
  192. package/dist/charts/markers/index.js +3 -0
  193. package/dist/charts/markers/marker-group.d.ts +88 -0
  194. package/dist/charts/markers/marker-group.js +171 -0
  195. package/dist/charts/motion-utils.d.ts +9 -0
  196. package/dist/charts/motion-utils.js +28 -0
  197. package/dist/charts/notch-gauge-shared.d.ts +49 -0
  198. package/dist/charts/notch-gauge-shared.js +103 -0
  199. package/dist/charts/path-stroke-utils.d.ts +20 -0
  200. package/dist/charts/path-stroke-utils.js +55 -0
  201. package/dist/charts/pattern-area.d.ts +21 -0
  202. package/dist/charts/pattern-area.js +19 -0
  203. package/dist/charts/pattern-preset.d.ts +26 -0
  204. package/dist/charts/pattern-preset.js +83 -0
  205. package/dist/charts/pie-center-shell.d.ts +24 -0
  206. package/dist/charts/pie-center-shell.js +109 -0
  207. package/dist/charts/pie-center.d.ts +46 -0
  208. package/dist/charts/pie-center.js +46 -0
  209. package/dist/charts/pie-chart.d.ts +50 -0
  210. package/dist/charts/pie-chart.js +248 -0
  211. package/dist/charts/pie-context.d.ts +74 -0
  212. package/dist/charts/pie-context.js +95 -0
  213. package/dist/charts/pie-slice.d.ts +28 -0
  214. package/dist/charts/pie-slice.js +180 -0
  215. package/dist/charts/profit-loss-legend-hover.d.ts +11 -0
  216. package/dist/charts/profit-loss-legend-hover.js +12 -0
  217. package/dist/charts/profit-loss-legend.d.ts +17 -0
  218. package/dist/charts/profit-loss-legend.js +18 -0
  219. package/dist/charts/profit-loss-line.d.ts +27 -0
  220. package/dist/charts/profit-loss-line.js +77 -0
  221. package/dist/charts/profit-loss-segments.d.ts +12 -0
  222. package/dist/charts/profit-loss-segments.js +86 -0
  223. package/dist/charts/projection-config.d.ts +11 -0
  224. package/dist/charts/projection-config.js +80 -0
  225. package/dist/charts/projection-line-end-marker.d.ts +15 -0
  226. package/dist/charts/projection-line-end-marker.js +27 -0
  227. package/dist/charts/projection-line.d.ts +40 -0
  228. package/dist/charts/projection-line.js +79 -0
  229. package/dist/charts/projection-utils.d.ts +46 -0
  230. package/dist/charts/projection-utils.js +253 -0
  231. package/dist/charts/radar-area.d.ts +17 -0
  232. package/dist/charts/radar-area.js +84 -0
  233. package/dist/charts/radar-axis.d.ts +14 -0
  234. package/dist/charts/radar-axis.js +24 -0
  235. package/dist/charts/radar-chart.d.ts +36 -0
  236. package/dist/charts/radar-chart.js +89 -0
  237. package/dist/charts/radar-context.d.ts +68 -0
  238. package/dist/charts/radar-context.js +87 -0
  239. package/dist/charts/radar-grid.d.ts +16 -0
  240. package/dist/charts/radar-grid.js +40 -0
  241. package/dist/charts/radar-labels.d.ts +16 -0
  242. package/dist/charts/radar-labels.js +29 -0
  243. package/dist/charts/reference-area-config.d.ts +10 -0
  244. package/dist/charts/reference-area-config.js +39 -0
  245. package/dist/charts/reference-area-geometry.d.ts +23 -0
  246. package/dist/charts/reference-area-geometry.js +68 -0
  247. package/dist/charts/reference-area-registration-context.d.ts +8 -0
  248. package/dist/charts/reference-area-registration-context.js +7 -0
  249. package/dist/charts/reference-area.d.ts +52 -0
  250. package/dist/charts/reference-area.js +101 -0
  251. package/dist/charts/ring-center.d.ts +46 -0
  252. package/dist/charts/ring-center.js +41 -0
  253. package/dist/charts/ring-chart.d.ts +41 -0
  254. package/dist/charts/ring-chart.js +212 -0
  255. package/dist/charts/ring-context.d.ts +66 -0
  256. package/dist/charts/ring-context.js +92 -0
  257. package/dist/charts/ring.d.ts +11 -0
  258. package/dist/charts/ring.js +104 -0
  259. package/dist/charts/sankey/index.d.ts +6 -0
  260. package/dist/charts/sankey/index.js +6 -0
  261. package/dist/charts/sankey/sankey-chart.d.ts +39 -0
  262. package/dist/charts/sankey/sankey-chart.js +117 -0
  263. package/dist/charts/sankey/sankey-context.d.ts +69 -0
  264. package/dist/charts/sankey/sankey-context.js +23 -0
  265. package/dist/charts/sankey/sankey-link.d.ts +26 -0
  266. package/dist/charts/sankey/sankey-link.js +155 -0
  267. package/dist/charts/sankey/sankey-node.d.ts +29 -0
  268. package/dist/charts/sankey/sankey-node.js +200 -0
  269. package/dist/charts/sankey/sankey-tooltip.d.ts +24 -0
  270. package/dist/charts/sankey/sankey-tooltip.js +70 -0
  271. package/dist/charts/scatter-chart-shell.d.ts +21 -0
  272. package/dist/charts/scatter-chart-shell.js +152 -0
  273. package/dist/charts/scatter-chart.d.ts +32 -0
  274. package/dist/charts/scatter-chart.js +56 -0
  275. package/dist/charts/scatter-svg.d.ts +6 -0
  276. package/dist/charts/scatter-svg.js +16 -0
  277. package/dist/charts/scatter.d.ts +21 -0
  278. package/dist/charts/scatter.js +30 -0
  279. package/dist/charts/segment.d.ts +26 -0
  280. package/dist/charts/segment.js +42 -0
  281. package/dist/charts/series-bar-layout.d.ts +18 -0
  282. package/dist/charts/series-bar-layout.js +31 -0
  283. package/dist/charts/series-bar.d.ts +20 -0
  284. package/dist/charts/series-bar.js +120 -0
  285. package/dist/charts/series-dash-tail-overlay.d.ts +17 -0
  286. package/dist/charts/series-dash-tail-overlay.js +39 -0
  287. package/dist/charts/series-highlight-layer.d.ts +23 -0
  288. package/dist/charts/series-highlight-layer.js +21 -0
  289. package/dist/charts/series-hover-dim.d.ts +29 -0
  290. package/dist/charts/series-hover-dim.js +26 -0
  291. package/dist/charts/series-markers.d.ts +14 -0
  292. package/dist/charts/series-markers.js +98 -0
  293. package/dist/charts/series-path-utils.d.ts +19 -0
  294. package/dist/charts/series-path-utils.js +60 -0
  295. package/dist/charts/series-point-marker.d.ts +48 -0
  296. package/dist/charts/series-point-marker.js +48 -0
  297. package/dist/charts/shimmering-text.d.ts +23 -0
  298. package/dist/charts/shimmering-text.js +31 -0
  299. package/dist/charts/static-chart-preview-context.d.ts +7 -0
  300. package/dist/charts/static-chart-preview-context.js +12 -0
  301. package/dist/charts/sunburst-breadcrumb.d.ts +16 -0
  302. package/dist/charts/sunburst-breadcrumb.js +26 -0
  303. package/dist/charts/sunburst-center.d.ts +5 -0
  304. package/dist/charts/sunburst-center.js +17 -0
  305. package/dist/charts/sunburst-chart.d.ts +30 -0
  306. package/dist/charts/sunburst-chart.js +263 -0
  307. package/dist/charts/sunburst-context.d.ts +61 -0
  308. package/dist/charts/sunburst-context.js +112 -0
  309. package/dist/charts/sunburst-data.d.ts +9 -0
  310. package/dist/charts/sunburst-data.js +2 -0
  311. package/dist/charts/sunburst-hint.d.ts +13 -0
  312. package/dist/charts/sunburst-hint.js +31 -0
  313. package/dist/charts/sunburst-labels.d.ts +9 -0
  314. package/dist/charts/sunburst-labels.js +63 -0
  315. package/dist/charts/sunburst-segment.d.ts +11 -0
  316. package/dist/charts/sunburst-segment.js +78 -0
  317. package/dist/charts/sunburst.d.ts +101 -0
  318. package/dist/charts/sunburst.js +396 -0
  319. package/dist/charts/time-series-chart-shell.d.ts +47 -0
  320. package/dist/charts/time-series-chart-shell.js +390 -0
  321. package/dist/charts/tooltip/chart-tooltip.d.ts +76 -0
  322. package/dist/charts/tooltip/chart-tooltip.js +150 -0
  323. package/dist/charts/tooltip/date-ticker.d.ts +11 -0
  324. package/dist/charts/tooltip/date-ticker.js +77 -0
  325. package/dist/charts/tooltip/index.d.ts +7 -0
  326. package/dist/charts/tooltip/index.js +7 -0
  327. package/dist/charts/tooltip/tooltip-box.d.ts +48 -0
  328. package/dist/charts/tooltip/tooltip-box.js +114 -0
  329. package/dist/charts/tooltip/tooltip-content.d.ts +18 -0
  330. package/dist/charts/tooltip/tooltip-content.js +9 -0
  331. package/dist/charts/tooltip/tooltip-dot.d.ts +28 -0
  332. package/dist/charts/tooltip/tooltip-dot.js +54 -0
  333. package/dist/charts/tooltip/tooltip-indicator.d.ts +45 -0
  334. package/dist/charts/tooltip/tooltip-indicator.js +65 -0
  335. package/dist/charts/use-animated-series-path.d.ts +19 -0
  336. package/dist/charts/use-animated-series-path.js +93 -0
  337. package/dist/charts/use-animated-y-domains.d.ts +14 -0
  338. package/dist/charts/use-animated-y-domains.js +150 -0
  339. package/dist/charts/use-chart-interaction.d.ts +41 -0
  340. package/dist/charts/use-chart-interaction.js +244 -0
  341. package/dist/charts/use-chart-phase-orchestrator.d.ts +23 -0
  342. package/dist/charts/use-chart-phase-orchestrator.js +139 -0
  343. package/dist/charts/use-enter-complete.d.ts +8 -0
  344. package/dist/charts/use-enter-complete.js +23 -0
  345. package/dist/charts/use-grid-shimmer.d.ts +16 -0
  346. package/dist/charts/use-grid-shimmer.js +63 -0
  347. package/dist/charts/use-highlight-segment.d.ts +14 -0
  348. package/dist/charts/use-highlight-segment.js +34 -0
  349. package/dist/charts/use-mount-progress.d.ts +4 -0
  350. package/dist/charts/use-mount-progress.js +22 -0
  351. package/dist/charts/use-scatter-chart-interaction.d.ts +35 -0
  352. package/dist/charts/use-scatter-chart-interaction.js +228 -0
  353. package/dist/charts/use-scheduled-tooltip.d.ts +9 -0
  354. package/dist/charts/use-scheduled-tooltip.js +76 -0
  355. package/dist/charts/visx-pattern.d.ts +19 -0
  356. package/dist/charts/visx-pattern.js +20 -0
  357. package/dist/charts/x-axis.d.ts +27 -0
  358. package/dist/charts/x-axis.js +415 -0
  359. package/dist/charts/y-axis-scales.d.ts +26 -0
  360. package/dist/charts/y-axis-scales.js +72 -0
  361. package/dist/charts/y-axis-ticks.d.ts +12 -0
  362. package/dist/charts/y-axis-ticks.js +24 -0
  363. package/dist/charts/y-axis.d.ts +22 -0
  364. package/dist/charts/y-axis.js +80 -0
  365. package/dist/charts/y-domain-utils.d.ts +27 -0
  366. package/dist/charts/y-domain-utils.js +88 -0
  367. package/dist/components/accordion.d.ts +6 -0
  368. package/dist/components/accordion.js +20 -0
  369. package/dist/components/alert-dialog.d.ts +18 -0
  370. package/dist/components/alert-dialog.js +41 -0
  371. package/dist/components/alert.d.ts +24 -0
  372. package/dist/components/alert.js +46 -0
  373. package/dist/components/animated-button.d.ts +5 -0
  374. package/dist/components/animated-button.js +16 -0
  375. package/dist/components/animated-list.d.ts +26 -0
  376. package/dist/components/animated-list.js +25 -0
  377. package/dist/components/animated-number.d.ts +67 -0
  378. package/dist/components/animated-number.js +131 -0
  379. package/dist/components/app-shell.d.ts +27 -0
  380. package/dist/components/app-shell.js +18 -0
  381. package/dist/components/area-chart.d.ts +11 -0
  382. package/dist/components/area-chart.js +12 -0
  383. package/dist/components/aspect-ratio.d.ts +16 -0
  384. package/dist/components/aspect-ratio.js +14 -0
  385. package/dist/components/aurora-background.d.ts +3 -0
  386. package/dist/components/aurora-background.js +8 -0
  387. package/dist/components/autocomplete.d.ts +55 -0
  388. package/dist/components/autocomplete.js +279 -0
  389. package/dist/components/avatar-group.d.ts +39 -0
  390. package/dist/components/avatar-group.js +50 -0
  391. package/dist/components/avatar.d.ts +5 -0
  392. package/dist/components/avatar.js +17 -0
  393. package/dist/components/badge.d.ts +10 -0
  394. package/dist/components/badge.js +35 -0
  395. package/dist/components/banner.d.ts +45 -0
  396. package/dist/components/banner.js +80 -0
  397. package/dist/components/bar-chart.d.ts +11 -0
  398. package/dist/components/bar-chart.js +9 -0
  399. package/dist/components/border-beam.d.ts +45 -0
  400. package/dist/components/border-beam.js +48 -0
  401. package/dist/components/breadcrumb.d.ts +12 -0
  402. package/dist/components/breadcrumb.js +35 -0
  403. package/dist/components/button-group.d.ts +7 -0
  404. package/dist/components/button-group.js +10 -0
  405. package/dist/components/button.d.ts +12 -0
  406. package/dist/components/button.js +39 -0
  407. package/dist/components/calendar.d.ts +7 -0
  408. package/dist/components/calendar.js +71 -0
  409. package/dist/components/candlestick-chart.d.ts +13 -0
  410. package/dist/components/candlestick-chart.js +66 -0
  411. package/dist/components/card-stack.d.ts +28 -0
  412. package/dist/components/card-stack.js +47 -0
  413. package/dist/components/card.d.ts +9 -0
  414. package/dist/components/card.js +32 -0
  415. package/dist/components/carousel.d.ts +82 -0
  416. package/dist/components/carousel.js +310 -0
  417. package/dist/components/chart.d.ts +100 -0
  418. package/dist/components/chart.js +210 -0
  419. package/dist/components/checkbox.d.ts +3 -0
  420. package/dist/components/checkbox.js +11 -0
  421. package/dist/components/chip.d.ts +80 -0
  422. package/dist/components/chip.js +186 -0
  423. package/dist/components/choropleth-chart.d.ts +12 -0
  424. package/dist/components/choropleth-chart.js +31 -0
  425. package/dist/components/click-spark.d.ts +19 -0
  426. package/dist/components/click-spark.js +51 -0
  427. package/dist/components/code-block.d.ts +13 -0
  428. package/dist/components/code-block.js +20 -0
  429. package/dist/components/code-tabs.d.ts +51 -0
  430. package/dist/components/code-tabs.js +150 -0
  431. package/dist/components/collapsible.d.ts +5 -0
  432. package/dist/components/collapsible.js +12 -0
  433. package/dist/components/color-picker.d.ts +30 -0
  434. package/dist/components/color-picker.js +300 -0
  435. package/dist/components/combobox.d.ts +33 -0
  436. package/dist/components/combobox.js +32 -0
  437. package/dist/components/command.d.ts +87 -0
  438. package/dist/components/command.js +44 -0
  439. package/dist/components/comparison-slider.d.ts +17 -0
  440. package/dist/components/comparison-slider.js +81 -0
  441. package/dist/components/composed-chart.d.ts +13 -0
  442. package/dist/components/composed-chart.js +22 -0
  443. package/dist/components/confetti.d.ts +21 -0
  444. package/dist/components/confetti.js +111 -0
  445. package/dist/components/confirmation-dialog.d.ts +46 -0
  446. package/dist/components/confirmation-dialog.js +102 -0
  447. package/dist/components/context-menu.d.ts +28 -0
  448. package/dist/components/context-menu.js +52 -0
  449. package/dist/components/copy-button.d.ts +13 -0
  450. package/dist/components/copy-button.js +72 -0
  451. package/dist/components/countdown.d.ts +58 -0
  452. package/dist/components/countdown.js +106 -0
  453. package/dist/components/credit-card-input.d.ts +62 -0
  454. package/dist/components/credit-card-input.js +211 -0
  455. package/dist/components/currency-input.d.ts +86 -0
  456. package/dist/components/currency-input.js +215 -0
  457. package/dist/components/data-table.d.ts +232 -0
  458. package/dist/components/data-table.js +359 -0
  459. package/dist/components/date-picker.d.ts +66 -0
  460. package/dist/components/date-picker.js +55 -0
  461. package/dist/components/date-range-picker.d.ts +59 -0
  462. package/dist/components/date-range-picker.js +59 -0
  463. package/dist/components/description-list.d.ts +84 -0
  464. package/dist/components/description-list.js +138 -0
  465. package/dist/components/dialog.d.ts +26 -0
  466. package/dist/components/dialog.js +35 -0
  467. package/dist/components/dock.d.ts +34 -0
  468. package/dist/components/dock.js +61 -0
  469. package/dist/components/dot-pattern.d.ts +24 -0
  470. package/dist/components/dot-pattern.js +19 -0
  471. package/dist/components/drawer.d.ts +22 -0
  472. package/dist/components/drawer.js +37 -0
  473. package/dist/components/dropdown-menu.d.ts +32 -0
  474. package/dist/components/dropdown-menu.js +56 -0
  475. package/dist/components/dynamic-island.d.ts +26 -0
  476. package/dist/components/dynamic-island.js +31 -0
  477. package/dist/components/empty.d.ts +7 -0
  478. package/dist/components/empty.js +24 -0
  479. package/dist/components/expandable-tabs.d.ts +24 -0
  480. package/dist/components/expandable-tabs.js +30 -0
  481. package/dist/components/fab.d.ts +35 -0
  482. package/dist/components/fab.js +36 -0
  483. package/dist/components/field.d.ts +6 -0
  484. package/dist/components/field.js +22 -0
  485. package/dist/components/file-dropzone.d.ts +28 -0
  486. package/dist/components/file-dropzone.js +59 -0
  487. package/dist/components/flickering-grid.d.ts +25 -0
  488. package/dist/components/flickering-grid.js +30 -0
  489. package/dist/components/flip-card.d.ts +70 -0
  490. package/dist/components/flip-card.js +117 -0
  491. package/dist/components/floating-label-input.d.ts +34 -0
  492. package/dist/components/floating-label-input.js +25 -0
  493. package/dist/components/form.d.ts +25 -0
  494. package/dist/components/form.js +68 -0
  495. package/dist/components/frame.d.ts +12 -0
  496. package/dist/components/frame.js +10 -0
  497. package/dist/components/funnel-chart.d.ts +11 -0
  498. package/dist/components/funnel-chart.js +16 -0
  499. package/dist/components/gauge-chart.d.ts +8 -0
  500. package/dist/components/gauge-chart.js +10 -0
  501. package/dist/components/glare-hover.d.ts +15 -0
  502. package/dist/components/glare-hover.js +64 -0
  503. package/dist/components/glass-card.d.ts +3 -0
  504. package/dist/components/glass-card.js +8 -0
  505. package/dist/components/gradient-border.d.ts +7 -0
  506. package/dist/components/gradient-border.js +8 -0
  507. package/dist/components/gradient-text.d.ts +6 -0
  508. package/dist/components/gradient-text.js +10 -0
  509. package/dist/components/grid-pattern.d.ts +23 -0
  510. package/dist/components/grid-pattern.js +18 -0
  511. package/dist/components/heatmap-chart.d.ts +6 -0
  512. package/dist/components/heatmap-chart.js +8 -0
  513. package/dist/components/heatmap.d.ts +28 -0
  514. package/dist/components/heatmap.js +41 -0
  515. package/dist/components/highlighter.d.ts +20 -0
  516. package/dist/components/highlighter.js +19 -0
  517. package/dist/components/hover-card.d.ts +5 -0
  518. package/dist/components/hover-card.js +12 -0
  519. package/dist/components/image-zoom.d.ts +47 -0
  520. package/dist/components/image-zoom.js +125 -0
  521. package/dist/components/input-group.d.ts +10 -0
  522. package/dist/components/input-group.js +12 -0
  523. package/dist/components/input-otp.d.ts +18 -0
  524. package/dist/components/input-otp.js +38 -0
  525. package/dist/components/input.d.ts +6 -0
  526. package/dist/components/input.js +8 -0
  527. package/dist/components/json-viewer.d.ts +43 -0
  528. package/dist/components/json-viewer.js +313 -0
  529. package/dist/components/kanban.d.ts +31 -0
  530. package/dist/components/kanban.js +143 -0
  531. package/dist/components/kbd.d.ts +3 -0
  532. package/dist/components/kbd.js +8 -0
  533. package/dist/components/label.d.ts +3 -0
  534. package/dist/components/label.js +9 -0
  535. package/dist/components/light-rays.d.ts +19 -0
  536. package/dist/components/light-rays.js +20 -0
  537. package/dist/components/lightbox.d.ts +24 -0
  538. package/dist/components/lightbox.js +68 -0
  539. package/dist/components/line-chart.d.ts +10 -0
  540. package/dist/components/line-chart.js +9 -0
  541. package/dist/components/live-line-chart.d.ts +12 -0
  542. package/dist/components/live-line-chart.js +42 -0
  543. package/dist/components/logo-carousel.d.ts +27 -0
  544. package/dist/components/logo-carousel.js +101 -0
  545. package/dist/components/magnetic.d.ts +44 -0
  546. package/dist/components/magnetic.js +172 -0
  547. package/dist/components/marquee.d.ts +71 -0
  548. package/dist/components/marquee.js +141 -0
  549. package/dist/components/masonry.d.ts +16 -0
  550. package/dist/components/masonry.js +84 -0
  551. package/dist/components/menubar.d.ts +33 -0
  552. package/dist/components/menubar.js +56 -0
  553. package/dist/components/meteors.d.ts +20 -0
  554. package/dist/components/meteors.js +39 -0
  555. package/dist/components/metric.d.ts +9 -0
  556. package/dist/components/metric.js +35 -0
  557. package/dist/components/mode-toggle.d.ts +32 -0
  558. package/dist/components/mode-toggle.js +40 -0
  559. package/dist/components/morphing-popover.d.ts +91 -0
  560. package/dist/components/morphing-popover.js +194 -0
  561. package/dist/components/motion-presets.d.ts +9 -0
  562. package/dist/components/motion-presets.js +20 -0
  563. package/dist/components/multi-select.d.ts +54 -0
  564. package/dist/components/multi-select.js +0 -0
  565. package/dist/components/navigation-menu.d.ts +12 -0
  566. package/dist/components/navigation-menu.js +42 -0
  567. package/dist/components/noise.d.ts +19 -0
  568. package/dist/components/noise.js +18 -0
  569. package/dist/components/notification-center.d.ts +68 -0
  570. package/dist/components/notification-center.js +57 -0
  571. package/dist/components/number-input.d.ts +45 -0
  572. package/dist/components/number-input.js +148 -0
  573. package/dist/components/orbit.d.ts +77 -0
  574. package/dist/components/orbit.js +100 -0
  575. package/dist/components/pagination.d.ts +16 -0
  576. package/dist/components/pagination.js +34 -0
  577. package/dist/components/particles.d.ts +18 -0
  578. package/dist/components/particles.js +92 -0
  579. package/dist/components/password-input.d.ts +16 -0
  580. package/dist/components/password-input.js +49 -0
  581. package/dist/components/phone-input.d.ts +67 -0
  582. package/dist/components/phone-input.js +225 -0
  583. package/dist/components/pie-chart.d.ts +12 -0
  584. package/dist/components/pie-chart.js +13 -0
  585. package/dist/components/pill-nav.d.ts +25 -0
  586. package/dist/components/pill-nav.js +66 -0
  587. package/dist/components/popover.d.ts +7 -0
  588. package/dist/components/popover.js +15 -0
  589. package/dist/components/profit-loss-chart.d.ts +10 -0
  590. package/dist/components/profit-loss-chart.js +8 -0
  591. package/dist/components/progress.d.ts +10 -0
  592. package/dist/components/progress.js +17 -0
  593. package/dist/components/progressive-blur.d.ts +24 -0
  594. package/dist/components/progressive-blur.js +43 -0
  595. package/dist/components/radar-chart.d.ts +9 -0
  596. package/dist/components/radar-chart.js +9 -0
  597. package/dist/components/radio-group.d.ts +4 -0
  598. package/dist/components/radio-group.js +15 -0
  599. package/dist/components/rating.d.ts +29 -0
  600. package/dist/components/rating.js +94 -0
  601. package/dist/components/resizable.d.ts +57 -0
  602. package/dist/components/resizable.js +73 -0
  603. package/dist/components/retro-grid.d.ts +25 -0
  604. package/dist/components/retro-grid.js +26 -0
  605. package/dist/components/reveal.d.ts +9 -0
  606. package/dist/components/reveal.js +14 -0
  607. package/dist/components/rich-text-editor.d.ts +28 -0
  608. package/dist/components/rich-text-editor.js +83 -0
  609. package/dist/components/ring-chart.d.ts +13 -0
  610. package/dist/components/ring-chart.js +16 -0
  611. package/dist/components/ripple.d.ts +25 -0
  612. package/dist/components/ripple.js +26 -0
  613. package/dist/components/sankey-chart.d.ts +16 -0
  614. package/dist/components/sankey-chart.js +8 -0
  615. package/dist/components/scatter-chart.d.ts +12 -0
  616. package/dist/components/scatter-chart.js +9 -0
  617. package/dist/components/scheduler.d.ts +50 -0
  618. package/dist/components/scheduler.js +93 -0
  619. package/dist/components/scramble-text.d.ts +39 -0
  620. package/dist/components/scramble-text.js +78 -0
  621. package/dist/components/scroll-area.d.ts +13 -0
  622. package/dist/components/scroll-area.js +14 -0
  623. package/dist/components/scroll-progress.d.ts +19 -0
  624. package/dist/components/scroll-progress.js +67 -0
  625. package/dist/components/segmented-control.d.ts +48 -0
  626. package/dist/components/segmented-control.js +222 -0
  627. package/dist/components/select.d.ts +12 -0
  628. package/dist/components/select.js +43 -0
  629. package/dist/components/separator.d.ts +3 -0
  630. package/dist/components/separator.js +9 -0
  631. package/dist/components/sheet.d.ts +25 -0
  632. package/dist/components/sheet.js +47 -0
  633. package/dist/components/shimmer.d.ts +3 -0
  634. package/dist/components/shimmer.js +8 -0
  635. package/dist/components/shiny-text.d.ts +20 -0
  636. package/dist/components/shiny-text.js +24 -0
  637. package/dist/components/sidebar.d.ts +92 -0
  638. package/dist/components/sidebar.js +290 -0
  639. package/dist/components/signature-pad.d.ts +44 -0
  640. package/dist/components/signature-pad.js +317 -0
  641. package/dist/components/skeleton.d.ts +3 -0
  642. package/dist/components/skeleton.js +8 -0
  643. package/dist/components/slider.d.ts +10 -0
  644. package/dist/components/slider.js +27 -0
  645. package/dist/components/sonner.d.ts +9 -0
  646. package/dist/components/sonner.js +17 -0
  647. package/dist/components/sparkles-text.d.ts +19 -0
  648. package/dist/components/sparkles-text.js +36 -0
  649. package/dist/components/sparkline.d.ts +22 -0
  650. package/dist/components/sparkline.js +100 -0
  651. package/dist/components/spinner.d.ts +10 -0
  652. package/dist/components/spinner.js +20 -0
  653. package/dist/components/spinning-text.d.ts +29 -0
  654. package/dist/components/spinning-text.js +40 -0
  655. package/dist/components/split-button.d.ts +71 -0
  656. package/dist/components/split-button.js +30 -0
  657. package/dist/components/spotlight-card.d.ts +11 -0
  658. package/dist/components/spotlight-card.js +63 -0
  659. package/dist/components/star-border.d.ts +19 -0
  660. package/dist/components/star-border.js +18 -0
  661. package/dist/components/status-dot.d.ts +60 -0
  662. package/dist/components/status-dot.js +76 -0
  663. package/dist/components/stepper.d.ts +98 -0
  664. package/dist/components/stepper.js +164 -0
  665. package/dist/components/sunburst-chart.d.ts +11 -0
  666. package/dist/components/sunburst-chart.js +45 -0
  667. package/dist/components/switch.d.ts +3 -0
  668. package/dist/components/switch.js +10 -0
  669. package/dist/components/table-of-contents.d.ts +64 -0
  670. package/dist/components/table-of-contents.js +0 -0
  671. package/dist/components/table.d.ts +10 -0
  672. package/dist/components/table.js +38 -0
  673. package/dist/components/tabs.d.ts +6 -0
  674. package/dist/components/tabs.js +22 -0
  675. package/dist/components/tags-input.d.ts +39 -0
  676. package/dist/components/tags-input.js +86 -0
  677. package/dist/components/terminal.d.ts +86 -0
  678. package/dist/components/terminal.js +182 -0
  679. package/dist/components/text-effect.d.ts +71 -0
  680. package/dist/components/text-effect.js +166 -0
  681. package/dist/components/textarea.d.ts +6 -0
  682. package/dist/components/textarea.js +8 -0
  683. package/dist/components/tilt-card.d.ts +30 -0
  684. package/dist/components/tilt-card.js +84 -0
  685. package/dist/components/time-picker.d.ts +58 -0
  686. package/dist/components/time-picker.js +245 -0
  687. package/dist/components/timeline.d.ts +81 -0
  688. package/dist/components/timeline.js +165 -0
  689. package/dist/components/toggle-group.d.ts +12 -0
  690. package/dist/components/toggle-group.js +23 -0
  691. package/dist/components/toggle.d.ts +12 -0
  692. package/dist/components/toggle.js +25 -0
  693. package/dist/components/toolbar.d.ts +14 -0
  694. package/dist/components/toolbar.js +89 -0
  695. package/dist/components/tooltip.d.ts +29 -0
  696. package/dist/components/tooltip.js +48 -0
  697. package/dist/components/tree-view.d.ts +45 -0
  698. package/dist/components/tree-view.js +197 -0
  699. package/dist/components/typing-text.d.ts +49 -0
  700. package/dist/components/typing-text.js +90 -0
  701. package/dist/components/usage-meter.d.ts +30 -0
  702. package/dist/components/usage-meter.js +90 -0
  703. package/dist/components/video-player.d.ts +48 -0
  704. package/dist/components/video-player.js +216 -0
  705. package/dist/components/word-rotate.d.ts +40 -0
  706. package/dist/components/word-rotate.js +34 -0
  707. package/dist/index.d.ts +306 -0
  708. package/dist/index.js +179 -0
  709. package/dist/lib/cn.d.ts +7 -0
  710. package/dist/lib/cn.js +10 -0
  711. package/dist/lib/demo-saas.d.ts +171 -0
  712. package/dist/lib/demo-saas.js +210 -0
  713. package/dist/lib/demo-store.d.ts +157 -0
  714. package/dist/lib/demo-store.js +353 -0
  715. package/dist/testing/index.d.ts +76 -0
  716. package/dist/testing/index.js +116 -0
  717. package/package.json +941 -0
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { motion, useReducedMotion } from "motion/react";
4
+ import { useState } from "react";
5
+ import { cn } from "../lib/cn.js";
6
+ /**
7
+ * A compact live-activity pill that morphs between views. The shell resizes
8
+ * with a spring; inner content cross-fades. Views are a tablist so the
9
+ * control is keyboard-operable. Reduced-motion visitors get an instant
10
+ * resize instead of the morph.
11
+ */
12
+ export function DynamicIsland({ ref, className, views, value, defaultValue, onValueChange, ...props }) {
13
+ const reduce = !!useReducedMotion();
14
+ const fallback = defaultValue ?? views[0]?.id;
15
+ const [uncontrolled, setUncontrolled] = useState(fallback);
16
+ const selected = value ?? uncontrolled;
17
+ const active = views.find((view) => view.id === selected) ?? views[0];
18
+ const select = (id) => {
19
+ if (id === selected)
20
+ return;
21
+ if (value === undefined)
22
+ setUncontrolled(id);
23
+ onValueChange?.(id);
24
+ };
25
+ return (_jsxs("div", { ref: ref, "data-slot": "dynamic-island", className: cn("inline-flex flex-col items-center gap-3", className), ...props, children: [_jsx(motion.div, { layout: !reduce, "data-slot": "dynamic-island-shell", className: "overflow-hidden rounded-full border border-border bg-surface-floating px-4 py-2 text-fg shadow-md", transition: reduce ? { duration: 0 } : { type: "spring", bounce: 0.18, duration: 0.45 }, children: _jsx(motion.div, { initial: reduce ? false : { opacity: 0, filter: "blur(6px)" }, animate: { opacity: 1, filter: "blur(0px)" }, transition: reduce ? { duration: 0 } : { duration: 0.2 }, className: "flex items-center gap-3", children: active?.content }, active?.id ?? "empty") }), _jsx("div", { role: "tablist", "aria-label": active?.label, className: "flex items-center gap-1", children: views.map((view) => {
26
+ const isActive = view.id === selected;
27
+ return (_jsx("button", { type: "button", role: "tab", "aria-selected": isActive, "aria-label": view.label, "data-slot": "dynamic-island-trigger", className: cn("size-2 rounded-full outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base", isActive ? "bg-fg" : "bg-border hover:bg-border-strong"), onClick: () => select(view.id) }, view.id));
28
+ }) })] }));
29
+ }
30
+ DynamicIsland.displayName = "DynamicIsland";
31
+ //# sourceMappingURL=dynamic-island.js.map
@@ -0,0 +1,7 @@
1
+ import { type HTMLAttributes } from "react";
2
+ export declare const Empty: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
3
+ export declare const EmptyIcon: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
4
+ export declare const EmptyTitle: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
5
+ export declare const EmptyDescription: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
6
+ export declare const EmptyContent: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
7
+ //# sourceMappingURL=empty.d.ts.map
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { cn } from "../lib/cn.js";
4
+ export const Empty = forwardRef(({ className, ...props }, ref) => {
5
+ return (_jsx("div", { ref: ref, "data-slot": "empty", className: cn("flex flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border bg-surface-inset/40 px-6 py-12 text-center", className), ...props }));
6
+ });
7
+ Empty.displayName = "Empty";
8
+ export const EmptyIcon = forwardRef(({ className, ...props }, ref) => {
9
+ return (_jsx("div", { ref: ref, "data-slot": "empty-icon", className: cn("flex size-11 items-center justify-center rounded-full bg-surface-overlay text-fg-tertiary [&_svg]:size-5", className), ...props }));
10
+ });
11
+ EmptyIcon.displayName = "EmptyIcon";
12
+ export const EmptyTitle = forwardRef(({ className, ...props }, ref) => {
13
+ return (_jsx("div", { ref: ref, "data-slot": "empty-title", className: cn("font-display text-sm font-semibold text-fg", className), ...props }));
14
+ });
15
+ EmptyTitle.displayName = "EmptyTitle";
16
+ export const EmptyDescription = forwardRef(({ className, ...props }, ref) => {
17
+ return (_jsx("div", { ref: ref, "data-slot": "empty-description", className: cn("max-w-sm text-sm text-fg-secondary", className), ...props }));
18
+ });
19
+ EmptyDescription.displayName = "EmptyDescription";
20
+ export const EmptyContent = forwardRef(({ className, ...props }, ref) => {
21
+ return (_jsx("div", { ref: ref, "data-slot": "empty-content", className: cn("mt-1 flex items-center gap-2", className), ...props }));
22
+ });
23
+ EmptyContent.displayName = "EmptyContent";
24
+ //# sourceMappingURL=empty.js.map
@@ -0,0 +1,24 @@
1
+ import { type HTMLAttributes, type ReactNode, type Ref } from "react";
2
+ export interface ExpandableTab {
3
+ value: string;
4
+ label: string;
5
+ icon: ReactNode;
6
+ disabled?: boolean;
7
+ }
8
+ export interface ExpandableTabsProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
9
+ ref?: Ref<HTMLDivElement>;
10
+ items: ExpandableTab[];
11
+ value?: string;
12
+ defaultValue?: string;
13
+ onValueChange?: (value: string) => void;
14
+ }
15
+ /**
16
+ * Icon tabs where the active item expands to reveal its label. A tablist with
17
+ * roving tabindex; the label collapse/expand is decorative and skipped under
18
+ * reduced motion (the active label just stays visible).
19
+ */
20
+ export declare function ExpandableTabs({ ref, className, items, value, defaultValue, onValueChange, ...props }: ExpandableTabsProps): import("react").JSX.Element;
21
+ export declare namespace ExpandableTabs {
22
+ var displayName: string;
23
+ }
24
+ //# sourceMappingURL=expandable-tabs.d.ts.map
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { AnimatePresence, motion, useReducedMotion } from "motion/react";
4
+ import { useState } from "react";
5
+ import { cn } from "../lib/cn.js";
6
+ /**
7
+ * Icon tabs where the active item expands to reveal its label. A tablist with
8
+ * roving tabindex; the label collapse/expand is decorative and skipped under
9
+ * reduced motion (the active label just stays visible).
10
+ */
11
+ export function ExpandableTabs({ ref, className, items, value, defaultValue, onValueChange, ...props }) {
12
+ const reduce = !!useReducedMotion();
13
+ const enabled = items.filter((item) => !item.disabled);
14
+ const fallback = defaultValue ?? enabled[0]?.value;
15
+ const [uncontrolled, setUncontrolled] = useState(fallback);
16
+ const selected = value ?? uncontrolled;
17
+ const select = (next) => {
18
+ if (next === selected)
19
+ return;
20
+ if (value === undefined)
21
+ setUncontrolled(next);
22
+ onValueChange?.(next);
23
+ };
24
+ return (_jsx("div", { ref: ref, "data-slot": "expandable-tabs", role: "tablist", className: cn("inline-flex items-center gap-1 rounded-full border border-border bg-surface-inset p-1", className), ...props, children: items.map((item) => {
25
+ const isActive = item.value === selected;
26
+ return (_jsxs("button", { type: "button", role: "tab", "data-slot": "expandable-tabs-item", "aria-selected": isActive, disabled: item.disabled, tabIndex: isActive ? 0 : -1, className: cn("inline-flex items-center gap-2 rounded-full px-2.5 py-1.5 text-sm font-medium text-fg-secondary outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base disabled:pointer-events-none disabled:opacity-50", isActive && "bg-surface-floating text-fg shadow-xs"), onClick: () => select(item.value), children: [_jsx("span", { className: "grid size-4 place-items-center [&_svg]:size-4", "aria-hidden": "true", children: item.icon }), _jsx(AnimatePresence, { initial: false, children: isActive ? (_jsx(motion.span, { initial: reduce ? false : { width: 0, opacity: 0 }, animate: { width: "auto", opacity: 1 }, exit: reduce ? { opacity: 1 } : { width: 0, opacity: 0 }, transition: reduce ? { duration: 0 } : { duration: 0.22, ease: [0.22, 1, 0.36, 1] }, className: "overflow-hidden whitespace-nowrap", children: item.label }, "label")) : (_jsx("span", { className: "sr-only", children: item.label })) })] }, item.value));
27
+ }) }));
28
+ }
29
+ ExpandableTabs.displayName = "ExpandableTabs";
30
+ //# sourceMappingURL=expandable-tabs.js.map
@@ -0,0 +1,35 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from "react";
2
+ /** A single speed-dial action revealed when the FAB is expanded. */
3
+ export interface FabAction {
4
+ /** The glyph shown inside the round action button. */
5
+ icon: ReactNode;
6
+ /** Accessible name for the action (also shown as an optional text chip). */
7
+ label: string;
8
+ /** Invoked when the action is activated. */
9
+ onClick?: () => void;
10
+ }
11
+ export interface FabProps extends ButtonHTMLAttributes<HTMLButtonElement> {
12
+ /** The main glyph shown inside the floating button. */
13
+ icon: ReactNode;
14
+ /** Accessible name for the main button — wired to `aria-label`. */
15
+ label: string;
16
+ /**
17
+ * Optional speed-dial actions. When provided, clicking the FAB toggles an
18
+ * expanded vertical stack of smaller round buttons rendered above it.
19
+ */
20
+ actions?: FabAction[];
21
+ }
22
+ /**
23
+ * A floating action button: a prominent, round, solid-primary button that
24
+ * surfaces the primary action of a view. Positioning is left to the consumer —
25
+ * the component renders a `relative inline-flex` wrapper, so add e.g.
26
+ * `className="fixed bottom-6 right-6"` to pin it.
27
+ *
28
+ * When {@link FabProps.actions} are supplied it becomes a speed-dial: clicking
29
+ * the FAB toggles a vertical stack of smaller round action buttons above it,
30
+ * each with its own accessible name and an optional text chip. The main button
31
+ * exposes `aria-expanded` and rotates its glyph ~45° while open. Motion is
32
+ * staggered and honours `prefers-reduced-motion`.
33
+ */
34
+ export declare const Fab: import("react").ForwardRefExoticComponent<FabProps & import("react").RefAttributes<HTMLButtonElement>>;
35
+ //# sourceMappingURL=fab.d.ts.map
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { AnimatePresence, motion, useReducedMotion } from "motion/react";
4
+ import { forwardRef, useState } from "react";
5
+ import { cn } from "../lib/cn.js";
6
+ import { springSnappy } from "./motion-presets.js";
7
+ /**
8
+ * A floating action button: a prominent, round, solid-primary button that
9
+ * surfaces the primary action of a view. Positioning is left to the consumer —
10
+ * the component renders a `relative inline-flex` wrapper, so add e.g.
11
+ * `className="fixed bottom-6 right-6"` to pin it.
12
+ *
13
+ * When {@link FabProps.actions} are supplied it becomes a speed-dial: clicking
14
+ * the FAB toggles a vertical stack of smaller round action buttons above it,
15
+ * each with its own accessible name and an optional text chip. The main button
16
+ * exposes `aria-expanded` and rotates its glyph ~45° while open. Motion is
17
+ * staggered and honours `prefers-reduced-motion`.
18
+ */
19
+ export const Fab = forwardRef(({ icon, label, actions, className, onClick, ...props }, ref) => {
20
+ const reducedMotion = useReducedMotion();
21
+ const [open, setOpen] = useState(false);
22
+ const hasActions = !!actions && actions.length > 0;
23
+ return (_jsxs("div", { "data-slot": "fab", className: cn("relative inline-flex", className), children: [hasActions && (_jsx(AnimatePresence, { children: open && (_jsx(motion.ul, { "data-slot": "fab-actions", className: "absolute bottom-full right-0 mb-3 flex list-none flex-col items-end gap-3", initial: reducedMotion ? false : "hidden", animate: "visible", exit: reducedMotion ? undefined : "hidden", variants: {
24
+ hidden: {},
25
+ visible: { transition: { staggerChildren: 0.04, staggerDirection: -1 } },
26
+ }, children: actions.map((action) => (_jsxs(motion.li, { className: "flex items-center gap-2", variants: {
27
+ hidden: { opacity: 0, y: 8, scale: 0.8 },
28
+ visible: { opacity: 1, y: 0, scale: 1 },
29
+ }, transition: springSnappy, children: [_jsx("span", { className: "rounded-md bg-surface-overlay px-2 py-1 text-xs font-medium text-fg shadow-xs", children: action.label }), _jsx("button", { type: "button", "aria-label": action.label, onClick: action.onClick, className: "inline-flex size-11 items-center justify-center rounded-full bg-surface-raised text-fg shadow-md outline-none transition-[transform,box-shadow] duration-150 ease-[var(--ease-out-quart)] hover:shadow-lg focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base active:scale-95 [&_svg]:size-5 [&_svg]:shrink-0 [&_svg]:pointer-events-none", children: action.icon })] }, action.label))) })) })), _jsx("button", { ref: ref, type: "button", "aria-label": label, "aria-expanded": hasActions ? open : undefined, onClick: (event) => {
30
+ if (hasActions)
31
+ setOpen((prev) => !prev);
32
+ onClick?.(event);
33
+ }, className: "inline-flex size-14 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-md outline-none transition-[transform,box-shadow,opacity] duration-150 ease-[var(--ease-out-quart)] hover:opacity-90 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base active:scale-95 [&_svg]:size-6 [&_svg]:shrink-0 [&_svg]:pointer-events-none", ...props, children: _jsx(motion.span, { className: "inline-flex", animate: reducedMotion ? undefined : { rotate: hasActions && open ? 45 : 0 }, transition: springSnappy, children: icon }) })] }));
34
+ });
35
+ Fab.displayName = "Fab";
36
+ //# sourceMappingURL=fab.js.map
@@ -0,0 +1,6 @@
1
+ import { type HTMLAttributes, type LabelHTMLAttributes } from "react";
2
+ export declare const Field: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
3
+ export declare const FieldLabel: import("react").ForwardRefExoticComponent<LabelHTMLAttributes<HTMLLabelElement> & import("react").RefAttributes<HTMLLabelElement>>;
4
+ export declare const FieldDescription: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & import("react").RefAttributes<HTMLParagraphElement>>;
5
+ export declare const FieldError: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLParagraphElement> & import("react").RefAttributes<HTMLParagraphElement>>;
6
+ //# sourceMappingURL=field.d.ts.map
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { cn } from "../lib/cn.js";
4
+ export const Field = forwardRef(({ className, ...props }, ref) => {
5
+ return (_jsx("div", { ref: ref, "data-slot": "field", className: cn("flex flex-col gap-1.5", className), ...props }));
6
+ });
7
+ Field.displayName = "Field";
8
+ export const FieldLabel = forwardRef(({ className, ...props }, ref) => {
9
+ return (_jsx("label", { ref: ref, "data-slot": "field-label", className: cn("text-sm font-medium text-fg leading-none select-none", className), ...props }));
10
+ });
11
+ FieldLabel.displayName = "FieldLabel";
12
+ export const FieldDescription = forwardRef(({ className, ...props }, ref) => {
13
+ return (_jsx("p", { ref: ref, "data-slot": "field-description", className: cn("text-xs text-fg-secondary", className), ...props }));
14
+ });
15
+ FieldDescription.displayName = "FieldDescription";
16
+ export const FieldError = forwardRef(({ className, children, ...props }, ref) => {
17
+ if (!children)
18
+ return null;
19
+ return (_jsx("p", { ref: ref, "data-slot": "field-error", role: "alert", className: cn("text-xs text-error-strong", className), ...props, children: children }));
20
+ });
21
+ FieldError.displayName = "FieldError";
22
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1,28 @@
1
+ import { type ReactNode } from "react";
2
+ export interface FileDropzoneProps {
3
+ onFiles: (files: File[]) => void;
4
+ accept?: string;
5
+ multiple?: boolean;
6
+ disabled?: boolean;
7
+ className?: string;
8
+ children?: ReactNode;
9
+ /**
10
+ * Accessible name for the file input. Defaults to `"Upload files"` so the
11
+ * control is never nameless.
12
+ */
13
+ "aria-label"?: string;
14
+ /** IDs of element(s) that describe the dropzone (e.g. accepted types). */
15
+ "aria-describedby"?: string;
16
+ }
17
+ /**
18
+ * A drag-and-drop file picker.
19
+ *
20
+ * The whole surface is a `<label>` that wraps a single visually-hidden
21
+ * `<input type="file">` — the only interactive, labelable control. That keeps
22
+ * the widget natively accessible: clicking anywhere opens the picker, the input
23
+ * is keyboard-focusable and Enter/Space open the picker for free, and there is
24
+ * no nested-interactive (no `role="button"` around the input). Drag-and-drop is
25
+ * layered on the label; drops are forwarded to `onFiles` just like picks.
26
+ */
27
+ export declare const FileDropzone: import("react").ForwardRefExoticComponent<FileDropzoneProps & import("react").RefAttributes<HTMLLabelElement>>;
28
+ //# sourceMappingURL=file-dropzone.d.ts.map
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { UploadCloud } from "lucide-react";
4
+ import { forwardRef, useState } from "react";
5
+ import { cn } from "../lib/cn.js";
6
+ /**
7
+ * A drag-and-drop file picker.
8
+ *
9
+ * The whole surface is a `<label>` that wraps a single visually-hidden
10
+ * `<input type="file">` — the only interactive, labelable control. That keeps
11
+ * the widget natively accessible: clicking anywhere opens the picker, the input
12
+ * is keyboard-focusable and Enter/Space open the picker for free, and there is
13
+ * no nested-interactive (no `role="button"` around the input). Drag-and-drop is
14
+ * layered on the label; drops are forwarded to `onFiles` just like picks.
15
+ */
16
+ export const FileDropzone = forwardRef(({ onFiles, accept, multiple = false, disabled = false, className, children, "aria-label": ariaLabel = "Upload files", "aria-describedby": ariaDescribedBy, }, ref) => {
17
+ const [dragging, setDragging] = useState(false);
18
+ const emit = (fileList) => {
19
+ if (!fileList || fileList.length === 0)
20
+ return;
21
+ onFiles(Array.from(fileList));
22
+ };
23
+ const handleDragEnter = (event) => {
24
+ event.preventDefault();
25
+ event.stopPropagation();
26
+ if (disabled)
27
+ return;
28
+ setDragging(true);
29
+ };
30
+ const handleDragOver = (event) => {
31
+ event.preventDefault();
32
+ event.stopPropagation();
33
+ if (disabled)
34
+ return;
35
+ setDragging(true);
36
+ };
37
+ const handleDragLeave = (event) => {
38
+ event.preventDefault();
39
+ event.stopPropagation();
40
+ setDragging(false);
41
+ };
42
+ const handleDrop = (event) => {
43
+ event.preventDefault();
44
+ event.stopPropagation();
45
+ setDragging(false);
46
+ if (disabled)
47
+ return;
48
+ emit(event.dataTransfer.files);
49
+ };
50
+ return (_jsxs("label", { ref: ref, "data-slot": "file-dropzone", "aria-disabled": disabled || undefined, "data-dragging": dragging, onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, className: cn("flex cursor-pointer flex-col items-center justify-center gap-2 rounded-xl border-2 border-dashed border-border bg-surface-inset px-6 py-10 text-center text-sm text-fg-secondary transition-colors hover:border-border-strong data-[dragging=true]:border-primary data-[dragging=true]:bg-primary/5",
51
+ // Move the focus ring onto the label when the hidden input is
52
+ // keyboard-focused, so the whole surface shows focus.
53
+ "outline-none has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring has-[:focus-visible]:ring-offset-2 has-[:focus-visible]:ring-offset-surface-base", disabled && "cursor-not-allowed opacity-50", className), children: [_jsx("input", { type: "file", accept: accept, multiple: multiple, disabled: disabled, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, className: "sr-only", onChange: (event) => {
54
+ emit(event.target.files);
55
+ event.target.value = "";
56
+ } }), children ?? (_jsxs(_Fragment, { children: [_jsx(UploadCloud, { className: "size-6 text-fg-muted", "aria-hidden": true }), _jsxs("span", { children: ["Drag & drop or ", _jsx("span", { className: "font-medium text-fg", children: "browse" })] })] }))] }));
57
+ });
58
+ FileDropzone.displayName = "FileDropzone";
59
+ //# sourceMappingURL=file-dropzone.js.map
@@ -0,0 +1,25 @@
1
+ import type { HTMLAttributes, Ref } from "react";
2
+ export interface FlickeringGridProps extends HTMLAttributes<HTMLDivElement> {
3
+ ref?: Ref<HTMLDivElement>;
4
+ /**
5
+ * Number of columns in the grid.
6
+ * @default 16
7
+ */
8
+ columns?: number;
9
+ /**
10
+ * Number of rows in the grid.
11
+ * @default 10
12
+ */
13
+ rows?: number;
14
+ }
15
+ /**
16
+ * A grid of cells that independently flicker — a quiet digital texture for
17
+ * empty states and hero backdrops. Timings are derived from the cell index so
18
+ * SSR and the client paint the same field. Decorative and paused under
19
+ * reduced motion (cells sit at a still, faint opacity).
20
+ */
21
+ export declare function FlickeringGrid({ ref, className, children, columns, rows, style, ...props }: FlickeringGridProps): import("react").JSX.Element;
22
+ export declare namespace FlickeringGrid {
23
+ var displayName: string;
24
+ }
25
+ //# sourceMappingURL=flickering-grid.d.ts.map
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../lib/cn.js";
3
+ const FLICKER_KEYFRAMES = "@keyframes cronus-flicker{0%,100%{opacity:0.08}50%{opacity:0.45}}";
4
+ function finiteOr(value, fallback) {
5
+ return Number.isFinite(value) ? value : fallback;
6
+ }
7
+ /**
8
+ * A grid of cells that independently flicker — a quiet digital texture for
9
+ * empty states and hero backdrops. Timings are derived from the cell index so
10
+ * SSR and the client paint the same field. Decorative and paused under
11
+ * reduced motion (cells sit at a still, faint opacity).
12
+ */
13
+ export function FlickeringGrid({ ref, className, children, columns = 16, rows = 10, style, ...props }) {
14
+ const cols = Math.min(48, Math.max(2, Math.round(finiteOr(columns, 16))));
15
+ const rowCount = Math.min(32, Math.max(2, Math.round(finiteOr(rows, 10))));
16
+ const cells = cols * rowCount;
17
+ return (_jsxs("div", { ref: ref, "data-slot": "flickering-grid", className: cn("relative overflow-hidden", className), style: style, ...props, children: [_jsxs("div", { "aria-hidden": "true", className: "pointer-events-none absolute inset-0 grid motion-reduce:opacity-40", style: {
18
+ gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))`,
19
+ gridTemplateRows: `repeat(${rowCount}, minmax(0, 1fr))`,
20
+ gap: 2,
21
+ }, children: [_jsx("style", { children: FLICKER_KEYFRAMES }), Array.from({ length: cells }, (_, index) => {
22
+ const cellStyle = {
23
+ "--flicker-delay": `${(index * 37) % 1600}ms`,
24
+ "--flicker-duration": `${1.4 + ((index * 11) % 18) / 10}s`,
25
+ };
26
+ return (_jsx("span", { className: "rounded-[1px] bg-fg [animation-delay:var(--flicker-delay)] [animation-duration:var(--flicker-duration)] [animation-iteration-count:infinite] [animation-name:cronus-flicker] motion-reduce:[animation-name:none]", style: cellStyle }, index));
27
+ })] }), _jsx("div", { className: "relative", children: children })] }));
28
+ }
29
+ FlickeringGrid.displayName = "FlickeringGrid";
30
+ //# sourceMappingURL=flickering-grid.js.map
@@ -0,0 +1,70 @@
1
+ import { type HTMLAttributes } from "react";
2
+ /** What causes the card to reveal its back face. */
3
+ export type FlipCardTrigger = "hover" | "click" | "controlled";
4
+ /** Axis the card rotates around when it flips. */
5
+ export type FlipCardAxis = "horizontal" | "vertical";
6
+ export interface FlipCardProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
7
+ /**
8
+ * What flips the card. `"hover"` flips on pointer hover **and** keyboard focus
9
+ * (so it is fully operable without a mouse); `"click"` toggles on click, Enter
10
+ * or Space and exposes `role="button"` + `aria-pressed`; `"controlled"` never
11
+ * self-flips — you drive it entirely through the {@link flipped} prop.
12
+ * @default "hover"
13
+ */
14
+ trigger?: FlipCardTrigger;
15
+ /**
16
+ * Axis the card rotates around. `"horizontal"` spins left↔right (`rotateY`);
17
+ * `"vertical"` tumbles top↔bottom (`rotateX`).
18
+ * @default "horizontal"
19
+ */
20
+ axis?: FlipCardAxis;
21
+ /**
22
+ * Controlled flip state. When provided the card shows the back face iff `true`
23
+ * and its own hover/click toggling is suppressed (parent owns the state).
24
+ */
25
+ flipped?: boolean;
26
+ /** Initial flip state when uncontrolled. @default false */
27
+ defaultFlipped?: boolean;
28
+ /**
29
+ * Fires with the next flip state whenever the card would flip. Still called
30
+ * while controlled, so you can lift the state up.
31
+ */
32
+ onFlippedChange?: (flipped: boolean) => void;
33
+ /**
34
+ * Accessible name for the flip control. Strongly recommended for
35
+ * `trigger="click"`, where the whole card is a single button.
36
+ */
37
+ "aria-label"?: string;
38
+ }
39
+ /**
40
+ * A 3D flip card composed from `FlipCard` + `FlipCardFront` + `FlipCardBack`
41
+ * (wired through context). Both faces are always in the DOM, stacked with
42
+ * `position: absolute`; the inner wrapper is a `transform-style: preserve-3d`
43
+ * stage that rotates 180° on a spring-eased `transition-transform`, and each
44
+ * face uses `backface-visibility: hidden` so only the forward-facing side shows.
45
+ *
46
+ * Triggers: `"hover"` flips on pointer hover or keyboard focus, `"click"`
47
+ * toggles on click / Enter / Space (with `role="button"` + `aria-pressed`), and
48
+ * `"controlled"` flips only via the `flipped` prop. State is uncontrolled by
49
+ * default and lifts up through `onFlippedChange`.
50
+ *
51
+ * Performance: the rotation is a single compositor-friendly `transform`; there
52
+ * are no timers, animation frames or `mousemove` state updates to clean up.
53
+ * Accessibility: the inactive face is `inert`, so its content never double-reads
54
+ * to a screen reader and its focusable children stay out of the tab order until
55
+ * that face is showing. Under `prefers-reduced-motion: reduce` the rotation is
56
+ * forced off and the faces cross-swap instantly (no spin).
57
+ */
58
+ export declare const FlipCard: import("react").ForwardRefExoticComponent<FlipCardProps & import("react").RefAttributes<HTMLDivElement>>;
59
+ /**
60
+ * The front (default) face of a {@link FlipCard}. Shown while the card is not
61
+ * flipped; becomes `inert` and instantly hidden (reduced motion) once the card
62
+ * turns to the back.
63
+ */
64
+ export declare const FlipCardFront: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
65
+ /**
66
+ * The back face of a {@link FlipCard}. Pre-rotated 180° on the card's axis so it
67
+ * faces the viewer once the stage turns. `inert` while the front is showing.
68
+ */
69
+ export declare const FlipCardBack: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
70
+ //# sourceMappingURL=flip-card.d.ts.map
@@ -0,0 +1,117 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, forwardRef, useContext, useMemo, useState, } from "react";
4
+ import { cn } from "../lib/cn.js";
5
+ const FlipCardContext = createContext(null);
6
+ function useFlipCard(component) {
7
+ const context = useContext(FlipCardContext);
8
+ if (context === null) {
9
+ throw new Error(`<${component}> must be used within <FlipCard>.`);
10
+ }
11
+ return context;
12
+ }
13
+ /**
14
+ * A 3D flip card composed from `FlipCard` + `FlipCardFront` + `FlipCardBack`
15
+ * (wired through context). Both faces are always in the DOM, stacked with
16
+ * `position: absolute`; the inner wrapper is a `transform-style: preserve-3d`
17
+ * stage that rotates 180° on a spring-eased `transition-transform`, and each
18
+ * face uses `backface-visibility: hidden` so only the forward-facing side shows.
19
+ *
20
+ * Triggers: `"hover"` flips on pointer hover or keyboard focus, `"click"`
21
+ * toggles on click / Enter / Space (with `role="button"` + `aria-pressed`), and
22
+ * `"controlled"` flips only via the `flipped` prop. State is uncontrolled by
23
+ * default and lifts up through `onFlippedChange`.
24
+ *
25
+ * Performance: the rotation is a single compositor-friendly `transform`; there
26
+ * are no timers, animation frames or `mousemove` state updates to clean up.
27
+ * Accessibility: the inactive face is `inert`, so its content never double-reads
28
+ * to a screen reader and its focusable children stay out of the tab order until
29
+ * that face is showing. Under `prefers-reduced-motion: reduce` the rotation is
30
+ * forced off and the faces cross-swap instantly (no spin).
31
+ */
32
+ export const FlipCard = forwardRef(({ trigger = "hover", axis = "horizontal", flipped: controlledFlipped, defaultFlipped = false, onFlippedChange, className, children, onClick, onKeyDown, onMouseEnter, onMouseLeave, onFocus, onBlur, "aria-label": ariaLabel, ...props }, ref) => {
33
+ const [internalFlipped, setInternalFlipped] = useState(defaultFlipped);
34
+ const isControlled = controlledFlipped !== undefined;
35
+ const flipped = isControlled ? controlledFlipped : internalFlipped;
36
+ const interactive = trigger !== "controlled";
37
+ const setFlipped = (next) => {
38
+ if (!isControlled) {
39
+ setInternalFlipped(next);
40
+ }
41
+ onFlippedChange?.(next);
42
+ };
43
+ const handleClick = (event) => {
44
+ if (trigger === "click") {
45
+ setFlipped(!flipped);
46
+ }
47
+ onClick?.(event);
48
+ };
49
+ const handleKeyDown = (event) => {
50
+ if (trigger === "click" && (event.key === "Enter" || event.key === " ")) {
51
+ event.preventDefault();
52
+ setFlipped(!flipped);
53
+ }
54
+ onKeyDown?.(event);
55
+ };
56
+ const handleMouseEnter = (event) => {
57
+ if (trigger === "hover") {
58
+ setFlipped(true);
59
+ }
60
+ onMouseEnter?.(event);
61
+ };
62
+ const handleMouseLeave = (event) => {
63
+ if (trigger === "hover") {
64
+ setFlipped(false);
65
+ }
66
+ onMouseLeave?.(event);
67
+ };
68
+ const handleFocus = (event) => {
69
+ if (trigger === "hover") {
70
+ setFlipped(true);
71
+ }
72
+ onFocus?.(event);
73
+ };
74
+ const handleBlur = (event) => {
75
+ // Only unflip when focus actually leaves the card — not when it moves
76
+ // between the card's own descendants (e.g. tabbing onto a back-face link).
77
+ if (trigger === "hover" && !event.currentTarget.contains(event.relatedTarget)) {
78
+ setFlipped(false);
79
+ }
80
+ onBlur?.(event);
81
+ };
82
+ const rotation = axis === "vertical" ? "rotateX(180deg)" : "rotateY(180deg)";
83
+ const contextValue = useMemo(() => ({ flipped, axis }), [flipped, axis]);
84
+ // aria-label must live on a role that supports naming (never a bare div).
85
+ const role = trigger === "click" ? "button" : ariaLabel ? "group" : undefined;
86
+ return (_jsx(FlipCardContext.Provider, { value: contextValue, children: _jsx("div", { ref: ref, "data-slot": "flip-card", "data-flipped": flipped ? "" : undefined, role: role, tabIndex: interactive ? 0 : undefined, "aria-pressed": trigger === "click" ? flipped : undefined, "aria-label": ariaLabel, className: cn("group/flip relative isolate min-h-[16rem] rounded-2xl [perspective:1600px]", interactive &&
87
+ "cursor-pointer outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base", className), onClick: handleClick, onKeyDown: handleKeyDown, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onFocus: handleFocus, onBlur: handleBlur, ...props, children: _jsx("div", { className: cn("relative size-full transition-transform duration-[600ms] ease-[var(--ease-spring)] [transform-style:preserve-3d] will-change-transform", "motion-reduce:transition-none motion-reduce:!transform-none"), style: { transform: flipped ? rotation : undefined }, children: children }) }) }));
88
+ });
89
+ FlipCard.displayName = "FlipCard";
90
+ const faceClassName = cn("absolute inset-0 flex flex-col overflow-hidden rounded-2xl border border-border text-fg shadow-sm", "[backface-visibility:hidden] motion-reduce:[backface-visibility:visible]");
91
+ /**
92
+ * The front (default) face of a {@link FlipCard}. Shown while the card is not
93
+ * flipped; becomes `inert` and instantly hidden (reduced motion) once the card
94
+ * turns to the back.
95
+ */
96
+ export const FlipCardFront = forwardRef(({ className, ...props }, ref) => {
97
+ const { flipped } = useFlipCard("FlipCardFront");
98
+ return (_jsx("div", { ref: ref, "data-slot": "flip-card-front", "data-active": !flipped || undefined, inert: flipped || undefined, className: cn(faceClassName, "bg-surface-raised",
99
+ // Reduced motion: no spin, so hide the front the instant we flip.
100
+ "motion-reduce:group-data-[flipped]/flip:invisible", className), ...props }));
101
+ });
102
+ FlipCardFront.displayName = "FlipCardFront";
103
+ /**
104
+ * The back face of a {@link FlipCard}. Pre-rotated 180° on the card's axis so it
105
+ * faces the viewer once the stage turns. `inert` while the front is showing.
106
+ */
107
+ export const FlipCardBack = forwardRef(({ className, style, ...props }, ref) => {
108
+ const { flipped, axis } = useFlipCard("FlipCardBack");
109
+ const preRotate = {
110
+ transform: axis === "vertical" ? "rotateX(180deg)" : "rotateY(180deg)",
111
+ };
112
+ return (_jsx("div", { ref: ref, "data-slot": "flip-card-back", "data-active": flipped || undefined, inert: !flipped || undefined, className: cn(faceClassName, "bg-surface-elevated",
113
+ // Reduced motion: drop the 180° pre-rotation and swap by visibility.
114
+ "motion-reduce:!transform-none motion-reduce:invisible motion-reduce:group-data-[flipped]/flip:visible", className), style: { ...preRotate, ...style }, ...props }));
115
+ });
116
+ FlipCardBack.displayName = "FlipCardBack";
117
+ //# sourceMappingURL=flip-card.js.map
@@ -0,0 +1,34 @@
1
+ import { type InputHTMLAttributes, type ReactNode } from "react";
2
+ /**
3
+ * A text field whose label begins in the placeholder position and floats up to a
4
+ * compact caption on focus or when the field is filled.
5
+ *
6
+ * The float is driven **entirely by CSS** — the label reacts to the input's
7
+ * `:placeholder-shown` and `:focus` states via Tailwind `peer-*` variants, so
8
+ * there is no state, no `onChange` bookkeeping, and no React re-render while the
9
+ * user types. The movement animates `transform` + `color` only (GPU-composited,
10
+ * no layout thrash) with a soft spring easing; under
11
+ * `prefers-reduced-motion: reduce` the transition collapses to an instant snap.
12
+ *
13
+ * Works with controlled and uncontrolled inputs alike (the state is read from the
14
+ * DOM, not React), forwards its ref to the underlying `<input>`, and binds the
15
+ * label via `id`/`htmlFor`. Helper text is wired through `aria-describedby`, and
16
+ * the invalid state is fully token-driven (border, label, and helper turn to the
17
+ * error color, and the helper is announced via `role="alert"`).
18
+ */
19
+ export interface FloatingLabelInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "placeholder"> {
20
+ /** The label text. Sits in the placeholder position, then floats up when the field is focused or filled. */
21
+ label: ReactNode;
22
+ /** Optional caption rendered under the field and linked to the input via `aria-describedby`. Turns into an error message when `invalid`. */
23
+ helperText?: ReactNode;
24
+ /** Marks the field invalid — drives the error border/ring, error label color, and an announced (`role="alert"`) helper. */
25
+ invalid?: boolean;
26
+ /** Decorative content (usually an icon) pinned to the left; the label and input inset to make room. */
27
+ startAdornment?: ReactNode;
28
+ /** Content (icon or button) pinned to the right; the input insets to make room. */
29
+ endAdornment?: ReactNode;
30
+ /** Extra classes for the floating `<label>`. */
31
+ labelClassName?: string;
32
+ }
33
+ export declare const FloatingLabelInput: import("react").ForwardRefExoticComponent<FloatingLabelInputProps & import("react").RefAttributes<HTMLInputElement>>;
34
+ //# sourceMappingURL=floating-label-input.d.ts.map
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef, useId } from "react";
3
+ import { cn } from "../lib/cn.js";
4
+ import { Input } from "./input.js";
5
+ export const FloatingLabelInput = forwardRef(({ className, labelClassName, label, helperText, invalid = false, startAdornment, endAdornment, id: idProp, disabled, "aria-describedby": ariaDescribedBy, ...props }, ref) => {
6
+ const reactId = useId();
7
+ const id = idProp ?? reactId;
8
+ const helperId = helperText ? `${id}-helper` : undefined;
9
+ const describedBy = cn(ariaDescribedBy, helperId) || undefined;
10
+ return (_jsxs("div", { "data-slot": "floating-label-input", className: cn("w-full", className), children: [_jsxs("div", { className: "relative", children: [startAdornment ? (_jsx("span", { "aria-hidden": "true", "data-slot": "floating-label-input-start", className: "pointer-events-none absolute inset-y-0 left-0 z-10 flex items-center pl-3 text-fg-tertiary [&_svg]:size-4", children: startAdornment })) : null, _jsx(Input, { ref: ref, id: id, invalid: invalid, disabled: disabled, placeholder: " ", "aria-describedby": describedBy, className: cn("peer h-14 pt-4 placeholder:text-transparent", startAdornment && "pl-10", endAdornment && "pr-10"), ...props }), _jsx("label", { htmlFor: id, "data-slot": "floating-label-input-label", className: cn("pointer-events-none absolute top-1/2 z-10 origin-left select-none text-sm", startAdornment ? "left-10" : "left-3",
11
+ // Smooth spring float — transform + color only (GPU-composited).
12
+ "transition-[transform,color] duration-300 ease-[var(--ease-spring)]", "motion-reduce:transition-none motion-reduce:duration-0",
13
+ // Floated (base — applies when filled, and re-asserted on focus below).
14
+ "-translate-y-[1.6rem] scale-[0.8]", invalid ? "text-error-strong" : "text-fg-secondary",
15
+ // Resting: empty and unfocused → sits in the placeholder position.
16
+ "peer-placeholder-shown:translate-y-[-50%] peer-placeholder-shown:scale-100 peer-placeholder-shown:text-fg-tertiary",
17
+ // Focused: float back up and take the accent (or error) color.
18
+ // `text-primary-strong` (AA-tuned): the raw `primary` fill reads
19
+ // ~2:1 as this small label on white in the bright-accent light themes.
20
+ "peer-focus:-translate-y-[1.6rem] peer-focus:scale-[0.8]", invalid ? "peer-focus:text-error-strong" : "peer-focus:text-primary-strong",
21
+ // Disabled dimming mirrors the input.
22
+ "peer-disabled:opacity-50", labelClassName), children: label }), endAdornment ? (_jsx("span", { "data-slot": "floating-label-input-end", className: "absolute inset-y-0 right-0 z-10 flex items-center pr-3 text-fg-tertiary [&_svg]:size-4", children: endAdornment })) : null] }), helperText ? (_jsx("p", { id: helperId, "data-slot": "floating-label-input-helper", role: invalid ? "alert" : undefined, className: cn("mt-1.5 px-1 text-xs", invalid ? "text-error-strong" : "text-fg-secondary"), children: helperText })) : null] }));
23
+ });
24
+ FloatingLabelInput.displayName = "FloatingLabelInput";
25
+ //# sourceMappingURL=floating-label-input.js.map