@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,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { bandAreaPath, stackStream } from '../geometry/streamStack.js';
3
+ import { seriesColorVar } from '../geometry/multiLine.js';
4
+ import { categoricalPointScale, linearYScale, timeScale } from '../geometry/scales.js';
5
+ import { extent } from '../utils/stats.js';
6
+ import { ChartSurface } from './ChartSurface.js';
7
+ const LEGEND_H = 20;
8
+ export function StreamChart({ series, labels, height = 260, smooth = true, showLegend = true, dir, a11yFallback, className, }) {
9
+ const isTime = series[0]?.points[0]?.x instanceof Date;
10
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: showLegend ? LEGEND_H + 6 : 8, bottom: 8, left: 6, right: 6 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
11
+ const drawable = series.filter((s) => s.points.length > 0);
12
+ if (drawable.length === 0 || innerWidth <= 0 || innerHeight <= 0)
13
+ return null;
14
+ // `stackStream` builds band arrays of length = MAX point-count across
15
+ // every series, so `xs` must span the same index range. Deriving it
16
+ // from only the first series collapses band indices past that series'
17
+ // length onto x=0; use the longest series as the x spine instead.
18
+ const spine = drawable.reduce((a, b) => (b.points.length > a.points.length ? b : a));
19
+ const xs = isTime
20
+ ? (() => {
21
+ const times = drawable.flatMap((s) => s.points.map((p) => (p.x instanceof Date ? p.x.getTime() : 0)));
22
+ const [lo, hi] = extent(times) ?? [0, 1];
23
+ const scale = timeScale([new Date(lo), new Date(hi)], innerWidth);
24
+ return spine.points.map((p) => scale(p.x instanceof Date ? p.x : new Date(0)));
25
+ })()
26
+ : (() => {
27
+ const domain = spine.points.map((p) => String(p.x));
28
+ const scale = categoricalPointScale(domain, innerWidth, rtl);
29
+ return domain.map((d) => scale(d) ?? 0);
30
+ })();
31
+ const inputs = drawable.map((s) => ({
32
+ key: s.key,
33
+ label: s.label,
34
+ values: s.points.map((p) => p.y),
35
+ }));
36
+ const { bands, min, max } = stackStream(inputs, 'silhouette');
37
+ const yScale = linearYScale([min, max], innerHeight);
38
+ // Legend layout in reading order (RTL lays out from the inline-end).
39
+ let cursor = rtl ? innerWidth : 0;
40
+ return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: [bands.map((band, i) => {
41
+ const low = band.low.map((v) => yScale(v));
42
+ const high = band.high.map((v) => yScale(v));
43
+ const path = bandAreaPath(xs, low, high, smooth);
44
+ return path === null ? null : (_jsx("path", { d: path, fill: seriesColorVar(i), fillOpacity: 0.82, stroke: "var(--surface)", strokeWidth: 0.75, "data-series": band.key }, band.key));
45
+ }), showLegend &&
46
+ bands.map((band, i) => {
47
+ const width = band.label.length * 6.2 + 20;
48
+ const x = rtl ? cursor - width : cursor;
49
+ cursor = rtl ? cursor - width - 6 : cursor + width + 6;
50
+ const dotX = rtl ? x + width - 8 : x + 4;
51
+ const textX = rtl ? x + width - 18 : x + 14;
52
+ return (_jsxs("g", { "data-legend-item": band.key, children: [_jsx("circle", { cx: dotX, cy: -LEGEND_H + 8, r: 4, fill: seriesColorVar(i) }), _jsx("text", { x: textX, y: -LEGEND_H + 11, textAnchor: rtl ? 'end' : 'start', fontSize: 10.5, fontWeight: 600, fill: "var(--fg-muted)", children: band.label })] }, `${band.key}-legend`));
53
+ })] }));
54
+ } }));
55
+ }
56
+ //# sourceMappingURL=StreamChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamChart.js","sourceRoot":"","sources":["../../src/components/StreamChart.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAejD,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,MAAM,EACN,MAAM,GAAG,GAAG,EACZ,MAAM,GAAG,IAAI,EACb,UAAU,GAAG,IAAI,EACjB,GAAG,EACH,YAAY,EACZ,SAAS,GACQ;IACjB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,IAAI,CAAC;IAEvD,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,UAAU,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YAE5E,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAE9E,sEAAsE;YACtE,oEAAoE;YACpE,sEAAsE;YACtE,kEAAkE;YAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,MAAM,EAAE,GAAG,MAAM;gBACf,CAAC,CAAC,CAAC,GAAG,EAAE;oBACJ,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACnC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAC;oBACF,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;oBAClE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjF,CAAC,CAAC,EAAE;gBACN,CAAC,CAAC,CAAC,GAAG,EAAE;oBACJ,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpD,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;oBAC7D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,CAAC,CAAC,EAAE,CAAC;YAET,MAAM,MAAM,GAAwB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvD,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACjC,CAAC,CAAC,CAAC;YACJ,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;YAErD,qEAAqE;YACrE,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAElC,OAAO,CACL,aAAG,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,aACvE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;wBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;wBACjD,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5B,eAEE,CAAC,EAAE,IAAI,EACP,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,WAAW,EAAE,IAAI,EACjB,MAAM,EAAC,gBAAgB,EACvB,WAAW,EAAE,IAAI,iBACJ,IAAI,CAAC,GAAG,IANhB,IAAI,CAAC,GAAG,CAOb,CACH,CAAC;oBACJ,CAAC,CAAC,EAED,UAAU;wBACT,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;4BACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;4BAC3C,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;4BACxC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;4BACvD,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;4BACzC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;4BAC5C,OAAO,CACL,iCAAgD,IAAI,CAAC,GAAG,aACtD,iBAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAI,EACtE,eACE,CAAC,EAAE,KAAK,EACR,CAAC,EAAE,CAAC,QAAQ,GAAG,EAAE,EACjB,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EACjC,QAAQ,EAAE,IAAI,EACd,UAAU,EAAE,GAAG,EACf,IAAI,EAAC,iBAAiB,YAErB,IAAI,CAAC,KAAK,GACN,KAXD,GAAG,IAAI,CAAC,GAAG,SAAS,CAYxB,CACL,CAAC;wBACJ,CAAC,CAAC,IACF,CACL,CAAC;QACJ,CAAC,GACY,CAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `chart-sunburst` primitive (research/widget-registry.md §2): two nested rings
3
+ * from a 2-level hierarchy (inner = parents, outer = children), with a legend of
4
+ * the parent categories. Arcs sweep clockwise and do NOT mirror in RTL (§7.4).
5
+ * Colors are tokens only; geometry is pure (04 §7.1).
6
+ */
7
+ import type { ReactNode } from 'react';
8
+ import type { SunburstParentInput } from '../geometry/sunburst.js';
9
+ import type { ChartDir } from '../hooks/useRtl.js';
10
+ import type { ChartLabels } from './ChartSurface.js';
11
+ export interface SunburstChartProps {
12
+ data: readonly SunburstParentInput[];
13
+ labels: ChartLabels;
14
+ /** Diameter in px (default 200). */
15
+ size?: number;
16
+ /** Radius of the empty center hole (default 0.28 × radius). */
17
+ innerRadiusRatio?: number;
18
+ showLegend?: boolean;
19
+ dir?: ChartDir;
20
+ a11yFallback?: ReactNode;
21
+ className?: string;
22
+ }
23
+ export declare function Sunburst({ data, labels, size, innerRadiusRatio, showLegend, dir, a11yFallback, className, }: SunburstChartProps): import("react").JSX.Element;
24
+ //# sourceMappingURL=Sunburst.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sunburst.d.ts","sourceRoot":"","sources":["../../src/components/Sunburst.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,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,mBAAmB,EAAE,CAAC;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,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,QAAQ,CAAC,EACvB,IAAI,EACJ,MAAM,EACN,IAAU,EACV,gBAAuB,EACvB,UAAiB,EACjB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,kBAAkB,+BA+CpB"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { sunburstArcs } from '../geometry/sunburst.js';
3
+ import { useChartDir } from '../hooks/useRtl.js';
4
+ import { useMountAnimation } from '../hooks/useMountAnimation.js';
5
+ export function Sunburst({ data, labels, size = 200, innerRadiusRatio = 0.28, showLegend = true, dir, a11yFallback, className, }) {
6
+ const resolvedDir = useChartDir(dir);
7
+ const mounted = useMountAnimation();
8
+ const innerRadius = (size / 2) * innerRadiusRatio;
9
+ const { arcs } = sunburstArcs(data, { size, innerRadius });
10
+ const parents = arcs.filter((a) => a.depth === 0);
11
+ 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})`, "data-sunburst": "", children: arcs.map((arc, i) => (_jsx("path", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0', '--adm-stagger': `${i * 55}ms` }, d: arc.path, fill: arc.colorVar, stroke: "var(--surface)", strokeWidth: 1, "data-arc": arc.label, "data-depth": arc.depth }, `${arc.parentLabel ?? 'root'}-${arc.label}-${arc.depth}`))) })] }), showLegend && (_jsx("ul", { className: "adm-donut-legend", children: parents.map((arc) => (_jsxs("li", { className: "adm-donut-legend-row", children: [_jsx("span", { className: "adm-donut-legend-dot", style: { '--adm-dot': arc.colorVar }, "aria-hidden": "true" }), _jsx("span", { children: arc.label }), _jsx("span", { className: "adm-donut-legend-value", children: `${Math.round(arc.share * 100)}%` })] }, arc.label))) })), a11yFallback !== undefined && _jsx("div", { className: "adm-chart-sr", children: a11yFallback })] }));
12
+ }
13
+ //# sourceMappingURL=Sunburst.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sunburst.js","sourceRoot":"","sources":["../../src/components/Sunburst.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `chart-timeline-lanes` primitive (research/widget-registry.md §2): horizontal
3
+ * swimlanes with positioned pill events on a shared time axis (Deploys /
4
+ * Incidents / Releases). A time axis renders as an LTR island (04 §7.4 — time
5
+ * axes never mirror; gantt-like lanes stay LTR), so event positions and the
6
+ * lane-label gutter are LTR regardless of page direction. Colors from the viz
7
+ * palette and semantic tone tokens only.
8
+ */
9
+ import type { ReactNode } from 'react';
10
+ import type { LaneEvent } from '../geometry/timelineLanes.js';
11
+ import type { ChartDir } from '../hooks/useRtl.js';
12
+ import type { ChartLabels } from './ChartSurface.js';
13
+ export interface TimelineLanesChartProps {
14
+ lanes: readonly string[];
15
+ events: readonly LaneEvent[];
16
+ labels: ChartLabels;
17
+ /** Time-axis tick captions along the bottom (e.g. week buckets). */
18
+ axisLabels?: readonly string[];
19
+ height?: number;
20
+ dir?: ChartDir;
21
+ a11yFallback?: ReactNode;
22
+ className?: string;
23
+ }
24
+ export declare function TimelineLanesChart({ lanes, events, labels, axisLabels, height, dir, a11yFallback, className, }: TimelineLanesChartProps): import("react").JSX.Element;
25
+ //# sourceMappingURL=TimelineLanesChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineLanesChart.d.ts","sourceRoot":"","sources":["../../src/components/TimelineLanesChart.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoBD,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,MAAY,EACZ,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,uBAAuB,+BAwEzB"}
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { layoutLanes } from '../geometry/timelineLanes.js';
3
+ import { seriesColorVar } from '../geometry/multiLine.js';
4
+ import { ChartSurface } from './ChartSurface.js';
5
+ const GUTTER = 92;
6
+ /** Semantic tone → token color, else the lane's categorical viz color. */
7
+ function toneColor(tone, laneIndex) {
8
+ switch (tone) {
9
+ case 'pos':
10
+ return 'var(--pos)';
11
+ case 'danger':
12
+ return 'var(--danger)';
13
+ case 'warn':
14
+ return 'var(--warn)';
15
+ case 'info':
16
+ return 'var(--info)';
17
+ default:
18
+ return seriesColorVar(laneIndex);
19
+ }
20
+ }
21
+ export function TimelineLanesChart({ lanes, events, labels, axisLabels, height = 200, dir, a11yFallback, className, }) {
22
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}),
23
+ // Lane-label gutter at the inline-start; time axis fills the rest (LTR island).
24
+ padding: { top: 8, bottom: axisLabels && axisLabels.length > 0 ? 22 : 10, left: GUTTER, right: 14 }, children: ({ innerWidth, innerHeight, mounted }) => {
25
+ if (lanes.length === 0 || innerWidth <= 0 || innerHeight <= 0)
26
+ return null;
27
+ const rows = layoutLanes(lanes, events, innerWidth, innerHeight, { laneGap: 8 });
28
+ return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: [rows.map((row) => (_jsxs("g", { "data-lane": row.lane, children: [_jsx("rect", { x: 0, y: row.y, width: innerWidth, height: row.height, rx: 6, fill: "var(--surface-2)" }), _jsx("text", { x: -10, y: row.centerY + 3, textAnchor: "end", fontSize: 10.5, fontWeight: 600, fill: "var(--fg-muted)", "data-lane-label": row.lane, children: row.lane }), row.events.map((event, j) => {
29
+ const color = toneColor(event.tone, row.index);
30
+ const width = event.label.length * 5.6 + 22;
31
+ const pillX = Math.min(innerWidth - width, Math.max(0, event.x - width / 2));
32
+ return (_jsxs("g", { "data-event": event.label, transform: `translate(${pillX}, ${row.centerY - 9})`, children: [_jsx("rect", { x: 0, y: 0, width: width, height: 18, rx: 9, fill: "var(--surface-3)", stroke: color, strokeWidth: 1 }), _jsx("circle", { cx: 11, cy: 9, r: 3, fill: color }), _jsx("text", { x: 19, y: 12, fontSize: 9.5, fontWeight: 600, fill: "var(--fg)", children: event.label })] }, `${row.lane}-${j}`));
33
+ })] }, row.lane))), axisLabels?.map((label, i) => {
34
+ const count = axisLabels.length;
35
+ const x = count > 1 ? (innerWidth / (count - 1)) * i : innerWidth / 2;
36
+ const anchor = i === 0 ? 'start' : i === count - 1 ? 'end' : 'middle';
37
+ return (_jsx("text", { className: "adm-chart-axis-label", x: x, y: innerHeight + 15, textAnchor: anchor, children: label }, `axis-${i}`));
38
+ })] }));
39
+ } }));
40
+ }
41
+ //# sourceMappingURL=TimelineLanesChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineLanesChart.js","sourceRoot":"","sources":["../../src/components/TimelineLanesChart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `chart-treemap` primitive (research/widget-registry.md §2): squarified
3
+ * slice-and-dice tiles, area/alpha by value, in-tile labels above a threshold.
4
+ * Tiles fill with the accent alpha ramp (theme-safe text contrast); the RTL x
5
+ * axis mirrors via `mirrorTiles`. Colors are tokens only; the geometry is pure
6
+ * so a report worker rasterizes the identical layout (04 §7.1/§7.6).
7
+ */
8
+ import type { ReactNode } from 'react';
9
+ import type { TreemapInput } from '../geometry/treemap.js';
10
+ import type { ChartDir } from '../hooks/useRtl.js';
11
+ import type { ChartLabels } from './ChartSurface.js';
12
+ export interface TreemapChartProps {
13
+ data: readonly TreemapInput[];
14
+ labels: ChartLabels;
15
+ height?: number;
16
+ /** Slices beyond this fold into a trailing "Other" tile. */
17
+ maxTiles?: number;
18
+ otherLabel?: string;
19
+ /** Hide the in-tile label below this width/height in px (default 48/26). */
20
+ labelMinWidth?: number;
21
+ labelMinHeight?: number;
22
+ format?: (value: number) => string;
23
+ dir?: ChartDir;
24
+ a11yFallback?: ReactNode;
25
+ className?: string;
26
+ }
27
+ export declare function Treemap({ data, labels, height, maxTiles, otherLabel, labelMinWidth, labelMinHeight, format, dir, a11yFallback, className, }: TreemapChartProps): import("react").JSX.Element;
28
+ //# sourceMappingURL=Treemap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Treemap.d.ts","sourceRoot":"","sources":["../../src/components/Treemap.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;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,iBAAiB;IAChC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,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;AAED,wBAAgB,OAAO,CAAC,EACtB,IAAI,EACJ,MAAM,EACN,MAAY,EACZ,QAAQ,EACR,UAAoB,EACpB,aAAkB,EAClB,cAAmB,EACnB,MAAsB,EACtB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,iBAAiB,+BAqEnB"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { mirrorTiles, treemapTiles } from '../geometry/treemap.js';
3
+ import { formatCompact } from '../utils/format.js';
4
+ import { ChartSurface } from './ChartSurface.js';
5
+ export function Treemap({ data, labels, height = 260, maxTiles, otherLabel = 'Other', labelMinWidth = 48, labelMinHeight = 26, format = formatCompact, dir, a11yFallback, className, }) {
6
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 1, right: 1, bottom: 1, left: 1 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
7
+ if (innerWidth <= 0 || innerHeight <= 0)
8
+ return null;
9
+ const laidOut = treemapTiles(data, {
10
+ width: innerWidth,
11
+ height: innerHeight,
12
+ ...(maxTiles !== undefined ? { maxTiles } : {}),
13
+ otherLabel,
14
+ });
15
+ const tiles = rtl ? mirrorTiles(laidOut, innerWidth) : laidOut;
16
+ return (_jsx("g", { "data-treemap": "", children: tiles.map((tile, i) => {
17
+ const showLabel = tile.width >= labelMinWidth && tile.height >= labelMinHeight;
18
+ return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0', '--adm-stagger': `${i * 45}ms` }, "data-tile": tile.label, children: [_jsx("rect", { x: tile.x, y: tile.y, width: Math.max(0, tile.width - 2), height: Math.max(0, tile.height - 2), rx: 4, fill: tile.rampVar, stroke: "var(--border)", strokeWidth: 1 }), showLabel && (_jsxs(_Fragment, { children: [_jsx("text", { x: tile.x + 8, y: tile.y + 16, className: "adm-chart-axis-label", textAnchor: "start", children: tile.label }), _jsx("text", { x: tile.x + 8, y: tile.y + 30, className: "adm-chart-axis-label adm-chart-num", textAnchor: "start", children: format(tile.value) })] }))] }, tile.label));
19
+ }) }));
20
+ } }));
21
+ }
22
+ //# sourceMappingURL=Treemap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Treemap.js","sourceRoot":"","sources":["../../src/components/Treemap.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `chart-violin` primitive (research/widget-registry.md §2): mirrored density
3
+ * profiles with a median line, one violin per group. Categorical x mirrors in
4
+ * RTL; the value axis stays pixel-down. Token-only colors; fade-in on mount.
5
+ */
6
+ import type { ReactNode } from 'react';
7
+ import type { ViolinGroupInput } from '../geometry/distribution.js';
8
+ import type { ChartDir } from '../hooks/useRtl.js';
9
+ import type { ChartLabels } from './ChartSurface.js';
10
+ export interface ViolinChartProps {
11
+ groups: readonly ViolinGroupInput[];
12
+ labels: ChartLabels;
13
+ height?: number;
14
+ showAxis?: boolean;
15
+ showCategoryLabels?: boolean;
16
+ formatY?: (y: number) => string;
17
+ dir?: ChartDir;
18
+ a11yFallback?: ReactNode;
19
+ className?: string;
20
+ }
21
+ export declare function ViolinChart({ groups, labels, height, showAxis, showCategoryLabels, formatY, dir, a11yFallback, className, }: ViolinChartProps): import("react").JSX.Element;
22
+ //# sourceMappingURL=ViolinChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolinChart.d.ts","sourceRoot":"","sources":["../../src/components/ViolinChart.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,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,WAAW,CAAC,EAC1B,MAAM,EACN,MAAM,EACN,MAAY,EACZ,QAAe,EACf,kBAAyB,EACzB,OAAuB,EACvB,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,gBAAgB,+BAkFlB"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { violinLayout } from '../geometry/distribution.js';
3
+ import { formatCompact } from '../utils/format.js';
4
+ import { ChartSurface } from './ChartSurface.js';
5
+ export function ViolinChart({ groups, labels, height = 260, showAxis = true, showCategoryLabels = true, formatY = formatCompact, dir, a11yFallback, className, }) {
6
+ const pad = {
7
+ top: 8,
8
+ bottom: showCategoryLabels ? 22 : 6,
9
+ near: showAxis ? 40 : 6,
10
+ far: 10,
11
+ };
12
+ 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 }) => {
13
+ if (groups.length === 0 || innerWidth <= 0 || innerHeight <= 0)
14
+ return null;
15
+ const layout = violinLayout(groups, { width: innerWidth, height: innerHeight, rtl });
16
+ return (_jsxs("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: [showAxis &&
17
+ 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) })] }, tick))), layout.violins.map((violin) => (_jsxs("g", { "data-violin": violin.label, children: [_jsx("path", { d: violin.path, fill: "var(--accent-area)", stroke: "var(--viz-1)", strokeWidth: 1.5, "data-violin-path": "" }), _jsx("line", { x1: violin.centerX - layout.bandwidth * 0.24, x2: violin.centerX + layout.bandwidth * 0.24, y1: violin.medY, y2: violin.medY, stroke: "var(--viz-1)", strokeWidth: 2, "data-median": "" })] }, violin.label))), showCategoryLabels &&
18
+ layout.violins.map((violin) => (_jsx("text", { className: "adm-chart-axis-label", x: violin.centerX, y: innerHeight + 15, textAnchor: "middle", children: violin.label }, violin.label)))] }));
19
+ } }));
20
+ }
21
+ //# sourceMappingURL=ViolinChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolinChart.js","sourceRoot":"","sources":["../../src/components/ViolinChart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `chart-waterfall` primitive (research/widget-registry.md §2): a floating-bar
3
+ * bridge (Start / New / Expansion / Churn / Net) with +/− colored steps and
4
+ * total anchors, plus connector segments riding the running level. Composed
5
+ * from ChartSurface + pure `layoutWaterfall` geometry. Token-only colors
6
+ * (pos/danger/accent-ramp), categorical x mirrors in RTL, mount fade.
7
+ */
8
+ import type { ReactNode } from 'react';
9
+ import type { WaterfallInput } from '../geometry/waterfall.js';
10
+ import type { ChartDir } from '../hooks/useRtl.js';
11
+ import type { ChartLabels } from './ChartSurface.js';
12
+ export interface WaterfallChartProps {
13
+ data: readonly WaterfallInput[];
14
+ labels: ChartLabels;
15
+ height?: number;
16
+ showAxis?: boolean;
17
+ formatValue?: (value: number) => string;
18
+ dir?: ChartDir;
19
+ a11yFallback?: ReactNode;
20
+ className?: string;
21
+ }
22
+ export declare function WaterfallChart({ data, labels, height, showAxis, formatValue, dir, a11yFallback, className, }: WaterfallChartProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=WaterfallChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaterfallChart.d.ts","sourceRoot":"","sources":["../../src/components/WaterfallChart.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,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,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,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;AAcD,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,MAAM,EACN,MAAY,EACZ,QAAe,EACf,WAA2B,EAC3B,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,mBAAmB,+BA4FrB"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { layoutWaterfall } from '../geometry/waterfall.js';
3
+ import { formatCompact } from '../utils/format.js';
4
+ import { ChartSurface } from './ChartSurface.js';
5
+ function typeColor(type) {
6
+ if (type === 'up')
7
+ return 'var(--pos)';
8
+ if (type === 'down')
9
+ return 'var(--danger)';
10
+ return 'var(--viz-ramp-4)';
11
+ }
12
+ function signedText(type, value, format) {
13
+ if (type === 'up')
14
+ return `+${format(value)}`;
15
+ if (type === 'down')
16
+ return `−${format(value)}`;
17
+ return format(value);
18
+ }
19
+ export function WaterfallChart({ data, labels, height = 260, showAxis = true, formatValue = formatCompact, dir, a11yFallback, className, }) {
20
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 18, bottom: 22, left: showAxis ? 36 : 6, right: 8 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
21
+ if (data.length === 0 || innerWidth <= 0 || innerHeight <= 0)
22
+ return null;
23
+ const layout = layoutWaterfall(data, { width: innerWidth, height: innerHeight, rtl });
24
+ const valueEdge = rtl ? innerWidth + 6 : -6;
25
+ return (_jsxs("g", { children: [showAxis &&
26
+ 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: valueEdge, y: layout.yFor(tick) + 3, textAnchor: rtl ? 'start' : 'end', children: formatValue(tick) })] }, tick))), layout.connectors.map((connector) => (_jsx("line", { x1: connector.x1, x2: connector.x2, y1: connector.y, y2: connector.y, stroke: "var(--border-strong)", strokeWidth: 1, strokeDasharray: "3 3", "data-connector": connector.fromIndex }, connector.fromIndex))), _jsx("g", { className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0' }, children: layout.bars.map((bar) => (_jsxs("g", { "data-step": bar.index, "data-type": bar.type, children: [_jsx("rect", { x: bar.x, y: bar.y, width: bar.width, height: Math.max(1, bar.height), rx: 2, fill: typeColor(bar.type) }), _jsx("text", { className: "adm-chart-num", x: bar.centerX, y: bar.y - 5, textAnchor: "middle", fontSize: 10, fontWeight: 700, fill: "var(--fg-muted)", children: signedText(bar.type, bar.value, formatValue) }), _jsx("text", { className: "adm-chart-axis-label", x: bar.centerX, y: innerHeight + 15, textAnchor: "middle", children: bar.label })] }, bar.label))) })] }));
27
+ } }));
28
+ }
29
+ //# sourceMappingURL=WaterfallChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaterfallChart.js","sourceRoot":"","sources":["../../src/components/WaterfallChart.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `chart-wordcloud` primitive (research/widget-registry.md §2): terms sized by
3
+ * frequency, flowed into wrapped rows and rendered as SVG <text> (font size is
4
+ * an SVG presentation attribute, so no `style` prop and no DOM text metrics).
5
+ * Widths are estimated deterministically in geometry → identical layout in a
6
+ * report worker (04 §7.1). Rows mirror in RTL (§7.4); colors are tokens only.
7
+ */
8
+ import type { ReactNode } from 'react';
9
+ import type { WordInput } from '../geometry/wordcloud.js';
10
+ import type { ChartDir } from '../hooks/useRtl.js';
11
+ import type { ChartLabels } from './ChartSurface.js';
12
+ export interface WordCloudChartProps {
13
+ data: readonly WordInput[];
14
+ labels: ChartLabels;
15
+ height?: number;
16
+ maxTerms?: number;
17
+ minFontSize?: number;
18
+ maxFontSize?: number;
19
+ dir?: ChartDir;
20
+ a11yFallback?: ReactNode;
21
+ className?: string;
22
+ }
23
+ export declare function WordCloud({ data, labels, height, maxTerms, minFontSize, maxFontSize, dir, a11yFallback, className, }: WordCloudChartProps): import("react").JSX.Element;
24
+ //# sourceMappingURL=WordCloud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WordCloud.d.ts","sourceRoot":"","sources":["../../src/components/WordCloud.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,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,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,MAAY,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,GAAG,EACH,YAAY,EACZ,SAAS,GACV,EAAE,mBAAmB,+BAgDrB"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { wordCloudLayout } from '../geometry/wordcloud.js';
3
+ import { ChartSurface } from './ChartSurface.js';
4
+ export function WordCloud({ data, labels, height = 200, maxTerms, minFontSize, maxFontSize, dir, a11yFallback, className, }) {
5
+ return (_jsx(ChartSurface, { labels: labels, height: height, ...(dir !== undefined ? { dir } : {}), ...(a11yFallback !== undefined ? { a11yFallback } : {}), ...(className !== undefined ? { className } : {}), padding: { top: 6, right: 6, bottom: 6, left: 6 }, children: ({ innerWidth, innerHeight, rtl, mounted }) => {
6
+ if (innerWidth <= 0)
7
+ return null;
8
+ // Geometry mirrors each row's start edge in RTL, so the text anchor
9
+ // stays "start" and the term boxes read end→start.
10
+ const { tokens, height: contentHeight } = wordCloudLayout(data, {
11
+ width: innerWidth,
12
+ rtl,
13
+ ...(maxTerms !== undefined ? { maxTerms } : {}),
14
+ ...(minFontSize !== undefined ? { minFontSize } : {}),
15
+ ...(maxFontSize !== undefined ? { maxFontSize } : {}),
16
+ });
17
+ // Vertically center the cloud within the plot area.
18
+ const offsetY = Math.max(0, (innerHeight - contentHeight) / 2);
19
+ return (_jsx("g", { "data-wordcloud": "", transform: `translate(0, ${offsetY})`, children: tokens.map((token, i) => (_jsx("text", { x: token.x, y: token.y, fontSize: token.fontSize, fontWeight: 700, fill: token.colorVar, textAnchor: "start", dominantBaseline: "middle", className: "adm-chart-fade", style: { '--adm-fade': mounted ? '1' : '0', '--adm-stagger': `${i * 40}ms` }, "data-term": token.term, children: token.term }, `${token.term}-${i}`))) }));
20
+ } }));
21
+ }
22
+ //# sourceMappingURL=WordCloud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WordCloud.js","sourceRoot":"","sources":["../../src/components/WordCloud.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAejD,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,MAAM,GAAG,GAAG,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,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,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,YAEhD,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7C,IAAI,UAAU,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACjC,oEAAoE;YACpE,mDAAmD;YACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE;gBAC9D,KAAK,EAAE,UAAU;gBACjB,GAAG;gBACH,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtD,CAAC,CAAC;YACH,oDAAoD;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAE/D,OAAO,CACL,8BAAkB,EAAE,EAAC,SAAS,EAAE,gBAAgB,OAAO,GAAG,YACvD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,eAEE,CAAC,EAAE,KAAK,CAAC,CAAC,EACV,CAAC,EAAE,KAAK,CAAC,CAAC,EACV,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,UAAU,EAAE,GAAG,EACf,IAAI,EAAE,KAAK,CAAC,QAAQ,EACpB,UAAU,EAAC,OAAO,EAClB,gBAAgB,EAAC,QAAQ,EACzB,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,eACjE,KAAK,CAAC,IAAI,YAEpB,KAAK,CAAC,IAAI,IAZN,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,CAapB,CACR,CAAC,GACA,CACL,CAAC;QACJ,CAAC,GACY,CAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { RankingInput } from '../geometry/ranking.js';
2
+ import type { BulletInput } from '../geometry/bullet.js';
3
+ import type { ParetoInput } from '../geometry/pareto.js';
4
+ import type { WaterfallInput } from '../geometry/waterfall.js';
5
+ import type { StackedInput } from '../geometry/stacked100.js';
6
+ import type { SlopeInput } from '../geometry/slope.js';
7
+ /** Sorted-descending top-N ranking values (top countries / regions). */
8
+ export declare function demoRanking(seed: number, n?: number): RankingInput[];
9
+ /** Goal rows: measure vs target with three qualitative bands. */
10
+ export declare function demoBullet(seed: number, n?: number): BulletInput[];
11
+ /** Sorted-descending cause counts for the Pareto bars + cumulative line. */
12
+ export declare function demoPareto(seed: number): ParetoInput[];
13
+ /** MRR bridge: Start anchor, up/down movements, Net anchor. */
14
+ export declare function demoWaterfall(seed: number): WaterfallInput[];
15
+ export interface DemoMarimekko {
16
+ rowKeys: string[];
17
+ colKeys: string[];
18
+ cells: number[][];
19
+ }
20
+ /** Region (columns) × plan (rows) revenue matrix. */
21
+ export declare function demoMarimekko(seed: number): DemoMarimekko;
22
+ /** Traffic-by-source shares for the 100% bar. */
23
+ export declare function demoStacked100(seed: number): StackedInput[];
24
+ /** Plan-mix share shift A → B. */
25
+ export declare function demoSlope(seed: number): SlopeInput[];
26
+ //# sourceMappingURL=barsRanking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barsRanking.d.ts","sourceRoot":"","sources":["../../src/demo/barsRanking.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAQvD,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,YAAY,EAAE,CAK/D;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,WAAW,EAAE,CAQ7D;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAKtD;AAED,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAgB5D;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;CACnB;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAMzD;AAED,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAO3D;AAED,kCAAkC;AAClC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAOpD"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Deterministic domain-shaped demo generators for the "bars & ranking" chart
3
+ * group (04-T09; workplan/04-widget-registry.md §7.7). Same seed → identical
4
+ * payload across runs and platforms — seeded PRNG only, never Date.now()/
5
+ * Math.random(). These feed the chart-primitive tests and stories; the
6
+ * @adminium/widgets defs wrap the same numbers into §3 envelopes.
7
+ */
8
+ import { mulberry32 } from './mulberry32.js';
9
+ const REGIONS = ['United States', 'Germany', 'Japan', 'Brazil', 'India', 'Canada', 'France', 'Australia'];
10
+ const CAUSES = ['Timeout', 'Validation', 'Auth', 'Rate limit', 'Network', 'Unknown'];
11
+ const PLANS = ['Free', 'Pro', 'Business', 'Enterprise'];
12
+ const SOURCES = ['Organic', 'Paid', 'Referral', 'Social', 'Email'];
13
+ const GOALS = ['Revenue', 'Signups', 'Retention', 'NPS'];
14
+ /** Sorted-descending top-N ranking values (top countries / regions). */
15
+ export function demoRanking(seed, n = 6) {
16
+ const random = mulberry32(seed);
17
+ return REGIONS.slice(0, n)
18
+ .map((label) => ({ label, value: Math.round(200 + random() * 800) }))
19
+ .sort((a, b) => b.value - a.value);
20
+ }
21
+ /** Goal rows: measure vs target with three qualitative bands. */
22
+ export function demoBullet(seed, n = 4) {
23
+ const random = mulberry32(seed);
24
+ return GOALS.slice(0, n).map((label) => {
25
+ const max = 100;
26
+ const target = Math.round(60 + random() * 25);
27
+ const measure = Math.round(30 + random() * 65);
28
+ return { label, measure, target, max, bandCutoffs: [40, 75] };
29
+ });
30
+ }
31
+ /** Sorted-descending cause counts for the Pareto bars + cumulative line. */
32
+ export function demoPareto(seed) {
33
+ const random = mulberry32(seed);
34
+ return CAUSES.map((label) => ({ label, value: Math.round(10 + random() * 240) })).sort((a, b) => b.value - a.value);
35
+ }
36
+ /** MRR bridge: Start anchor, up/down movements, Net anchor. */
37
+ export function demoWaterfall(seed) {
38
+ const random = mulberry32(seed);
39
+ const start = Math.round(180 + random() * 60);
40
+ const newBiz = Math.round(30 + random() * 40);
41
+ const expansion = Math.round(15 + random() * 25);
42
+ const contraction = Math.round(8 + random() * 16);
43
+ const churn = Math.round(12 + random() * 22);
44
+ const net = start + newBiz + expansion - contraction - churn;
45
+ return [
46
+ { label: 'Start', value: start, type: 'total' },
47
+ { label: 'New', value: newBiz, type: 'up' },
48
+ { label: 'Expansion', value: expansion, type: 'up' },
49
+ { label: 'Contraction', value: contraction, type: 'down' },
50
+ { label: 'Churn', value: churn, type: 'down' },
51
+ { label: 'Net', value: net, type: 'total' },
52
+ ];
53
+ }
54
+ /** Region (columns) × plan (rows) revenue matrix. */
55
+ export function demoMarimekko(seed) {
56
+ const random = mulberry32(seed);
57
+ const colKeys = REGIONS.slice(0, 4);
58
+ const rowKeys = [...PLANS];
59
+ const cells = rowKeys.map(() => colKeys.map(() => Math.round(20 + random() * 180)));
60
+ return { rowKeys, colKeys, cells };
61
+ }
62
+ /** Traffic-by-source shares for the 100% bar. */
63
+ export function demoStacked100(seed) {
64
+ const random = mulberry32(seed);
65
+ return SOURCES.map((label) => ({
66
+ key: label.toLowerCase(),
67
+ label,
68
+ value: Math.round(20 + random() * 100),
69
+ }));
70
+ }
71
+ /** Plan-mix share shift A → B. */
72
+ export function demoSlope(seed) {
73
+ const random = mulberry32(seed);
74
+ return PLANS.map((label) => {
75
+ const a = Math.round(10 + random() * 40);
76
+ const b = Math.max(2, Math.round(a + (random() - 0.5) * 26));
77
+ return { label, a, b };
78
+ });
79
+ }
80
+ //# sourceMappingURL=barsRanking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barsRanking.js","sourceRoot":"","sources":["../../src/demo/barsRanking.ts"],"names":[],"mappings":"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"}