@adminiumjs/charts 0.1.0-rc.1

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 (327) hide show
  1. package/LICENSE +661 -0
  2. package/dist/components/AnomalyChart.d.ts +30 -0
  3. package/dist/components/AnomalyChart.d.ts.map +1 -0
  4. package/dist/components/AnomalyChart.js +32 -0
  5. package/dist/components/AnomalyChart.js.map +1 -0
  6. package/dist/components/BarChart.d.ts +33 -0
  7. package/dist/components/BarChart.d.ts.map +1 -0
  8. package/dist/components/BarChart.js +40 -0
  9. package/dist/components/BarChart.js.map +1 -0
  10. package/dist/components/BoxPlotChart.d.ts +23 -0
  11. package/dist/components/BoxPlotChart.d.ts.map +1 -0
  12. package/dist/components/BoxPlotChart.js +24 -0
  13. package/dist/components/BoxPlotChart.js.map +1 -0
  14. package/dist/components/BulletChart.d.ts +27 -0
  15. package/dist/components/BulletChart.d.ts.map +1 -0
  16. package/dist/components/BulletChart.js +24 -0
  17. package/dist/components/BulletChart.js.map +1 -0
  18. package/dist/components/BumpChart.d.ts +27 -0
  19. package/dist/components/BumpChart.d.ts.map +1 -0
  20. package/dist/components/BumpChart.js +17 -0
  21. package/dist/components/BumpChart.js.map +1 -0
  22. package/dist/components/CandlestickChart.d.ts +26 -0
  23. package/dist/components/CandlestickChart.d.ts.map +1 -0
  24. package/dist/components/CandlestickChart.js +22 -0
  25. package/dist/components/CandlestickChart.js.map +1 -0
  26. package/dist/components/ChartSurface.d.ts +52 -0
  27. package/dist/components/ChartSurface.d.ts.map +1 -0
  28. package/dist/components/ChartSurface.js +15 -0
  29. package/dist/components/ChartSurface.js.map +1 -0
  30. package/dist/components/Chord.d.ts +30 -0
  31. package/dist/components/Chord.d.ts.map +1 -0
  32. package/dist/components/Chord.js +14 -0
  33. package/dist/components/Chord.js.map +1 -0
  34. package/dist/components/ChoroplethGridChart.d.ts +32 -0
  35. package/dist/components/ChoroplethGridChart.d.ts.map +1 -0
  36. package/dist/components/ChoroplethGridChart.js +15 -0
  37. package/dist/components/ChoroplethGridChart.js.map +1 -0
  38. package/dist/components/CohortMatrixChart.d.ts +30 -0
  39. package/dist/components/CohortMatrixChart.d.ts.map +1 -0
  40. package/dist/components/CohortMatrixChart.js +13 -0
  41. package/dist/components/CohortMatrixChart.js.map +1 -0
  42. package/dist/components/CorrelationMatrixChart.d.ts +24 -0
  43. package/dist/components/CorrelationMatrixChart.d.ts.map +1 -0
  44. package/dist/components/CorrelationMatrixChart.js +29 -0
  45. package/dist/components/CorrelationMatrixChart.js.map +1 -0
  46. package/dist/components/DonutChart.d.ts +31 -0
  47. package/dist/components/DonutChart.d.ts.map +1 -0
  48. package/dist/components/DonutChart.js +19 -0
  49. package/dist/components/DonutChart.js.map +1 -0
  50. package/dist/components/ForecastChart.d.ts +37 -0
  51. package/dist/components/ForecastChart.d.ts.map +1 -0
  52. package/dist/components/ForecastChart.js +39 -0
  53. package/dist/components/ForecastChart.js.map +1 -0
  54. package/dist/components/Funnel.d.ts +27 -0
  55. package/dist/components/Funnel.d.ts.map +1 -0
  56. package/dist/components/Funnel.js +25 -0
  57. package/dist/components/Funnel.js.map +1 -0
  58. package/dist/components/HeatCalendarChart.d.ts +39 -0
  59. package/dist/components/HeatCalendarChart.d.ts.map +1 -0
  60. package/dist/components/HeatCalendarChart.js +37 -0
  61. package/dist/components/HeatCalendarChart.js.map +1 -0
  62. package/dist/components/HeatMonthChart.d.ts +30 -0
  63. package/dist/components/HeatMonthChart.d.ts.map +1 -0
  64. package/dist/components/HeatMonthChart.js +14 -0
  65. package/dist/components/HeatMonthChart.js.map +1 -0
  66. package/dist/components/HexbinChart.d.ts +22 -0
  67. package/dist/components/HexbinChart.d.ts.map +1 -0
  68. package/dist/components/HexbinChart.js +31 -0
  69. package/dist/components/HexbinChart.js.map +1 -0
  70. package/dist/components/LineAreaChart.d.ts +26 -0
  71. package/dist/components/LineAreaChart.d.ts.map +1 -0
  72. package/dist/components/LineAreaChart.js +62 -0
  73. package/dist/components/LineAreaChart.js.map +1 -0
  74. package/dist/components/MarimekkoChart.d.ts +24 -0
  75. package/dist/components/MarimekkoChart.d.ts.map +1 -0
  76. package/dist/components/MarimekkoChart.js +20 -0
  77. package/dist/components/MarimekkoChart.js.map +1 -0
  78. package/dist/components/MultiLineChart.d.ts +36 -0
  79. package/dist/components/MultiLineChart.d.ts.map +1 -0
  80. package/dist/components/MultiLineChart.js +62 -0
  81. package/dist/components/MultiLineChart.js.map +1 -0
  82. package/dist/components/ParallelCoordinatesChart.d.ts +22 -0
  83. package/dist/components/ParallelCoordinatesChart.d.ts.map +1 -0
  84. package/dist/components/ParallelCoordinatesChart.js +16 -0
  85. package/dist/components/ParallelCoordinatesChart.js.map +1 -0
  86. package/dist/components/ParetoChart.d.ts +26 -0
  87. package/dist/components/ParetoChart.d.ts.map +1 -0
  88. package/dist/components/ParetoChart.js +26 -0
  89. package/dist/components/ParetoChart.js.map +1 -0
  90. package/dist/components/Radar.d.ts +27 -0
  91. package/dist/components/Radar.d.ts.map +1 -0
  92. package/dist/components/Radar.js +19 -0
  93. package/dist/components/Radar.js.map +1 -0
  94. package/dist/components/RadialBar.d.ts +25 -0
  95. package/dist/components/RadialBar.d.ts.map +1 -0
  96. package/dist/components/RadialBar.js +12 -0
  97. package/dist/components/RadialBar.js.map +1 -0
  98. package/dist/components/RankingBars.d.ts +27 -0
  99. package/dist/components/RankingBars.d.ts.map +1 -0
  100. package/dist/components/RankingBars.js +25 -0
  101. package/dist/components/RankingBars.js.map +1 -0
  102. package/dist/components/RidgelineChart.d.ts +23 -0
  103. package/dist/components/RidgelineChart.d.ts.map +1 -0
  104. package/dist/components/RidgelineChart.js +20 -0
  105. package/dist/components/RidgelineChart.js.map +1 -0
  106. package/dist/components/SankeyChart.d.ts +29 -0
  107. package/dist/components/SankeyChart.d.ts.map +1 -0
  108. package/dist/components/SankeyChart.js +21 -0
  109. package/dist/components/SankeyChart.js.map +1 -0
  110. package/dist/components/ScatterBubbleChart.d.ts +26 -0
  111. package/dist/components/ScatterBubbleChart.d.ts.map +1 -0
  112. package/dist/components/ScatterBubbleChart.js +31 -0
  113. package/dist/components/ScatterBubbleChart.js.map +1 -0
  114. package/dist/components/SlopeChart.d.ts +28 -0
  115. package/dist/components/SlopeChart.d.ts.map +1 -0
  116. package/dist/components/SlopeChart.js +18 -0
  117. package/dist/components/SlopeChart.js.map +1 -0
  118. package/dist/components/Sparkline.d.ts +15 -0
  119. package/dist/components/Sparkline.d.ts.map +1 -0
  120. package/dist/components/Sparkline.js +27 -0
  121. package/dist/components/Sparkline.js.map +1 -0
  122. package/dist/components/StackedBar100.d.ts +30 -0
  123. package/dist/components/StackedBar100.d.ts.map +1 -0
  124. package/dist/components/StackedBar100.js +21 -0
  125. package/dist/components/StackedBar100.js.map +1 -0
  126. package/dist/components/StreamChart.d.ts +23 -0
  127. package/dist/components/StreamChart.d.ts.map +1 -0
  128. package/dist/components/StreamChart.js +56 -0
  129. package/dist/components/StreamChart.js.map +1 -0
  130. package/dist/components/Sunburst.d.ts +24 -0
  131. package/dist/components/Sunburst.d.ts.map +1 -0
  132. package/dist/components/Sunburst.js +13 -0
  133. package/dist/components/Sunburst.js.map +1 -0
  134. package/dist/components/TimelineLanesChart.d.ts +25 -0
  135. package/dist/components/TimelineLanesChart.d.ts.map +1 -0
  136. package/dist/components/TimelineLanesChart.js +41 -0
  137. package/dist/components/TimelineLanesChart.js.map +1 -0
  138. package/dist/components/Treemap.d.ts +28 -0
  139. package/dist/components/Treemap.d.ts.map +1 -0
  140. package/dist/components/Treemap.js +22 -0
  141. package/dist/components/Treemap.js.map +1 -0
  142. package/dist/components/ViolinChart.d.ts +22 -0
  143. package/dist/components/ViolinChart.d.ts.map +1 -0
  144. package/dist/components/ViolinChart.js +21 -0
  145. package/dist/components/ViolinChart.js.map +1 -0
  146. package/dist/components/WaterfallChart.d.ts +23 -0
  147. package/dist/components/WaterfallChart.d.ts.map +1 -0
  148. package/dist/components/WaterfallChart.js +29 -0
  149. package/dist/components/WaterfallChart.js.map +1 -0
  150. package/dist/components/WordCloud.d.ts +24 -0
  151. package/dist/components/WordCloud.d.ts.map +1 -0
  152. package/dist/components/WordCloud.js +22 -0
  153. package/dist/components/WordCloud.js.map +1 -0
  154. package/dist/demo/barsRanking.d.ts +26 -0
  155. package/dist/demo/barsRanking.d.ts.map +1 -0
  156. package/dist/demo/barsRanking.js +80 -0
  157. package/dist/demo/barsRanking.js.map +1 -0
  158. package/dist/demo/generators.d.ts +44 -0
  159. package/dist/demo/generators.d.ts.map +1 -0
  160. package/dist/demo/generators.js +72 -0
  161. package/dist/demo/generators.js.map +1 -0
  162. package/dist/demo/mulberry32.d.ts +10 -0
  163. package/dist/demo/mulberry32.d.ts.map +1 -0
  164. package/dist/demo/mulberry32.js +26 -0
  165. package/dist/demo/mulberry32.js.map +1 -0
  166. package/dist/geometry/anomaly.d.ts +22 -0
  167. package/dist/geometry/anomaly.d.ts.map +1 -0
  168. package/dist/geometry/anomaly.js +52 -0
  169. package/dist/geometry/anomaly.js.map +1 -0
  170. package/dist/geometry/bars.d.ts +46 -0
  171. package/dist/geometry/bars.d.ts.map +1 -0
  172. package/dist/geometry/bars.js +68 -0
  173. package/dist/geometry/bars.js.map +1 -0
  174. package/dist/geometry/bullet.d.ts +53 -0
  175. package/dist/geometry/bullet.d.ts.map +1 -0
  176. package/dist/geometry/bullet.js +67 -0
  177. package/dist/geometry/bullet.js.map +1 -0
  178. package/dist/geometry/bump.d.ts +42 -0
  179. package/dist/geometry/bump.d.ts.map +1 -0
  180. package/dist/geometry/bump.js +29 -0
  181. package/dist/geometry/bump.js.map +1 -0
  182. package/dist/geometry/candles.d.ts +39 -0
  183. package/dist/geometry/candles.d.ts.map +1 -0
  184. package/dist/geometry/candles.js +42 -0
  185. package/dist/geometry/candles.js.map +1 -0
  186. package/dist/geometry/chord.d.ts +53 -0
  187. package/dist/geometry/chord.d.ts.map +1 -0
  188. package/dist/geometry/chord.js +111 -0
  189. package/dist/geometry/chord.js.map +1 -0
  190. package/dist/geometry/choropleth.d.ts +58 -0
  191. package/dist/geometry/choropleth.d.ts.map +1 -0
  192. package/dist/geometry/choropleth.js +101 -0
  193. package/dist/geometry/choropleth.js.map +1 -0
  194. package/dist/geometry/cohort.d.ts +54 -0
  195. package/dist/geometry/cohort.d.ts.map +1 -0
  196. package/dist/geometry/cohort.js +70 -0
  197. package/dist/geometry/cohort.js.map +1 -0
  198. package/dist/geometry/correlation.d.ts +138 -0
  199. package/dist/geometry/correlation.d.ts.map +1 -0
  200. package/dist/geometry/correlation.js +161 -0
  201. package/dist/geometry/correlation.js.map +1 -0
  202. package/dist/geometry/distribution.d.ts +115 -0
  203. package/dist/geometry/distribution.d.ts.map +1 -0
  204. package/dist/geometry/distribution.js +131 -0
  205. package/dist/geometry/distribution.js.map +1 -0
  206. package/dist/geometry/donut.d.ts +37 -0
  207. package/dist/geometry/donut.d.ts.map +1 -0
  208. package/dist/geometry/donut.js +46 -0
  209. package/dist/geometry/donut.js.map +1 -0
  210. package/dist/geometry/forecast.d.ts +30 -0
  211. package/dist/geometry/forecast.d.ts.map +1 -0
  212. package/dist/geometry/forecast.js +75 -0
  213. package/dist/geometry/forecast.js.map +1 -0
  214. package/dist/geometry/funnel.d.ts +37 -0
  215. package/dist/geometry/funnel.d.ts.map +1 -0
  216. package/dist/geometry/funnel.js +42 -0
  217. package/dist/geometry/funnel.js.map +1 -0
  218. package/dist/geometry/heat.d.ts +34 -0
  219. package/dist/geometry/heat.d.ts.map +1 -0
  220. package/dist/geometry/heat.js +50 -0
  221. package/dist/geometry/heat.js.map +1 -0
  222. package/dist/geometry/heatCalendar.d.ts +43 -0
  223. package/dist/geometry/heatCalendar.d.ts.map +1 -0
  224. package/dist/geometry/heatCalendar.js +82 -0
  225. package/dist/geometry/heatCalendar.js.map +1 -0
  226. package/dist/geometry/heatMonth.d.ts +47 -0
  227. package/dist/geometry/heatMonth.d.ts.map +1 -0
  228. package/dist/geometry/heatMonth.js +72 -0
  229. package/dist/geometry/heatMonth.js.map +1 -0
  230. package/dist/geometry/lineArea.d.ts +17 -0
  231. package/dist/geometry/lineArea.d.ts.map +1 -0
  232. package/dist/geometry/lineArea.js +37 -0
  233. package/dist/geometry/lineArea.js.map +1 -0
  234. package/dist/geometry/marimekko.d.ts +43 -0
  235. package/dist/geometry/marimekko.d.ts.map +1 -0
  236. package/dist/geometry/marimekko.js +45 -0
  237. package/dist/geometry/marimekko.js.map +1 -0
  238. package/dist/geometry/multiLine.d.ts +19 -0
  239. package/dist/geometry/multiLine.d.ts.map +1 -0
  240. package/dist/geometry/multiLine.js +25 -0
  241. package/dist/geometry/multiLine.js.map +1 -0
  242. package/dist/geometry/pareto.d.ts +44 -0
  243. package/dist/geometry/pareto.d.ts.map +1 -0
  244. package/dist/geometry/pareto.js +65 -0
  245. package/dist/geometry/pareto.js.map +1 -0
  246. package/dist/geometry/radar.d.ts +60 -0
  247. package/dist/geometry/radar.d.ts.map +1 -0
  248. package/dist/geometry/radar.js +67 -0
  249. package/dist/geometry/radar.js.map +1 -0
  250. package/dist/geometry/radialBar.d.ts +31 -0
  251. package/dist/geometry/radialBar.d.ts.map +1 -0
  252. package/dist/geometry/radialBar.js +53 -0
  253. package/dist/geometry/radialBar.js.map +1 -0
  254. package/dist/geometry/ranking.d.ts +48 -0
  255. package/dist/geometry/ranking.d.ts.map +1 -0
  256. package/dist/geometry/ranking.js +42 -0
  257. package/dist/geometry/ranking.js.map +1 -0
  258. package/dist/geometry/sankey.d.ts +60 -0
  259. package/dist/geometry/sankey.d.ts.map +1 -0
  260. package/dist/geometry/sankey.js +130 -0
  261. package/dist/geometry/sankey.js.map +1 -0
  262. package/dist/geometry/scales.d.ts +14 -0
  263. package/dist/geometry/scales.d.ts.map +1 -0
  264. package/dist/geometry/scales.js +33 -0
  265. package/dist/geometry/scales.js.map +1 -0
  266. package/dist/geometry/slope.d.ts +34 -0
  267. package/dist/geometry/slope.d.ts.map +1 -0
  268. package/dist/geometry/slope.js +44 -0
  269. package/dist/geometry/slope.js.map +1 -0
  270. package/dist/geometry/sparkline.d.ts +20 -0
  271. package/dist/geometry/sparkline.d.ts.map +1 -0
  272. package/dist/geometry/sparkline.js +43 -0
  273. package/dist/geometry/sparkline.js.map +1 -0
  274. package/dist/geometry/stacked100.d.ts +33 -0
  275. package/dist/geometry/stacked100.d.ts.map +1 -0
  276. package/dist/geometry/stacked100.js +34 -0
  277. package/dist/geometry/stacked100.js.map +1 -0
  278. package/dist/geometry/streamStack.d.ts +32 -0
  279. package/dist/geometry/streamStack.d.ts.map +1 -0
  280. package/dist/geometry/streamStack.js +56 -0
  281. package/dist/geometry/streamStack.js.map +1 -0
  282. package/dist/geometry/sunburst.d.ts +37 -0
  283. package/dist/geometry/sunburst.d.ts.map +1 -0
  284. package/dist/geometry/sunburst.js +84 -0
  285. package/dist/geometry/sunburst.js.map +1 -0
  286. package/dist/geometry/timelineLanes.d.ts +46 -0
  287. package/dist/geometry/timelineLanes.d.ts.map +1 -0
  288. package/dist/geometry/timelineLanes.js +52 -0
  289. package/dist/geometry/timelineLanes.js.map +1 -0
  290. package/dist/geometry/treemap.d.ts +42 -0
  291. package/dist/geometry/treemap.d.ts.map +1 -0
  292. package/dist/geometry/treemap.js +134 -0
  293. package/dist/geometry/treemap.js.map +1 -0
  294. package/dist/geometry/waterfall.d.ts +40 -0
  295. package/dist/geometry/waterfall.d.ts.map +1 -0
  296. package/dist/geometry/waterfall.js +80 -0
  297. package/dist/geometry/waterfall.js.map +1 -0
  298. package/dist/geometry/wordcloud.d.ts +46 -0
  299. package/dist/geometry/wordcloud.d.ts.map +1 -0
  300. package/dist/geometry/wordcloud.js +79 -0
  301. package/dist/geometry/wordcloud.js.map +1 -0
  302. package/dist/hooks/useChartSize.d.ts +6 -0
  303. package/dist/hooks/useChartSize.d.ts.map +1 -0
  304. package/dist/hooks/useChartSize.js +32 -0
  305. package/dist/hooks/useChartSize.js.map +1 -0
  306. package/dist/hooks/useMountAnimation.d.ts +4 -0
  307. package/dist/hooks/useMountAnimation.d.ts.map +1 -0
  308. package/dist/hooks/useMountAnimation.js +40 -0
  309. package/dist/hooks/useMountAnimation.js.map +1 -0
  310. package/dist/hooks/useRtl.d.ts +7 -0
  311. package/dist/hooks/useRtl.d.ts.map +1 -0
  312. package/dist/hooks/useRtl.js +18 -0
  313. package/dist/hooks/useRtl.js.map +1 -0
  314. package/dist/index.d.ts +110 -0
  315. package/dist/index.d.ts.map +1 -0
  316. package/dist/index.js +79 -0
  317. package/dist/index.js.map +1 -0
  318. package/dist/utils/format.d.ts +5 -0
  319. package/dist/utils/format.d.ts.map +1 -0
  320. package/dist/utils/format.js +24 -0
  321. package/dist/utils/format.js.map +1 -0
  322. package/dist/utils/stats.d.ts +23 -0
  323. package/dist/utils/stats.d.ts.map +1 -0
  324. package/dist/utils/stats.js +82 -0
  325. package/dist/utils/stats.js.map +1 -0
  326. package/package.json +36 -0
  327. package/src/styles.css +205 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `chart-radial-bar` primitive (research/widget-registry.md §2): concentric
3
+ * progress rings (≤4 categories), each a stroke sweep of its percent, with a
4
+ * legend of colored dots + mono percents. Rings never mirror in RTL (rotation
5
+ * is direction-neutral, §7.4) — only the legend flips via flex + logical CSS.
6
+ * Colors are tokens only; geometry is pure (04 §7.1).
7
+ */
8
+ import type { ReactNode } from 'react';
9
+ import type { RadialBarInput } from '../geometry/radialBar.js';
10
+ import type { ChartDir } from '../hooks/useRtl.js';
11
+ import type { ChartLabels } from './ChartSurface.js';
12
+ export interface RadialBarChartProps {
13
+ data: readonly RadialBarInput[];
14
+ labels: ChartLabels;
15
+ /** Ring diameter in px (default 168). */
16
+ size?: number;
17
+ thickness?: number;
18
+ showLegend?: boolean;
19
+ format?: (value: number) => string;
20
+ dir?: ChartDir;
21
+ a11yFallback?: ReactNode;
22
+ className?: string;
23
+ }
24
+ export declare function RadialBar({ data, labels, size, thickness, showLegend, format, dir, a11yFallback, className, }: RadialBarChartProps): import("react").JSX.Element;
25
+ //# sourceMappingURL=RadialBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadialBar.d.ts","sourceRoot":"","sources":["../../src/components/RadialBar.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,IAAU,EACV,SAAc,EACd,UAAiB,EACjB,MAAsB,EACtB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,mBAAmB,+BA8CrB"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { radialBarRings } from '../geometry/radialBar.js';
3
+ import { useChartDir } from '../hooks/useRtl.js';
4
+ import { useMountAnimation } from '../hooks/useMountAnimation.js';
5
+ const defaultFormat = (value) => `${Math.round(value)}%`;
6
+ export function RadialBar({ data, labels, size = 168, thickness = 12, showLegend = true, format = defaultFormat, dir, a11yFallback, className, }) {
7
+ const resolvedDir = useChartDir(dir);
8
+ const mounted = useMountAnimation();
9
+ const rings = radialBarRings(data, { size, thickness });
10
+ return (_jsxs("div", { className: className === undefined ? 'adm-donut' : `adm-donut ${className}`, ...(dir !== undefined ? { dir: resolvedDir } : {}), "data-export-node": "", children: [_jsxs("svg", { role: "img", "aria-label": labels.label, width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [labels.description !== undefined && _jsx("desc", { children: labels.description }), _jsx("g", { transform: `translate(${size / 2}, ${size / 2})`, children: rings.map((ring, i) => (_jsxs("g", { "data-ring": ring.label, children: [_jsx("path", { d: ring.trackPath, fill: "var(--border)", opacity: 0.4 }), ring.valuePath !== '' && (_jsx("path", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0', '--adm-stagger': `${i * 90}ms` }, d: ring.valuePath, fill: ring.colorVar, "data-value": "" }))] }, ring.label))) })] }), showLegend && (_jsx("ul", { className: "adm-donut-legend", children: rings.map((ring) => (_jsxs("li", { className: "adm-donut-legend-row", children: [_jsx("span", { className: "adm-donut-legend-dot", style: { '--adm-dot': ring.colorVar }, "aria-hidden": "true" }), _jsx("span", { children: ring.label }), _jsx("span", { className: "adm-donut-legend-value", children: format(ring.value) })] }, ring.label))) })), a11yFallback !== undefined && _jsx("div", { className: "adm-chart-sr", children: a11yFallback })] }));
11
+ }
12
+ //# sourceMappingURL=RadialBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadialBar.js","sourceRoot":"","sources":["../../src/components/RadialBar.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAgBlE,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAEzE,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,IAAI,GAAG,GAAG,EACV,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,IAAI,EACjB,MAAM,GAAG,aAAa,EACtB,GAAG,EACH,YAAY,EACZ,SAAS,GACW;IACpB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAExD,OAAO,CACL,eACE,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,SAAS,EAAE,KACvE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,sBAClC,EAAE,aAEnB,eAAK,IAAI,EAAC,KAAK,gBAAa,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,IAAI,EAAE,aAChG,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI,yBAAO,MAAM,CAAC,WAAW,GAAQ,EACtE,YAAG,SAAS,EAAE,aAAa,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,YAChD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,0BAA+B,IAAI,CAAC,KAAK,aACvC,eAAM,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAC,eAAe,EAAC,OAAO,EAAE,GAAG,GAAI,EAC7D,IAAI,CAAC,SAAS,KAAK,EAAE,IAAI,CACxB,eACE,SAAS,EAAC,gBAAgB,EAC1B,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAC5E,CAAC,EAAE,IAAI,CAAC,SAAS,EACjB,IAAI,EAAE,IAAI,CAAC,QAAQ,gBACR,EAAE,GACb,CACH,KAVK,IAAI,CAAC,KAAK,CAWd,CACL,CAAC,GACA,IACA,EAEL,UAAU,IAAI,CACb,aAAI,SAAS,EAAC,kBAAkB,YAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,cAAqB,SAAS,EAAC,sBAAsB,aACnD,eAAM,SAAS,EAAC,sBAAsB,EAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAc,MAAM,GAAG,EACnG,yBAAO,IAAI,CAAC,KAAK,GAAQ,EACzB,eAAM,SAAS,EAAC,wBAAwB,YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAQ,KAH7D,IAAI,CAAC,KAAK,CAId,CACN,CAAC,GACC,CACN,EAEA,YAAY,KAAK,SAAS,IAAI,cAAK,SAAS,EAAC,cAAc,YAAE,YAAY,GAAO,IAC7E,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `chart-ranking-bars` primitive (research/widget-registry.md §2): label +
3
+ * proportional horizontal bar (leader at full accent, the rest dimmed) + mono
4
+ * value. Composed from ChartSurface + pure `layoutRanking` geometry. Token-only
5
+ * colors, RTL-mirrored value axis, mount fade with reduced-motion fallback.
6
+ */
7
+ import type { ReactNode } from 'react';
8
+ import type { RankingInput } from '../geometry/ranking.js';
9
+ import type { ChartDir } from '../hooks/useRtl.js';
10
+ import type { ChartLabels } from './ChartSurface.js';
11
+ export interface RankingBarsProps {
12
+ data: readonly RankingInput[];
13
+ labels: ChartLabels;
14
+ /** Top-N cap (annex `n`). */
15
+ max?: number;
16
+ height?: number;
17
+ /** Inline-start label gutter width, px (default 104). */
18
+ labelGutter?: number;
19
+ /** Inline-end value gutter width, px (default 52). */
20
+ valueGutter?: number;
21
+ formatValue?: (value: number) => string;
22
+ dir?: ChartDir;
23
+ a11yFallback?: ReactNode;
24
+ className?: string;
25
+ }
26
+ export declare function RankingBars({ data, labels, max, height, labelGutter, valueGutter, formatValue, dir, a11yFallback, className, }: RankingBarsProps): import("react").JSX.Element;
27
+ //# sourceMappingURL=RankingBars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingBars.d.ts","sourceRoot":"","sources":["../../src/components/RankingBars.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,GAAG,EACH,MAAY,EACZ,WAAiB,EACjB,WAAgB,EAChB,WAA2B,EAC3B,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,gBAAgB,+BAkElB"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { layoutRanking } from '../geometry/ranking.js';
3
+ import { formatCompact } from '../utils/format.js';
4
+ import { ChartSurface } from './ChartSurface.js';
5
+ export function RankingBars({ data, labels, max, height = 220, labelGutter = 104, valueGutter = 52, formatValue = formatCompact, dir, a11yFallback, className, }) {
6
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 4, bottom: 4, left: 2, right: 2 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
7
+ const trackWidth = Math.max(0, innerWidth - labelGutter - valueGutter);
8
+ if (data.length === 0 || trackWidth <= 0 || innerHeight <= 0)
9
+ return null;
10
+ const trackStart = rtl ? valueGutter : labelGutter;
11
+ const layout = layoutRanking(data, {
12
+ width: trackWidth,
13
+ height: innerHeight,
14
+ rtl,
15
+ ...(max !== undefined ? { max } : {}),
16
+ });
17
+ const labelEdge = rtl ? innerWidth : 0;
18
+ const valueEdge = rtl ? 0 : innerWidth;
19
+ return (_jsx("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.bars.map((bar) => {
20
+ const midY = bar.rowY + layout.rowHeight / 2 + 3;
21
+ return (_jsxs("g", { "data-rank": bar.index, children: [_jsx("rect", { x: trackStart + bar.x, y: bar.y, width: bar.width, height: bar.barHeight, rx: 3, fill: bar.isLeader ? 'var(--accent)' : 'var(--viz-ramp-3)', "data-leader": bar.isLeader ? '' : undefined }), _jsx("text", { className: "adm-chart-axis-label", x: labelEdge, y: midY, textAnchor: rtl ? 'end' : 'start', children: bar.label }), _jsx("text", { className: "adm-chart-num", x: valueEdge, y: midY, textAnchor: rtl ? 'start' : 'end', fontSize: 11, fontWeight: 700, fill: "var(--fg)", children: formatValue(bar.value) })] }, bar.label));
22
+ }) }));
23
+ } }));
24
+ }
25
+ //# sourceMappingURL=RankingBars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RankingBars.js","sourceRoot":"","sources":["../../src/components/RankingBars.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `chart-ridgeline` primitive (research/widget-registry.md §2): overlapping
3
+ * filled density ridges with decreasing alpha, one ridge per group (front row
4
+ * first). The value axis runs across the plot width and mirrors in RTL; group
5
+ * labels sit in the inline-start gutter. Token-only colors; fade-in on mount.
6
+ */
7
+ import type { ReactNode } from 'react';
8
+ import type { RidgeGroupInput } from '../geometry/distribution.js';
9
+ import type { ChartDir } from '../hooks/useRtl.js';
10
+ import type { ChartLabels } from './ChartSurface.js';
11
+ export interface RidgelineChartProps {
12
+ groups: readonly RidgeGroupInput[];
13
+ labels: ChartLabels;
14
+ height?: number;
15
+ /** Peak height as a multiple of the row step (annex `overlap`). */
16
+ overlap?: number;
17
+ showLabels?: boolean;
18
+ dir?: ChartDir;
19
+ a11yFallback?: ReactNode;
20
+ className?: string;
21
+ }
22
+ export declare function RidgelineChart({ groups, labels, height, overlap, showLabels, dir, a11yFallback, className, }: RidgelineChartProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=RidgelineChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RidgelineChart.d.ts","sourceRoot":"","sources":["../../src/components/RidgelineChart.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,MAAY,EACZ,OAAa,EACb,UAAiB,EACjB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,mBAAmB,+BA0DrB"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ridgelineLayout } from '../geometry/distribution.js';
3
+ import { ChartSurface } from './ChartSurface.js';
4
+ export function RidgelineChart({ groups, labels, height = 260, overlap = 1.5, showLabels = true, dir, a11yFallback, className, }) {
5
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 10, bottom: 8, left: 8, right: 8 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
6
+ if (groups.length === 0 || innerWidth <= 0 || innerHeight <= 0)
7
+ return null;
8
+ const layout = ridgelineLayout(groups, {
9
+ width: innerWidth,
10
+ height: innerHeight,
11
+ rtl,
12
+ overlap,
13
+ labelGutter: showLabels ? 52 : 8,
14
+ });
15
+ // Render back-to-front so nearer ridges overlap farther ones.
16
+ const ordered = [...layout.rows].reverse();
17
+ return (_jsx("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: ordered.map((row) => (_jsxs("g", { "data-ridge": row.label, children: [_jsx("path", { d: row.areaPath, fill: "var(--accent)", fillOpacity: row.alpha * 0.55, "data-ridge-area": "" }), _jsx("path", { d: row.linePath, fill: "none", stroke: "var(--viz-1)", strokeWidth: 1.5, strokeOpacity: row.alpha, "data-ridge-line": "" }), showLabels && (_jsx("text", { className: "adm-chart-axis-label", x: rtl ? innerWidth : 0, y: row.labelY, textAnchor: rtl ? 'end' : 'start', children: row.label }))] }, row.label))) }));
18
+ } }));
19
+ }
20
+ //# sourceMappingURL=RidgelineChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RidgelineChart.js","sourceRoot":"","sources":["../../src/components/RidgelineChart.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAejD,MAAM,UAAU,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,MAAM,GAAG,GAAG,EACZ,OAAO,GAAG,GAAG,EACb,UAAU,GAAG,IAAI,EACjB,GAAG,EACH,YAAY,EACZ,SAAS,GACW;IACpB,OAAO,CACL,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACV,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAClD,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YAEjD,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC5E,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE;gBACrC,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,WAAW;gBACnB,GAAG;gBACH,OAAO;gBACP,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACjC,CAAC,CAAC;YAEH,8DAA8D;YAC9D,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YAE3C,OAAO,CACL,YAAG,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,YACvE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACpB,2BAA+B,GAAG,CAAC,KAAK,aACtC,eACE,CAAC,EAAE,GAAG,CAAC,QAAQ,EACf,IAAI,EAAC,eAAe,EACpB,WAAW,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,qBACb,EAAE,GAClB,EACF,eACE,CAAC,EAAE,GAAG,CAAC,QAAQ,EACf,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,GAAG,EAChB,aAAa,EAAE,GAAG,CAAC,KAAK,qBACR,EAAE,GAClB,EACD,UAAU,IAAI,CACb,eACE,SAAS,EAAC,sBAAsB,EAChC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACvB,CAAC,EAAE,GAAG,CAAC,MAAM,EACb,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,YAEhC,GAAG,CAAC,KAAK,GACL,CACR,KAxBK,GAAG,CAAC,KAAK,CAyBb,CACL,CAAC,GACA,CACL,CAAC;QACJ,CAAC,GACY,CAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `chart-sankey` primitive (research/widget-registry.md §2): SVG bezier ribbons
3
+ * between layered node rects, source→target flows weighted by volume, per-flow
4
+ * tooltips. Responsive via ChartSurface. Token-only colors, mount fade with
5
+ * reduced-motion fallback, `data-export-node` raster marker (inherited from
6
+ * ChartSurface). Renders as an LTR island — the flow never mirrors in RTL
7
+ * (04 §7.4).
8
+ */
9
+ import type { ReactNode } from 'react';
10
+ import type { SankeyLinkInput, SankeyNodeInput } from '../geometry/sankey.js';
11
+ import type { ChartDir } from '../hooks/useRtl.js';
12
+ import type { ChartLabels } from './ChartSurface.js';
13
+ export interface SankeyChartProps {
14
+ nodes: readonly SankeyNodeInput[];
15
+ links: readonly SankeyLinkInput[];
16
+ labels: ChartLabels;
17
+ height?: number;
18
+ nodeWidth?: number;
19
+ nodePad?: number;
20
+ /** Show node labels beside each column (default true). */
21
+ showLabels?: boolean;
22
+ /** Format a link weight for its tooltip (default `${w}`). */
23
+ format?: (weight: number) => string;
24
+ dir?: ChartDir;
25
+ a11yFallback?: ReactNode;
26
+ className?: string;
27
+ }
28
+ export declare function SankeyChart({ nodes, links, labels, height, nodeWidth, nodePad, showLabels, format, dir, a11yFallback, className, }: SankeyChartProps): import("react").JSX.Element;
29
+ //# sourceMappingURL=SankeyChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SankeyChart.d.ts","sourceRoot":"","sources":["../../src/components/SankeyChart.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAY,EACZ,SAAc,EACd,OAAY,EACZ,UAAiB,EACjB,MAAe,EACf,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,gBAAgB,+BAsElB"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { sankeyLayout } from '../geometry/sankey.js';
3
+ import { ChartSurface } from './ChartSurface.js';
4
+ export function SankeyChart({ nodes, links, labels, height = 300, nodeWidth = 14, nodePad = 12, showLabels = true, format = String, dir, a11yFallback, className, }) {
5
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 10, bottom: 10, left: 6, right: 6 }, children: ({ innerWidth, innerHeight, mounted }) => {
6
+ if (nodes.length === 0 || innerWidth <= 0 || innerHeight <= 0)
7
+ return null;
8
+ const layout = sankeyLayout(nodes, links, {
9
+ width: innerWidth,
10
+ height: innerHeight,
11
+ nodeWidth,
12
+ nodePad,
13
+ });
14
+ const nodeById = new Map(layout.nodes.map((n) => [n.id, n]));
15
+ return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: [layout.links.map((link, i) => (_jsx("path", { d: link.path, fill: link.sourceColorVar, fillOpacity: 0.4, "data-sankey-link": "", children: _jsx("title", { children: `${nodeById.get(link.from)?.label ?? link.from} → ${nodeById.get(link.to)?.label ?? link.to}: ${format(link.weight)}` }) }, `${link.from}-${link.to}-${i}`))), layout.nodes.map((node) => {
16
+ const isLastLayer = node.layer === layout.layers - 1;
17
+ return (_jsxs("g", { children: [_jsx("rect", { x: node.x, y: node.y, width: node.w, height: node.h, rx: 2, fill: node.colorVar, "data-sankey-node": node.id, children: _jsx("title", { children: `${node.label}: ${format(node.value)}` }) }), showLabels && (_jsx("text", { className: "adm-chart-axis-label", x: isLastLayer ? node.x - 6 : node.x + node.w + 6, y: node.y + node.h / 2 + 3, textAnchor: isLastLayer ? 'end' : 'start', children: node.label }))] }, node.id));
18
+ })] }));
19
+ } }));
20
+ }
21
+ //# sourceMappingURL=SankeyChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SankeyChart.js","sourceRoot":"","sources":["../../src/components/SankeyChart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `chart-scatter-bubble` primitive (research/widget-registry.md §2): SVG scatter
3
+ * with an optional bubble-radius dimension, gridlines, a dashed least-squares
4
+ * trend line, and segment colors. The x value axis mirrors in RTL; y stays
5
+ * pixel-down. Token-only colors; fade-in on mount (radius/opacity settle to
6
+ * final state immediately under reduced motion).
7
+ */
8
+ import type { ReactNode } from 'react';
9
+ import type { ScatterPointInput } from '../geometry/correlation.js';
10
+ import type { ChartDir } from '../hooks/useRtl.js';
11
+ import type { ChartLabels } from './ChartSurface.js';
12
+ export declare function vizColorAt(index: number): string;
13
+ export interface ScatterBubbleChartProps {
14
+ points: readonly ScatterPointInput[];
15
+ labels: ChartLabels;
16
+ height?: number;
17
+ showAxis?: boolean;
18
+ trendLine?: boolean;
19
+ formatX?: (x: number) => string;
20
+ formatY?: (y: number) => string;
21
+ dir?: ChartDir;
22
+ a11yFallback?: ReactNode;
23
+ className?: string;
24
+ }
25
+ export declare function ScatterBubbleChart({ points, labels, height, showAxis, trendLine, formatX, formatY, dir, a11yFallback, className, }: ScatterBubbleChartProps): import("react").JSX.Element;
26
+ //# sourceMappingURL=ScatterBubbleChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScatterBubbleChart.d.ts","sourceRoot":"","sources":["../../src/components/ScatterBubbleChart.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAcrD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,MAAM,EACN,MAAY,EACZ,QAAe,EACf,SAAgB,EAChB,OAAuB,EACvB,OAAuB,EACvB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,uBAAuB,+BAsFzB"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { scatterLayout } from '../geometry/correlation.js';
3
+ import { formatCompact } from '../utils/format.js';
4
+ import { ChartSurface } from './ChartSurface.js';
5
+ /** Canonical 8-color viz palette (viz.css); series i → --viz-((i mod 8)+1). */
6
+ const VIZ_VARS = [
7
+ 'var(--viz-1)',
8
+ 'var(--viz-2)',
9
+ 'var(--viz-3)',
10
+ 'var(--viz-4)',
11
+ 'var(--viz-5)',
12
+ 'var(--viz-6)',
13
+ 'var(--viz-7)',
14
+ 'var(--viz-8)',
15
+ ];
16
+ export function vizColorAt(index) {
17
+ return VIZ_VARS[((index % VIZ_VARS.length) + VIZ_VARS.length) % VIZ_VARS.length];
18
+ }
19
+ export function ScatterBubbleChart({ points, labels, height = 280, showAxis = true, trendLine = true, formatX = formatCompact, formatY = formatCompact, dir, a11yFallback, className, }) {
20
+ const pad = { top: 10, bottom: showAxis ? 22 : 8, near: showAxis ? 40 : 8, far: 14 };
21
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: pad.top, bottom: pad.bottom, left: pad.near, right: pad.far }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
22
+ if (points.length === 0 || innerWidth <= 0 || innerHeight <= 0)
23
+ return null;
24
+ const layout = scatterLayout(points, { width: innerWidth, height: innerHeight, rtl, trendLine });
25
+ const segmentColor = (segment) => segment === undefined ? 'var(--viz-1)' : vizColorAt(layout.segments.indexOf(segment));
26
+ return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: [showAxis &&
27
+ layout.yTicks.map((tick) => (_jsxs("g", { children: [_jsx("line", { className: "adm-chart-gridline", x1: 0, x2: innerWidth, y1: layout.yFor(tick), y2: layout.yFor(tick) }), _jsx("text", { className: "adm-chart-axis-label adm-chart-num", x: rtl ? innerWidth + 6 : -6, y: layout.yFor(tick) + 3, textAnchor: rtl ? 'start' : 'end', children: formatY(tick) })] }, `y${tick}`))), showAxis &&
28
+ layout.xTicks.map((tick) => (_jsx("text", { className: "adm-chart-axis-label adm-chart-num", x: layout.xFor(tick), y: innerHeight + 15, textAnchor: "middle", children: formatX(tick) }, `x${tick}`))), trendLine && layout.trend !== null && (_jsx("line", { x1: layout.trend.x1, y1: layout.trend.y1, x2: layout.trend.x2, y2: layout.trend.y2, stroke: "var(--fg-subtle)", strokeWidth: 1.5, strokeDasharray: "5 4", "data-trend": "" })), layout.marks.map((mark) => (_jsx("circle", { cx: mark.cx, cy: mark.cy, r: mark.r, fill: segmentColor(mark.segment), fillOpacity: 0.72, stroke: "var(--surface)", strokeWidth: 1, "data-point-index": mark.index, ...(mark.segment !== undefined ? { 'data-segment': mark.segment } : {}) }, mark.index)))] }));
29
+ } }));
30
+ }
31
+ //# sourceMappingURL=ScatterBubbleChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScatterBubbleChart.js","sourceRoot":"","sources":["../../src/components/ScatterBubbleChart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `chart-slope` primitive (research/widget-registry.md §2): two period axes
3
+ * (A → B) with one connecting line per record, colored pos/danger by direction,
4
+ * and end labels. Composed from ChartSurface + pure `layoutSlope` geometry
5
+ * (deterministic two-point paths). Token-only colors; the two period columns
6
+ * are categorical and mirror in RTL; lines fade in on mount.
7
+ */
8
+ import type { ReactNode } from 'react';
9
+ import type { SlopeInput } from '../geometry/slope.js';
10
+ import type { ChartDir } from '../hooks/useRtl.js';
11
+ import type { ChartLabels } from './ChartSurface.js';
12
+ export interface SlopeChartProps {
13
+ data: readonly SlopeInput[];
14
+ labels: ChartLabels;
15
+ height?: number;
16
+ /** Period axis captions [A, B] (annex `periodLabels`). */
17
+ periodLabels?: readonly [string, string];
18
+ /** Inline-start label gutter width, px (default 84). */
19
+ labelGutter?: number;
20
+ /** Inline-end value gutter width, px (default 56). */
21
+ valueGutter?: number;
22
+ formatValue?: (value: number) => string;
23
+ dir?: ChartDir;
24
+ a11yFallback?: ReactNode;
25
+ className?: string;
26
+ }
27
+ export declare function SlopeChart({ data, labels, height, periodLabels, labelGutter, valueGutter, formatValue, dir, a11yFallback, className, }: SlopeChartProps): import("react").JSX.Element;
28
+ //# sourceMappingURL=SlopeChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlopeChart.d.ts","sourceRoot":"","sources":["../../src/components/SlopeChart.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,MAAM,EACN,MAAY,EACZ,YAAY,EACZ,WAAgB,EAChB,WAAgB,EAChB,WAA2B,EAC3B,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,eAAe,+BAwEjB"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { layoutSlope } from '../geometry/slope.js';
3
+ import { formatCompact } from '../utils/format.js';
4
+ import { ChartSurface } from './ChartSurface.js';
5
+ export function SlopeChart({ data, labels, height = 260, periodLabels, labelGutter = 84, valueGutter = 56, formatValue = formatCompact, dir, a11yFallback, className, }) {
6
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 18, bottom: 8, left: labelGutter, right: valueGutter }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
7
+ if (data.length === 0 || innerWidth <= 0 || innerHeight <= 0)
8
+ return null;
9
+ const layout = layoutSlope(data, { width: innerWidth, height: innerHeight, rtl });
10
+ const captionA = periodLabels?.[0];
11
+ const captionB = periodLabels?.[1];
12
+ return (_jsxs("g", { children: [_jsx("line", { x1: layout.xA, x2: layout.xA, y1: 0, y2: innerHeight, stroke: "var(--border)", strokeWidth: 1 }), _jsx("line", { x1: layout.xB, x2: layout.xB, y1: 0, y2: innerHeight, stroke: "var(--border)", strokeWidth: 1 }), captionA !== undefined && (_jsx("text", { className: "adm-chart-axis-label", x: layout.xA, y: -6, textAnchor: "middle", children: captionA })), captionB !== undefined && (_jsx("text", { className: "adm-chart-axis-label", x: layout.xB, y: -6, textAnchor: "middle", children: captionB })), _jsx("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.lines.map((slope) => {
13
+ const stroke = slope.rising ? 'var(--pos)' : 'var(--danger)';
14
+ return (_jsxs("g", { "data-slope": slope.index, "data-rising": slope.rising ? '' : undefined, children: [slope.path !== null && (_jsx("path", { d: slope.path, fill: "none", stroke: stroke, strokeWidth: 2, strokeLinecap: "round" })), _jsx("circle", { cx: slope.xA, cy: slope.yA, r: 3, fill: stroke }), _jsx("circle", { cx: slope.xB, cy: slope.yB, r: 3, fill: stroke }), _jsx("text", { className: "adm-chart-axis-label", x: slope.xA + (rtl ? 8 : -8), y: slope.yA + 3, textAnchor: rtl ? 'start' : 'end', children: slope.label }), _jsx("text", { className: "adm-chart-num", x: slope.xB + (rtl ? -8 : 8), y: slope.yB + 3, textAnchor: rtl ? 'end' : 'start', fontSize: 10, fontWeight: 700, fill: stroke, children: formatValue(slope.b) })] }, slope.label));
15
+ }) })] }));
16
+ } }));
17
+ }
18
+ //# sourceMappingURL=SlopeChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlopeChart.js","sourceRoot":"","sources":["../../src/components/SlopeChart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type SparklineTone = 'accent' | 'positive' | 'danger' | 'muted';
2
+ export interface SparklineProps {
3
+ data: readonly number[];
4
+ variant?: 'bar' | 'line';
5
+ width?: number;
6
+ height?: number;
7
+ /** Full-tone last bar/point (default true). */
8
+ emphasisLast?: boolean;
9
+ tone?: SparklineTone;
10
+ /** Accessible name. Omitted → the sparkline is decorative (aria-hidden). */
11
+ label?: string;
12
+ className?: string;
13
+ }
14
+ export declare function Sparkline({ data, variant, width, height, emphasisLast, tone, label, className, }: SparklineProps): import("react").JSX.Element;
15
+ //# sourceMappingURL=Sparkline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sparkline.d.ts","sourceRoot":"","sources":["../../src/components/Sparkline.tsx"],"names":[],"mappings":"AASA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AASvE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,OAAe,EACf,KAAU,EACV,MAAW,EACX,YAAmB,EACnB,IAAe,EACf,KAAK,EACL,SAAS,GACV,EAAE,cAAc,+BAkDhB"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * `chart-sparkline` primitive (research/widget-registry.md §2): inline 6–12
4
+ * point micro-chart, bar|line variant, last point emphasized. No axes, no
5
+ * tooltip — embeds in KPI cards, table cells and list rows. Decorative by
6
+ * default (aria-hidden) unless a label is provided.
7
+ */
8
+ import { sparkBars, sparkLine } from '../geometry/sparkline.js';
9
+ import { useMountAnimation } from '../hooks/useMountAnimation.js';
10
+ const TONE_VAR = {
11
+ accent: 'var(--accent)',
12
+ positive: 'var(--pos)',
13
+ danger: 'var(--danger)',
14
+ muted: 'var(--fg-subtle)',
15
+ };
16
+ export function Sparkline({ data, variant = 'bar', width = 96, height = 28, emphasisLast = true, tone = 'accent', label, className, }) {
17
+ const mounted = useMountAnimation();
18
+ const color = TONE_VAR[tone];
19
+ const a11y = label !== undefined
20
+ ? { role: 'img', 'aria-label': label }
21
+ : { 'aria-hidden': true };
22
+ return (_jsx("svg", { className: className === undefined ? 'adm-spark' : `adm-spark ${className}`, width: width, height: height, viewBox: `0 0 ${width} ${height}`, "data-export-node": "", ...a11y, children: variant === 'bar' ? (sparkBars(data, width, height).map((bar, i) => (_jsx("rect", { className: "adm-chart-grow", style: { '--adm-grow': mounted ? '1' : '0', '--adm-stagger': `${i * 40}ms` }, x: bar.x, y: bar.y, width: bar.width, height: bar.height, rx: 1.5, fill: color, opacity: emphasisLast && !bar.isLast ? 0.45 : 1, "data-last": bar.isLast ? '' : undefined }, i)))) : ((() => {
23
+ const layout = sparkLine(data, width, height);
24
+ return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: [layout.points !== '' && (_jsx("polyline", { points: layout.points, fill: "none", stroke: color, strokeWidth: 1.5, strokeLinejoin: "round" })), emphasisLast && layout.last !== null && (_jsx("circle", { cx: layout.last.x, cy: layout.last.y, r: 2.5, fill: color, "data-last": "" }))] }));
25
+ })()) }));
26
+ }
27
+ //# sourceMappingURL=Sparkline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sparkline.js","sourceRoot":"","sources":["../../src/components/Sparkline.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * `chart-stacked-bar-100` primitive (research/widget-registry.md §2): a single
3
+ * horizontal 100% bar of gapped segments + a multi-column legend. Composed from
4
+ * ChartSurface (the bar) + pure `layoutStacked100` geometry; the legend is HTML
5
+ * (logical properties, mirrors under dir). Token-only colors; segment order
6
+ * mirrors in RTL; segments fade in on mount.
7
+ */
8
+ import type { ReactNode } from 'react';
9
+ import type { StackedInput } from '../geometry/stacked100.js';
10
+ import type { ChartDir } from '../hooks/useRtl.js';
11
+ import type { ChartLabels } from './ChartSurface.js';
12
+ export interface StackedBar100Props {
13
+ data: readonly StackedInput[];
14
+ labels: ChartLabels;
15
+ /** Bar thickness in px (default 26). */
16
+ barHeight?: number;
17
+ /** Gap between segments in px (default 2). */
18
+ gapPx?: number;
19
+ showLegend?: boolean;
20
+ /** Legend column count (annex `legendColumns`, default 2). */
21
+ legendColumns?: number;
22
+ /** In-segment share label when the segment is wide enough. */
23
+ showSegmentLabels?: boolean;
24
+ formatValue?: (value: number) => string;
25
+ dir?: ChartDir;
26
+ a11yFallback?: ReactNode;
27
+ className?: string;
28
+ }
29
+ export declare function StackedBar100({ data, labels, barHeight, gapPx, showLegend, legendColumns, showSegmentLabels, formatValue, dir, a11yFallback, className, }: StackedBar100Props): import("react").JSX.Element;
30
+ //# sourceMappingURL=StackedBar100.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackedBar100.d.ts","sourceRoot":"","sources":["../../src/components/StackedBar100.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,MAAM,EACN,SAAc,EACd,KAAS,EACT,UAAiB,EACjB,aAAiB,EACjB,iBAAwB,EACxB,WAAW,EACX,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,kBAAkB,+BAqEpB"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { layoutStacked100 } from '../geometry/stacked100.js';
3
+ import { useChartDir } from '../hooks/useRtl.js';
4
+ import { ChartSurface } from './ChartSurface.js';
5
+ function formatPercent(share) {
6
+ return `${Math.round(share * 100)}%`;
7
+ }
8
+ export function StackedBar100({ data, labels, barHeight = 26, gapPx = 2, showLegend = true, legendColumns = 2, showSegmentLabels = true, formatValue, dir, a11yFallback, className, }) {
9
+ const resolvedDir = useChartDir(dir);
10
+ return (_jsxs("div", { className: className === undefined ? 'adm-stacked' : `adm-stacked ${className}`, ...(dir !== undefined ? { dir: resolvedDir } : {}), children: [_jsx(ChartSurface, { labels: labels, height: barHeight, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), padding: { top: 0, bottom: 0, left: 0, right: 0 }, children: ({ innerWidth, rtl, mounted }) => {
11
+ if (data.length === 0 || innerWidth <= 0)
12
+ return null;
13
+ const layout = layoutStacked100(data, { width: innerWidth, rtl, gap: gapPx });
14
+ return (_jsx("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.segments.map((segment) => (_jsxs("g", { "data-seg": segment.index, children: [_jsx("rect", { x: segment.x, y: 0, width: Math.max(0, segment.width), height: barHeight, rx: 4, fill: `var(--viz-${(segment.index % 8) + 1})` }), showSegmentLabels && segment.width >= 34 && (_jsx("text", { className: "adm-chart-num", x: segment.x + segment.width / 2, y: barHeight / 2 + 3, textAnchor: "middle", fontSize: 10, fontWeight: 700, fill: "var(--surface)", children: formatPercent(segment.share) }))] }, segment.key))) }));
15
+ } }), showLegend && (_jsx("ul", { className: "adm-legend", style: { '--adm-legend-cols': String(Math.max(1, legendColumns)) }, children: data.map((item, index) => {
16
+ const total = data.reduce((sum, entry) => sum + Math.max(0, entry.value), 0);
17
+ const share = total > 0 ? Math.max(0, item.value) / total : 0;
18
+ return (_jsxs("li", { className: "adm-legend-row", children: [_jsx("span", { className: "adm-legend-dot", style: { '--adm-dot': `var(--viz-${(index % 8) + 1})` }, "aria-hidden": "true" }), _jsx("span", { children: item.label }), _jsx("span", { className: "adm-legend-value", children: formatValue !== undefined ? formatValue(item.value) : formatPercent(share) })] }, item.key));
19
+ }) }))] }));
20
+ }
21
+ //# sourceMappingURL=StackedBar100.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackedBar100.js","sourceRoot":"","sources":["../../src/components/StackedBar100.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAqBjD,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,MAAM,EACN,SAAS,GAAG,EAAE,EACd,KAAK,GAAG,CAAC,EACT,UAAU,GAAG,IAAI,EACjB,aAAa,GAAG,CAAC,EACjB,iBAAiB,GAAG,IAAI,EACxB,WAAW,EACX,GAAG,EACH,YAAY,EACZ,SAAS,GACU;IACnB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAErC,OAAO,CACL,eACE,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,KAC3E,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAEnD,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,KACb,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAClC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACxD,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YAEhD,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;oBAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,IAAI,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC9E,OAAO,CACL,YAAG,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,YACvE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAChC,yBAA+B,OAAO,CAAC,KAAK,aAC1C,eACE,CAAC,EAAE,OAAO,CAAC,CAAC,EACZ,CAAC,EAAE,CAAC,EACJ,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,EACjC,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,CAAC,EACL,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAC7C,EACD,iBAAiB,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,CAC3C,eACE,SAAS,EAAC,eAAe,EACzB,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,EAChC,CAAC,EAAE,SAAS,GAAG,CAAC,GAAG,CAAC,EACpB,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,EACZ,UAAU,EAAE,GAAG,EACf,IAAI,EAAC,gBAAgB,YAEpB,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,GACxB,CACR,KArBK,OAAO,CAAC,GAAG,CAsBf,CACL,CAAC,GACA,CACL,CAAC;gBACJ,CAAC,GACY,EAEd,UAAU,IAAI,CACb,aAAI,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,YAC1F,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7E,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9D,OAAO,CACL,cAAmB,SAAS,EAAC,gBAAgB,aAC3C,eAAM,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAc,MAAM,GAAG,EAC/G,yBAAO,IAAI,CAAC,KAAK,GAAQ,EACzB,eAAM,SAAS,EAAC,kBAAkB,YAC/B,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,GACtE,KALA,IAAI,CAAC,GAAG,CAMZ,CACN,CAAC;gBACJ,CAAC,CAAC,GACC,CACN,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `chart-stream` primitive (research/widget-registry.md §2): centered stacked
3
+ * "stream" bands over time with a legend (traffic composition). Time x never
4
+ * mirrors; categorical x mirrors in RTL, and the legend lays out in the
5
+ * reading direction (04 §7.4). Colors strictly from the viz palette.
6
+ */
7
+ import type { ReactNode } from 'react';
8
+ import type { ChartDir } from '../hooks/useRtl.js';
9
+ import type { MultiLineSeries } from './MultiLineChart.js';
10
+ import type { ChartLabels } from './ChartSurface.js';
11
+ export interface StreamChartProps {
12
+ series: readonly MultiLineSeries[];
13
+ labels: ChartLabels;
14
+ height?: number;
15
+ /** Smooth basis-spline bands (default true). */
16
+ smooth?: boolean;
17
+ showLegend?: boolean;
18
+ dir?: ChartDir;
19
+ a11yFallback?: ReactNode;
20
+ className?: string;
21
+ }
22
+ export declare function StreamChart({ series, labels, height, smooth, showLegend, dir, a11yFallback, className, }: StreamChartProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=StreamChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamChart.d.ts","sourceRoot":"","sources":["../../src/components/StreamChart.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,MAAM,EACN,MAAY,EACZ,MAAa,EACb,UAAiB,EACjB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,gBAAgB,+BA8FlB"}