@stealthscale/component-charts 0.2.2 → 0.2.3

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 (123) hide show
  1. package/dist/cyclonedx/bom.json +1 -1
  2. package/dist/index.js +1 -14710
  3. package/dist/pages/area-chart/area-chart.js +1151 -0
  4. package/dist/pages/area-chart/area-chart.props.js +3 -0
  5. package/dist/pages/bar-chart/bar-chart.js +990 -0
  6. package/dist/pages/bar-chart/bar-chart.props.js +3 -0
  7. package/dist/pages/box-plot/box-plot.js +1585 -0
  8. package/dist/pages/box-plot/box-plot.props.js +3 -0
  9. package/dist/pages/bubble-chart/bubble-chart.js +938 -0
  10. package/dist/pages/bubble-chart/bubble-chart.props.js +3 -0
  11. package/dist/pages/burndown-chart/burndown-chart.js +805 -0
  12. package/dist/pages/burndown-chart/burndown-chart.props.js +3 -0
  13. package/dist/pages/candlestick-chart/candlestick-chart.js +853 -0
  14. package/dist/pages/candlestick-chart/candlestick-chart.props.js +3 -0
  15. package/dist/pages/chart/chart.js +1190 -0
  16. package/dist/pages/chart/chart.props.js +3 -0
  17. package/dist/pages/chord-diagram/chord-diagram.js +891 -0
  18. package/dist/pages/chord-diagram/chord-diagram.props.js +3 -0
  19. package/dist/pages/combo-chart/combo-chart.js +873 -0
  20. package/dist/pages/combo-chart/combo-chart.props.js +3 -0
  21. package/dist/pages/distribution-chart/distribution-chart.js +1066 -0
  22. package/dist/pages/distribution-chart/distribution-chart.props.js +3 -0
  23. package/dist/pages/donut-chart/donut-chart.js +726 -0
  24. package/dist/pages/donut-chart/donut-chart.props.js +3 -0
  25. package/dist/pages/funnel-chart/funnel-chart.js +1094 -0
  26. package/dist/pages/funnel-chart/funnel-chart.props.js +3 -0
  27. package/dist/pages/gauge-chart/gauge-chart.js +767 -0
  28. package/dist/pages/gauge-chart/gauge-chart.props.js +3 -0
  29. package/dist/pages/heatmap/heatmap.js +1967 -0
  30. package/dist/pages/heatmap/heatmap.props.js +3 -0
  31. package/dist/pages/histogram-chart/histogram-chart.js +768 -0
  32. package/dist/pages/histogram-chart/histogram-chart.props.js +3 -0
  33. package/dist/pages/horizontal-bar-chart/horizontal-bar-chart.js +701 -0
  34. package/dist/pages/horizontal-bar-chart/horizontal-bar-chart.props.js +3 -0
  35. package/dist/pages/line-chart/line-chart.js +1882 -0
  36. package/dist/pages/line-chart/line-chart.props.js +3 -0
  37. package/dist/pages/pages.json +393 -0
  38. package/dist/pages/pareto-chart/pareto-chart.js +669 -0
  39. package/dist/pages/pareto-chart/pareto-chart.props.js +3 -0
  40. package/dist/pages/percent-stacked-bar/percent-stacked-bar.js +662 -0
  41. package/dist/pages/percent-stacked-bar/percent-stacked-bar.props.js +3 -0
  42. package/dist/pages/pie-chart/pie-chart.js +1007 -0
  43. package/dist/pages/pie-chart/pie-chart.props.js +3 -0
  44. package/dist/pages/polar-area-chart/polar-area-chart.js +812 -0
  45. package/dist/pages/polar-area-chart/polar-area-chart.props.js +3 -0
  46. package/dist/pages/radar-chart/radar-chart.js +1101 -0
  47. package/dist/pages/radar-chart/radar-chart.props.js +3 -0
  48. package/dist/pages/radial-bar-chart/radial-bar-chart.js +766 -0
  49. package/dist/pages/radial-bar-chart/radial-bar-chart.props.js +3 -0
  50. package/dist/pages/range-chart/range-chart.js +914 -0
  51. package/dist/pages/range-chart/range-chart.props.js +3 -0
  52. package/dist/pages/regression-overlay/regression-overlay.js +494 -0
  53. package/dist/pages/regression-overlay/regression-overlay.props.js +3 -0
  54. package/dist/pages/sankey-chart/sankey-chart.js +700 -0
  55. package/dist/pages/sankey-chart/sankey-chart.props.js +3 -0
  56. package/dist/pages/scatter-plot/scatter-plot.js +1248 -0
  57. package/dist/pages/scatter-plot/scatter-plot.props.js +3 -0
  58. package/dist/pages/sparkbar/sparkbar.js +629 -0
  59. package/dist/pages/sparkbar/sparkbar.props.js +3 -0
  60. package/dist/pages/sparkline/sparkline.js +960 -0
  61. package/dist/pages/sparkline/sparkline.props.js +3 -0
  62. package/dist/pages/spend-5xQ76WSj.js +185 -0
  63. package/dist/pages/stacked-area-chart/stacked-area-chart.js +912 -0
  64. package/dist/pages/stacked-area-chart/stacked-area-chart.props.js +3 -0
  65. package/dist/pages/stacked-bar-chart/stacked-bar-chart.js +722 -0
  66. package/dist/pages/stacked-bar-chart/stacked-bar-chart.props.js +3 -0
  67. package/dist/pages/step-line-chart/step-line-chart.js +573 -0
  68. package/dist/pages/step-line-chart/step-line-chart.props.js +3 -0
  69. package/dist/pages/stream-graph/stream-graph.js +1662 -0
  70. package/dist/pages/stream-graph/stream-graph.props.js +3 -0
  71. package/dist/pages/sunburst-chart/sunburst-chart.js +1051 -0
  72. package/dist/pages/sunburst-chart/sunburst-chart.props.js +3 -0
  73. package/dist/pages/timeline-chart/timeline-chart.js +1124 -0
  74. package/dist/pages/timeline-chart/timeline-chart.props.js +3 -0
  75. package/dist/pages/treemap-chart/treemap-chart.js +904 -0
  76. package/dist/pages/treemap-chart/treemap-chart.props.js +3 -0
  77. package/dist/pages/violin-plot/violin-plot.js +1303 -0
  78. package/dist/pages/violin-plot/violin-plot.props.js +3 -0
  79. package/dist/pages/visitors-oFFVcbIZ.js +248 -0
  80. package/dist/pages/waterfall-chart/waterfall-chart.js +1195 -0
  81. package/dist/pages/waterfall-chart/waterfall-chart.props.js +3 -0
  82. package/dist/shared-DVZJ2nST.js +14711 -0
  83. package/dist/theme.js +1 -1
  84. package/locales/en/specimen/area-chart.json +56 -0
  85. package/locales/en/specimen/bar-chart.json +56 -0
  86. package/locales/en/specimen/box-plot.json +65 -0
  87. package/locales/en/specimen/bubble-chart.json +47 -0
  88. package/locales/en/specimen/burndown-chart.json +46 -0
  89. package/locales/en/specimen/candlestick-chart.json +42 -0
  90. package/locales/en/specimen/chart.json +53 -0
  91. package/locales/en/specimen/chord-diagram.json +69 -0
  92. package/locales/en/specimen/combo-chart.json +41 -0
  93. package/locales/en/specimen/distribution-chart.json +47 -0
  94. package/locales/en/specimen/donut-chart.json +63 -0
  95. package/locales/en/specimen/funnel-chart.json +84 -0
  96. package/locales/en/specimen/gauge-chart.json +68 -0
  97. package/locales/en/specimen/heatmap.json +187 -0
  98. package/locales/en/specimen/histogram-chart.json +48 -0
  99. package/locales/en/specimen/horizontal-bar-chart.json +54 -0
  100. package/locales/en/specimen/line-chart.json +106 -0
  101. package/locales/en/specimen/pareto-chart.json +43 -0
  102. package/locales/en/specimen/percent-stacked-bar.json +37 -0
  103. package/locales/en/specimen/pie-chart.json +80 -0
  104. package/locales/en/specimen/polar-area-chart.json +90 -0
  105. package/locales/en/specimen/radar-chart.json +82 -0
  106. package/locales/en/specimen/radial-bar-chart.json +62 -0
  107. package/locales/en/specimen/range-chart.json +42 -0
  108. package/locales/en/specimen/regression-overlay.json +36 -0
  109. package/locales/en/specimen/sankey-chart.json +89 -0
  110. package/locales/en/specimen/scatter-plot.json +88 -0
  111. package/locales/en/specimen/sparkbar.json +51 -0
  112. package/locales/en/specimen/sparkline.json +70 -0
  113. package/locales/en/specimen/stacked-area-chart.json +44 -0
  114. package/locales/en/specimen/stacked-bar-chart.json +34 -0
  115. package/locales/en/specimen/step-line-chart.json +33 -0
  116. package/locales/en/specimen/stream-graph.json +54 -0
  117. package/locales/en/specimen/sunburst-chart.json +110 -0
  118. package/locales/en/specimen/timeline-chart.json +77 -0
  119. package/locales/en/specimen/treemap-chart.json +107 -0
  120. package/locales/en/specimen/violin-plot.json +54 -0
  121. package/locales/en/specimen/waterfall-chart.json +71 -0
  122. package/package.json +8 -7
  123. /package/dist/{recipe-BbGw00ut.js → recipes-BbGw00ut.js} +0 -0
@@ -0,0 +1,1124 @@
1
+ import { t as __exportAll } from "../../rolldown-runtime-D7D4PA-g.js";
2
+ import { a as TimelineChart } from "../../shared-DVZJ2nST.js";
3
+ import { c } from "react/compiler-runtime";
4
+ import { useState } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { Room, specimen, useWords } from "@stealthscale/specimen";
7
+ import { RotateCcwIcon } from "lucide-react";
8
+ import { Button } from "@stealthscale/component-actions";
9
+ import { Stack } from "@stealthscale/component-layout";
10
+ import { Text } from "@stealthscale/component-typography";
11
+ //#region src/timeline-chart/examples/burst.example.tsx
12
+ var burst_example_exports = /* @__PURE__ */ __exportAll({
13
+ Burst: () => Burst,
14
+ source: () => source$5
15
+ });
16
+ const MOMENTS$4 = [
17
+ {
18
+ at: "13:52:00",
19
+ kind: "deploy",
20
+ lane: "changes"
21
+ },
22
+ {
23
+ at: "14:03:05",
24
+ color: "warning",
25
+ kind: "latency",
26
+ lane: "alerts"
27
+ },
28
+ {
29
+ at: "14:03:20",
30
+ color: "error",
31
+ kind: "errors",
32
+ lane: "alerts"
33
+ },
34
+ {
35
+ at: "14:03:41",
36
+ color: "warning",
37
+ kind: "latency",
38
+ lane: "alerts"
39
+ },
40
+ {
41
+ at: "14:04:02",
42
+ color: "warning",
43
+ kind: "queue",
44
+ lane: "alerts"
45
+ },
46
+ {
47
+ at: "14:04:18",
48
+ color: "error",
49
+ kind: "errors",
50
+ lane: "alerts"
51
+ },
52
+ {
53
+ at: "14:04:37",
54
+ color: "error",
55
+ kind: "checkout",
56
+ lane: "alerts"
57
+ },
58
+ {
59
+ at: "14:05:02",
60
+ color: "warning",
61
+ kind: "latency",
62
+ lane: "alerts"
63
+ },
64
+ {
65
+ at: "14:21:00",
66
+ kind: "rollback",
67
+ lane: "changes"
68
+ },
69
+ {
70
+ at: "14:26:30",
71
+ color: "success",
72
+ kind: "recovered",
73
+ lane: "alerts"
74
+ }
75
+ ];
76
+ function Burst() {
77
+ const $ = c(27);
78
+ const { i18n, t } = useWords("timeline-chart");
79
+ let t0;
80
+ if ($[0] !== t) {
81
+ t0 = t("burst.caption");
82
+ $[0] = t;
83
+ $[1] = t0;
84
+ } else t0 = $[1];
85
+ let t1;
86
+ if ($[2] !== t) {
87
+ t1 = MOMENTS$4.map((moment, index) => ({
88
+ at: `2026-09-28T${moment.at}Z`,
89
+ color: moment.color,
90
+ key: String(index),
91
+ label: t(`burst.${moment.kind}`),
92
+ lane: moment.lane
93
+ }));
94
+ $[2] = t;
95
+ $[3] = t1;
96
+ } else t1 = $[3];
97
+ let t2;
98
+ if ($[4] !== t) {
99
+ t2 = t("burst.label");
100
+ $[4] = t;
101
+ $[5] = t2;
102
+ } else t2 = $[5];
103
+ let t3;
104
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
105
+ t3 = {
106
+ hour: "2-digit",
107
+ hourCycle: "h23",
108
+ minute: "2-digit",
109
+ second: "2-digit",
110
+ timeZone: "UTC"
111
+ };
112
+ $[6] = t3;
113
+ } else t3 = $[6];
114
+ let t4;
115
+ if ($[7] !== t) {
116
+ t4 = t("burst.changes");
117
+ $[7] = t;
118
+ $[8] = t4;
119
+ } else t4 = $[8];
120
+ let t5;
121
+ if ($[9] !== t4) {
122
+ t5 = {
123
+ key: "changes",
124
+ label: t4
125
+ };
126
+ $[9] = t4;
127
+ $[10] = t5;
128
+ } else t5 = $[10];
129
+ let t6;
130
+ if ($[11] !== t) {
131
+ t6 = t("burst.alerts");
132
+ $[11] = t;
133
+ $[12] = t6;
134
+ } else t6 = $[12];
135
+ let t7;
136
+ if ($[13] !== t6) {
137
+ t7 = {
138
+ key: "alerts",
139
+ label: t6
140
+ };
141
+ $[13] = t6;
142
+ $[14] = t7;
143
+ } else t7 = $[14];
144
+ let t8;
145
+ if ($[15] !== t5 || $[16] !== t7) {
146
+ t8 = [t5, t7];
147
+ $[15] = t5;
148
+ $[16] = t7;
149
+ $[17] = t8;
150
+ } else t8 = $[17];
151
+ let t9;
152
+ if ($[18] !== t) {
153
+ t9 = (count) => t("burst.more", { count });
154
+ $[18] = t;
155
+ $[19] = t9;
156
+ } else t9 = $[19];
157
+ let t10;
158
+ if ($[20] !== i18n.language || $[21] !== t0 || $[22] !== t1 || $[23] !== t2 || $[24] !== t8 || $[25] !== t9) {
159
+ t10 = /* @__PURE__ */ jsx(TimelineChart, {
160
+ caption: t0,
161
+ defaultIndex: 2,
162
+ events: t1,
163
+ label: t2,
164
+ labelOptions: t3,
165
+ lanes: t8,
166
+ locale: i18n.language,
167
+ moreLabel: t9,
168
+ since: "2026-09-28T13:30:00Z",
169
+ until: "2026-09-28T15:30:00Z"
170
+ });
171
+ $[20] = i18n.language;
172
+ $[21] = t0;
173
+ $[22] = t1;
174
+ $[23] = t2;
175
+ $[24] = t8;
176
+ $[25] = t9;
177
+ $[26] = t10;
178
+ } else t10 = $[26];
179
+ return t10;
180
+ }
181
+ const source$5 = "import { type ReactElement } from \"react\";\n\nimport { useWords } from \"@stealthscale/specimen\";\n\nimport { TimelineChart, TimelineEvent } from \"@stealthscale/component-charts\";\n\nconst MOMENTS: ReadonlyArray<{\n at: string;\n color?: TimelineEvent[\"color\"];\n kind: string;\n lane: string;\n}> = [\n { at: \"13:52:00\", kind: \"deploy\", lane: \"changes\" },\n { at: \"14:03:05\", color: \"warning\", kind: \"latency\", lane: \"alerts\" },\n { at: \"14:03:20\", color: \"error\", kind: \"errors\", lane: \"alerts\" },\n { at: \"14:03:41\", color: \"warning\", kind: \"latency\", lane: \"alerts\" },\n { at: \"14:04:02\", color: \"warning\", kind: \"queue\", lane: \"alerts\" },\n { at: \"14:04:18\", color: \"error\", kind: \"errors\", lane: \"alerts\" },\n { at: \"14:04:37\", color: \"error\", kind: \"checkout\", lane: \"alerts\" },\n { at: \"14:05:02\", color: \"warning\", kind: \"latency\", lane: \"alerts\" },\n { at: \"14:21:00\", kind: \"rollback\", lane: \"changes\" },\n { at: \"14:26:30\", color: \"success\", kind: \"recovered\", lane: \"alerts\" },\n];\n\nexport function Burst(): ReactElement {\n const { i18n, t } = useWords(\"timeline-chart\");\n\n return (\n <TimelineChart\n caption={t(\"burst.caption\")}\n defaultIndex={2}\n events={MOMENTS.map((moment, index) => ({\n at: `2026-09-28T${moment.at}Z`,\n color: moment.color,\n key: String(index),\n label: t(`burst.${moment.kind}`),\n lane: moment.lane,\n }))}\n label={t(\"burst.label\")}\n labelOptions={{\n hour: \"2-digit\",\n hourCycle: \"h23\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZone: \"UTC\",\n }}\n lanes={[\n { key: \"changes\", label: t(\"burst.changes\") },\n { key: \"alerts\", label: t(\"burst.alerts\") },\n ]}\n locale={i18n.language}\n moreLabel={(count) => t(\"burst.more\", { count })}\n since=\"2026-09-28T13:30:00Z\"\n until=\"2026-09-28T15:30:00Z\"\n />\n );\n}\n";
182
+ //#endregion
183
+ //#region src/timeline-chart/examples/deploys.example.tsx
184
+ var deploys_example_exports = /* @__PURE__ */ __exportAll({
185
+ Deploys: () => Deploys,
186
+ source: () => source$4
187
+ });
188
+ const MOMENTS$3 = [
189
+ {
190
+ at: "03:00",
191
+ color: "neutral",
192
+ kind: "backup",
193
+ lane: "db"
194
+ },
195
+ {
196
+ at: "06:30",
197
+ color: "warning",
198
+ kind: "backlog",
199
+ lane: "worker"
200
+ },
201
+ {
202
+ at: "08:10",
203
+ color: "success",
204
+ kind: "cleared",
205
+ lane: "worker"
206
+ },
207
+ {
208
+ at: "09:12",
209
+ kind: "deploy",
210
+ lane: "api",
211
+ version: "4.12"
212
+ },
213
+ {
214
+ at: "10:05",
215
+ kind: "deploy",
216
+ lane: "web",
217
+ version: "2.8"
218
+ },
219
+ {
220
+ at: "11:40",
221
+ color: "warning",
222
+ kind: "slow",
223
+ lane: "db"
224
+ },
225
+ {
226
+ at: "13:20",
227
+ kind: "deploy",
228
+ lane: "web",
229
+ version: "2.9"
230
+ },
231
+ {
232
+ at: "14:03",
233
+ color: "warning",
234
+ kind: "latency",
235
+ lane: "api"
236
+ },
237
+ {
238
+ at: "14:05",
239
+ color: "error",
240
+ kind: "errors",
241
+ lane: "api"
242
+ },
243
+ {
244
+ at: "14:09",
245
+ color: "warning",
246
+ kind: "latency",
247
+ lane: "api"
248
+ },
249
+ {
250
+ at: "14:12",
251
+ color: "info",
252
+ kind: "notice"
253
+ },
254
+ {
255
+ at: "16:20",
256
+ kind: "rollback",
257
+ lane: "api",
258
+ version: "4.11"
259
+ },
260
+ {
261
+ at: "18:40",
262
+ kind: "deploy",
263
+ lane: "api",
264
+ version: "4.13"
265
+ },
266
+ {
267
+ at: "20:55",
268
+ kind: "deploy",
269
+ lane: "web",
270
+ version: "2.9.1"
271
+ },
272
+ {
273
+ at: "21:15",
274
+ kind: "deploy",
275
+ lane: "worker",
276
+ version: "1.7"
277
+ },
278
+ {
279
+ at: "23:10",
280
+ color: "neutral",
281
+ kind: "failover",
282
+ lane: "db"
283
+ }
284
+ ];
285
+ function Deploys() {
286
+ const $ = c(37);
287
+ const { i18n, t } = useWords("timeline-chart");
288
+ let t0;
289
+ if ($[0] !== t) {
290
+ t0 = t("deploys.caption");
291
+ $[0] = t;
292
+ $[1] = t0;
293
+ } else t0 = $[1];
294
+ let t1;
295
+ if ($[2] !== t) {
296
+ t1 = MOMENTS$3.map((moment, index) => ({
297
+ at: `2026-09-28T${moment.at}:00Z`,
298
+ color: moment.color,
299
+ key: String(index),
300
+ label: t(`deploys.${moment.kind}`, { version: moment.version }),
301
+ lane: moment.lane
302
+ }));
303
+ $[2] = t;
304
+ $[3] = t1;
305
+ } else t1 = $[3];
306
+ let t2;
307
+ if ($[4] !== t) {
308
+ t2 = t("deploys.label");
309
+ $[4] = t;
310
+ $[5] = t2;
311
+ } else t2 = $[5];
312
+ let t3;
313
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
314
+ t3 = {
315
+ hour: "2-digit",
316
+ hourCycle: "h23",
317
+ minute: "2-digit",
318
+ timeZone: "UTC"
319
+ };
320
+ $[6] = t3;
321
+ } else t3 = $[6];
322
+ let t4;
323
+ if ($[7] !== t) {
324
+ t4 = t("deploys.api");
325
+ $[7] = t;
326
+ $[8] = t4;
327
+ } else t4 = $[8];
328
+ let t5;
329
+ if ($[9] !== t4) {
330
+ t5 = {
331
+ key: "api",
332
+ label: t4
333
+ };
334
+ $[9] = t4;
335
+ $[10] = t5;
336
+ } else t5 = $[10];
337
+ let t6;
338
+ if ($[11] !== t) {
339
+ t6 = t("deploys.web");
340
+ $[11] = t;
341
+ $[12] = t6;
342
+ } else t6 = $[12];
343
+ let t7;
344
+ if ($[13] !== t6) {
345
+ t7 = {
346
+ key: "web",
347
+ label: t6
348
+ };
349
+ $[13] = t6;
350
+ $[14] = t7;
351
+ } else t7 = $[14];
352
+ let t8;
353
+ if ($[15] !== t) {
354
+ t8 = t("deploys.worker");
355
+ $[15] = t;
356
+ $[16] = t8;
357
+ } else t8 = $[16];
358
+ let t9;
359
+ if ($[17] !== t8) {
360
+ t9 = {
361
+ key: "worker",
362
+ label: t8
363
+ };
364
+ $[17] = t8;
365
+ $[18] = t9;
366
+ } else t9 = $[18];
367
+ let t10;
368
+ if ($[19] !== t) {
369
+ t10 = t("deploys.db");
370
+ $[19] = t;
371
+ $[20] = t10;
372
+ } else t10 = $[20];
373
+ let t11;
374
+ if ($[21] !== t10) {
375
+ t11 = {
376
+ key: "db",
377
+ label: t10
378
+ };
379
+ $[21] = t10;
380
+ $[22] = t11;
381
+ } else t11 = $[22];
382
+ let t12;
383
+ if ($[23] !== t11 || $[24] !== t5 || $[25] !== t7 || $[26] !== t9) {
384
+ t12 = [
385
+ t5,
386
+ t7,
387
+ t9,
388
+ t11
389
+ ];
390
+ $[23] = t11;
391
+ $[24] = t5;
392
+ $[25] = t7;
393
+ $[26] = t9;
394
+ $[27] = t12;
395
+ } else t12 = $[27];
396
+ const t13 = i18n.language;
397
+ let t14;
398
+ if ($[28] !== t) {
399
+ t14 = t("deploys.other");
400
+ $[28] = t;
401
+ $[29] = t14;
402
+ } else t14 = $[29];
403
+ let t15;
404
+ if ($[30] !== i18n.language || $[31] !== t0 || $[32] !== t1 || $[33] !== t12 || $[34] !== t14 || $[35] !== t2) {
405
+ t15 = /* @__PURE__ */ jsx(TimelineChart, {
406
+ caption: t0,
407
+ events: t1,
408
+ label: t2,
409
+ labelOptions: t3,
410
+ lanes: t12,
411
+ locale: t13,
412
+ otherLabel: t14,
413
+ since: "2026-09-28T00:00:00Z",
414
+ until: "2026-09-29T00:00:00Z"
415
+ });
416
+ $[30] = i18n.language;
417
+ $[31] = t0;
418
+ $[32] = t1;
419
+ $[33] = t12;
420
+ $[34] = t14;
421
+ $[35] = t2;
422
+ $[36] = t15;
423
+ } else t15 = $[36];
424
+ return t15;
425
+ }
426
+ const source$4 = "import { type ReactElement } from \"react\";\n\nimport { useWords } from \"@stealthscale/specimen\";\n\nimport { TimelineChart, TimelineEvent } from \"@stealthscale/component-charts\";\n\nconst MOMENTS: ReadonlyArray<{\n at: string;\n color?: TimelineEvent[\"color\"];\n kind: string;\n lane?: string;\n version?: string;\n}> = [\n { at: \"03:00\", color: \"neutral\", kind: \"backup\", lane: \"db\" },\n { at: \"06:30\", color: \"warning\", kind: \"backlog\", lane: \"worker\" },\n { at: \"08:10\", color: \"success\", kind: \"cleared\", lane: \"worker\" },\n { at: \"09:12\", kind: \"deploy\", lane: \"api\", version: \"4.12\" },\n { at: \"10:05\", kind: \"deploy\", lane: \"web\", version: \"2.8\" },\n { at: \"11:40\", color: \"warning\", kind: \"slow\", lane: \"db\" },\n { at: \"13:20\", kind: \"deploy\", lane: \"web\", version: \"2.9\" },\n { at: \"14:03\", color: \"warning\", kind: \"latency\", lane: \"api\" },\n { at: \"14:05\", color: \"error\", kind: \"errors\", lane: \"api\" },\n { at: \"14:09\", color: \"warning\", kind: \"latency\", lane: \"api\" },\n { at: \"14:12\", color: \"info\", kind: \"notice\" },\n { at: \"16:20\", kind: \"rollback\", lane: \"api\", version: \"4.11\" },\n { at: \"18:40\", kind: \"deploy\", lane: \"api\", version: \"4.13\" },\n { at: \"20:55\", kind: \"deploy\", lane: \"web\", version: \"2.9.1\" },\n { at: \"21:15\", kind: \"deploy\", lane: \"worker\", version: \"1.7\" },\n { at: \"23:10\", color: \"neutral\", kind: \"failover\", lane: \"db\" },\n];\n\nexport function Deploys(): ReactElement {\n const { i18n, t } = useWords(\"timeline-chart\");\n\n return (\n <TimelineChart\n caption={t(\"deploys.caption\")}\n events={MOMENTS.map((moment, index) => ({\n at: `2026-09-28T${moment.at}:00Z`,\n color: moment.color,\n key: String(index),\n label: t(`deploys.${moment.kind}`, { version: moment.version }),\n lane: moment.lane,\n }))}\n label={t(\"deploys.label\")}\n labelOptions={{ hour: \"2-digit\", hourCycle: \"h23\", minute: \"2-digit\", timeZone: \"UTC\" }}\n lanes={[\n { key: \"api\", label: t(\"deploys.api\") },\n { key: \"web\", label: t(\"deploys.web\") },\n { key: \"worker\", label: t(\"deploys.worker\") },\n { key: \"db\", label: t(\"deploys.db\") },\n ]}\n locale={i18n.language}\n otherLabel={t(\"deploys.other\")}\n since=\"2026-09-28T00:00:00Z\"\n until=\"2026-09-29T00:00:00Z\"\n />\n );\n}\n";
427
+ //#endregion
428
+ //#region src/timeline-chart/examples/quiet.example.tsx
429
+ var quiet_example_exports = /* @__PURE__ */ __exportAll({
430
+ Quiet: () => Quiet,
431
+ source: () => source$3
432
+ });
433
+ const MOMENTS$2 = [];
434
+ function Quiet() {
435
+ const $ = c(11);
436
+ const { i18n, t } = useWords("timeline-chart");
437
+ let t0;
438
+ if ($[0] !== t) {
439
+ t0 = t("quiet.caption");
440
+ $[0] = t;
441
+ $[1] = t0;
442
+ } else t0 = $[1];
443
+ let t1;
444
+ if ($[2] !== t) {
445
+ t1 = t("quiet.empty");
446
+ $[2] = t;
447
+ $[3] = t1;
448
+ } else t1 = $[3];
449
+ let t2;
450
+ if ($[4] !== t) {
451
+ t2 = t("quiet.label");
452
+ $[4] = t;
453
+ $[5] = t2;
454
+ } else t2 = $[5];
455
+ let t3;
456
+ if ($[6] !== i18n.language || $[7] !== t0 || $[8] !== t1 || $[9] !== t2) {
457
+ t3 = /* @__PURE__ */ jsx(TimelineChart, {
458
+ caption: t0,
459
+ empty: t1,
460
+ events: MOMENTS$2,
461
+ label: t2,
462
+ locale: i18n.language
463
+ });
464
+ $[6] = i18n.language;
465
+ $[7] = t0;
466
+ $[8] = t1;
467
+ $[9] = t2;
468
+ $[10] = t3;
469
+ } else t3 = $[10];
470
+ return t3;
471
+ }
472
+ const source$3 = "import { type ReactElement } from \"react\";\n\nimport { useWords } from \"@stealthscale/specimen\";\n\nimport { TimelineChart, TimelineEvent } from \"@stealthscale/component-charts\";\n\nconst MOMENTS: TimelineEvent[] = [];\n\nexport function Quiet(): ReactElement {\n const { i18n, t } = useWords(\"timeline-chart\");\n\n return (\n <TimelineChart\n caption={t(\"quiet.caption\")}\n empty={t(\"quiet.empty\")}\n events={MOMENTS}\n label={t(\"quiet.label\")}\n locale={i18n.language}\n />\n );\n}\n";
473
+ //#endregion
474
+ //#region src/timeline-chart/examples/releases.example.tsx
475
+ var releases_example_exports = /* @__PURE__ */ __exportAll({
476
+ Releases: () => Releases,
477
+ source: () => source$2
478
+ });
479
+ const RELEASES = [
480
+ {
481
+ at: "2025-10-14",
482
+ kind: "release",
483
+ version: "3.0"
484
+ },
485
+ {
486
+ at: "2025-11-18",
487
+ kind: "release",
488
+ version: "3.1"
489
+ },
490
+ {
491
+ at: "2026-01-20",
492
+ kind: "release",
493
+ version: "3.2"
494
+ },
495
+ {
496
+ at: "2026-02-24",
497
+ kind: "release",
498
+ version: "3.3"
499
+ },
500
+ {
501
+ at: "2026-02-26",
502
+ color: "warning",
503
+ kind: "patch",
504
+ version: "3.3.1"
505
+ },
506
+ {
507
+ at: "2026-04-07",
508
+ kind: "release",
509
+ version: "4.0"
510
+ },
511
+ {
512
+ at: "2026-05-12",
513
+ kind: "release",
514
+ version: "4.1"
515
+ },
516
+ {
517
+ at: "2026-06-16",
518
+ kind: "release",
519
+ version: "4.2"
520
+ },
521
+ {
522
+ at: "2026-06-19",
523
+ color: "warning",
524
+ kind: "patch",
525
+ version: "4.2.1"
526
+ },
527
+ {
528
+ at: "2026-07-21",
529
+ kind: "release",
530
+ version: "4.3"
531
+ },
532
+ {
533
+ at: "2026-09-01",
534
+ kind: "release",
535
+ version: "4.4"
536
+ }
537
+ ];
538
+ function Releases() {
539
+ const $ = c(12);
540
+ const { i18n, t } = useWords("timeline-chart");
541
+ let t0;
542
+ if ($[0] !== t) {
543
+ t0 = t("releases.caption");
544
+ $[0] = t;
545
+ $[1] = t0;
546
+ } else t0 = $[1];
547
+ let t1;
548
+ if ($[2] !== t) {
549
+ t1 = RELEASES.map((release) => ({
550
+ at: `${release.at}T12:00:00Z`,
551
+ color: release.color,
552
+ key: release.version,
553
+ label: t(`releases.${release.kind}`, { version: release.version })
554
+ }));
555
+ $[2] = t;
556
+ $[3] = t1;
557
+ } else t1 = $[3];
558
+ let t2;
559
+ if ($[4] !== t) {
560
+ t2 = t("releases.label");
561
+ $[4] = t;
562
+ $[5] = t2;
563
+ } else t2 = $[5];
564
+ let t3;
565
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
566
+ t3 = {
567
+ dateStyle: "medium",
568
+ timeZone: "UTC"
569
+ };
570
+ $[6] = t3;
571
+ } else t3 = $[6];
572
+ let t4;
573
+ if ($[7] !== i18n.language || $[8] !== t0 || $[9] !== t1 || $[10] !== t2) {
574
+ t4 = /* @__PURE__ */ jsx(TimelineChart, {
575
+ caption: t0,
576
+ events: t1,
577
+ label: t2,
578
+ labelOptions: t3,
579
+ locale: i18n.language,
580
+ since: "2025-10-01T00:00:00Z",
581
+ ticks: 3,
582
+ until: "2026-10-01T00:00:00Z"
583
+ });
584
+ $[7] = i18n.language;
585
+ $[8] = t0;
586
+ $[9] = t1;
587
+ $[10] = t2;
588
+ $[11] = t4;
589
+ } else t4 = $[11];
590
+ return t4;
591
+ }
592
+ const source$2 = "import { type ReactElement } from \"react\";\n\nimport { useWords } from \"@stealthscale/specimen\";\n\nimport { TimelineChart, TimelineEvent } from \"@stealthscale/component-charts\";\n\nconst RELEASES: ReadonlyArray<{\n at: string;\n color?: TimelineEvent[\"color\"];\n kind: \"patch\" | \"release\";\n version: string;\n}> = [\n { at: \"2025-10-14\", kind: \"release\", version: \"3.0\" },\n { at: \"2025-11-18\", kind: \"release\", version: \"3.1\" },\n { at: \"2026-01-20\", kind: \"release\", version: \"3.2\" },\n { at: \"2026-02-24\", kind: \"release\", version: \"3.3\" },\n { at: \"2026-02-26\", color: \"warning\", kind: \"patch\", version: \"3.3.1\" },\n { at: \"2026-04-07\", kind: \"release\", version: \"4.0\" },\n { at: \"2026-05-12\", kind: \"release\", version: \"4.1\" },\n { at: \"2026-06-16\", kind: \"release\", version: \"4.2\" },\n { at: \"2026-06-19\", color: \"warning\", kind: \"patch\", version: \"4.2.1\" },\n { at: \"2026-07-21\", kind: \"release\", version: \"4.3\" },\n { at: \"2026-09-01\", kind: \"release\", version: \"4.4\" },\n];\n\nexport function Releases(): ReactElement {\n const { i18n, t } = useWords(\"timeline-chart\");\n\n return (\n <TimelineChart\n caption={t(\"releases.caption\")}\n events={RELEASES.map((release) => ({\n at: `${release.at}T12:00:00Z`,\n color: release.color,\n key: release.version,\n label: t(`releases.${release.kind}`, { version: release.version }),\n }))}\n label={t(\"releases.label\")}\n labelOptions={{ dateStyle: \"medium\", timeZone: \"UTC\" }}\n locale={i18n.language}\n since=\"2025-10-01T00:00:00Z\"\n ticks={3}\n until=\"2026-10-01T00:00:00Z\"\n />\n );\n}\n";
593
+ //#endregion
594
+ //#region src/timeline-chart/examples/replay.example.tsx
595
+ var replay_example_exports = /* @__PURE__ */ __exportAll({
596
+ Replay: () => Replay,
597
+ source: () => source$1
598
+ });
599
+ const MOMENTS$1 = [
600
+ {
601
+ at: "09:12",
602
+ kind: "deploy",
603
+ lane: "api",
604
+ version: "4.12"
605
+ },
606
+ {
607
+ at: "10:05",
608
+ kind: "deploy",
609
+ lane: "web",
610
+ version: "2.8"
611
+ },
612
+ {
613
+ at: "13:20",
614
+ kind: "deploy",
615
+ lane: "web",
616
+ version: "2.9"
617
+ },
618
+ {
619
+ at: "14:03",
620
+ color: "warning",
621
+ kind: "latency",
622
+ lane: "api"
623
+ },
624
+ {
625
+ at: "14:05",
626
+ color: "error",
627
+ kind: "errors",
628
+ lane: "api"
629
+ },
630
+ {
631
+ at: "16:05",
632
+ kind: "rollback",
633
+ lane: "api",
634
+ version: "4.11"
635
+ },
636
+ {
637
+ at: "20:55",
638
+ kind: "deploy",
639
+ lane: "web",
640
+ version: "2.9.1"
641
+ }
642
+ ];
643
+ function Replay() {
644
+ const $ = c(36);
645
+ const { i18n, t } = useWords("timeline-chart");
646
+ const [run, setRun] = useState(0);
647
+ let t0;
648
+ if ($[0] !== t) {
649
+ t0 = t("replay.caption");
650
+ $[0] = t;
651
+ $[1] = t0;
652
+ } else t0 = $[1];
653
+ let t1;
654
+ if ($[2] !== t) {
655
+ t1 = MOMENTS$1.map((moment, index) => ({
656
+ at: `2026-09-28T${moment.at}:00Z`,
657
+ color: moment.color,
658
+ key: String(index),
659
+ label: t(`deploys.${moment.kind}`, { version: moment.version }),
660
+ lane: moment.lane
661
+ }));
662
+ $[2] = t;
663
+ $[3] = t1;
664
+ } else t1 = $[3];
665
+ let t2;
666
+ if ($[4] !== t) {
667
+ t2 = t("replay.label");
668
+ $[4] = t;
669
+ $[5] = t2;
670
+ } else t2 = $[5];
671
+ let t3;
672
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
673
+ t3 = {
674
+ hour: "2-digit",
675
+ hourCycle: "h23",
676
+ minute: "2-digit",
677
+ timeZone: "UTC"
678
+ };
679
+ $[6] = t3;
680
+ } else t3 = $[6];
681
+ let t4;
682
+ if ($[7] !== t) {
683
+ t4 = t("deploys.api");
684
+ $[7] = t;
685
+ $[8] = t4;
686
+ } else t4 = $[8];
687
+ let t5;
688
+ if ($[9] !== t4) {
689
+ t5 = {
690
+ key: "api",
691
+ label: t4
692
+ };
693
+ $[9] = t4;
694
+ $[10] = t5;
695
+ } else t5 = $[10];
696
+ let t6;
697
+ if ($[11] !== t) {
698
+ t6 = t("deploys.web");
699
+ $[11] = t;
700
+ $[12] = t6;
701
+ } else t6 = $[12];
702
+ let t7;
703
+ if ($[13] !== t6) {
704
+ t7 = {
705
+ key: "web",
706
+ label: t6
707
+ };
708
+ $[13] = t6;
709
+ $[14] = t7;
710
+ } else t7 = $[14];
711
+ let t8;
712
+ if ($[15] !== t5 || $[16] !== t7) {
713
+ t8 = [t5, t7];
714
+ $[15] = t5;
715
+ $[16] = t7;
716
+ $[17] = t8;
717
+ } else t8 = $[17];
718
+ let t9;
719
+ if ($[18] !== i18n.language || $[19] !== run || $[20] !== t0 || $[21] !== t1 || $[22] !== t2 || $[23] !== t8) {
720
+ t9 = /* @__PURE__ */ jsx(TimelineChart, {
721
+ animate: true,
722
+ caption: t0,
723
+ events: t1,
724
+ label: t2,
725
+ labelOptions: t3,
726
+ lanes: t8,
727
+ locale: i18n.language,
728
+ since: "2026-09-28T00:00:00Z",
729
+ until: "2026-09-29T00:00:00Z"
730
+ }, run);
731
+ $[18] = i18n.language;
732
+ $[19] = run;
733
+ $[20] = t0;
734
+ $[21] = t1;
735
+ $[22] = t2;
736
+ $[23] = t8;
737
+ $[24] = t9;
738
+ } else t9 = $[24];
739
+ let t10;
740
+ if ($[25] !== run) {
741
+ t10 = () => {
742
+ setRun(run + 1);
743
+ };
744
+ $[25] = run;
745
+ $[26] = t10;
746
+ } else t10 = $[26];
747
+ let t11;
748
+ if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
749
+ t11 = /* @__PURE__ */ jsx(RotateCcwIcon, {});
750
+ $[27] = t11;
751
+ } else t11 = $[27];
752
+ let t12;
753
+ if ($[28] !== t) {
754
+ t12 = t("replay.replay");
755
+ $[28] = t;
756
+ $[29] = t12;
757
+ } else t12 = $[29];
758
+ let t13;
759
+ if ($[30] !== t10 || $[31] !== t12) {
760
+ t13 = /* @__PURE__ */ jsxs(Button, {
761
+ onClick: t10,
762
+ size: "sm",
763
+ variant: "outline",
764
+ children: [t11, t12]
765
+ });
766
+ $[30] = t10;
767
+ $[31] = t12;
768
+ $[32] = t13;
769
+ } else t13 = $[32];
770
+ let t14;
771
+ if ($[33] !== t13 || $[34] !== t9) {
772
+ t14 = /* @__PURE__ */ jsxs(Stack, {
773
+ align: "flex-start",
774
+ children: [t9, t13]
775
+ });
776
+ $[33] = t13;
777
+ $[34] = t9;
778
+ $[35] = t14;
779
+ } else t14 = $[35];
780
+ return t14;
781
+ }
782
+ const source$1 = "import { type ReactElement, useState } from \"react\";\n\nimport { RotateCcwIcon } from \"lucide-react\";\n\nimport { Button } from \"@stealthscale/component-actions\";\nimport { Stack } from \"@stealthscale/component-layout\";\nimport { useWords } from \"@stealthscale/specimen\";\n\nimport { TimelineChart, TimelineEvent } from \"@stealthscale/component-charts\";\n\nconst MOMENTS: ReadonlyArray<{\n at: string;\n color?: TimelineEvent[\"color\"];\n kind: string;\n lane: string;\n version?: string;\n}> = [\n { at: \"09:12\", kind: \"deploy\", lane: \"api\", version: \"4.12\" },\n { at: \"10:05\", kind: \"deploy\", lane: \"web\", version: \"2.8\" },\n { at: \"13:20\", kind: \"deploy\", lane: \"web\", version: \"2.9\" },\n { at: \"14:03\", color: \"warning\", kind: \"latency\", lane: \"api\" },\n { at: \"14:05\", color: \"error\", kind: \"errors\", lane: \"api\" },\n { at: \"16:05\", kind: \"rollback\", lane: \"api\", version: \"4.11\" },\n { at: \"20:55\", kind: \"deploy\", lane: \"web\", version: \"2.9.1\" },\n];\n\nexport function Replay(): ReactElement {\n const { i18n, t } = useWords(\"timeline-chart\");\n const [run, setRun] = useState(0);\n\n return (\n <Stack align=\"flex-start\">\n <TimelineChart\n animate\n caption={t(\"replay.caption\")}\n events={MOMENTS.map((moment, index) => ({\n at: `2026-09-28T${moment.at}:00Z`,\n color: moment.color,\n key: String(index),\n label: t(`deploys.${moment.kind}`, { version: moment.version }),\n lane: moment.lane,\n }))}\n key={run}\n label={t(\"replay.label\")}\n labelOptions={{ hour: \"2-digit\", hourCycle: \"h23\", minute: \"2-digit\", timeZone: \"UTC\" }}\n lanes={[\n { key: \"api\", label: t(\"deploys.api\") },\n { key: \"web\", label: t(\"deploys.web\") },\n ]}\n locale={i18n.language}\n since=\"2026-09-28T00:00:00Z\"\n until=\"2026-09-29T00:00:00Z\"\n />\n <Button\n onClick={() => {\n setRun(run + 1);\n }}\n size=\"sm\"\n variant=\"outline\"\n >\n <RotateCcwIcon />\n {t(\"replay.replay\")}\n </Button>\n </Stack>\n );\n}\n";
783
+ //#endregion
784
+ //#region src/timeline-chart/examples/select.example.tsx
785
+ var select_example_exports = /* @__PURE__ */ __exportAll({
786
+ Select: () => Select,
787
+ source: () => source
788
+ });
789
+ const MOMENTS = [
790
+ {
791
+ at: "03:00",
792
+ color: "neutral",
793
+ kind: "backup",
794
+ lane: "db"
795
+ },
796
+ {
797
+ at: "09:12",
798
+ kind: "deploy",
799
+ lane: "api",
800
+ version: "4.12"
801
+ },
802
+ {
803
+ at: "11:40",
804
+ color: "warning",
805
+ kind: "slow",
806
+ lane: "db"
807
+ },
808
+ {
809
+ at: "14:03",
810
+ color: "warning",
811
+ kind: "latency",
812
+ lane: "api"
813
+ },
814
+ {
815
+ at: "14:05",
816
+ color: "error",
817
+ kind: "errors",
818
+ lane: "api"
819
+ },
820
+ {
821
+ at: "14:09",
822
+ color: "warning",
823
+ kind: "latency",
824
+ lane: "api"
825
+ },
826
+ {
827
+ at: "16:05",
828
+ kind: "rollback",
829
+ lane: "api",
830
+ version: "4.11"
831
+ },
832
+ {
833
+ at: "18:40",
834
+ kind: "deploy",
835
+ lane: "api",
836
+ version: "4.13"
837
+ },
838
+ {
839
+ at: "23:10",
840
+ color: "neutral",
841
+ kind: "failover",
842
+ lane: "db"
843
+ }
844
+ ];
845
+ function Select() {
846
+ const $ = c(45);
847
+ const { i18n, t } = useWords("timeline-chart");
848
+ let t0;
849
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
850
+ t0 = [];
851
+ $[0] = t0;
852
+ } else t0 = $[0];
853
+ const [picked, setPicked] = useState(t0);
854
+ let T0;
855
+ let T1;
856
+ let t1;
857
+ let t2;
858
+ let t3;
859
+ let t4;
860
+ let t5;
861
+ if ($[1] !== i18n.language || $[2] !== picked || $[3] !== t) {
862
+ const list = new Intl.ListFormat(i18n.language);
863
+ T1 = Stack;
864
+ let t6;
865
+ if ($[11] !== t) {
866
+ t6 = t("select.caption");
867
+ $[11] = t;
868
+ $[12] = t6;
869
+ } else t6 = $[12];
870
+ let t7;
871
+ if ($[13] !== t) {
872
+ t7 = MOMENTS.map((moment, index) => ({
873
+ at: `2026-09-28T${moment.at}:00Z`,
874
+ color: moment.color,
875
+ key: String(index),
876
+ label: t(`deploys.${moment.kind}`, { version: moment.version }),
877
+ lane: moment.lane
878
+ }));
879
+ $[13] = t;
880
+ $[14] = t7;
881
+ } else t7 = $[14];
882
+ let t8;
883
+ if ($[15] !== t) {
884
+ t8 = t("select.label");
885
+ $[15] = t;
886
+ $[16] = t8;
887
+ } else t8 = $[16];
888
+ let t9;
889
+ if ($[17] === Symbol.for("react.memo_cache_sentinel")) {
890
+ t9 = {
891
+ hour: "2-digit",
892
+ hourCycle: "h23",
893
+ minute: "2-digit",
894
+ timeZone: "UTC"
895
+ };
896
+ $[17] = t9;
897
+ } else t9 = $[17];
898
+ let t10;
899
+ if ($[18] !== t) {
900
+ t10 = t("deploys.api");
901
+ $[18] = t;
902
+ $[19] = t10;
903
+ } else t10 = $[19];
904
+ let t11;
905
+ if ($[20] !== t10) {
906
+ t11 = {
907
+ key: "api",
908
+ label: t10
909
+ };
910
+ $[20] = t10;
911
+ $[21] = t11;
912
+ } else t11 = $[21];
913
+ let t12;
914
+ if ($[22] !== t) {
915
+ t12 = t("deploys.db");
916
+ $[22] = t;
917
+ $[23] = t12;
918
+ } else t12 = $[23];
919
+ let t13;
920
+ if ($[24] !== t12) {
921
+ t13 = {
922
+ key: "db",
923
+ label: t12
924
+ };
925
+ $[24] = t12;
926
+ $[25] = t13;
927
+ } else t13 = $[25];
928
+ let t14;
929
+ if ($[26] !== t11 || $[27] !== t13) {
930
+ t14 = [t11, t13];
931
+ $[26] = t11;
932
+ $[27] = t13;
933
+ $[28] = t14;
934
+ } else t14 = $[28];
935
+ if ($[29] !== i18n.language || $[30] !== t14 || $[31] !== t6 || $[32] !== t7 || $[33] !== t8) {
936
+ t5 = /* @__PURE__ */ jsx(TimelineChart, {
937
+ caption: t6,
938
+ events: t7,
939
+ label: t8,
940
+ labelOptions: t9,
941
+ lanes: t14,
942
+ locale: i18n.language,
943
+ onSelect: setPicked,
944
+ since: "2026-09-28T00:00:00Z",
945
+ until: "2026-09-29T00:00:00Z"
946
+ });
947
+ $[29] = i18n.language;
948
+ $[30] = t14;
949
+ $[31] = t6;
950
+ $[32] = t7;
951
+ $[33] = t8;
952
+ $[34] = t5;
953
+ } else t5 = $[34];
954
+ T0 = Text;
955
+ t1 = "output";
956
+ t2 = "sm";
957
+ t3 = "muted";
958
+ t4 = picked.length === 0 ? t("select.none") : t("select.picked", {
959
+ count: picked.length,
960
+ list: list.format(picked.map(_temp))
961
+ });
962
+ $[1] = i18n.language;
963
+ $[2] = picked;
964
+ $[3] = t;
965
+ $[4] = T0;
966
+ $[5] = T1;
967
+ $[6] = t1;
968
+ $[7] = t2;
969
+ $[8] = t3;
970
+ $[9] = t4;
971
+ $[10] = t5;
972
+ } else {
973
+ T0 = $[4];
974
+ T1 = $[5];
975
+ t1 = $[6];
976
+ t2 = $[7];
977
+ t3 = $[8];
978
+ t4 = $[9];
979
+ t5 = $[10];
980
+ }
981
+ let t6;
982
+ if ($[35] !== T0 || $[36] !== t1 || $[37] !== t2 || $[38] !== t3 || $[39] !== t4) {
983
+ t6 = /* @__PURE__ */ jsx(T0, {
984
+ as: t1,
985
+ size: t2,
986
+ tone: t3,
987
+ children: t4
988
+ });
989
+ $[35] = T0;
990
+ $[36] = t1;
991
+ $[37] = t2;
992
+ $[38] = t3;
993
+ $[39] = t4;
994
+ $[40] = t6;
995
+ } else t6 = $[40];
996
+ let t7;
997
+ if ($[41] !== T1 || $[42] !== t5 || $[43] !== t6) {
998
+ t7 = /* @__PURE__ */ jsxs(T1, { children: [t5, t6] });
999
+ $[41] = T1;
1000
+ $[42] = t5;
1001
+ $[43] = t6;
1002
+ $[44] = t7;
1003
+ } else t7 = $[44];
1004
+ return t7;
1005
+ }
1006
+ function _temp(event) {
1007
+ return event.label;
1008
+ }
1009
+ const source = "import { type ReactElement, useState } from \"react\";\n\nimport { Stack } from \"@stealthscale/component-layout\";\nimport { Text } from \"@stealthscale/component-typography\";\nimport { useWords } from \"@stealthscale/specimen\";\n\nimport { TimelineChart, TimelineEvent } from \"@stealthscale/component-charts\";\n\nconst MOMENTS: ReadonlyArray<{\n at: string;\n color?: TimelineEvent[\"color\"];\n kind: string;\n lane: string;\n version?: string;\n}> = [\n { at: \"03:00\", color: \"neutral\", kind: \"backup\", lane: \"db\" },\n { at: \"09:12\", kind: \"deploy\", lane: \"api\", version: \"4.12\" },\n { at: \"11:40\", color: \"warning\", kind: \"slow\", lane: \"db\" },\n { at: \"14:03\", color: \"warning\", kind: \"latency\", lane: \"api\" },\n { at: \"14:05\", color: \"error\", kind: \"errors\", lane: \"api\" },\n { at: \"14:09\", color: \"warning\", kind: \"latency\", lane: \"api\" },\n { at: \"16:05\", kind: \"rollback\", lane: \"api\", version: \"4.11\" },\n { at: \"18:40\", kind: \"deploy\", lane: \"api\", version: \"4.13\" },\n { at: \"23:10\", color: \"neutral\", kind: \"failover\", lane: \"db\" },\n];\n\nexport function Select(): ReactElement {\n const { i18n, t } = useWords(\"timeline-chart\");\n const [picked, setPicked] = useState<readonly TimelineEvent[]>([]);\n const list = new Intl.ListFormat(i18n.language);\n\n return (\n <Stack>\n <TimelineChart\n caption={t(\"select.caption\")}\n events={MOMENTS.map((moment, index) => ({\n at: `2026-09-28T${moment.at}:00Z`,\n color: moment.color,\n key: String(index),\n label: t(`deploys.${moment.kind}`, { version: moment.version }),\n lane: moment.lane,\n }))}\n label={t(\"select.label\")}\n labelOptions={{ hour: \"2-digit\", hourCycle: \"h23\", minute: \"2-digit\", timeZone: \"UTC\" }}\n lanes={[\n { key: \"api\", label: t(\"deploys.api\") },\n { key: \"db\", label: t(\"deploys.db\") },\n ]}\n locale={i18n.language}\n onSelect={setPicked}\n since=\"2026-09-28T00:00:00Z\"\n until=\"2026-09-29T00:00:00Z\"\n />\n <Text as=\"output\" size=\"sm\" tone=\"muted\">\n {picked.length === 0\n ? t(\"select.none\")\n : t(\"select.picked\", {\n count: picked.length,\n list: list.format(picked.map((event) => event.label)),\n })}\n </Text>\n </Stack>\n );\n}\n";
1010
+ //#endregion
1011
+ //#region src/timeline-chart/timeline-chart.specimen.tsx
1012
+ /**
1013
+ * Catalogue page for the timeline chart.
1014
+ *
1015
+ * @remarks
1016
+ * The timeline has no recipe of its own: the chart's recipe styles its figure and its markers, so
1017
+ * every scene is hand-written. The scenes render a day of deploys and incidents across four
1018
+ * services, an incident's alerts in one marker with the tooltip open, a year of releases in one
1019
+ * lane, a selection read under the chart, the markers animated in with a replay, the day at a
1020
+ * phone's width, and a timeline without moments. Every scene renders a component from
1021
+ * `examples/` and shows that file as its source. The words are keys under `timeline-chart` in
1022
+ * `locales/en/specimen/timeline-chart.json`.
1023
+ */
1024
+ /**
1025
+ * Hand-written scene for a lane per service.
1026
+ */
1027
+ const lanes = {
1028
+ about: "timeline-chart.deploys.about",
1029
+ draw: () => /* @__PURE__ */ jsx(Room, {
1030
+ size: "lg",
1031
+ children: /* @__PURE__ */ jsx(Deploys, {})
1032
+ }),
1033
+ example: deploys_example_exports,
1034
+ title: "timeline-chart.deploys.title"
1035
+ };
1036
+ /**
1037
+ * Hand-written scene for moments that share a marker, with the tooltip open at it.
1038
+ */
1039
+ const clusters = {
1040
+ about: "timeline-chart.burst.about",
1041
+ draw: () => /* @__PURE__ */ jsx(Room, {
1042
+ size: "lg",
1043
+ children: /* @__PURE__ */ jsx(Burst, {})
1044
+ }),
1045
+ example: burst_example_exports,
1046
+ title: "timeline-chart.burst.title"
1047
+ };
1048
+ /**
1049
+ * Hand-written scene for a timeline of one lane.
1050
+ */
1051
+ const single = {
1052
+ about: "timeline-chart.releases.about",
1053
+ draw: () => /* @__PURE__ */ jsx(Room, {
1054
+ size: "lg",
1055
+ children: /* @__PURE__ */ jsx(Releases, {})
1056
+ }),
1057
+ example: releases_example_exports,
1058
+ title: "timeline-chart.releases.title"
1059
+ };
1060
+ /**
1061
+ * Hand-written scene for a marker's moments handed to the caller.
1062
+ */
1063
+ const selection = {
1064
+ about: "timeline-chart.select.about",
1065
+ draw: () => /* @__PURE__ */ jsx(Room, {
1066
+ size: "lg",
1067
+ children: /* @__PURE__ */ jsx(Select, {})
1068
+ }),
1069
+ example: select_example_exports,
1070
+ title: "timeline-chart.select.title"
1071
+ };
1072
+ /**
1073
+ * Hand-written scene for the markers animated in, with a replay.
1074
+ */
1075
+ const animated = {
1076
+ about: "timeline-chart.replay.about",
1077
+ draw: () => /* @__PURE__ */ jsx(Room, {
1078
+ size: "lg",
1079
+ children: /* @__PURE__ */ jsx(Replay, {})
1080
+ }),
1081
+ example: replay_example_exports,
1082
+ title: "timeline-chart.replay.title"
1083
+ };
1084
+ /**
1085
+ * Hand-written scene for the day at a phone's width.
1086
+ */
1087
+ const narrow = {
1088
+ about: "timeline-chart.narrow.about",
1089
+ draw: () => /* @__PURE__ */ jsx(Room, {
1090
+ size: "xs",
1091
+ children: /* @__PURE__ */ jsx(Deploys, {})
1092
+ }),
1093
+ example: deploys_example_exports,
1094
+ title: "timeline-chart.narrow.title"
1095
+ };
1096
+ /**
1097
+ * Hand-written scene for a timeline without moments.
1098
+ */
1099
+ const empty = {
1100
+ about: "timeline-chart.quiet.about",
1101
+ draw: () => /* @__PURE__ */ jsx(Room, {
1102
+ size: "md",
1103
+ children: /* @__PURE__ */ jsx(Quiet, {})
1104
+ }),
1105
+ example: quiet_example_exports,
1106
+ title: "timeline-chart.quiet.title"
1107
+ };
1108
+ var timeline_chart_specimen_default = specimen({
1109
+ about: "timeline-chart.about",
1110
+ id: "components/charts/timeline-chart",
1111
+ imports: "import { TimelineChart } from \"@stealthscale/component-charts\";",
1112
+ scenes: [
1113
+ lanes,
1114
+ clusters,
1115
+ single,
1116
+ selection,
1117
+ animated,
1118
+ narrow,
1119
+ empty
1120
+ ],
1121
+ title: "timeline-chart.title"
1122
+ });
1123
+ //#endregion
1124
+ export { animated, clusters, timeline_chart_specimen_default as default, empty, lanes, narrow, selection, single };