@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,586 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Bar 3D depth + glass surfaces — drop-in layers for `<BarChart>`.
5
+ *
6
+ * Adds a head-on perspective and a glossy glass-block sheen to the bars in
7
+ * any `<BarChart>`. Bars left of chart center expose their RIGHT side face;
8
+ * bars right of center expose their LEFT — the vanishing point sits at the
9
+ * chart's horizontal middle, so the row reads like vertical glass blocks
10
+ * viewed straight on.
11
+ *
12
+ * Three surfaces per bar:
13
+ * 1. Side face — a parallelogram on the depth side, lit at the front edge
14
+ * with a horizontal black gradient and shaded toward the back.
15
+ * 2. Top face — a parallelogram lid above the bar's top edge, with a
16
+ * bright catch at the front lip fading to soft white at the back.
17
+ * 3. Glass overlay — a vertical white-to-dark gradient on the bar's front
18
+ * face (sharp top reflection, transparent middle, faint bottom shadow).
19
+ *
20
+ * Usage (purely additive — no changes to `<Bar>`):
21
+ *
22
+ * <BarChart data={data} xDataKey="month">
23
+ * <Grid horizontal />
24
+ * <BarDepthBack dataKey="value" color="var(--chart-1)" /> // before <Bar>
25
+ * <Bar dataKey="value" fill="var(--chart-1)" />
26
+ * <BarDepthFront dataKey="value" /> // after <Bar>
27
+ * </BarChart>
28
+ *
29
+ * Both depth layers read geometry from `useChart()` and figure out the
30
+ * perspective themselves. The only configuration is the bar color
31
+ * (`color` / `colorAccessor`) and, for stacked bars, a `segmentsAccessor`
32
+ * supplied via `<BarDepthProvider>`.
33
+ *
34
+ * An optional `<BarPulse>` paints a looping vertical sweep over a single
35
+ * "active" bar (selected by `activeIndex`) — useful for highlighting a live
36
+ * or in-progress value. Render it AFTER `<BarDepthFront>`.
37
+ *
38
+ * Behavior notes:
39
+ * - Negative values are supported: a bar whose value is below zero grows
40
+ * downward from the baseline, with the lid sitting on the baseline.
41
+ * (This requires the host `<BarChart>` to use a value scale whose
42
+ * domain includes negatives.)
43
+ * - Zero-value bars are skipped by default; set `minBarHeight` on
44
+ * `<BarDepthProvider>` (and `<Bar>`) to floor them to a short visible bar.
45
+ *
46
+ * Performance:
47
+ * - Three shared SVG gradients per layer instance (ID-collision-safe via
48
+ * `useId()`).
49
+ * - A per-bar `<clipPath>` for the side face animates from the baseline so
50
+ * the static side path is revealed bottom-up in lockstep with the bar.
51
+ * Only used where depth ≥ 0.5px.
52
+ * - At high bar density the column gap clamps depth below the 0.5px
53
+ * threshold; the back surfaces skip rendering and only the cheap glass
54
+ * rect remains.
55
+ * - `useBarDepthEntries` is memoized, so the Back/Front/Pulse layers
56
+ * compute geometry at most once per render between them.
57
+ */
58
+ import { motion } from "motion/react";
59
+ import { createContext, useContext, useId, useMemo } from "react";
60
+ import { barDepthAndRise, barDepthMaxDepth } from "./bar-depth-geometry.js";
61
+ import { useChartHover, useChartStable } from "./chart-context.js";
62
+ import { transitionWithDelay } from "./motion-utils.js";
63
+ // ─── Constants ───────────────────────────────────────────────────────
64
+ /** Below this depth the back surfaces don't render — saves elements for
65
+ * dead-center bars and dense charts where perspective is sub-pixel. */
66
+ const BAR_DEPTH_MIN_PX = 0.5;
67
+ /** Mirrors `Bar`'s default `fadedOpacity` so depth/glass dim in step with
68
+ * their bar when a sibling bar is hovered. */
69
+ const BAR_FADED_OPACITY = 0.3;
70
+ /** Default bar color when neither `color` nor `colorAccessor` is provided. */
71
+ const DEFAULT_BAR_COLOR = "var(--chart-line-primary)";
72
+ /** Default opacity of the baseline "contact shadow" that grounds each bar at
73
+ * the zero line. Configurable via `<BarDepthProvider groundShadow>`. */
74
+ const DEFAULT_GROUND_SHADOW = 0.26;
75
+ /** Peak opacity of the white reflection catch at each bar's tip. Kept here so
76
+ * the front/side glass and the solid lid highlight all use the same value. */
77
+ const GLASS_TIP_OPACITY = 0.2;
78
+ // `BarPulse` — vertical sweep wave constants. The wave is a tall translucent
79
+ // rect with a centered bright band; it translates from below the bar's bottom
80
+ // edge to above the lid's back edge on a loop, clipped to the bar's full 3D
81
+ // silhouette.
82
+ /** Wave height = max(barHeight × this, PULSE_WAVE_HEIGHT_MIN_PX). 0.55 puts
83
+ * the bright band's peak in the middle of the bar at mid-travel. */
84
+ const PULSE_WAVE_HEIGHT_RATIO = 0.55;
85
+ /** Minimum wave height in px so short bars still pulse on a steady cadence —
86
+ * the wave is taller than the bar so the bright band sweeps through cleanly
87
+ * instead of flashing for one frame. */
88
+ const PULSE_WAVE_HEIGHT_MIN_PX = 36;
89
+ /** Seconds per sweep (bottom → above the lid). 2.4s reads as a deliberate
90
+ * heartbeat; faster feels frantic, slower feels laggy. */
91
+ const PULSE_WAVE_DURATION_S = 2.4;
92
+ /** Peak opacity of the wave's brightest gradient stop. White at 0.85 is
93
+ * bright enough to register over saturated bar colors while the bell-curve
94
+ * stops around it keep the falloff soft so the bar's hue still dominates. */
95
+ const PULSE_WAVE_PEAK_OPACITY = 0.85;
96
+ const BAR_HOVER_TRANSITION = { duration: 0.15, ease: "easeOut" };
97
+ function resolveColor(datum, index, color, colorAccessor) {
98
+ return colorAccessor?.(datum, index) ?? color;
99
+ }
100
+ /** Side-face parallelogram between two screen-Y edges, on the depth side of
101
+ * the bar (left of the bar for right-of-center bars, right for left-of). */
102
+ function sideFacePath(e, topEdge, bottomEdge) {
103
+ const rise = e.perspectiveRise;
104
+ if (e.isRightOfCenter) {
105
+ const x = e.bandX;
106
+ return `M ${x} ${topEdge} L ${x - e.depth} ${topEdge - rise} L ${x - e.depth} ${bottomEdge - rise} L ${x} ${bottomEdge} Z`;
107
+ }
108
+ const x = e.bandX + e.bandWidth;
109
+ return `M ${x} ${topEdge} L ${x + e.depth} ${topEdge - rise} L ${x + e.depth} ${bottomEdge - rise} L ${x} ${bottomEdge} Z`;
110
+ }
111
+ /** Lid (top face) parallelogram above the bar's top edge. */
112
+ function lidFacePath(e) {
113
+ const rise = e.perspectiveRise;
114
+ const left = e.bandX;
115
+ const right = e.bandX + e.bandWidth;
116
+ if (e.isRightOfCenter) {
117
+ return `M ${left} ${e.topY} L ${right} ${e.topY} L ${right - e.depth} ${e.topY - rise} L ${left - e.depth} ${e.topY - rise} Z`;
118
+ }
119
+ return `M ${left} ${e.topY} L ${right} ${e.topY} L ${right + e.depth} ${e.topY - rise} L ${left + e.depth} ${e.topY - rise} Z`;
120
+ }
121
+ /**
122
+ * Build the side-face parallelograms for a bar. Without segments it's a single
123
+ * piece in `baseColor`; with segments each gets its natural scaled height
124
+ * `(seg.value/total) * naturalHeight` and only the topmost has `topYTrim`
125
+ * removed — matching exactly how `<Bar>` stacks segments, so the side seams
126
+ * line up with the front face.
127
+ */
128
+ function buildSidePieces(e, visibleSegments, baseColor) {
129
+ if (!(visibleSegments && visibleSegments.length > 0)) {
130
+ return [{ path: sideFacePath(e, e.topY, e.bottomY), color: baseColor }];
131
+ }
132
+ const totalValue = visibleSegments.reduce((sum, s) => sum + s.value, 0);
133
+ const pieces = [];
134
+ let cursorY = e.bottomY;
135
+ for (let i = 0; i < visibleSegments.length; i++) {
136
+ const seg = visibleSegments[i];
137
+ if (!seg) {
138
+ continue;
139
+ }
140
+ const isTopmost = i === visibleSegments.length - 1;
141
+ const segScaledHeight = (seg.value / totalValue) * e.naturalHeight;
142
+ const segHeight = isTopmost ? Math.max(0, segScaledHeight - e.topYTrim) : segScaledHeight;
143
+ const segBottomY = cursorY;
144
+ const segTopY = cursorY - segHeight;
145
+ cursorY = segTopY;
146
+ pieces.push({
147
+ path: sideFacePath(e, segTopY, segBottomY),
148
+ color: seg.color,
149
+ });
150
+ }
151
+ return pieces;
152
+ }
153
+ const BarDepthContext = createContext({});
154
+ /**
155
+ * Provides shared bar-depth configuration to every depth surface beneath it.
156
+ * Wrap a `<BarChart>` whose children include `<BarDepthBack>` /
157
+ * `<BarDepthFront>` / `<BarPulse>` with this provider to:
158
+ * - split stacked bars into per-segment side faces (`segmentsAccessor`),
159
+ * - tune the baseline contact shadow (`groundShadow`, default 0.26; 0 = off),
160
+ * - floor short/zero bars so they stay visible (`minBarHeight`; pair with the
161
+ * same value on `<Bar minBarHeight>`).
162
+ *
163
+ * Because the glass gradient is chart-wide (one Y-anchored ramp shared by the
164
+ * front face and the side glass), the provider is the single source of truth —
165
+ * so the surfaces can never disagree.
166
+ */
167
+ export function BarDepthProvider({ segmentsAccessor, groundShadow, minBarHeight, children, }) {
168
+ // Memoize so consumers don't re-render when the config is stable.
169
+ const value = useMemo(() => ({ segmentsAccessor, groundShadow, minBarHeight }), [segmentsAccessor, groundShadow, minBarHeight]);
170
+ return _jsx(BarDepthContext.Provider, { value: value, children: children });
171
+ }
172
+ BarDepthProvider.displayName = "BarDepthProvider";
173
+ /**
174
+ * Stop list for a POSITIVE bar's glass (0% = tip, 100% = baseline): a sharp
175
+ * white reflection catch at the tip falling off fast to transparent, then the
176
+ * contact shadow at the base.
177
+ */
178
+ function buildPosBarStops(groundShadow) {
179
+ return [
180
+ { offset: "0%", color: "white", opacity: String(GLASS_TIP_OPACITY) },
181
+ { offset: "3%", color: "white", opacity: "0.09" },
182
+ { offset: "8%", color: "white", opacity: "0.02" },
183
+ { offset: "55%", color: "white", opacity: "0" },
184
+ { offset: "100%", color: "black", opacity: String(groundShadow) },
185
+ ];
186
+ }
187
+ /**
188
+ * Mirror of `buildPosBarStops` for NEGATIVE bars (which grow downward): the
189
+ * contact shadow sits at the top (the baseline) and the reflection catch at
190
+ * the bottom (the bar's tip).
191
+ */
192
+ function buildNegBarStops(groundShadow) {
193
+ return [
194
+ { offset: "0%", color: "black", opacity: String(groundShadow) },
195
+ { offset: "45%", color: "white", opacity: "0" },
196
+ { offset: "92%", color: "white", opacity: "0.02" },
197
+ { offset: "97%", color: "white", opacity: "0.09" },
198
+ { offset: "100%", color: "white", opacity: String(GLASS_TIP_OPACITY) },
199
+ ];
200
+ }
201
+ /**
202
+ * Build both per-bar glass stop lists from the current `groundShadow`. Each
203
+ * depth surface picks `posStops` or `negStops` by the bar's direction and
204
+ * paints it objectBoundingBox, so the gloss is identical across bar heights.
205
+ */
206
+ function useGlassStops() {
207
+ const { groundShadow = DEFAULT_GROUND_SHADOW } = useContext(BarDepthContext);
208
+ return useMemo(() => ({
209
+ posStops: buildPosBarStops(groundShadow),
210
+ negStops: buildNegBarStops(groundShadow),
211
+ }), [groundShadow]);
212
+ }
213
+ function readBarValue(d, key) {
214
+ const v = key ? d[key] : undefined;
215
+ return typeof v === "number" ? v : 0;
216
+ }
217
+ // ─── Hooks ───────────────────────────────────────────────────────────
218
+ /**
219
+ * Compute per-bar 3D depth geometry from chart context.
220
+ *
221
+ * Memoized on the chart's scales + data, so calling this from sibling layers
222
+ * within the same chart is essentially free after the first settles. Returns
223
+ * one entry per renderable bar; bars with no resolvable height are excluded.
224
+ *
225
+ * Negative-value bars are kept — `isNegative` flips the entry's geometry so
226
+ * the side parallelogram and lid render in the correct direction.
227
+ *
228
+ * Exported for advanced consumers that want to render custom layers aligned
229
+ * with the same geometry (e.g. labels above each bar's top face).
230
+ */
231
+ export function useBarDepthEntries(dataKey, activeIndex) {
232
+ const { data, barScale, bandWidth, yScale, innerHeight, innerWidth, barXAccessor } = useChartStable();
233
+ // Read shared config from `<BarDepthProvider>`. Outside a provider these are
234
+ // the defaults (no segmentation, no floor) — correct for simple charts.
235
+ const { segmentsAccessor, minBarHeight = 0 } = useContext(BarDepthContext);
236
+ return useMemo(() => {
237
+ if (!(barScale && bandWidth && barXAccessor)) {
238
+ return [];
239
+ }
240
+ const centerX = innerWidth / 2;
241
+ const zeroY = yScale(0) ?? innerHeight;
242
+ // d3-scaleBand exposes step() (= bandwidth + gap); the shared helper caps
243
+ // depth below the gap so a side face never spills past the next bar.
244
+ const step = barScale.step?.() ?? bandWidth;
245
+ const maxDepth = barDepthMaxDepth(step, bandWidth);
246
+ // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: per-bar 3D geometry (direction, perspective trim, segment scaling) reads clearest as one pass
247
+ return data.flatMap((d, dataIndex) => {
248
+ // Stacked bars: the bar's value is the SUM of its segments (so the depth
249
+ // height matches the host BarChart's stacked total). Single bars: the
250
+ // `dataKey` column. `segmentsAccessor` comes from `<BarDepthProvider>`.
251
+ const visibleSegs = segmentsAccessor?.(d)?.filter((s) => s.value > 0) ?? null;
252
+ const value = visibleSegs && visibleSegs.length > 0
253
+ ? visibleSegs.reduce((sum, s) => sum + s.value, 0)
254
+ : readBarValue(d, dataKey);
255
+ const isActive = activeIndex != null && dataIndex === activeIndex;
256
+ const isNegative = value < 0;
257
+ const label = barXAccessor(d);
258
+ const bandX = barScale(label) ?? 0;
259
+ const cx = bandX + bandWidth / 2;
260
+ // `Math.abs` so negative bars produce a positive height — direction is
261
+ // captured by `isNegative`. Non-negative bars are floored to
262
+ // `minBarHeight` so short/zero values stay visible (mirrors
263
+ // `<Bar minBarHeight>`); a floored bar skips the perspective trim so its
264
+ // tiny front face and lid stay aligned. With the default floor of 0,
265
+ // zero-value bars produce no height and are skipped.
266
+ const valuePos = yScale(value) ?? innerHeight;
267
+ const rawHeight = Math.abs(zeroY - valuePos);
268
+ const naturalHeight = isNegative ? rawHeight : Math.max(rawHeight, minBarHeight);
269
+ if (naturalHeight <= 0) {
270
+ return [];
271
+ }
272
+ const isFloored = !isNegative && rawHeight < naturalHeight;
273
+ const offsetFromCenter = centerX > 0 ? (cx - centerX) / centerX : 0;
274
+ const isRightOfCenter = offsetFromCenter > 0;
275
+ const absOffset = Math.min(1, Math.abs(offsetFromCenter));
276
+ const { depth, perspectiveRise: rawRise } = barDepthAndRise(absOffset, naturalHeight, maxDepth);
277
+ // Perspective lift applies only to positive bars. For negative bars a
278
+ // lift would raise the lid's back edge above the baseline (a visible
279
+ // "lip" at the chart edges), so it's forced to 0 — degenerating the lid
280
+ // and flattening the side into a rectangle flush with the baseline.
281
+ const perspectiveRise = isNegative ? 0 : rawRise;
282
+ // Perspective trim — positive value-bearing bars only. The lid's back
283
+ // edge sits `perspectiveRise` above `topY`. Without trim the silhouette
284
+ // top would vary with depth (bars further from center look taller).
285
+ // Trim shifts `topY` DOWN by `perspectiveRise` so the lid's back edge
286
+ // lands on `yScale(value)` regardless of depth. The clamp denominator
287
+ // is the topmost segment's scaled height (for stacked bars) or the whole
288
+ // bar's natural height, matching how `<Bar>` stacks segments.
289
+ let trimClampReference = naturalHeight;
290
+ if (visibleSegs && visibleSegs.length > 0) {
291
+ const segTotal = visibleSegs.reduce((sum, s) => sum + s.value, 0);
292
+ const topmost = visibleSegs.at(-1);
293
+ if (segTotal > 0 && topmost) {
294
+ trimClampReference = (topmost.value / segTotal) * naturalHeight;
295
+ }
296
+ }
297
+ const isValueBar = naturalHeight > 0 && !isNegative && !isFloored;
298
+ const topYTrim = isValueBar
299
+ ? Math.min(perspectiveRise, Math.max(0, trimClampReference - 1))
300
+ : 0;
301
+ // Direction-aware top/bottom: positive bars hang ABOVE the baseline;
302
+ // negative bars hang BELOW it. The lid always lives at `topY` so for
303
+ // negative bars it sits on the baseline.
304
+ const topY = isNegative ? zeroY : zeroY - naturalHeight + topYTrim;
305
+ const bottomY = isNegative ? zeroY + naturalHeight : zeroY;
306
+ const barHeight = bottomY - topY;
307
+ return [
308
+ {
309
+ label,
310
+ dataIndex,
311
+ datum: d,
312
+ isActive,
313
+ isNegative,
314
+ baselineY: zeroY,
315
+ bandX,
316
+ bandWidth,
317
+ topY,
318
+ bottomY,
319
+ barHeight,
320
+ naturalHeight,
321
+ topYTrim,
322
+ depth,
323
+ perspectiveRise,
324
+ isRightOfCenter,
325
+ },
326
+ ];
327
+ });
328
+ }, [
329
+ data,
330
+ barScale,
331
+ bandWidth,
332
+ yScale,
333
+ innerHeight,
334
+ innerWidth,
335
+ barXAccessor,
336
+ segmentsAccessor,
337
+ minBarHeight,
338
+ dataKey,
339
+ activeIndex,
340
+ ]);
341
+ }
342
+ function useBarDepthStagger() {
343
+ const { data, animationDuration } = useChartStable();
344
+ // Mirror `Bar`'s stagger formula so each depth surface enters in lockstep
345
+ // with its front face (`Bar` uses `animationDuration * 0.4 / count`).
346
+ const total = animationDuration || 1100;
347
+ return data.length > 1 ? (total * 0.4) / 1000 / data.length : 0;
348
+ }
349
+ /**
350
+ * Renders the back surfaces (side + top faces) of the 3D bar effect.
351
+ *
352
+ * Place BEFORE the `<Bar>` elements in `<BarChart>` children so the bar's
353
+ * solid front face occludes any depth that would extend into an adjacent
354
+ * column. Skips bars at chart center (depth ≈ 0) and dense charts.
355
+ *
356
+ * For stacked bars, wrap the `<BarChart>` in a
357
+ * `<BarDepthProvider segmentsAccessor={...}>` so the side face splits into
358
+ * per-segment parallelograms and the lid color matches the topmost segment.
359
+ */
360
+ export function BarDepthBack({ dataKey, color = DEFAULT_BAR_COLOR, colorAccessor, }) {
361
+ const { isLoaded, enterTransition, revealEpoch = 0 } = useChartStable();
362
+ const { hoveredBarIndex } = useChartHover();
363
+ const { segmentsAccessor } = useContext(BarDepthContext);
364
+ const entries = useBarDepthEntries(dataKey);
365
+ const stagger = useBarDepthStagger();
366
+ const { posStops: glassStops, negStops: glassNegStops } = useGlassStops();
367
+ const idPrefix = useId().replace(/[^a-z0-9]/gi, "_");
368
+ // Two horizontal black gradients (one per depth direction) shade the side
369
+ // from front-edge (lit) to back-edge (in shadow). A single vertical white
370
+ // gradient on the lid: bright catch at the front lip → soft white at the
371
+ // back. The vertical glass gradient layered on top of the side adds the same
372
+ // bright-tip / dark-baseline curve as the front face for continuity.
373
+ const sideShadeRtl = `bdb-side-rtl-${idPrefix}`;
374
+ const sideShadeLtr = `bdb-side-ltr-${idPrefix}`;
375
+ const topShade = `bdb-top-${idPrefix}`;
376
+ const sideGlass = `bdb-glass-${idPrefix}`;
377
+ // Per-bar bbox variant used only for bars that extend below the baseline.
378
+ const sideGlassNeg = `bdb-glass-neg-${idPrefix}`;
379
+ return (_jsxs("g", { className: "bar-depth-back", pointerEvents: "none", children: [_jsxs("defs", { children: [_jsxs("linearGradient", { id: sideShadeRtl, x1: "1", x2: "0", y1: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "black", stopOpacity: "0.05" }), _jsx("stop", { offset: "100%", stopColor: "black", stopOpacity: "0.55" })] }), _jsxs("linearGradient", { id: sideShadeLtr, x1: "0", x2: "1", y1: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "black", stopOpacity: "0.05" }), _jsx("stop", { offset: "100%", stopColor: "black", stopOpacity: "0.55" })] }), _jsxs("linearGradient", { id: topShade, x1: "0", x2: "0", y1: "1", y2: "0", children: [_jsx("stop", { offset: "0%", stopColor: "black", stopOpacity: "0" }), _jsx("stop", { offset: "100%", stopColor: "black", stopOpacity: "0.18" })] }), _jsx("linearGradient", { id: sideGlass, x1: "0", x2: "0", y1: "0", y2: "1", children: glassStops.map((stop) => (_jsx("stop", { offset: stop.offset, stopColor: stop.color, stopOpacity: stop.opacity }, `${stop.offset}-${stop.opacity}`))) }), _jsx("linearGradient", { id: sideGlassNeg, x1: "0", x2: "0", y1: "0", y2: "1", children: glassNegStops.map((stop) => (_jsx("stop", { offset: stop.offset, stopColor: stop.color, stopOpacity: stop.opacity }, `${stop.offset}-${stop.opacity}`))) })] }), entries.map((e) => {
380
+ if (e.depth < BAR_DEPTH_MIN_PX) {
381
+ return null;
382
+ }
383
+ // Resolve stacked segments for this bar. Filter to non-zero so a
384
+ // missing segment doesn't paint an invisible 0-height piece or quietly
385
+ // become the lid color.
386
+ const rawSegments = segmentsAccessor?.(e.datum);
387
+ const visibleSegments = rawSegments?.filter((s) => s.value > 0) ?? null;
388
+ const baseColor = resolveColor(e.datum, e.dataIndex, color, colorAccessor);
389
+ const sidePieces = buildSidePieces(e, visibleSegments, baseColor);
390
+ // Full-side path for the vertical glass overlay — drawn once per bar
391
+ // so the brightness curve sweeps across the entire side as one layer.
392
+ const fullSidePath = sideFacePath(e, e.topY, e.bottomY);
393
+ // Lid is one parallelogram regardless of segmentation — colored by the
394
+ // topmost visible segment so it matches the front face's top section.
395
+ const topPath = lidFacePath(e);
396
+ const topColor = visibleSegments?.at(-1)?.color ?? baseColor;
397
+ const delay = e.dataIndex * stagger;
398
+ // Grow uses the SAME enter transition + stagger as `<Bar>` so the side
399
+ // and lid rise at the exact speed of the front face. Post-load geometry
400
+ // changes get a quick settle instead.
401
+ const growTransition = isLoaded
402
+ ? { duration: 0.3, ease: "easeOut" }
403
+ : transitionWithDelay(enterTransition, delay);
404
+ const isFaded = hoveredBarIndex != null && hoveredBarIndex !== e.dataIndex;
405
+ const sideShadeId = e.isRightOfCenter ? sideShadeRtl : sideShadeLtr;
406
+ const safeId = e.label.replace(/[^a-z0-9]/gi, "_");
407
+ const clipId = `bdb-clip-${idPrefix}-${safeId}`;
408
+ // Lid ENTRANCE only (hover-dim is owned by the wrapping group below, so
409
+ // the lid can never dim differently from the side). Positive lids
410
+ // translate up from the baseline riding the growing top edge; negative
411
+ // lids already sit at the baseline, so they fade in instead.
412
+ let lidEntrance = {
413
+ initial: false,
414
+ animate: { y: 0 },
415
+ transition: { y: growTransition },
416
+ };
417
+ if (!isLoaded && e.isNegative) {
418
+ lidEntrance = {
419
+ initial: { y: 0, opacity: 0 },
420
+ animate: { y: 0, opacity: 1 },
421
+ transition: { y: growTransition, opacity: growTransition },
422
+ };
423
+ }
424
+ else if (!isLoaded) {
425
+ lidEntrance = {
426
+ initial: { y: e.barHeight },
427
+ animate: { y: 0 },
428
+ transition: { y: growTransition },
429
+ };
430
+ }
431
+ return (_jsxs(motion.g, { animate: { opacity: isFaded ? BAR_FADED_OPACITY : 1 }, initial: false, transition: BAR_HOVER_TRANSITION, children: [_jsx("defs", { children: _jsx("clipPath", { id: clipId, children: _jsx(motion.rect, { animate: {
432
+ y: e.topY - e.perspectiveRise,
433
+ height: e.barHeight + e.perspectiveRise,
434
+ }, initial: isLoaded ? false : { y: e.baselineY, height: 0 }, transition: growTransition, width: e.bandWidth + 2 * e.depth + 2, x: e.bandX - e.depth - 1 }, `${clipId}-${revealEpoch}-${isLoaded}`) }) }), _jsxs("g", { clipPath: `url(#${clipId})`, children: [sidePieces.map((piece) => (_jsx("path", { d: piece.path, fill: piece.color }, piece.path))), _jsx("path", { d: fullSidePath, fill: `url(#${sideShadeId})` }), _jsx("path", { d: fullSidePath, fill: `url(#${e.isNegative ? sideGlassNeg : sideGlass})` })] }), _jsxs(motion.g, { animate: lidEntrance.animate, initial: lidEntrance.initial, transition: lidEntrance.transition, children: [_jsx("path", { d: topPath, fill: topColor }), _jsx("path", { d: topPath, fill: "white", fillOpacity: GLASS_TIP_OPACITY }), _jsx("path", { d: topPath, fill: `url(#${topShade})` })] }, `lid-${safeId}-${revealEpoch}-${isLoaded}`)] }, e.label));
435
+ })] }));
436
+ }
437
+ BarDepthBack.displayName = "BarDepthBack";
438
+ // Mark as a non-series layer so `BarChart` doesn't count it as a bar (it
439
+ // carries a `dataKey` to pair with a Bar). Mirrors `ChartMarkers`'
440
+ // `__isChartMarkers` flag — a static property is minification-safe, unlike
441
+ // matching on `displayName`.
442
+ BarDepthBack.__isBarDepthLayer = true;
443
+ /**
444
+ * Renders the front surface: a glossy glass sheen over the bar's solid fill.
445
+ * Place AFTER the `<Bar>` elements in `<BarChart>` children so the gradient
446
+ * sits on top of the bar.
447
+ *
448
+ * Reads `segmentsAccessor` from the surrounding `<BarDepthProvider>` (if any)
449
+ * via `useBarDepthEntries`, so the glass rectangle's `topY` automatically
450
+ * matches the lid+side's trim. No prop wiring required.
451
+ */
452
+ export function BarDepthFront({ dataKey }) {
453
+ const { isLoaded, enterTransition, revealEpoch = 0 } = useChartStable();
454
+ const { hoveredBarIndex } = useChartHover();
455
+ const entries = useBarDepthEntries(dataKey);
456
+ const stagger = useBarDepthStagger();
457
+ const { posStops: glassStops, negStops: glassNegStops } = useGlassStops();
458
+ const idPrefix = useId().replace(/[^a-z0-9]/gi, "_");
459
+ const glassId = `bdf-glass-${idPrefix}`;
460
+ const glassIdNeg = `bdf-glass-neg-${idPrefix}`;
461
+ return (_jsxs("g", { className: "bar-depth-front", pointerEvents: "none", children: [_jsxs("defs", { children: [_jsx("linearGradient", { id: glassId, x1: "0", x2: "0", y1: "0", y2: "1", children: glassStops.map((stop) => (_jsx("stop", { offset: stop.offset, stopColor: stop.color, stopOpacity: stop.opacity }, `${stop.offset}-${stop.opacity}`))) }), _jsx("linearGradient", { id: glassIdNeg, x1: "0", x2: "0", y1: "0", y2: "1", children: glassNegStops.map((stop) => (_jsx("stop", { offset: stop.offset, stopColor: stop.color, stopOpacity: stop.opacity }, `${stop.offset}-${stop.opacity}`))) })] }), entries.map((e) => {
462
+ const delay = e.dataIndex * stagger;
463
+ // Same enter transition + stagger as `<Bar>` so the glass rises in
464
+ // lockstep with the front face.
465
+ const baseTransition = isLoaded
466
+ ? { duration: 0.3, ease: "easeOut" }
467
+ : transitionWithDelay(enterTransition, delay);
468
+ const isFaded = hoveredBarIndex != null && hoveredBarIndex !== e.dataIndex;
469
+ return (_jsx(motion.rect, { animate: {
470
+ y: e.topY,
471
+ height: e.barHeight,
472
+ opacity: isFaded ? BAR_FADED_OPACITY : 1,
473
+ }, fill: `url(#${e.isNegative ? glassIdNeg : glassId})`,
474
+ // Anchor the grow at the baseline (not bottomY) so the glass grows
475
+ // outward in whichever direction the bar extends. Keyed on
476
+ // revealEpoch so it replays the grow on every reveal, like `<Bar>`.
477
+ initial: isLoaded ? false : { y: e.baselineY, height: 0 }, transition: { ...baseTransition, opacity: BAR_HOVER_TRANSITION }, width: e.bandWidth, x: e.bandX }, `${e.label}-${revealEpoch}-${isLoaded}`));
478
+ })] }));
479
+ }
480
+ BarDepthFront.displayName = "BarDepthFront";
481
+ BarDepthFront.__isBarDepthLayer = true;
482
+ // ─── BarPulse ─────────────────────────────────────────────────────────
483
+ /**
484
+ * Builds the SVG path tracing the silhouette of a 3D bar — the unioned
485
+ * outline of front face + visible side parallelogram + lid parallelogram.
486
+ * Used as the clip region for `BarPulse`'s wave so the gradient only paints
487
+ * inside the bar's visible 3D shape. For dead-center bars (`depth <= 0`) the
488
+ * silhouette degenerates to just the front rectangle.
489
+ */
490
+ function buildBarSilhouettePath(e) {
491
+ const { bandX, bandWidth, topY, bottomY, depth, perspectiveRise, isRightOfCenter } = e;
492
+ if (depth <= 0) {
493
+ return [
494
+ `M ${bandX} ${topY}`,
495
+ `L ${bandX + bandWidth} ${topY}`,
496
+ `L ${bandX + bandWidth} ${bottomY}`,
497
+ `L ${bandX} ${bottomY}`,
498
+ "Z",
499
+ ].join(" ");
500
+ }
501
+ if (isRightOfCenter) {
502
+ // Side face on LEFT — back shifted (-depth, -perspectiveRise).
503
+ return [
504
+ `M ${bandX - depth} ${topY - perspectiveRise}`,
505
+ `L ${bandX + bandWidth - depth} ${topY - perspectiveRise}`,
506
+ `L ${bandX + bandWidth} ${topY}`,
507
+ `L ${bandX + bandWidth} ${bottomY}`,
508
+ `L ${bandX} ${bottomY}`,
509
+ `L ${bandX - depth} ${bottomY - perspectiveRise}`,
510
+ "Z",
511
+ ].join(" ");
512
+ }
513
+ // Side face on RIGHT — back shifted (+depth, -perspectiveRise).
514
+ return [
515
+ `M ${bandX} ${topY}`,
516
+ `L ${bandX + depth} ${topY - perspectiveRise}`,
517
+ `L ${bandX + bandWidth + depth} ${topY - perspectiveRise}`,
518
+ `L ${bandX + bandWidth + depth} ${bottomY - perspectiveRise}`,
519
+ `L ${bandX + bandWidth} ${bottomY}`,
520
+ `L ${bandX} ${bottomY}`,
521
+ "Z",
522
+ ].join(" ");
523
+ }
524
+ /**
525
+ * Vertical wave that sweeps from a bar's root (baseline) toward its tip on a
526
+ * continuous loop, painted across the bar's full 3D silhouette (front face +
527
+ * lid + visible side). Reads as a heartbeat pulse flowing up the column for
528
+ * positive bars and down for negative bars — useful for marking a live or
529
+ * in-progress value without adding any fixed element.
530
+ *
531
+ * Select the bar via `activeIndex`. Set `pulsePaused` to freeze it. Place
532
+ * AFTER `<BarDepthFront />` so the wave brightens on top of the glass.
533
+ *
534
+ * Performance: at most one clipped `<motion.rect>` with a single Y translate
535
+ * per frame (no per-frame paint of gradient stops, no SVG filters).
536
+ */
537
+ export function BarPulse({ dataKey, activeIndex, pulsePaused }) {
538
+ const { isLoaded } = useChartStable();
539
+ const { hoveredBarIndex } = useChartHover();
540
+ const entries = useBarDepthEntries(dataKey, activeIndex);
541
+ const idPrefix = useId().replace(/[^a-z0-9]/gi, "_");
542
+ const activeEntries = useMemo(() => entries.filter((e) => e.isActive), [entries]);
543
+ if (activeEntries.length === 0 || pulsePaused) {
544
+ return null;
545
+ }
546
+ // Hold the wave until bars finish growing — the silhouette clip is computed
547
+ // at the final geometry, so painting it mid-grow would reveal a wave inside
548
+ // an area the bar hasn't reached yet.
549
+ if (!isLoaded) {
550
+ return null;
551
+ }
552
+ return (_jsxs("g", { className: "bar-pulse", pointerEvents: "none", children: [_jsx("defs", { children: activeEntries.flatMap((e) => {
553
+ const safeId = e.label.replace(/[^a-z0-9]/gi, "_");
554
+ const clipId = `bar-pulse-clip-${idPrefix}-${safeId}`;
555
+ const gradId = `bar-pulse-grad-${idPrefix}-${safeId}`;
556
+ return [
557
+ _jsx("clipPath", { id: clipId, children: _jsx("path", { d: buildBarSilhouettePath(e) }) }, `clip-${safeId}`),
558
+ _jsxs("linearGradient", { id: gradId, x1: "0", x2: "0", y1: "1", y2: "0", children: [_jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "0" }), _jsx("stop", { offset: "10%", stopColor: "white", stopOpacity: "0" }), _jsx("stop", { offset: "22%", stopColor: "white", stopOpacity: PULSE_WAVE_PEAK_OPACITY * 0.18 }), _jsx("stop", { offset: "34%", stopColor: "white", stopOpacity: PULSE_WAVE_PEAK_OPACITY * 0.5 }), _jsx("stop", { offset: "44%", stopColor: "white", stopOpacity: PULSE_WAVE_PEAK_OPACITY * 0.85 }), _jsx("stop", { offset: "50%", stopColor: "white", stopOpacity: PULSE_WAVE_PEAK_OPACITY }), _jsx("stop", { offset: "56%", stopColor: "white", stopOpacity: PULSE_WAVE_PEAK_OPACITY * 0.85 }), _jsx("stop", { offset: "66%", stopColor: "white", stopOpacity: PULSE_WAVE_PEAK_OPACITY * 0.5 }), _jsx("stop", { offset: "78%", stopColor: "white", stopOpacity: PULSE_WAVE_PEAK_OPACITY * 0.18 }), _jsx("stop", { offset: "90%", stopColor: "white", stopOpacity: "0" }), _jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })] }, `grad-${safeId}`),
559
+ ];
560
+ }) }), activeEntries.map((e) => {
561
+ const safeId = e.label.replace(/[^a-z0-9]/gi, "_");
562
+ const clipId = `bar-pulse-clip-${idPrefix}-${safeId}`;
563
+ const gradId = `bar-pulse-grad-${idPrefix}-${safeId}`;
564
+ const waveHeight = Math.max(e.barHeight * PULSE_WAVE_HEIGHT_RATIO, PULSE_WAVE_HEIGHT_MIN_PX);
565
+ // Travel always flows root → tip. Positive bars sweep up (root =
566
+ // bottomY); negative bars sweep down (root = topY, the baseline). The
567
+ // gradient is symmetric, so reversing the endpoints reverses direction.
568
+ const yAboveLid = e.topY - e.perspectiveRise - waveHeight;
569
+ const yBelowFloor = e.bottomY;
570
+ const yStart = e.isNegative ? yAboveLid : yBelowFloor;
571
+ const yEnd = e.isNegative ? yBelowFloor : yAboveLid;
572
+ const isFaded = hoveredBarIndex != null && hoveredBarIndex !== e.dataIndex;
573
+ return (_jsx(motion.g, { animate: { opacity: isFaded ? BAR_FADED_OPACITY : 1 }, clipPath: `url(#${clipId})`, initial: false, transition: BAR_HOVER_TRANSITION, children: _jsx(motion.rect, { animate: { y: yEnd }, fill: `url(#${gradId})`, height: waveHeight, initial: { y: yStart }, transition: {
574
+ duration: PULSE_WAVE_DURATION_S,
575
+ ease: "easeInOut",
576
+ repeat: Number.POSITIVE_INFINITY,
577
+ repeatType: "loop",
578
+ },
579
+ // Span wide enough to cover the bar plus its depth on either
580
+ // side; the clipPath crops anything outside the silhouette.
581
+ width: e.bandWidth + 2 * e.depth + 2, x: e.bandX - e.depth - 1 }) }, e.label));
582
+ })] }));
583
+ }
584
+ BarPulse.displayName = "BarPulse";
585
+ BarPulse.__isBarDepthLayer = true;
586
+ //# sourceMappingURL=bar-depth.js.map
@@ -0,0 +1,28 @@
1
+ export interface SquareColumnLayout {
2
+ /** Number of squares in the column */
3
+ count: number;
4
+ /** Top-left Y of each square, bottom square first (relative to bar top at 0) */
5
+ positions: number[];
6
+ /** Quantized column height in pixels */
7
+ columnHeight: number;
8
+ squareSize: number;
9
+ /** Effective gap between squares (may differ when fit mode redistributes) */
10
+ gap: number;
11
+ }
12
+ export interface SquareColumnInput {
13
+ /** Raw bar length in pixels (baseline − value) */
14
+ barLengthPx: number;
15
+ /** Square width/height — typically equals bar width */
16
+ squareSize: number;
17
+ /** Gap between stacked squares in pixels */
18
+ gap: number;
19
+ /** When true, redistribute gap so column height matches barLengthPx exactly */
20
+ fit?: boolean;
21
+ }
22
+ /** Quantize bar length into a stack of square cells. */
23
+ export declare function computeSquareColumn({ barLengthPx, squareSize, gap, fit, }: SquareColumnInput): SquareColumnLayout;
24
+ /** Y center of the topmost square in a vertical column. */
25
+ export declare function topSquareCenterY({ baselineY, barLengthPx, squareSize, gap, fit, }: SquareColumnInput & {
26
+ baselineY: number;
27
+ }): number;
28
+ //# sourceMappingURL=bar-squares-layout.d.ts.map
@@ -0,0 +1,47 @@
1
+ /** Quantize bar length into a stack of square cells. */
2
+ export function computeSquareColumn({ barLengthPx, squareSize, gap, fit = false, }) {
3
+ if (barLengthPx <= 0 || squareSize <= 0) {
4
+ return { count: 0, positions: [], columnHeight: 0, squareSize, gap };
5
+ }
6
+ if (fit) {
7
+ const count = Math.max(1, Math.floor((barLengthPx + gap) / (squareSize + gap)));
8
+ const effectiveGap = count > 1 ? Math.max(0, (barLengthPx - count * squareSize) / (count - 1)) : 0;
9
+ const step = squareSize + effectiveGap;
10
+ const columnHeight = barLengthPx;
11
+ const positions = [];
12
+ for (let i = 0; i < count; i++) {
13
+ positions.push(columnHeight - squareSize - i * step);
14
+ }
15
+ return {
16
+ count,
17
+ positions,
18
+ columnHeight,
19
+ squareSize,
20
+ gap: effectiveGap,
21
+ };
22
+ }
23
+ const step = squareSize + gap;
24
+ const count = Math.max(1, Math.round(barLengthPx / step));
25
+ const columnHeight = count * squareSize + Math.max(0, count - 1) * gap;
26
+ const positions = [];
27
+ for (let i = 0; i < count; i++) {
28
+ const offsetFromBottom = i * step;
29
+ positions.push(columnHeight - squareSize - offsetFromBottom);
30
+ }
31
+ return { count, positions, columnHeight, squareSize, gap };
32
+ }
33
+ /** Y center of the topmost square in a vertical column. */
34
+ export function topSquareCenterY({ baselineY, barLengthPx, squareSize, gap, fit = false, }) {
35
+ const { count, squareSize: size, columnHeight, } = computeSquareColumn({
36
+ barLengthPx,
37
+ squareSize,
38
+ gap,
39
+ fit,
40
+ });
41
+ if (count === 0) {
42
+ return baselineY;
43
+ }
44
+ const topY = baselineY - columnHeight;
45
+ return topY + size / 2;
46
+ }
47
+ //# sourceMappingURL=bar-squares-layout.js.map