@cratis/scene.blueprint.default 4.32.0 → 4.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/ComponentName.ts +12 -0
  2. package/defaultBlueprintComponents.ts +5 -1
  3. package/dist/cjs/ComponentName.js +4 -0
  4. package/dist/cjs/ComponentName.js.map +1 -1
  5. package/dist/cjs/defaultBlueprint.js +1 -1
  6. package/dist/cjs/defaultBlueprintComponentMetadata.js +2 -2
  7. package/dist/cjs/defaultBlueprintComponents.js +10 -2
  8. package/dist/cjs/defaultBlueprintComponents.js.map +1 -1
  9. package/dist/cjs/foundation/ChartWrapper.js +520 -0
  10. package/dist/cjs/foundation/ChartWrapper.js.map +1 -0
  11. package/dist/cjs/foundation/ColumnChooser.js +156 -0
  12. package/dist/cjs/foundation/ColumnChooser.js.map +1 -0
  13. package/dist/cjs/foundation/FilterBuilder.js +307 -0
  14. package/dist/cjs/foundation/FilterBuilder.js.map +1 -0
  15. package/dist/cjs/foundation/SavedViewsMenu.js +199 -0
  16. package/dist/cjs/foundation/SavedViewsMenu.js.map +1 -0
  17. package/dist/cjs/foundation/chartGeometry.js +101 -0
  18. package/dist/cjs/foundation/chartGeometry.js.map +1 -0
  19. package/dist/cjs/foundation/columnModel.js +43 -0
  20. package/dist/cjs/foundation/columnModel.js.map +1 -0
  21. package/dist/cjs/foundation/filterModel.js +123 -0
  22. package/dist/cjs/foundation/filterModel.js.map +1 -0
  23. package/dist/cjs/foundation/foundationComponentMetadata.js +28 -0
  24. package/dist/cjs/foundation/foundationComponentMetadata.js.map +1 -1
  25. package/dist/cjs/foundation/foundationDescriptors.js +153 -0
  26. package/dist/cjs/foundation/foundationDescriptors.js.map +1 -1
  27. package/dist/cjs/foundation/foundationSamples.js +130 -0
  28. package/dist/cjs/foundation/foundationSamples.js.map +1 -1
  29. package/dist/cjs/foundation/foundationStrings.js +25 -0
  30. package/dist/cjs/foundation/foundationStrings.js.map +1 -1
  31. package/dist/cjs/foundation/useElementWidth.js +31 -0
  32. package/dist/cjs/foundation/useElementWidth.js.map +1 -0
  33. package/dist/cjs/foundation/viewModel.js +24 -0
  34. package/dist/cjs/foundation/viewModel.js.map +1 -0
  35. package/dist/cjs/index.js +38 -0
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/esm/ComponentName.d.ts +5 -1
  38. package/dist/esm/ComponentName.d.ts.map +1 -1
  39. package/dist/esm/ComponentName.js +4 -0
  40. package/dist/esm/ComponentName.js.map +1 -1
  41. package/dist/esm/defaultBlueprint.js +1 -1
  42. package/dist/esm/defaultBlueprintComponentMetadata.js +2 -2
  43. package/dist/esm/defaultBlueprintComponents.d.ts.map +1 -1
  44. package/dist/esm/defaultBlueprintComponents.js +10 -2
  45. package/dist/esm/defaultBlueprintComponents.js.map +1 -1
  46. package/dist/esm/foundation/ChartWrapper.d.ts +5 -0
  47. package/dist/esm/foundation/ChartWrapper.d.ts.map +1 -0
  48. package/dist/esm/foundation/ChartWrapper.js +517 -0
  49. package/dist/esm/foundation/ChartWrapper.js.map +1 -0
  50. package/dist/esm/foundation/ColumnChooser.d.ts +3 -0
  51. package/dist/esm/foundation/ColumnChooser.d.ts.map +1 -0
  52. package/dist/esm/foundation/ColumnChooser.js +154 -0
  53. package/dist/esm/foundation/ColumnChooser.js.map +1 -0
  54. package/dist/esm/foundation/FilterBuilder.d.ts +3 -0
  55. package/dist/esm/foundation/FilterBuilder.d.ts.map +1 -0
  56. package/dist/esm/foundation/FilterBuilder.js +305 -0
  57. package/dist/esm/foundation/FilterBuilder.js.map +1 -0
  58. package/dist/esm/foundation/Foundation.stories.d.ts +16 -0
  59. package/dist/esm/foundation/Foundation.stories.d.ts.map +1 -1
  60. package/dist/esm/foundation/Foundation.stories.js +16 -0
  61. package/dist/esm/foundation/Foundation.stories.js.map +1 -1
  62. package/dist/esm/foundation/SavedViewsMenu.d.ts +4 -0
  63. package/dist/esm/foundation/SavedViewsMenu.d.ts.map +1 -0
  64. package/dist/esm/foundation/SavedViewsMenu.js +196 -0
  65. package/dist/esm/foundation/SavedViewsMenu.js.map +1 -0
  66. package/dist/esm/foundation/chartGeometry.d.ts +34 -0
  67. package/dist/esm/foundation/chartGeometry.d.ts.map +1 -0
  68. package/dist/esm/foundation/chartGeometry.js +93 -0
  69. package/dist/esm/foundation/chartGeometry.js.map +1 -0
  70. package/dist/esm/foundation/columnModel.d.ts +11 -0
  71. package/dist/esm/foundation/columnModel.d.ts.map +1 -0
  72. package/dist/esm/foundation/columnModel.js +38 -0
  73. package/dist/esm/foundation/columnModel.js.map +1 -0
  74. package/dist/esm/foundation/filterModel.d.ts +33 -0
  75. package/dist/esm/foundation/filterModel.d.ts.map +1 -0
  76. package/dist/esm/foundation/filterModel.js +112 -0
  77. package/dist/esm/foundation/filterModel.js.map +1 -0
  78. package/dist/esm/foundation/foundationComponentMetadata.d.ts.map +1 -1
  79. package/dist/esm/foundation/foundationComponentMetadata.js +28 -0
  80. package/dist/esm/foundation/foundationComponentMetadata.js.map +1 -1
  81. package/dist/esm/foundation/foundationDescriptors.d.ts.map +1 -1
  82. package/dist/esm/foundation/foundationDescriptors.js +154 -1
  83. package/dist/esm/foundation/foundationDescriptors.js.map +1 -1
  84. package/dist/esm/foundation/foundationSamples.d.ts.map +1 -1
  85. package/dist/esm/foundation/foundationSamples.js +130 -0
  86. package/dist/esm/foundation/foundationSamples.js.map +1 -1
  87. package/dist/esm/foundation/foundationStrings.d.ts +25 -0
  88. package/dist/esm/foundation/foundationStrings.d.ts.map +1 -1
  89. package/dist/esm/foundation/foundationStrings.js +25 -0
  90. package/dist/esm/foundation/foundationStrings.js.map +1 -1
  91. package/dist/esm/foundation/index.d.ts +9 -0
  92. package/dist/esm/foundation/index.d.ts.map +1 -1
  93. package/dist/esm/foundation/index.js +9 -0
  94. package/dist/esm/foundation/index.js.map +1 -1
  95. package/dist/esm/foundation/useElementWidth.d.ts +3 -0
  96. package/dist/esm/foundation/useElementWidth.d.ts.map +1 -0
  97. package/dist/esm/foundation/useElementWidth.js +29 -0
  98. package/dist/esm/foundation/useElementWidth.js.map +1 -0
  99. package/dist/esm/foundation/viewModel.d.ts +7 -0
  100. package/dist/esm/foundation/viewModel.d.ts.map +1 -0
  101. package/dist/esm/foundation/viewModel.js +22 -0
  102. package/dist/esm/foundation/viewModel.js.map +1 -0
  103. package/dist/esm/index.js +9 -0
  104. package/dist/esm/index.js.map +1 -1
  105. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  106. package/foundation/ChartWrapper.tsx +252 -0
  107. package/foundation/ColumnChooser.tsx +73 -0
  108. package/foundation/FilterBuilder.tsx +144 -0
  109. package/foundation/Foundation.stories.tsx +16 -0
  110. package/foundation/SavedViewsMenu.tsx +94 -0
  111. package/foundation/chartGeometry.ts +108 -0
  112. package/foundation/columnModel.ts +39 -0
  113. package/foundation/filterModel.ts +111 -0
  114. package/foundation/foundationComponentMetadata.ts +4 -0
  115. package/foundation/foundationDescriptors.ts +86 -1
  116. package/foundation/foundationSamples.ts +19 -0
  117. package/foundation/foundationStrings.ts +25 -0
  118. package/foundation/index.ts +9 -0
  119. package/foundation/useElementWidth.ts +31 -0
  120. package/foundation/viewModel.ts +21 -0
  121. package/package.json +8 -8
  122. package/shell/layout.css +285 -0
@@ -0,0 +1,517 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useRef, useId } from 'react';
3
+ import { readStrings, readOptionalString } from '../shell/elementProperties.js';
4
+ import { readSeries, ChartKind, donutSlices, ringPath, funnelStages, niceScale, dataMaximum } from './chartGeometry.js';
5
+ import { readComponentState, ComponentState } from './ComponentState.js';
6
+ import { readLocale, readNumberFormat, formatNumber, NumberFormat } from './formatting.js';
7
+ import { readFoundationStrings } from './foundationStrings.js';
8
+ import { FoundationFrame } from './StateFrame.js';
9
+ import { useElementWidth } from './useElementWidth.js';
10
+
11
+ /** Reads the chart kind, defaulting to a line chart. */ function readChartKind(value) {
12
+ return Object.values(ChartKind).includes(value) ? value : ChartKind.Line;
13
+ }
14
+ /** The theme tokens series are drawn in, in order; a series is never told apart by color alone - see `markers` and `patterns`. */ const seriesColors = [
15
+ 'var(--foundation-primary)',
16
+ 'var(--foundation-success)',
17
+ 'var(--foundation-warning)',
18
+ 'var(--foundation-danger)',
19
+ 'var(--foundation-info)',
20
+ 'var(--foundation-muted)'
21
+ ];
22
+ const markers = [
23
+ 'circle',
24
+ 'square',
25
+ 'triangle',
26
+ 'diamond',
27
+ 'cross',
28
+ 'ring'
29
+ ];
30
+ const dashes = [
31
+ '',
32
+ '6 3',
33
+ '2 3',
34
+ '8 3 2 3',
35
+ '',
36
+ '4 4'
37
+ ];
38
+ const margin = {
39
+ top: 12,
40
+ right: 12,
41
+ bottom: 28,
42
+ left: 48
43
+ };
44
+ function MarkerShape({ kind, x, y, color }) {
45
+ const r = 4;
46
+ switch(kind){
47
+ case 'square':
48
+ return /*#__PURE__*/ jsx("rect", {
49
+ x: x - r,
50
+ y: y - r,
51
+ width: r * 2,
52
+ height: r * 2,
53
+ fill: color
54
+ });
55
+ case 'triangle':
56
+ return /*#__PURE__*/ jsx("polygon", {
57
+ points: `${x},${y - r - 1} ${x + r + 1},${y + r} ${x - r - 1},${y + r}`,
58
+ fill: color
59
+ });
60
+ case 'diamond':
61
+ return /*#__PURE__*/ jsx("polygon", {
62
+ points: `${x},${y - r - 1} ${x + r + 1},${y} ${x},${y + r + 1} ${x - r - 1},${y}`,
63
+ fill: color
64
+ });
65
+ case 'cross':
66
+ return /*#__PURE__*/ jsx("path", {
67
+ d: `M ${x - r} ${y - r} L ${x + r} ${y + r} M ${x + r} ${y - r} L ${x - r} ${y + r}`,
68
+ stroke: color,
69
+ strokeWidth: 2,
70
+ fill: "none"
71
+ });
72
+ case 'ring':
73
+ return /*#__PURE__*/ jsx("circle", {
74
+ cx: x,
75
+ cy: y,
76
+ r: r,
77
+ fill: "none",
78
+ stroke: color,
79
+ strokeWidth: 2
80
+ });
81
+ default:
82
+ return /*#__PURE__*/ jsx("circle", {
83
+ cx: x,
84
+ cy: y,
85
+ r: r,
86
+ fill: color
87
+ });
88
+ }
89
+ }
90
+ function CartesianPlot({ kind, categories, series, width, locale, format, currency }) {
91
+ const height = Math.max(180, Math.min(320, Math.round(width * 0.55)));
92
+ const plotWidth = width - margin.left - margin.right;
93
+ const plotHeight = height - margin.top - margin.bottom;
94
+ const scale = niceScale(dataMaximum(kind, series, categories.length));
95
+ const y = (value)=>margin.top + plotHeight - value / scale.maximum * plotHeight;
96
+ const slot = plotWidth / Math.max(1, categories.length);
97
+ const patternId = useId();
98
+ const label = (value)=>formatNumber(value, locale, format === NumberFormat.Number ? NumberFormat.Compact : format, currency);
99
+ return /*#__PURE__*/ jsxs("svg", {
100
+ className: "foundation-chart-plot",
101
+ viewBox: `0 0 ${width} ${height}`,
102
+ width: width,
103
+ height: height,
104
+ "aria-hidden": "true",
105
+ focusable: "false",
106
+ children: [
107
+ /*#__PURE__*/ jsx("defs", {
108
+ children: series.map((_, index)=>index > 0 && index % 3 !== 0 && /*#__PURE__*/ jsxs("pattern", {
109
+ id: `${patternId}-${index}`,
110
+ width: "6",
111
+ height: "6",
112
+ patternUnits: "userSpaceOnUse",
113
+ patternTransform: `rotate(${index % 2 === 0 ? 45 : -45})`,
114
+ children: [
115
+ /*#__PURE__*/ jsx("rect", {
116
+ width: "6",
117
+ height: "6",
118
+ fill: seriesColors[index % seriesColors.length],
119
+ opacity: "0.35"
120
+ }),
121
+ /*#__PURE__*/ jsx("line", {
122
+ x1: "0",
123
+ y1: "0",
124
+ x2: "0",
125
+ y2: "6",
126
+ stroke: seriesColors[index % seriesColors.length],
127
+ strokeWidth: "2.5"
128
+ })
129
+ ]
130
+ }, index))
131
+ }),
132
+ scale.ticks.map((tick)=>/*#__PURE__*/ jsxs("g", {
133
+ children: [
134
+ /*#__PURE__*/ jsx("line", {
135
+ className: "foundation-chart-grid",
136
+ x1: margin.left,
137
+ x2: width - margin.right,
138
+ y1: y(tick),
139
+ y2: y(tick)
140
+ }),
141
+ /*#__PURE__*/ jsx("text", {
142
+ className: "foundation-chart-tick",
143
+ x: margin.left - 6,
144
+ y: y(tick),
145
+ textAnchor: "end",
146
+ dominantBaseline: "middle",
147
+ children: label(tick)
148
+ })
149
+ ]
150
+ }, tick)),
151
+ categories.map((category, index)=>/*#__PURE__*/ jsx("text", {
152
+ className: "foundation-chart-tick",
153
+ x: margin.left + slot * index + slot / 2,
154
+ y: height - 8,
155
+ textAnchor: "middle",
156
+ children: category
157
+ }, category + index)),
158
+ kind === ChartKind.Line && series.map((item, seriesIndex)=>{
159
+ const color = seriesColors[seriesIndex % seriesColors.length];
160
+ const points = categories.map((_, index)=>({
161
+ x: margin.left + slot * index + slot / 2,
162
+ y: y(item.values[index] ?? 0)
163
+ }));
164
+ return /*#__PURE__*/ jsxs("g", {
165
+ children: [
166
+ /*#__PURE__*/ jsx("polyline", {
167
+ points: points.map((point)=>`${point.x},${point.y}`).join(' '),
168
+ fill: "none",
169
+ stroke: color,
170
+ strokeWidth: "2.5",
171
+ strokeDasharray: dashes[seriesIndex % dashes.length]
172
+ }),
173
+ points.map((point, index)=>/*#__PURE__*/ jsx(MarkerShape, {
174
+ kind: markers[seriesIndex % markers.length],
175
+ x: point.x,
176
+ y: point.y,
177
+ color: color
178
+ }, index))
179
+ ]
180
+ }, item.name);
181
+ }),
182
+ kind === ChartKind.Bar && series.map((item, seriesIndex)=>{
183
+ const group = slot * 0.7;
184
+ const bar = group / series.length;
185
+ return /*#__PURE__*/ jsx("g", {
186
+ children: categories.map((_, index)=>{
187
+ const value = Math.max(0, item.values[index] ?? 0);
188
+ return /*#__PURE__*/ jsx("rect", {
189
+ className: "foundation-chart-bar",
190
+ x: margin.left + slot * index + (slot - group) / 2 + bar * seriesIndex,
191
+ y: y(value),
192
+ width: Math.max(1, bar - 2),
193
+ height: margin.top + plotHeight - y(value),
194
+ fill: fillFor(seriesIndex, patternId),
195
+ stroke: seriesColors[seriesIndex % seriesColors.length],
196
+ strokeWidth: "1.5"
197
+ }, index);
198
+ })
199
+ }, item.name);
200
+ }),
201
+ kind === ChartKind.Stacked && categories.map((_, index)=>{
202
+ let base = 0;
203
+ return /*#__PURE__*/ jsx("g", {
204
+ children: series.map((item, seriesIndex)=>{
205
+ const value = Math.max(0, item.values[index] ?? 0);
206
+ const top = y(base + value);
207
+ const rect = /*#__PURE__*/ jsx("rect", {
208
+ className: "foundation-chart-bar",
209
+ x: margin.left + slot * index + slot * 0.15,
210
+ y: top,
211
+ width: slot * 0.7,
212
+ height: Math.max(0, y(base) - top),
213
+ fill: fillFor(seriesIndex, patternId),
214
+ stroke: seriesColors[seriesIndex % seriesColors.length],
215
+ strokeWidth: "1.5"
216
+ }, item.name);
217
+ base += value;
218
+ return rect;
219
+ })
220
+ }, index);
221
+ })
222
+ ]
223
+ });
224
+ }
225
+ function fillFor(seriesIndex, patternId) {
226
+ return seriesIndex === 0 || seriesIndex % 3 === 0 ? seriesColors[seriesIndex % seriesColors.length] : `url(#${patternId}-${seriesIndex})`;
227
+ }
228
+ function DonutPlot({ categories, values, width, locale }) {
229
+ const size = Math.max(160, Math.min(280, width));
230
+ const radius = size / 2 - 4;
231
+ const slices = donutSlices(values);
232
+ const patternId = useId();
233
+ return /*#__PURE__*/ jsxs("svg", {
234
+ className: "foundation-chart-plot",
235
+ viewBox: `0 0 ${size} ${size}`,
236
+ width: size,
237
+ height: size,
238
+ "aria-hidden": "true",
239
+ focusable: "false",
240
+ children: [
241
+ /*#__PURE__*/ jsx("defs", {
242
+ children: values.map((_, index)=>index > 0 && index % 3 !== 0 && /*#__PURE__*/ jsxs("pattern", {
243
+ id: `${patternId}-${index}`,
244
+ width: "6",
245
+ height: "6",
246
+ patternUnits: "userSpaceOnUse",
247
+ patternTransform: `rotate(${index % 2 === 0 ? 45 : -45})`,
248
+ children: [
249
+ /*#__PURE__*/ jsx("rect", {
250
+ width: "6",
251
+ height: "6",
252
+ fill: seriesColors[index % seriesColors.length],
253
+ opacity: "0.35"
254
+ }),
255
+ /*#__PURE__*/ jsx("line", {
256
+ x1: "0",
257
+ y1: "0",
258
+ x2: "0",
259
+ y2: "6",
260
+ stroke: seriesColors[index % seriesColors.length],
261
+ strokeWidth: "2.5"
262
+ })
263
+ ]
264
+ }, index))
265
+ }),
266
+ slices.map((slice)=>/*#__PURE__*/ jsx("path", {
267
+ className: "foundation-chart-slice",
268
+ d: ringPath(size / 2, size / 2, radius, radius * 0.6, slice.start, slice.end),
269
+ fill: fillFor(slice.index, patternId),
270
+ stroke: seriesColors[slice.index % seriesColors.length],
271
+ strokeWidth: "1.5",
272
+ "data-share": formatNumber(slice.share * 100, locale, NumberFormat.Percent),
273
+ children: /*#__PURE__*/ jsx("title", {
274
+ children: `${categories[slice.index] ?? ''}: ${formatNumber(slice.share * 100, locale, NumberFormat.Percent)}`
275
+ })
276
+ }, slice.index))
277
+ ]
278
+ });
279
+ }
280
+ function FunnelPlot({ categories, values, width, locale, format, currency }) {
281
+ const stages = funnelStages(values);
282
+ const barHeight = 34;
283
+ const gap = 6;
284
+ const height = stages.length * (barHeight + gap);
285
+ const patternId = useId();
286
+ return /*#__PURE__*/ jsxs("svg", {
287
+ className: "foundation-chart-plot",
288
+ viewBox: `0 0 ${width} ${height}`,
289
+ width: width,
290
+ height: height,
291
+ "aria-hidden": "true",
292
+ focusable: "false",
293
+ children: [
294
+ /*#__PURE__*/ jsx("defs", {
295
+ children: stages.map((stage)=>stage.index > 0 && stage.index % 3 !== 0 && /*#__PURE__*/ jsxs("pattern", {
296
+ id: `${patternId}-${stage.index}`,
297
+ width: "6",
298
+ height: "6",
299
+ patternUnits: "userSpaceOnUse",
300
+ patternTransform: "rotate(45)",
301
+ children: [
302
+ /*#__PURE__*/ jsx("rect", {
303
+ width: "6",
304
+ height: "6",
305
+ fill: seriesColors[stage.index % seriesColors.length],
306
+ opacity: "0.35"
307
+ }),
308
+ /*#__PURE__*/ jsx("line", {
309
+ x1: "0",
310
+ y1: "0",
311
+ x2: "0",
312
+ y2: "6",
313
+ stroke: seriesColors[stage.index % seriesColors.length],
314
+ strokeWidth: "2.5"
315
+ })
316
+ ]
317
+ }, stage.index))
318
+ }),
319
+ stages.map((stage)=>{
320
+ const stageWidth = Math.max(2, width * stage.widthRatio);
321
+ return /*#__PURE__*/ jsxs("g", {
322
+ children: [
323
+ /*#__PURE__*/ jsx("rect", {
324
+ className: "foundation-chart-bar",
325
+ x: (width - stageWidth) / 2,
326
+ y: stage.index * (barHeight + gap),
327
+ width: stageWidth,
328
+ height: barHeight,
329
+ rx: "4",
330
+ fill: fillFor(stage.index, patternId),
331
+ stroke: seriesColors[stage.index % seriesColors.length],
332
+ strokeWidth: "1.5"
333
+ }),
334
+ /*#__PURE__*/ jsx("text", {
335
+ className: "foundation-chart-stage",
336
+ x: width / 2,
337
+ y: stage.index * (barHeight + gap) + barHeight / 2,
338
+ textAnchor: "middle",
339
+ dominantBaseline: "middle",
340
+ children: `${categories[stage.index] ?? ''} · ${formatNumber(stage.value, locale, format, currency)}`
341
+ })
342
+ ]
343
+ }, stage.index);
344
+ })
345
+ ]
346
+ });
347
+ }
348
+ /**
349
+ * The `chartWrapper` component: one chart - line, bar, stacked, donut or funnel - drawn as scalable vector graphics from the
350
+ * theme's tokens, with its own title, legend and a data table.
351
+ *
352
+ * `categories` name the points and `series` give a list of values for each. A donut and a funnel draw the first series, one slice or
353
+ * stage per category. The chart is never the only way to read the data: the figure is labelled, the drawing is hidden from assistive
354
+ * technology, and a table of the same numbers follows it - open it with "Chart data". Series are told apart by marker, dash or hatch as
355
+ * well as color, and the legend names each.
356
+ */ function ChartWrapper({ element, interactions }) {
357
+ const kind = readChartKind(element.properties.kind);
358
+ const categories = readStrings(element, 'categories');
359
+ const series = readSeries(element.properties.series);
360
+ const hasData = series.some((item)=>item.values.length > 0) && categories.length > 0;
361
+ const state = readComponentState(element, hasData);
362
+ const locale = readLocale(element);
363
+ const format = readNumberFormat(element);
364
+ const currency = readOptionalString(element, 'currency');
365
+ const strings = readFoundationStrings(element);
366
+ const container = useRef(null);
367
+ const width = useElementWidth(container, 480);
368
+ const title = readOptionalString(element, 'title') ?? readOptionalString(element, 'label');
369
+ const first = series[0]?.values ?? [];
370
+ const single = kind === ChartKind.Donut || kind === ChartKind.Funnel;
371
+ const legend = single ? categories.map((name, index)=>({
372
+ name,
373
+ index
374
+ })) : series.map((item, index)=>({
375
+ name: item.name,
376
+ index
377
+ }));
378
+ const dataTableId = useId();
379
+ return /*#__PURE__*/ jsx(FoundationFrame, {
380
+ element: {
381
+ ...element,
382
+ properties: {
383
+ ...element.properties,
384
+ label: title
385
+ }
386
+ },
387
+ interactions: interactions,
388
+ name: "chart",
389
+ state: state,
390
+ skeleton: [
391
+ 30,
392
+ 100,
393
+ 100,
394
+ 60
395
+ ],
396
+ children: (state === ComponentState.Ready || state === ComponentState.Partial) && /*#__PURE__*/ jsxs("figure", {
397
+ className: "foundation-chart-figure",
398
+ "data-kind": kind,
399
+ children: [
400
+ title && /*#__PURE__*/ jsx("figcaption", {
401
+ className: "foundation-chart-title",
402
+ children: title
403
+ }),
404
+ /*#__PURE__*/ jsx("div", {
405
+ ref: container,
406
+ className: "foundation-chart-canvas",
407
+ children: kind === ChartKind.Donut ? /*#__PURE__*/ jsx(DonutPlot, {
408
+ categories: categories,
409
+ values: first,
410
+ width: width,
411
+ locale: locale
412
+ }) : kind === ChartKind.Funnel ? /*#__PURE__*/ jsx(FunnelPlot, {
413
+ categories: categories,
414
+ values: first,
415
+ width: width,
416
+ locale: locale,
417
+ format: format,
418
+ currency: currency
419
+ }) : /*#__PURE__*/ jsx(CartesianPlot, {
420
+ kind: kind,
421
+ categories: categories,
422
+ series: series,
423
+ width: width,
424
+ locale: locale,
425
+ format: format,
426
+ currency: currency
427
+ })
428
+ }),
429
+ /*#__PURE__*/ jsx("ul", {
430
+ className: "foundation-chart-legend",
431
+ "aria-label": strings.chartSeries,
432
+ children: legend.map((entry)=>/*#__PURE__*/ jsxs("li", {
433
+ children: [
434
+ /*#__PURE__*/ jsx("svg", {
435
+ width: "14",
436
+ height: "14",
437
+ viewBox: "0 0 14 14",
438
+ "aria-hidden": "true",
439
+ children: kind === ChartKind.Line ? /*#__PURE__*/ jsx(MarkerShape, {
440
+ kind: markers[entry.index % markers.length],
441
+ x: 7,
442
+ y: 7,
443
+ color: seriesColors[entry.index % seriesColors.length]
444
+ }) : /*#__PURE__*/ jsx("rect", {
445
+ x: "1",
446
+ y: "1",
447
+ width: "12",
448
+ height: "12",
449
+ fill: seriesColors[entry.index % seriesColors.length],
450
+ opacity: entry.index === 0 || entry.index % 3 === 0 ? 1 : 0.5,
451
+ stroke: seriesColors[entry.index % seriesColors.length],
452
+ strokeWidth: "2"
453
+ })
454
+ }),
455
+ /*#__PURE__*/ jsx("span", {
456
+ children: entry.name
457
+ })
458
+ ]
459
+ }, entry.index))
460
+ }),
461
+ /*#__PURE__*/ jsxs("details", {
462
+ className: "foundation-chart-data",
463
+ children: [
464
+ /*#__PURE__*/ jsx("summary", {
465
+ children: strings.chartDataTable
466
+ }),
467
+ /*#__PURE__*/ jsxs("table", {
468
+ id: dataTableId,
469
+ children: [
470
+ /*#__PURE__*/ jsx("caption", {
471
+ className: "foundation-visually-hidden",
472
+ children: title ?? strings.chartDataTable
473
+ }),
474
+ /*#__PURE__*/ jsx("thead", {
475
+ children: /*#__PURE__*/ jsxs("tr", {
476
+ children: [
477
+ /*#__PURE__*/ jsx("th", {
478
+ scope: "col",
479
+ children: strings.chartCategory
480
+ }),
481
+ (single ? [
482
+ {
483
+ name: series[0]?.name ?? strings.chartSeries
484
+ }
485
+ ] : series).map((item)=>/*#__PURE__*/ jsx("th", {
486
+ scope: "col",
487
+ children: item.name
488
+ }, item.name))
489
+ ]
490
+ })
491
+ }),
492
+ /*#__PURE__*/ jsx("tbody", {
493
+ children: categories.map((category, index)=>/*#__PURE__*/ jsxs("tr", {
494
+ children: [
495
+ /*#__PURE__*/ jsx("th", {
496
+ scope: "row",
497
+ children: category
498
+ }),
499
+ (single ? [
500
+ series[0]
501
+ ] : series).map((item)=>/*#__PURE__*/ jsx("td", {
502
+ children: formatNumber(item?.values[index] ?? 0, locale, format, currency)
503
+ }, item?.name))
504
+ ]
505
+ }, category + index))
506
+ })
507
+ ]
508
+ })
509
+ ]
510
+ })
511
+ ]
512
+ })
513
+ });
514
+ }
515
+
516
+ export { ChartWrapper, readChartKind };
517
+ //# sourceMappingURL=ChartWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartWrapper.js","sources":["../../../foundation/ChartWrapper.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { useId, useRef } from 'react';\nimport { RegisteredComponentProps } from '@cratis/scene.react';\nimport { readOptionalString, readStrings } from '../shell/elementProperties';\nimport { ChartKind, ChartSeries, dataMaximum, donutSlices, funnelStages, niceScale, readSeries, ringPath } from './chartGeometry';\nimport { ComponentState, readComponentState } from './ComponentState';\nimport { formatNumber, NumberFormat, readLocale, readNumberFormat } from './formatting';\nimport { readFoundationStrings } from './foundationStrings';\nimport { FoundationFrame } from './StateFrame';\nimport { useElementWidth } from './useElementWidth';\n\n/** Reads the chart kind, defaulting to a line chart. */\nexport function readChartKind(value: unknown): ChartKind {\n return (Object.values(ChartKind) as string[]).includes(value as string) ? (value as ChartKind) : ChartKind.Line;\n}\n\n/** The theme tokens series are drawn in, in order; a series is never told apart by color alone - see `markers` and `patterns`. */\nconst seriesColors = ['var(--foundation-primary)', 'var(--foundation-success)', 'var(--foundation-warning)', 'var(--foundation-danger)', 'var(--foundation-info)', 'var(--foundation-muted)'];\nconst markers = ['circle', 'square', 'triangle', 'diamond', 'cross', 'ring'] as const;\nconst dashes = ['', '6 3', '2 3', '8 3 2 3', '', '4 4'];\nconst margin = { top: 12, right: 12, bottom: 28, left: 48 };\n\ntype Marker = (typeof markers)[number];\n\nfunction MarkerShape({ kind, x, y, color }: { kind: Marker; x: number; y: number; color: string }) {\n const r = 4;\n switch (kind) {\n case 'square': return <rect x={x - r} y={y - r} width={r * 2} height={r * 2} fill={color} />;\n case 'triangle': return <polygon points={`${x},${y - r - 1} ${x + r + 1},${y + r} ${x - r - 1},${y + r}`} fill={color} />;\n case 'diamond': return <polygon points={`${x},${y - r - 1} ${x + r + 1},${y} ${x},${y + r + 1} ${x - r - 1},${y}`} fill={color} />;\n case 'cross': return <path d={`M ${x - r} ${y - r} L ${x + r} ${y + r} M ${x + r} ${y - r} L ${x - r} ${y + r}`} stroke={color} strokeWidth={2} fill='none' />;\n case 'ring': return <circle cx={x} cy={y} r={r} fill='none' stroke={color} strokeWidth={2} />;\n default: return <circle cx={x} cy={y} r={r} fill={color} />;\n }\n}\n\ninterface PlotProps {\n kind: ChartKind;\n categories: string[];\n series: ChartSeries[];\n width: number;\n locale: string;\n format: NumberFormat;\n currency?: string;\n}\n\nfunction CartesianPlot({ kind, categories, series, width, locale, format, currency }: PlotProps) {\n const height = Math.max(180, Math.min(320, Math.round(width * 0.55)));\n const plotWidth = width - margin.left - margin.right;\n const plotHeight = height - margin.top - margin.bottom;\n const scale = niceScale(dataMaximum(kind, series, categories.length));\n const y = (value: number) => margin.top + plotHeight - (value / scale.maximum) * plotHeight;\n const slot = plotWidth / Math.max(1, categories.length);\n const patternId = useId();\n const label = (value: number) => formatNumber(value, locale, format === NumberFormat.Number ? NumberFormat.Compact : format, currency);\n\n return (\n <svg className='foundation-chart-plot' viewBox={`0 0 ${width} ${height}`} width={width} height={height} aria-hidden='true' focusable='false'>\n <defs>\n {series.map((_, index) => index > 0 && index % 3 !== 0 && (\n <pattern key={index} id={`${patternId}-${index}`} width='6' height='6' patternUnits='userSpaceOnUse' patternTransform={`rotate(${index % 2 === 0 ? 45 : -45})`}>\n <rect width='6' height='6' fill={seriesColors[index % seriesColors.length]} opacity='0.35' />\n <line x1='0' y1='0' x2='0' y2='6' stroke={seriesColors[index % seriesColors.length]} strokeWidth='2.5' />\n </pattern>\n ))}\n </defs>\n {scale.ticks.map(tick => (\n <g key={tick}>\n <line className='foundation-chart-grid' x1={margin.left} x2={width - margin.right} y1={y(tick)} y2={y(tick)} />\n <text className='foundation-chart-tick' x={margin.left - 6} y={y(tick)} textAnchor='end' dominantBaseline='middle'>{label(tick)}</text>\n </g>\n ))}\n {categories.map((category, index) => (\n <text key={category + index} className='foundation-chart-tick' x={margin.left + slot * index + slot / 2} y={height - 8} textAnchor='middle'>{category}</text>\n ))}\n {kind === ChartKind.Line && series.map((item, seriesIndex) => {\n const color = seriesColors[seriesIndex % seriesColors.length];\n const points = categories.map((_, index) => ({ x: margin.left + slot * index + slot / 2, y: y(item.values[index] ?? 0) }));\n return (\n <g key={item.name}>\n <polyline points={points.map(point => `${point.x},${point.y}`).join(' ')} fill='none' stroke={color} strokeWidth='2.5' strokeDasharray={dashes[seriesIndex % dashes.length]} />\n {points.map((point, index) => <MarkerShape key={index} kind={markers[seriesIndex % markers.length]} x={point.x} y={point.y} color={color} />)}\n </g>\n );\n })}\n {kind === ChartKind.Bar && series.map((item, seriesIndex) => {\n const group = slot * 0.7;\n const bar = group / series.length;\n return (\n <g key={item.name}>\n {categories.map((_, index) => {\n const value = Math.max(0, item.values[index] ?? 0);\n return <rect key={index} className='foundation-chart-bar' x={margin.left + slot * index + (slot - group) / 2 + bar * seriesIndex} y={y(value)} width={Math.max(1, bar - 2)} height={margin.top + plotHeight - y(value)}\n fill={fillFor(seriesIndex, patternId)} stroke={seriesColors[seriesIndex % seriesColors.length]} strokeWidth='1.5' />;\n })}\n </g>\n );\n })}\n {kind === ChartKind.Stacked && categories.map((_, index) => {\n let base = 0;\n return (\n <g key={index}>\n {series.map((item, seriesIndex) => {\n const value = Math.max(0, item.values[index] ?? 0);\n const top = y(base + value);\n const rect = <rect key={item.name} className='foundation-chart-bar' x={margin.left + slot * index + slot * 0.15} y={top} width={slot * 0.7} height={Math.max(0, y(base) - top)}\n fill={fillFor(seriesIndex, patternId)} stroke={seriesColors[seriesIndex % seriesColors.length]} strokeWidth='1.5' />;\n base += value;\n return rect;\n })}\n </g>\n );\n })}\n </svg>\n );\n}\n\nfunction fillFor(seriesIndex: number, patternId: string): string {\n return seriesIndex === 0 || seriesIndex % 3 === 0 ? seriesColors[seriesIndex % seriesColors.length] : `url(#${patternId}-${seriesIndex})`;\n}\n\nfunction DonutPlot({ categories, values, width, locale }: { categories: string[]; values: number[]; width: number; locale: string }) {\n const size = Math.max(160, Math.min(280, width));\n const radius = size / 2 - 4;\n const slices = donutSlices(values);\n const patternId = useId();\n\n return (\n <svg className='foundation-chart-plot' viewBox={`0 0 ${size} ${size}`} width={size} height={size} aria-hidden='true' focusable='false'>\n <defs>\n {values.map((_, index) => index > 0 && index % 3 !== 0 && (\n <pattern key={index} id={`${patternId}-${index}`} width='6' height='6' patternUnits='userSpaceOnUse' patternTransform={`rotate(${index % 2 === 0 ? 45 : -45})`}>\n <rect width='6' height='6' fill={seriesColors[index % seriesColors.length]} opacity='0.35' />\n <line x1='0' y1='0' x2='0' y2='6' stroke={seriesColors[index % seriesColors.length]} strokeWidth='2.5' />\n </pattern>\n ))}\n </defs>\n {slices.map(slice => (\n <path key={slice.index} className='foundation-chart-slice' d={ringPath(size / 2, size / 2, radius, radius * 0.6, slice.start, slice.end)} fill={fillFor(slice.index, patternId)}\n stroke={seriesColors[slice.index % seriesColors.length]} strokeWidth='1.5' data-share={formatNumber(slice.share * 100, locale, NumberFormat.Percent)}>\n <title>{`${categories[slice.index] ?? ''}: ${formatNumber(slice.share * 100, locale, NumberFormat.Percent)}`}</title>\n </path>\n ))}\n </svg>\n );\n}\n\nfunction FunnelPlot({ categories, values, width, locale, format, currency }: { categories: string[]; values: number[]; width: number; locale: string; format: NumberFormat; currency?: string }) {\n const stages = funnelStages(values);\n const barHeight = 34;\n const gap = 6;\n const height = stages.length * (barHeight + gap);\n const patternId = useId();\n\n return (\n <svg className='foundation-chart-plot' viewBox={`0 0 ${width} ${height}`} width={width} height={height} aria-hidden='true' focusable='false'>\n <defs>\n {stages.map(stage => stage.index > 0 && stage.index % 3 !== 0 && (\n <pattern key={stage.index} id={`${patternId}-${stage.index}`} width='6' height='6' patternUnits='userSpaceOnUse' patternTransform='rotate(45)'>\n <rect width='6' height='6' fill={seriesColors[stage.index % seriesColors.length]} opacity='0.35' />\n <line x1='0' y1='0' x2='0' y2='6' stroke={seriesColors[stage.index % seriesColors.length]} strokeWidth='2.5' />\n </pattern>\n ))}\n </defs>\n {stages.map(stage => {\n const stageWidth = Math.max(2, width * stage.widthRatio);\n return (\n <g key={stage.index}>\n <rect className='foundation-chart-bar' x={(width - stageWidth) / 2} y={stage.index * (barHeight + gap)} width={stageWidth} height={barHeight} rx='4'\n fill={fillFor(stage.index, patternId)} stroke={seriesColors[stage.index % seriesColors.length]} strokeWidth='1.5' />\n <text className='foundation-chart-stage' x={width / 2} y={stage.index * (barHeight + gap) + barHeight / 2} textAnchor='middle' dominantBaseline='middle'>\n {`${categories[stage.index] ?? ''} · ${formatNumber(stage.value, locale, format, currency)}`}\n </text>\n </g>\n );\n })}\n </svg>\n );\n}\n\n/**\n * The `chartWrapper` component: one chart - line, bar, stacked, donut or funnel - drawn as scalable vector graphics from the\n * theme's tokens, with its own title, legend and a data table.\n *\n * `categories` name the points and `series` give a list of values for each. A donut and a funnel draw the first series, one slice or\n * stage per category. The chart is never the only way to read the data: the figure is labelled, the drawing is hidden from assistive\n * technology, and a table of the same numbers follows it - open it with \"Chart data\". Series are told apart by marker, dash or hatch as\n * well as color, and the legend names each.\n */\nexport function ChartWrapper({ element, interactions }: RegisteredComponentProps) {\n const kind = readChartKind(element.properties.kind);\n const categories = readStrings(element, 'categories');\n const series = readSeries(element.properties.series);\n const hasData = series.some(item => item.values.length > 0) && categories.length > 0;\n const state = readComponentState(element, hasData);\n const locale = readLocale(element);\n const format = readNumberFormat(element);\n const currency = readOptionalString(element, 'currency');\n const strings = readFoundationStrings(element);\n const container = useRef<HTMLDivElement>(null);\n const width = useElementWidth(container, 480);\n const title = readOptionalString(element, 'title') ?? readOptionalString(element, 'label');\n const first = series[0]?.values ?? [];\n const single = kind === ChartKind.Donut || kind === ChartKind.Funnel;\n const legend = single ? categories.map((name, index) => ({ name, index })) : series.map((item, index) => ({ name: item.name, index }));\n const dataTableId = useId();\n\n return (\n <FoundationFrame element={{ ...element, properties: { ...element.properties, label: title } }} interactions={interactions} name='chart' state={state} skeleton={[30, 100, 100, 60]}>\n {(state === ComponentState.Ready || state === ComponentState.Partial) && (\n <figure className='foundation-chart-figure' data-kind={kind}>\n {title && <figcaption className='foundation-chart-title'>{title}</figcaption>}\n <div ref={container} className='foundation-chart-canvas'>\n {kind === ChartKind.Donut ? <DonutPlot categories={categories} values={first} width={width} locale={locale} />\n : kind === ChartKind.Funnel ? <FunnelPlot categories={categories} values={first} width={width} locale={locale} format={format} currency={currency} />\n : <CartesianPlot kind={kind} categories={categories} series={series} width={width} locale={locale} format={format} currency={currency} />}\n </div>\n <ul className='foundation-chart-legend' aria-label={strings.chartSeries}>\n {legend.map(entry => (\n <li key={entry.index}>\n <svg width='14' height='14' viewBox='0 0 14 14' aria-hidden='true'>\n {kind === ChartKind.Line ? <MarkerShape kind={markers[entry.index % markers.length]} x={7} y={7} color={seriesColors[entry.index % seriesColors.length]} />\n : <rect x='1' y='1' width='12' height='12' fill={seriesColors[entry.index % seriesColors.length]} opacity={entry.index === 0 || entry.index % 3 === 0 ? 1 : 0.5} stroke={seriesColors[entry.index % seriesColors.length]} strokeWidth='2' />}\n </svg>\n <span>{entry.name}</span>\n </li>\n ))}\n </ul>\n <details className='foundation-chart-data'>\n <summary>{strings.chartDataTable}</summary>\n <table id={dataTableId}>\n <caption className='foundation-visually-hidden'>{title ?? strings.chartDataTable}</caption>\n <thead>\n <tr><th scope='col'>{strings.chartCategory}</th>{(single ? [{ name: series[0]?.name ?? strings.chartSeries }] : series).map(item => <th key={item.name} scope='col'>{item.name}</th>)}</tr>\n </thead>\n <tbody>\n {categories.map((category, index) => (\n <tr key={category + index}>\n <th scope='row'>{category}</th>\n {(single ? [series[0]] : series).map(item => <td key={item?.name}>{formatNumber(item?.values[index] ?? 0, locale, format, currency)}</td>)}\n </tr>\n ))}\n </tbody>\n </table>\n </details>\n </figure>\n )}\n </FoundationFrame>\n );\n}\n"],"names":["readChartKind","value","Object","values","ChartKind","includes","Line","seriesColors","markers","dashes","margin","top","right","bottom","left","MarkerShape","kind","x","y","color","r","_jsx","rect","width","height","fill","polygon","points","path","d","stroke","strokeWidth","circle","cx","cy","CartesianPlot","categories","series","locale","format","currency","Math","max","min","round","plotWidth","plotHeight","scale","niceScale","dataMaximum","length","maximum","slot","patternId","useId","label","formatNumber","NumberFormat","Number","Compact","_jsxs","svg","className","viewBox","aria-hidden","focusable","defs","map","_","index","pattern","id","patternUnits","patternTransform","opacity","line","x1","y1","x2","y2","ticks","tick","g","text","textAnchor","dominantBaseline","category","item","seriesIndex","polyline","point","join","strokeDasharray","name","Bar","group","bar","fillFor","Stacked","base","DonutPlot","size","radius","slices","donutSlices","slice","ringPath","start","end","data-share","share","Percent","title","FunnelPlot","stages","funnelStages","barHeight","gap","stage","stageWidth","widthRatio","rx","ChartWrapper","element","interactions","properties","readStrings","readSeries","hasData","some","state","readComponentState","readLocale","readNumberFormat","readOptionalString","strings","readFoundationStrings","container","useRef","useElementWidth","first","single","Donut","Funnel","legend","dataTableId","FoundationFrame","skeleton","ComponentState","Ready","Partial","figure","data-kind","figcaption","div","ref","ul","aria-label","chartSeries","entry","li","span","details","summary","chartDataTable","table","caption","thead","tr","th","scope","chartCategory","tbody","td"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { RegisteredComponentProps } from '@cratis/scene.react';
2
+ export declare function ColumnChooser({ element, interactions, bindingOutputs }: RegisteredComponentProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=ColumnChooser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnChooser.d.ts","sourceRoot":"","sources":["../../../foundation/ColumnChooser.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAkB,MAAM,qBAAqB,CAAC;AAe/E,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,wBAAwB,+BAqDhG"}