@santi020k/lumen-core 3.0.0 → 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 +379 -4
  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 +68 -3
  29. package/dist/charts.d.ts.map +1 -1
  30. package/dist/charts.js +328 -29
  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;
@@ -96,6 +104,10 @@ export interface LumenLineGeometryOptions {
96
104
  height?: number;
97
105
  includeZero?: boolean;
98
106
  padding?: number;
107
+ paddingBottom?: number;
108
+ paddingLeft?: number;
109
+ paddingRight?: number;
110
+ paddingTop?: number;
99
111
  width?: number;
100
112
  xDomain?: Partial<LumenChartDomain>;
101
113
  xScale?: LumenChartScaleType;
@@ -124,11 +136,19 @@ export interface LumenBarGeometry {
124
136
  domain: LumenChartDomain;
125
137
  height: number;
126
138
  marks: readonly LumenBarGeometryMark[];
139
+ margin: Readonly<{
140
+ bottom: number;
141
+ left: number;
142
+ right: number;
143
+ top: number;
144
+ }>;
127
145
  width: number;
128
146
  }
129
147
  export interface LumenBarGeometryOptions {
130
148
  categoryWidth?: number;
131
149
  domain?: Partial<LumenChartDomain>;
150
+ formatCategory?: (category: number | string) => string;
151
+ formatValue?: (value: number) => string;
132
152
  height?: number;
133
153
  layout?: LumenBarChartLayout;
134
154
  orientation?: LumenChartOrientation;
@@ -173,6 +193,7 @@ export interface LumenScatterGeometry {
173
193
  width: number;
174
194
  xDomain: LumenChartDomain;
175
195
  }
196
+ export type LumenScatterScaleType = 'linear' | 'log' | 'time';
176
197
  export interface LumenScatterGeometryOptions {
177
198
  domain?: Partial<LumenChartDomain>;
178
199
  height?: number;
@@ -181,7 +202,7 @@ export interface LumenScatterGeometryOptions {
181
202
  padding?: number;
182
203
  width?: number;
183
204
  xDomain?: Partial<LumenChartDomain>;
184
- xScale?: Exclude<LumenChartScaleType, 'categorical'>;
205
+ xScale?: LumenScatterScaleType;
185
206
  }
186
207
  export interface LumenHeatmapDatum {
187
208
  id?: string;
@@ -231,6 +252,28 @@ export declare const hasLumenPieData: (data: readonly LumenChartDatum[]) => bool
231
252
  export declare const getLumenChartDomain: (values: readonly (number | null)[], includeZero?: boolean) => LumenChartDomain;
232
253
  export declare const scaleLumenChartValue: (value: number, domain: LumenChartDomain, rangeStart: number, rangeEnd: number) => number;
233
254
  export declare const getLumenChartTicks: (domain: LumenChartDomain, count?: number) => number[];
255
+ /**
256
+ * Reserves enough SVG space for formatted value-axis labels when text measurement is unavailable
257
+ * during server rendering. The estimate targets Lumen's 0.6875rem chart label style and stays
258
+ * bounded so unusually verbose formatters cannot consume the complete plot.
259
+ */
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;
234
277
  export declare const resolveLumenChartTone: (tone: LumenChartTone | undefined, index?: number) => LumenChartTone;
235
278
  export declare const getLumenChartToneClassName: (tone: LumenChartTone | undefined, index?: number) => string;
236
279
  export declare const getLumenPieChartVariantClassName: (variant: LumenPieChartVariant) => string;
@@ -246,7 +289,29 @@ export declare const formatLumenChartSummary: (series: readonly LumenChartSeries
246
289
  export declare const validateLumenChartSeries: (series: readonly LumenChartSeries[], xScale?: LumenChartScaleType) => LumenChartValidationIssue[];
247
290
  export declare const downsampleLumenChartData: (data: readonly LumenChartDatum[], threshold: number) => LumenChartDatum[];
248
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[];
249
311
  export declare const createLumenScatterGeometry: (series: readonly LumenChartSeries[], options?: LumenScatterGeometryOptions) => LumenScatterGeometry;
250
- 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;
251
315
  export declare const createLumenRangeGeometry: (data: readonly LumenRangeDatum[], options?: LumenLineGeometryOptions) => LumenRangeGeometry;
316
+ export * from './extended-charts.js';
252
317
  //# sourceMappingURL=charts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../src/charts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../src/charts.ts"],"names":[],"mappings":"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"}