@santi020k/lumen-core 3.0.1 → 4.0.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 (147) hide show
  1. package/PHONE_FLAG_LICENSE.txt +21 -0
  2. package/README.md +363 -3
  3. package/THIRD_PARTY_NOTICES.md +16 -2
  4. package/dist/ai-surfaces.d.ts +25 -0
  5. package/dist/ai-surfaces.d.ts.map +1 -0
  6. package/dist/ai-surfaces.js +162 -0
  7. package/dist/amount-field.d.ts +22 -0
  8. package/dist/amount-field.d.ts.map +1 -0
  9. package/dist/amount-field.js +207 -0
  10. package/dist/attachments.d.ts +15 -0
  11. package/dist/attachments.d.ts.map +1 -0
  12. package/dist/attachments.js +123 -0
  13. package/dist/bullet-chart.d.ts +33 -0
  14. package/dist/bullet-chart.d.ts.map +1 -0
  15. package/dist/bullet-chart.js +80 -0
  16. package/dist/chart-activation.d.ts +32 -0
  17. package/dist/chart-activation.d.ts.map +1 -0
  18. package/dist/chart-activation.js +97 -0
  19. package/dist/chart-interaction.d.ts +12 -0
  20. package/dist/chart-interaction.d.ts.map +1 -0
  21. package/dist/chart-interaction.js +274 -0
  22. package/dist/chart-models.d.ts +156 -0
  23. package/dist/chart-models.d.ts.map +1 -0
  24. package/dist/chart-models.js +348 -0
  25. package/dist/chart-motion.d.ts +6 -0
  26. package/dist/chart-motion.d.ts.map +1 -0
  27. package/dist/chart-motion.js +107 -0
  28. package/dist/charts.d.ts +58 -3
  29. package/dist/charts.d.ts.map +1 -1
  30. package/dist/charts.js +247 -18
  31. package/dist/code.js +1 -1
  32. package/dist/combobox.d.ts +7 -0
  33. package/dist/combobox.d.ts.map +1 -0
  34. package/dist/combobox.js +253 -0
  35. package/dist/comparison-chart.d.ts +32 -0
  36. package/dist/comparison-chart.d.ts.map +1 -0
  37. package/dist/comparison-chart.js +64 -0
  38. package/dist/components.d.ts +210 -25
  39. package/dist/components.d.ts.map +1 -1
  40. package/dist/components.js +102 -26
  41. package/dist/dashboard.d.ts +16 -0
  42. package/dist/dashboard.d.ts.map +1 -0
  43. package/dist/dashboard.js +21 -0
  44. package/dist/data.d.ts.map +1 -1
  45. package/dist/data.js +21 -5
  46. package/dist/dates.d.ts +13 -0
  47. package/dist/dates.d.ts.map +1 -0
  48. package/dist/dates.js +37 -0
  49. package/dist/device-frame.d.ts +25 -0
  50. package/dist/device-frame.d.ts.map +1 -0
  51. package/dist/device-frame.js +50 -0
  52. package/dist/direction.d.ts +3 -0
  53. package/dist/direction.d.ts.map +1 -0
  54. package/dist/direction.js +10 -0
  55. package/dist/extended-charts.d.ts +95 -0
  56. package/dist/extended-charts.d.ts.map +1 -0
  57. package/dist/extended-charts.js +175 -0
  58. package/dist/figma.d.ts.map +1 -1
  59. package/dist/figma.js +10 -1
  60. package/dist/forms.d.ts.map +1 -1
  61. package/dist/forms.js +18 -4
  62. package/dist/icon-data.generated.d.ts +1 -1
  63. package/dist/icon-data.generated.d.ts.map +1 -1
  64. package/dist/icon-data.generated.js +1 -1
  65. package/dist/icons.js +3 -4
  66. package/dist/illustrations.generated.d.ts +1 -1
  67. package/dist/image-comparison.d.ts +14 -0
  68. package/dist/image-comparison.d.ts.map +1 -0
  69. package/dist/image-comparison.js +48 -0
  70. package/dist/index.d.ts +35 -4
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +34 -3
  73. package/dist/media-viewport.d.ts +24 -0
  74. package/dist/media-viewport.d.ts.map +1 -0
  75. package/dist/media-viewport.js +119 -0
  76. package/dist/media-workspace.d.ts +27 -0
  77. package/dist/media-workspace.d.ts.map +1 -0
  78. package/dist/media-workspace.js +83 -0
  79. package/dist/message-scroller.d.ts +14 -0
  80. package/dist/message-scroller.d.ts.map +1 -0
  81. package/dist/message-scroller.js +113 -0
  82. package/dist/motion-workflows.d.ts +24 -0
  83. package/dist/motion-workflows.d.ts.map +1 -0
  84. package/dist/motion-workflows.js +220 -0
  85. package/dist/motion.d.ts +12 -0
  86. package/dist/motion.d.ts.map +1 -0
  87. package/dist/motion.js +96 -0
  88. package/dist/native-input.d.ts +25 -0
  89. package/dist/native-input.d.ts.map +1 -0
  90. package/dist/native-input.js +188 -0
  91. package/dist/phone-flags.generated.d.ts +2 -0
  92. package/dist/phone-flags.generated.d.ts.map +1 -0
  93. package/dist/phone-flags.generated.js +263 -0
  94. package/dist/phone.d.ts +4 -0
  95. package/dist/phone.d.ts.map +1 -1
  96. package/dist/phone.js +6 -1
  97. package/dist/rich-text.d.ts +7 -0
  98. package/dist/rich-text.d.ts.map +1 -1
  99. package/dist/rich-text.js +13 -0
  100. package/dist/rive.d.ts +37 -0
  101. package/dist/rive.d.ts.map +1 -0
  102. package/dist/rive.js +129 -0
  103. package/dist/schedule.d.ts.map +1 -1
  104. package/dist/schedule.js +63 -23
  105. package/dist/tab-indicator.d.ts +3 -0
  106. package/dist/tab-indicator.d.ts.map +1 -0
  107. package/dist/tab-indicator.js +57 -0
  108. package/dist/theme-audit.d.ts +16 -0
  109. package/dist/theme-audit.d.ts.map +1 -0
  110. package/dist/theme-audit.js +57 -0
  111. package/dist/theme-builder.d.ts +7 -1
  112. package/dist/theme-builder.d.ts.map +1 -1
  113. package/dist/theme-builder.js +45 -23
  114. package/dist/theme-presets.generated.d.ts +217 -0
  115. package/dist/theme-presets.generated.d.ts.map +1 -0
  116. package/dist/theme-presets.generated.js +231 -0
  117. package/dist/theme.d.ts +11 -3
  118. package/dist/theme.d.ts.map +1 -1
  119. package/dist/theme.js +56 -6
  120. package/dist/virtual-collection.d.ts +14 -0
  121. package/dist/virtual-collection.d.ts.map +1 -0
  122. package/dist/virtual-collection.js +132 -0
  123. package/dist/virtual-list.d.ts +7 -0
  124. package/dist/virtual-list.d.ts.map +1 -0
  125. package/dist/virtual-list.js +135 -0
  126. package/dist/virtual-window.d.ts +19 -0
  127. package/dist/virtual-window.d.ts.map +1 -0
  128. package/dist/virtual-window.js +84 -0
  129. package/dist/visual-effects.d.ts +6 -0
  130. package/dist/visual-effects.d.ts.map +1 -0
  131. package/dist/visual-effects.js +44 -0
  132. package/dist/world-map-data.generated.d.ts +9 -0
  133. package/dist/world-map-data.generated.d.ts.map +1 -0
  134. package/dist/world-map-data.generated.js +240 -0
  135. package/dist/world-map-navigation.d.ts +16 -0
  136. package/dist/world-map-navigation.d.ts.map +1 -0
  137. package/dist/world-map-navigation.js +53 -0
  138. package/dist/world-map-pan.d.ts +3 -0
  139. package/dist/world-map-pan.d.ts.map +1 -0
  140. package/dist/world-map-pan.js +66 -0
  141. package/dist/world-map-zoom.d.ts +13 -0
  142. package/dist/world-map-zoom.d.ts.map +1 -0
  143. package/dist/world-map-zoom.js +61 -0
  144. package/dist/world-map.d.ts +71 -0
  145. package/dist/world-map.d.ts.map +1 -0
  146. package/dist/world-map.js +143 -0
  147. package/package.json +51 -4
@@ -0,0 +1,348 @@
1
+ import { alignLumenChartSeries, createLumenHeatmapGeometry, createLumenLineGeometry, getLumenChartAxisPadding, getLumenChartCategories, getLumenChartCategoryLabel, getLumenChartCategoryTicks, getLumenChartDomain, getLumenChartNumericX, getLumenChartTicks, lumenChartTones, normalizeLumenHeatmapData, scaleLumenChartValue } from './charts.js';
2
+ const chartSize = (value, fallback) => {
3
+ if (value === undefined || !Number.isFinite(value))
4
+ return fallback;
5
+ return Math.max(240, value);
6
+ };
7
+ const chartKey = (value) => `${typeof value}:${String(value)}`;
8
+ const isAnnotationRecord = (value) => (typeof value === 'object' && value !== null && !Array.isArray(value));
9
+ const isAnnotationValue = (value) => (typeof value === 'string' || (typeof value === 'number' && Number.isFinite(value)));
10
+ const isAnnotationAxis = (value) => value === undefined || value === 'x' || value === 'y';
11
+ const isAnnotationTone = (value) => (value === undefined || lumenChartTones.some(tone => tone === value));
12
+ const isChartAnnotation = (value) => (isAnnotationRecord(value) && typeof value.id === 'string' && typeof value.label === 'string' &&
13
+ isAnnotationValue(value.value) && isAnnotationAxis(value.axis) && isAnnotationTone(value.tone));
14
+ const resolveDomain = (automatic, requested) => {
15
+ const min = requested?.min !== undefined && Number.isFinite(requested.min) ? requested.min : automatic.min;
16
+ const max = requested?.max !== undefined && Number.isFinite(requested.max) ? requested.max : automatic.max;
17
+ return min < max ? { max, min } : automatic;
18
+ };
19
+ const isOptionalChartText = (value) => value === undefined || typeof value === 'string';
20
+ const isNullableChartNumber = (value) => value === null || (typeof value === 'number' && Number.isFinite(value));
21
+ const isLineDatum = (value) => (isAnnotationRecord(value) && isAnnotationValue(value.x) && (value.y === null || typeof value.y === 'number') &&
22
+ ['id', 'label', 'toneLabel', 'xLabel'].every(key => isOptionalChartText(value[key])) &&
23
+ isAnnotationTone(value.tone) && (value.size === undefined || isNullableChartNumber(value.size)));
24
+ const isLineSeries = (value) => (isAnnotationRecord(value) && typeof value.id === 'string' && typeof value.label === 'string' &&
25
+ Array.isArray(value.data) && Array.from(value.data).every((datum) => isLineDatum(datum)) &&
26
+ isAnnotationTone(value.tone) && (value.dash === undefined || ['dashed', 'dotted', 'solid'].some(dash => dash === value.dash)));
27
+ const normalizeLineSeries = (input) => {
28
+ if (!Array.isArray(input))
29
+ return [];
30
+ const rows = Array.from(input);
31
+ return rows.every(isLineSeries) ? rows : [];
32
+ };
33
+ /** Preserves category identity; continuous axes align every series against the same domain. */
34
+ export const createLumenLineChartModel = (input, options = {}) => {
35
+ const { annotations = [], formatCategory, formatValue = String, xScale = 'categorical' } = options;
36
+ const width = chartSize(options.width, 640);
37
+ const height = chartSize(options.height, 240);
38
+ const padding = 44;
39
+ const validInput = normalizeLineSeries(input);
40
+ const categories = getLumenChartCategories(validInput).filter(value => xScale === 'categorical' || getLumenChartNumericX(value, xScale) !== null);
41
+ if (xScale !== 'categorical')
42
+ categories.sort((a, b) => (getLumenChartNumericX(a, xScale) ?? 0) - (getLumenChartNumericX(b, xScale) ?? 0));
43
+ const series = validInput.map(item => alignLumenChartSeries(item, categories));
44
+ const automaticDomain = getLumenChartDomain([
45
+ ...series.flatMap(item => item.data.map(datum => datum.y)), options.referenceValue ?? null
46
+ ], false);
47
+ const domain = resolveDomain(automaticDomain, options.domain);
48
+ const ticks = getLumenChartTicks(domain);
49
+ const paddingLeft = Math.min(width - padding - 40, getLumenChartAxisPadding(ticks.map(formatValue)) * 2);
50
+ const numericCategories = categories.flatMap(value => {
51
+ if (xScale === 'categorical')
52
+ return [];
53
+ const number = getLumenChartNumericX(value, xScale);
54
+ return number === null ? [] : [number];
55
+ });
56
+ const xDomain = resolveDomain(getLumenChartDomain(numericCategories, false), options.xDomain);
57
+ const categoryIndexes = new Map(categories.map((category, index) => [category, index]));
58
+ const positionFor = (value) => {
59
+ if (xScale !== 'categorical') {
60
+ const number = getLumenChartNumericX(value, xScale);
61
+ return number === null ? null : scaleLumenChartValue(number, xDomain, paddingLeft, width - padding);
62
+ }
63
+ const index = categoryIndexes.get(value);
64
+ if (index === undefined)
65
+ return null;
66
+ const ratio = categories.length === 1 ? 0.5 : index / Math.max(1, categories.length - 1);
67
+ return paddingLeft + ratio * (width - padding - paddingLeft);
68
+ };
69
+ const positions = categories.map(value => positionFor(value) ?? paddingLeft);
70
+ const geometries = series.map(item => createLumenLineGeometry(item.data, {
71
+ domain, height, includeZero: false, padding, paddingLeft, width, xDomain, xScale
72
+ }));
73
+ const categoryTicks = getLumenChartCategoryTicks(categories.map(value => getLumenChartCategoryLabel(series, value, formatCategory)), { end: width - padding, positions, start: paddingLeft }).filter(tick => tick.position >= paddingLeft && tick.position <= width - padding);
74
+ const annotationIds = new Set();
75
+ const validAnnotations = Array.isArray(annotations) ?
76
+ annotations.filter((annotation) => {
77
+ if (!isChartAnnotation(annotation) || annotationIds.has(annotation.id))
78
+ return false;
79
+ annotationIds.add(annotation.id);
80
+ return true;
81
+ }) :
82
+ [];
83
+ const annotationMarks = validAnnotations.flatMap(annotation => {
84
+ const axis = annotation.axis ?? 'y';
85
+ let value = null;
86
+ if (axis === 'x')
87
+ value = positionFor(annotation.value);
88
+ else if (typeof annotation.value === 'number' && Number.isFinite(annotation.value)) {
89
+ value = scaleLumenChartValue(annotation.value, domain, height - padding, padding);
90
+ }
91
+ if (value === null)
92
+ return [];
93
+ const inBounds = axis === 'x' ?
94
+ value >= paddingLeft && value <= width - padding :
95
+ value >= padding && value <= height - padding;
96
+ if (!inBounds)
97
+ return [];
98
+ return [{ ...annotation, axis, coordinate: value }];
99
+ });
100
+ return {
101
+ annotationMarks,
102
+ categories,
103
+ categoryTicks,
104
+ domain,
105
+ geometries,
106
+ height,
107
+ padding,
108
+ paddingLeft,
109
+ positions,
110
+ series,
111
+ ticks,
112
+ width,
113
+ xDomain
114
+ };
115
+ };
116
+ const intervalFrame = (values, options) => {
117
+ const width = chartSize(options.width, 640);
118
+ const height = chartSize(options.height, 320);
119
+ const domain = getLumenChartDomain(values);
120
+ const ticks = getLumenChartTicks(domain);
121
+ const requestedFontSize = options.axisFontSize;
122
+ const fontSize = requestedFontSize !== undefined && Number.isFinite(requestedFontSize) && requestedFontSize > 0 ?
123
+ requestedFontSize :
124
+ 24;
125
+ const left = Math.min(width - 64, getLumenChartAxisPadding(ticks.map(options.formatValue ?? String)) * fontSize / 12);
126
+ const top = 32;
127
+ const right = width - 24;
128
+ const bottom = height - 48;
129
+ const y = (value) => scaleLumenChartValue(value, domain, bottom, top);
130
+ return { bottom, domain, height, left, right, ticks, top, width, y };
131
+ };
132
+ const isChartRecord = (value) => {
133
+ if (Array.isArray(value))
134
+ return false;
135
+ return typeof value === 'object' && value !== null;
136
+ };
137
+ const isWaterfallKind = (kind) => kind === undefined || kind === 'delta' || kind === 'total';
138
+ const isOptionalChartTone = (tone) => {
139
+ if (tone === undefined)
140
+ return true;
141
+ return lumenChartTones.some(candidate => candidate === tone);
142
+ };
143
+ const isWaterfallDatum = (datum) => {
144
+ if (!isChartRecord(datum))
145
+ return false;
146
+ return typeof datum.id === 'string' && typeof datum.label === 'string' &&
147
+ typeof datum.value === 'number' && Number.isFinite(datum.value) &&
148
+ isWaterfallKind(datum.kind) && isOptionalChartTone(datum.tone);
149
+ };
150
+ /** Invalid steps fail closed: silently dropping a change would misstate every later balance. */
151
+ export const createLumenWaterfallGeometry = (data, options = {}) => {
152
+ const ids = new Set();
153
+ let balance = 0;
154
+ const entries = Array.isArray(data) ? Array.from(data) : null;
155
+ const rows = entries?.every(isWaterfallDatum) ? entries : null;
156
+ const steps = (rows ?? []).map(datum => {
157
+ const start = datum.kind === 'total' ? 0 : balance;
158
+ const end = datum.kind === 'total' ? datum.value : balance + datum.value;
159
+ balance = end;
160
+ return { ...datum, end, start };
161
+ });
162
+ const valid = rows !== null && steps.every(step => {
163
+ if (!Number.isFinite(step.value) || !Number.isFinite(step.end) || ids.has(step.id))
164
+ return false;
165
+ ids.add(step.id);
166
+ return true;
167
+ });
168
+ const toneFor = (step) => {
169
+ if (step.tone)
170
+ return step.tone;
171
+ if (step.kind === 'total')
172
+ return 'series-1';
173
+ return step.value < 0 ? 'series-3' : 'series-2';
174
+ };
175
+ const frame = intervalFrame(valid ? steps.flatMap(step => [step.start, step.end]) : [], options);
176
+ const band = (frame.right - frame.left) / Math.max(1, steps.length);
177
+ const marks = valid ?
178
+ steps.map((step, index) => ({
179
+ end: step.end,
180
+ height: Math.abs(frame.y(step.end) - frame.y(step.start)),
181
+ key: step.id,
182
+ label: step.label,
183
+ start: step.start,
184
+ tone: toneFor(step),
185
+ value: step.value,
186
+ width: band * 0.7,
187
+ x: frame.left + band * (index + 0.15),
188
+ y: Math.min(frame.y(step.start), frame.y(step.end))
189
+ })) :
190
+ [];
191
+ const categoryTicks = getLumenChartCategoryTicks(marks.map(mark => mark.label), {
192
+ end: frame.right, positions: marks.map(mark => mark.x + mark.width / 2), start: frame.left
193
+ });
194
+ const connectors = marks.slice(0, -1).flatMap((mark, index) => {
195
+ const next = marks[index + 1];
196
+ return next ? [{ x1: mark.x + mark.width, x2: next.x, y: frame.y(mark.end) }] : [];
197
+ });
198
+ return { ...frame, categoryTicks, connectors, marks, valid };
199
+ };
200
+ const validHistogramBins = (bins, frequency) => {
201
+ const first = bins[0];
202
+ const binWidth = first ? first.end - first.start : 0;
203
+ return bins.every((bin, index) => {
204
+ const previous = bins[index - 1];
205
+ const width = bin.end - bin.start;
206
+ if (![bin.start, bin.end, bin.count, width].every(Number.isFinite))
207
+ return false;
208
+ if (width <= 0 || bin.count < 0)
209
+ return false;
210
+ if (previous && bin.start < previous.end)
211
+ return false;
212
+ return frequency === 'density' || Math.abs(width - binWidth) <= Math.abs(binWidth) * 1e-9;
213
+ });
214
+ };
215
+ const histogramDomain = (bins) => ({
216
+ min: bins[0]?.start ?? 0, max: bins.at(-1)?.end ?? 1
217
+ });
218
+ const isHistogramBin = (bin) => {
219
+ if (!isChartRecord(bin))
220
+ return false;
221
+ return typeof bin.start === 'number' && Number.isFinite(bin.start) &&
222
+ typeof bin.end === 'number' && Number.isFinite(bin.end) &&
223
+ typeof bin.count === 'number' && Number.isFinite(bin.count) &&
224
+ (bin.label === undefined || typeof bin.label === 'string');
225
+ };
226
+ const normalizeHistogramBins = (data, frequency) => {
227
+ if (!Array.isArray(data))
228
+ return { bins: [], valid: false };
229
+ const entries = Array.from(data);
230
+ if (!entries.every(isHistogramBin))
231
+ return { bins: [], valid: false };
232
+ const bins = entries.sort((a, b) => a.start - b.start);
233
+ return { bins, valid: validHistogramBins(bins, frequency) };
234
+ };
235
+ /** Bins are supplied by the application. Their numeric widths remain visible. */
236
+ export const createLumenHistogramGeometry = (data, options = {}) => {
237
+ const frequency = options.frequency ?? 'count';
238
+ const { bins, valid } = normalizeHistogramBins(data, frequency);
239
+ const valueFor = (bin) => frequency === 'density' ? bin.count / (bin.end - bin.start) : bin.count;
240
+ const finite = valid && bins.every(bin => Number.isFinite(valueFor(bin)));
241
+ const frame = intervalFrame(finite ? bins.map(valueFor) : [], options);
242
+ const xDomain = histogramDomain(bins);
243
+ const x = (value) => scaleLumenChartValue(value, xDomain, frame.left, frame.right);
244
+ const format = options.formatBoundary ?? String;
245
+ const marks = finite ?
246
+ bins.map(bin => ({
247
+ end: bin.end,
248
+ height: frame.y(0) - frame.y(valueFor(bin)),
249
+ key: chartKey(bin.start),
250
+ label: bin.label ?? `${format(bin.start)}–${format(bin.end)}`,
251
+ start: bin.start,
252
+ tone: options.tone ?? 'series-1',
253
+ value: valueFor(bin),
254
+ width: Math.max(0, x(bin.end) - x(bin.start) - 1),
255
+ x: x(bin.start),
256
+ y: frame.y(valueFor(bin))
257
+ })) :
258
+ [];
259
+ const boundaries = finite ? [...new Set(bins.flatMap(bin => [bin.start, bin.end]))].sort((a, b) => a - b) : [];
260
+ const categoryTicks = getLumenChartCategoryTicks(boundaries.map(format), {
261
+ end: frame.right, positions: boundaries.map(x), start: frame.left
262
+ });
263
+ return { ...frame, bins: finite ? bins : [], categoryTicks, frequency, marks, valid: finite, xDomain };
264
+ };
265
+ const heatmapScale = (automatic, options) => {
266
+ const midpoint = Number.isFinite(options.midpoint) ? options.midpoint ?? 0 : 0;
267
+ if (options.colorScale !== 'diverging')
268
+ return { domain: resolveDomain(automatic, options.domain), midpoint };
269
+ const radius = Math.max(Math.abs(automatic.min - midpoint), Math.abs(automatic.max - midpoint), 1);
270
+ const symmetric = { min: midpoint - radius, max: midpoint + radius };
271
+ const requested = resolveDomain(symmetric, options.domain);
272
+ const finite = (domain) => Number.isFinite(domain.min) && Number.isFinite(domain.max);
273
+ if (finite(requested) && requested.min < midpoint && requested.max > midpoint)
274
+ return { domain: requested, midpoint };
275
+ if (finite(symmetric))
276
+ return { domain: symmetric, midpoint };
277
+ // No finite symmetric extent exists around the requested midpoint; use a neutral zero.
278
+ const fallbackRadius = Math.max(Math.abs(automatic.min), Math.abs(automatic.max), 1);
279
+ return { domain: { min: -fallbackRadius, max: fallbackRadius }, midpoint: 0 };
280
+ };
281
+ const heatmapLegendBackground = (colorScale, midpointPercent) => {
282
+ if (colorScale === 'diverging')
283
+ return `linear-gradient(to right, hsl(var(--chart-diverging-negative)), hsl(var(--chart-diverging-mid)) ${midpointPercent}%, hsl(var(--chart-diverging-positive)))`;
284
+ return 'linear-gradient(to right, hsl(var(--chart-sequential-low)), hsl(var(--chart-sequential-high)))';
285
+ };
286
+ /** One cell per coordinate, including explicit missing measurements. */
287
+ export const createLumenHeatmapModel = (data, options = {}) => {
288
+ const seen = new Set();
289
+ const cells = normalizeLumenHeatmapData(data).filter(cell => {
290
+ const key = JSON.stringify([cell.x, cell.y]);
291
+ if (seen.has(key))
292
+ return false;
293
+ seen.add(key);
294
+ return true;
295
+ });
296
+ const base = createLumenHeatmapGeometry(cells, 496, 248);
297
+ const values = cells.flatMap(cell => cell.value !== null && Number.isFinite(cell.value) ? [cell.value] : []);
298
+ const automatic = getLumenChartDomain(values, false);
299
+ const { domain, midpoint } = heatmapScale(automatic, options);
300
+ const midpointPercent = scaleLumenChartValue(midpoint, domain, 0, 100);
301
+ const labelFor = (axis, value) => cells.find(cell => cell[axis] === value)?.[axis === 'x' ? 'xLabel' : 'yLabel'] ?? String(value);
302
+ const xTicks = getLumenChartCategoryTicks(base.xCategories.map(value => labelFor('x', value)), {
303
+ end: 616,
304
+ positions: base.xCategories.map((_, index) => 120 + (index + 0.5) * 496 / base.xCategories.length),
305
+ start: 120
306
+ });
307
+ const yTicks = base.yCategories.map((value, index) => ({
308
+ label: getLumenChartCategoryTicks([labelFor('y', value)], { end: 104, start: 0 })[0]?.label ?? '',
309
+ position: 24 + (index + 0.5) * 248 / base.yCategories.length,
310
+ value
311
+ }));
312
+ return {
313
+ cells: base.cells.map(cell => ({
314
+ ...cell, xCoordinate: cell.xCoordinate + 120, yCoordinate: cell.yCoordinate + 24
315
+ })),
316
+ domain,
317
+ height: 320,
318
+ legendBackground: heatmapLegendBackground(options.colorScale, midpointPercent),
319
+ midpoint,
320
+ midpointPercent,
321
+ width: 640,
322
+ xTicks,
323
+ yTicks
324
+ };
325
+ };
326
+ /** Platform-neutral color weights; missing measurements have no color weight. */
327
+ export const getLumenHeatmapColorMix = (value, domain, colorScale = 'sequential', midpoint = 0) => {
328
+ if (value === null || !Number.isFinite(value))
329
+ return null;
330
+ const ratio = (start, end) => {
331
+ if (end === start)
332
+ return 0.5;
333
+ return Math.max(0, Math.min(1, scaleLumenChartValue(value, { min: start, max: end }, 0, 1)));
334
+ };
335
+ if (colorScale === 'diverging') {
336
+ const negative = value < midpoint;
337
+ const amount = negative ? 1 - ratio(domain.min, midpoint) : ratio(midpoint, domain.max);
338
+ return { base: 'divergingMid', overlay: negative ? 'divergingNegative' : 'divergingPositive', ratio: amount };
339
+ }
340
+ return { base: 'sequentialLow', overlay: 'sequentialHigh', ratio: ratio(domain.min, domain.max) };
341
+ };
342
+ export const getLumenHeatmapColor = (value, domain, colorScale = 'sequential', midpoint = 0) => {
343
+ const mix = getLumenHeatmapColorMix(value, domain, colorScale, midpoint);
344
+ if (!mix)
345
+ return 'hsl(var(--surface-muted))';
346
+ const token = (name) => name.replace(/[A-Z]/gu, letter => `-${letter.toLowerCase()}`);
347
+ return `color-mix(in srgb, hsl(var(--chart-${token(mix.overlay)})) ${mix.ratio * 100}%, hsl(var(--chart-${token(mix.base)})))`;
348
+ };
@@ -0,0 +1,6 @@
1
+ import type { LumenChartDatum } from './charts.js';
2
+ import { type LumenWorkflowDuration } from './motion-workflows.js';
3
+ export declare const getLumenChartMotionKey: (seriesId: string, point: Pick<LumenChartDatum, "id" | "x">) => string;
4
+ /** Animates decorative SVG geometry only. Tables, summaries, and activation values update immediately. */
5
+ export declare const bindLumenChartMotion: (root: HTMLElement, duration?: LumenWorkflowDuration) => (() => void);
6
+ //# sourceMappingURL=chart-motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-motion.d.ts","sourceRoot":"","sources":["../src/chart-motion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAwD,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAExH,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,EAAE,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,GAAG,CAAC,KAAG,MAEnG,CAAA;AAkDD,0GAA0G;AAC1G,eAAO,MAAM,oBAAoB,GAAI,MAAM,WAAW,EAAE,WAAU,qBAAkC,KAAG,CAAC,MAAM,IAAI,CAwFjH,CAAA"}
@@ -0,0 +1,107 @@
1
+ import { getLumenWorkflowTiming, isLumenWorkflowMotionReduced } from './motion-workflows.js';
2
+ export const getLumenChartMotionKey = (seriesId, point) => (JSON.stringify([seriesId, point.id ?? [typeof point.x, point.x]]));
3
+ const geometryProperties = ['cx', 'cy', 'r', 'x', 'y', 'width', 'height', 'd'];
4
+ const captureFrame = (element) => {
5
+ const frame = {};
6
+ const css = element.ownerDocument.defaultView?.CSS;
7
+ for (const property of geometryProperties) {
8
+ const value = element.getAttribute(property);
9
+ if (value === null)
10
+ continue;
11
+ if (property === 'd') {
12
+ const path = `path("${value}")`;
13
+ if (css?.supports('d', path))
14
+ frame.d = path;
15
+ }
16
+ else if (Number.isFinite(Number(value)))
17
+ frame[property] = `${value}px`;
18
+ }
19
+ return frame;
20
+ };
21
+ const captureMarks = (root) => {
22
+ const result = new Map();
23
+ const duplicate = new Set();
24
+ for (const element of root.querySelectorAll('[data-ui-chart-motion-key]')) {
25
+ const key = element.getAttribute('data-ui-chart-motion-key');
26
+ if (!key || duplicate.has(key))
27
+ continue;
28
+ if (result.has(key)) {
29
+ result.delete(key);
30
+ duplicate.add(key);
31
+ continue;
32
+ }
33
+ const frame = captureFrame(element);
34
+ result.set(key, { element, frame });
35
+ }
36
+ return result;
37
+ };
38
+ /** Animates decorative SVG geometry only. Tables, summaries, and activation values update immediately. */
39
+ export const bindLumenChartMotion = (root, duration = 'standard') => {
40
+ let previous = captureMarks(root);
41
+ const active = new Map();
42
+ const cancel = () => {
43
+ for (const animation of active.values())
44
+ animation.cancel();
45
+ active.clear();
46
+ };
47
+ const captureInterruptedFrames = () => {
48
+ const view = root.ownerDocument.defaultView;
49
+ if (!view)
50
+ return;
51
+ for (const snapshot of previous.values()) {
52
+ if (!active.has(snapshot.element) || !snapshot.element.isConnected)
53
+ continue;
54
+ const style = view.getComputedStyle(snapshot.element);
55
+ for (const property of geometryProperties) {
56
+ if (!(property in snapshot.frame))
57
+ continue;
58
+ const value = style.getPropertyValue(property);
59
+ if (value)
60
+ snapshot.frame[property] = value;
61
+ }
62
+ }
63
+ };
64
+ const refresh = () => {
65
+ captureInterruptedFrames();
66
+ const next = captureMarks(root);
67
+ cancel();
68
+ if (!isLumenWorkflowMotionReduced(root)) {
69
+ const timing = getLumenWorkflowTiming(root, duration);
70
+ for (const [key, snapshot] of next) {
71
+ if (typeof snapshot.element.animate !== 'function' || timing.duration === 0)
72
+ continue;
73
+ const old = previous.get(key);
74
+ const frames = old ? [old.frame, snapshot.frame] : [{ opacity: 0 }, { opacity: 1 }];
75
+ if (old && JSON.stringify(old.frame) === JSON.stringify(snapshot.frame))
76
+ continue;
77
+ let animation;
78
+ try {
79
+ animation = snapshot.element.animate(frames, timing);
80
+ }
81
+ catch {
82
+ continue;
83
+ }
84
+ active.set(snapshot.element, animation);
85
+ void animation.finished.then(() => {
86
+ if (active.get(snapshot.element) === animation)
87
+ active.delete(snapshot.element);
88
+ return undefined;
89
+ }, () => {
90
+ if (active.get(snapshot.element) === animation)
91
+ active.delete(snapshot.element);
92
+ return undefined;
93
+ });
94
+ }
95
+ }
96
+ previous = next;
97
+ };
98
+ const observer = new MutationObserver(refresh);
99
+ observer.observe(root, { subtree: true, childList: true, attributes: true, attributeFilter: [...geometryProperties, 'hidden', 'data-ui-chart-motion-key', 'data-ui-motion'] });
100
+ const media = root.ownerDocument.defaultView?.matchMedia('(prefers-reduced-motion: reduce)');
101
+ media?.addEventListener('change', refresh);
102
+ return () => {
103
+ observer.disconnect();
104
+ media?.removeEventListener('change', refresh);
105
+ cancel();
106
+ };
107
+ };
package/dist/charts.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export { createLumenChartActivationController, createLumenChartDatumActivation, createLumenHeatmapDatumActivation, createLumenRangeDatumActivation, type LumenChartActivationController, type LumenChartDatumActivationDetail, parseLumenChartDatumActivation } from './chart-activation.js';
1
2
  export declare const lumenChartTones: readonly ["series-1", "series-2", "series-3", "series-4", "series-5", "series-6", "series-7", "series-8", "brand", "accent", "success", "warning", "danger", "neutral"];
2
3
  export type LumenChartTone = (typeof lumenChartTones)[number];
3
4
  export type LumenChartScaleType = 'categorical' | 'linear' | 'time';
@@ -44,7 +45,7 @@ export interface LumenChartAnnotation {
44
45
  value: number | string;
45
46
  }
46
47
  export interface LumenChartValidationIssue {
47
- code: 'duplicate-datum-id' | 'duplicate-series-id' | 'invalid-size' | 'invalid-x' | 'invalid-y' | 'unsorted-x';
48
+ code: 'duplicate-category' | 'duplicate-datum-id' | 'duplicate-series-id' | 'invalid-size' | 'invalid-x' | 'invalid-y' | 'unsorted-x';
48
49
  message: string;
49
50
  path: string;
50
51
  }
@@ -56,11 +57,17 @@ export interface LumenChartSummary {
56
57
  seriesCount: number;
57
58
  }
58
59
  export interface LumenChartLabels {
60
+ count: string;
61
+ density: string;
62
+ end: string;
63
+ invalidData: string;
64
+ start: string;
59
65
  category: string;
60
66
  chartData: string;
61
67
  chartLegend: string;
62
68
  column: string;
63
69
  empty: string;
70
+ exploreData: string;
64
71
  high: string;
65
72
  low: string;
66
73
  notAvailable: string;
@@ -70,6 +77,7 @@ export interface LumenChartLabels {
70
77
  value: string;
71
78
  viewData: string;
72
79
  x: string;
80
+ formatDatumAction: (context: string) => string;
73
81
  formatHeatmapSummary: (count: number) => string;
74
82
  formatRangeSummary: (count: number) => string;
75
83
  formatSummary: (summary: Readonly<LumenChartSummary>, formatValue: (value: number) => string) => string;
@@ -128,11 +136,19 @@ export interface LumenBarGeometry {
128
136
  domain: LumenChartDomain;
129
137
  height: number;
130
138
  marks: readonly LumenBarGeometryMark[];
139
+ margin: Readonly<{
140
+ bottom: number;
141
+ left: number;
142
+ right: number;
143
+ top: number;
144
+ }>;
131
145
  width: number;
132
146
  }
133
147
  export interface LumenBarGeometryOptions {
134
148
  categoryWidth?: number;
135
149
  domain?: Partial<LumenChartDomain>;
150
+ formatCategory?: (category: number | string) => string;
151
+ formatValue?: (value: number) => string;
136
152
  height?: number;
137
153
  layout?: LumenBarChartLayout;
138
154
  orientation?: LumenChartOrientation;
@@ -177,6 +193,7 @@ export interface LumenScatterGeometry {
177
193
  width: number;
178
194
  xDomain: LumenChartDomain;
179
195
  }
196
+ export type LumenScatterScaleType = 'linear' | 'log' | 'time';
180
197
  export interface LumenScatterGeometryOptions {
181
198
  domain?: Partial<LumenChartDomain>;
182
199
  height?: number;
@@ -185,7 +202,7 @@ export interface LumenScatterGeometryOptions {
185
202
  padding?: number;
186
203
  width?: number;
187
204
  xDomain?: Partial<LumenChartDomain>;
188
- xScale?: Exclude<LumenChartScaleType, 'categorical'>;
205
+ xScale?: LumenScatterScaleType;
189
206
  }
190
207
  export interface LumenHeatmapDatum {
191
208
  id?: string;
@@ -241,6 +258,22 @@ export declare const getLumenChartTicks: (domain: LumenChartDomain, count?: numb
241
258
  * bounded so unusually verbose formatters cannot consume the complete plot.
242
259
  */
243
260
  export declare const getLumenChartAxisPadding: (labels: readonly string[], minimum?: number) => number;
261
+ export interface LumenChartCategoryTick {
262
+ index: number;
263
+ label: string;
264
+ position: number;
265
+ textAnchor: 'end' | 'middle' | 'start';
266
+ }
267
+ export interface LumenChartCategoryTickOptions {
268
+ end: number;
269
+ minimumGap?: number;
270
+ positions?: readonly number[];
271
+ start: number;
272
+ }
273
+ /** Selects readable axis labels without changing or downsampling the underlying chart data. */
274
+ export declare const getLumenChartCategoryTicks: (labels: readonly string[], { end, minimumGap, positions, start }: LumenChartCategoryTickOptions) => LumenChartCategoryTick[];
275
+ /** Axis labels prefer xLabel; detail labels prefer an explicitly supplied full formatter. */
276
+ export declare const getLumenChartCategoryLabel: (series: readonly LumenChartSeries[], category: number | string, formatCategory?: (category: number | string) => string, context?: "axis" | "detail") => string;
244
277
  export declare const resolveLumenChartTone: (tone: LumenChartTone | undefined, index?: number) => LumenChartTone;
245
278
  export declare const getLumenChartToneClassName: (tone: LumenChartTone | undefined, index?: number) => string;
246
279
  export declare const getLumenPieChartVariantClassName: (variant: LumenPieChartVariant) => string;
@@ -256,7 +289,29 @@ export declare const formatLumenChartSummary: (series: readonly LumenChartSeries
256
289
  export declare const validateLumenChartSeries: (series: readonly LumenChartSeries[], xScale?: LumenChartScaleType) => LumenChartValidationIssue[];
257
290
  export declare const downsampleLumenChartData: (data: readonly LumenChartDatum[], threshold: number) => LumenChartDatum[];
258
291
  export declare const appendLumenChartDatum: (series: LumenChartSeries, datum: LumenChartDatum, maximumPoints?: number) => LumenChartSeries;
292
+ export declare const scaleLumenScatterX: (value: number, domain: LumenChartDomain, rangeStart: number, rangeEnd: number, scale?: LumenScatterScaleType) => number;
293
+ export declare const getLumenScatterXTicks: (domain: LumenChartDomain, scale: LumenScatterScaleType) => number[];
294
+ export interface LumenScatterReference {
295
+ id: string;
296
+ label: string;
297
+ x?: number;
298
+ y?: number;
299
+ /** Supplying both ranges creates a reference region. */
300
+ xEnd?: number;
301
+ yEnd?: number;
302
+ }
303
+ export interface LumenScatterReferenceGeometry extends LumenScatterReference {
304
+ x1: number;
305
+ x2: number;
306
+ y1: number;
307
+ y2: number;
308
+ region: boolean;
309
+ }
310
+ export declare const createLumenScatterReferences: (references: readonly LumenScatterReference[], geometry: LumenScatterGeometry, scale?: LumenScatterScaleType, padding?: number) => LumenScatterReferenceGeometry[];
259
311
  export declare const createLumenScatterGeometry: (series: readonly LumenChartSeries[], options?: LumenScatterGeometryOptions) => LumenScatterGeometry;
260
- export declare const createLumenHeatmapGeometry: (data: readonly LumenHeatmapDatum[], width?: number, height?: number) => LumenHeatmapGeometry;
312
+ /** Reject the whole decoded collection before adapters read or format cell fields. */
313
+ export declare const normalizeLumenHeatmapData: (data: readonly unknown[]) => LumenHeatmapDatum[];
314
+ export declare const createLumenHeatmapGeometry: (rawData: readonly unknown[], width?: number, height?: number) => LumenHeatmapGeometry;
261
315
  export declare const createLumenRangeGeometry: (data: readonly LumenRangeDatum[], options?: LumenLineGeometryOptions) => LumenRangeGeometry;
316
+ export * from './extended-charts.js';
262
317
  //# sourceMappingURL=charts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../src/charts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,yKAelB,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAA;AACnE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;AAExE,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,sBAAsB,CAAA;IACjC,KAAK,CAAC,EAAE,mBAAmB,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,eAAe,EAAE,CAAA;IAChC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EACA,oBAAoB,GACtB,qBAAqB,GACrB,cAAc,GACd,WAAW,GACX,WAAW,GACX,YAAY,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,CAAC,EAAE,MAAM,CAAA;IACT,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC/C,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAC7C,aAAa,EAAE,CACb,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACpC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,KACnC,MAAM,CAAA;CACZ;AAeD,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAsBtD,CAAA;AAEF,eAAO,MAAM,uBAAuB,GAClC,QAAQ,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS,KAC5C,QAAQ,CAAC,gBAAgB,CAAyC,CAAA;AAErE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,MAAM,EAAE,gBAAgB,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAA;IAC1C,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC7B;AAED,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,CAAA;AACvD,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,UAAU,CAAA;AAE7D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAA;IAC/C,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACtC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,WAAW,CAAC,EAAE,qBAAqB,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,KAAK,CAAA;AAwBlD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACxC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,oBAAoB,CAAA;CAC/B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAEpD,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACxE,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,yBAAyB,EAAE,CAAA;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,SAAS,wBAAwB,EAAE,CAAA;IAC1C,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzC,WAAW,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAA;CAC3C;AAKD,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,SAAS,gBAAgB,EAAE,KAClC,OAAqG,CAAA;AAExG,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,eAAe,EAAE,KAAG,OAElE,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAClC,qBAAkB,KACjB,gBA6BF,CAAA;AAeD,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,QAAQ,gBAAgB,EACxB,YAAY,MAAM,EAClB,UAAU,MAAM,KACf,MAQF,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,gBAAgB,EACxB,cAAS,KACR,MAAM,EA2BR,CAAA;AA4ED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GACnC,QAAQ,SAAS,MAAM,EAAE,EACzB,gBAAY,KACX,MAaF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,MAAM,cAAc,GAAG,SAAS,EAChC,cAAS,KACR,cAAkE,CAAA;AAErE,eAAO,MAAM,0BAA0B,GACrC,MAAM,cAAc,GAAG,SAAS,EAChC,cAAS,KACR,MAAsE,CAAA;AAEzE,eAAO,MAAM,gCAAgC,GAC3C,SAAS,oBAAoB,KAC5B,MAAiD,CAAA;AAuGpD,eAAO,MAAM,sBAAsB,GACjC,MAAM,SAAS,eAAe,EAAE,EAChC,UAAS,uBAA4B,KACpC,gBA2CF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,OAAO,MAAM,GAAG,MAAM,EACtB,OAAO,OAAO,CAAC,mBAAmB,EAAE,aAAa,CAAC,KACjD,MAAM,GAAG,IAYX,CAAA;AAsHD,eAAO,MAAM,uBAAuB,GAClC,MAAM,SAAS,eAAe,EAAE,EAChC,UAAS,wBAA6B,KACrC,iBA4DF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,OAAO,MAAM,EACb,QAAQ,gBAAgB,KACvB,MAIF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,QAAQ,SAAS,gBAAgB,EAAE,KAClC,CAAC,MAAM,GAAG,MAAM,CAAC,EAYnB,CAAA;AAUD,eAAO,MAAM,qBAAqB,GAChC,QAAQ,gBAAgB,EACxB,YAAY,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KACvC,gBAYF,CAAA;AA8CD,eAAO,MAAM,sBAAsB,GACjC,QAAQ,SAAS,gBAAgB,EAAE,EACnC,UAAS,uBAA4B,KACpC,gBA4JF,CAAA;AAGD,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,SAAS,gBAAgB,EAAE,KAClC,iBA6BF,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,QAAQ,SAAS,gBAAgB,EAAE,EACnC,cAAa,CAAC,KAAK,EAAE,MAAM,KAAK,MAAe,EAC/C,SAAS,OAAO,CAAC,gBAAgB,CAAC,KACjC,MAKF,CAAA;AA0FD,eAAO,MAAM,wBAAwB,GACnC,QAAQ,SAAS,gBAAgB,EAAE,EACnC,SAAQ,mBAAmC,KAC1C,yBAAyB,EAgC3B,CAAA;AAiCD,eAAO,MAAM,wBAAwB,GACnC,MAAM,SAAS,eAAe,EAAE,EAChC,WAAW,MAAM,KAChB,eAAe,EA4BjB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,QAAQ,gBAAgB,EACxB,OAAO,eAAe,EACtB,sBAAmB,KAClB,gBAQF,CAAA;AAsED,eAAO,MAAM,0BAA0B,GACrC,QAAQ,SAAS,gBAAgB,EAAE,EACnC,UAAS,2BAAgC,KACxC,oBAsDF,CAAA;AA0CD,eAAO,MAAM,0BAA0B,GACrC,MAAM,SAAS,iBAAiB,EAAE,EAClC,cAAW,EACX,eAAY,KACX,oBA4BF,CAAA;AA+BD,eAAO,MAAM,wBAAwB,GACnC,MAAM,SAAS,eAAe,EAAE,EAChC,UAAS,wBAA6B,KACrC,kBAyDF,CAAA"}
1
+ {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../src/charts.ts"],"names":[],"mappings":"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"}