@santi020k/lumen 0.3.0 → 1.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.
@@ -0,0 +1,180 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readdir, readFile, stat } from 'node:fs/promises';
3
+ import { extname, join, relative, resolve } from 'node:path';
4
+ import { lumenComponentBehavior, lumenStylingContracts } from '@santi020k/lumen-core';
5
+ const sourceExtensions = new Set(['.astro', '.css', '.js', '.jsx', '.mjs', '.ts', '.tsx']);
6
+ const ignoredDirectories = new Set(['.git', '.next', '.turbo', 'coverage', 'dist', 'node_modules']);
7
+ const publicRootSlots = new Set(Object.values(lumenStylingContracts).flatMap(contract => [contract.rootSlot, ...contract.parts]));
8
+ const findSourceFiles = async (root) => {
9
+ const files = [];
10
+ const visit = async (directory) => {
11
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
12
+ if (ignoredDirectories.has(entry.name))
13
+ continue;
14
+ const path = join(directory, entry.name);
15
+ if (entry.isDirectory())
16
+ await visit(path);
17
+ else if (sourceExtensions.has(extname(entry.name)))
18
+ files.push(path);
19
+ }
20
+ };
21
+ await visit(root);
22
+ return files;
23
+ };
24
+ const importedNames = (source, packageName) => {
25
+ const names = [];
26
+ const pattern = new RegExp(`import\\s*\\{([\\s\\S]*?)\\}\\s*from\\s*['"]${packageName}['"]`, 'g');
27
+ for (const match of source.matchAll(pattern)) {
28
+ for (const entry of (match[1] ?? '').split(',')) {
29
+ const name = entry.trim().split(/\s+as\s+/u)[0];
30
+ if (name)
31
+ names.push(name);
32
+ }
33
+ }
34
+ return names;
35
+ };
36
+ const finding = (file, rule, message, remediation, severity = 'error') => ({ file, message, remediation, rule, severity });
37
+ const getFrameworks = (joined) => [
38
+ joined.includes('@santi020k/lumen-astro') && 'astro',
39
+ joined.includes('@santi020k/lumen-elements') && 'elements',
40
+ joined.includes('@santi020k/lumen-react') && 'react'
41
+ ].filter((value) => Boolean(value));
42
+ const collectCompatibilityFindings = (root, sources) => sources.flatMap(item => {
43
+ const file = relative(root, item.file);
44
+ const findings = [];
45
+ if (/surface\s*=\s*["']glass["']/u.test(item.source)) {
46
+ findings.push(finding(file, 'deprecated-surface-glass', 'The surface="glass" compatibility alias is deprecated.', 'Replace it with the glass prop or attribute.', 'advisory'));
47
+ }
48
+ if (item.source.includes('ui:datatable-selection-change')) {
49
+ findings.push(finding(file, 'deprecated-datatable-event', 'The ui:datatable-selection-change event alias is deprecated.', 'Rename it to ui:data-table-selection-change.', 'advisory'));
50
+ }
51
+ return findings;
52
+ });
53
+ const getCatalogFingerprint = (sources) => {
54
+ const names = [...new Set(sources.flatMap(item => [
55
+ ...importedNames(item.source, '@santi020k/lumen-astro'),
56
+ ...importedNames(item.source, '@santi020k/lumen-react')
57
+ ]))]
58
+ .filter(name => name in lumenComponentBehavior)
59
+ .sort();
60
+ const contracts = names.map(name => [name, lumenComponentBehavior[name]]);
61
+ return createHash('sha256').update(JSON.stringify(contracts)).digest('hex');
62
+ };
63
+ const collectRuntimeFindings = (root, sources, runtimeComponents) => {
64
+ const imports = sources.flatMap(item => importedNames(item.source, '@santi020k/lumen-astro').map(name => ({ file: item.file, name })));
65
+ const mounts = sources.filter(item => /<UIPrimitives(?:\s|\/|>)/u.test(item.source));
66
+ const findings = [];
67
+ if (runtimeComponents.length > 0 && mounts.length === 0) {
68
+ findings.push(finding(imports[0] ? relative(root, imports[0].file) : 'package.json', 'astro-runtime-missing', `Interactive Astro imports require UIPrimitives: ${runtimeComponents.join(', ')}.`, 'Mount <UIPrimitives /> once in the root layout.'));
69
+ }
70
+ for (const mount of mounts.slice(1)) {
71
+ findings.push(finding(relative(root, mount.file), 'astro-runtime-duplicate', 'UIPrimitives is mounted more than once.', 'Keep one mount in the application root layout.'));
72
+ }
73
+ return findings;
74
+ };
75
+ const collectCssFindings = (root, sources) => sources.filter(item => item.file.endsWith('.css')).flatMap(item => {
76
+ const layerIndex = item.source.indexOf('/layers.css');
77
+ const tailwindIndex = item.source.indexOf('tailwindcss');
78
+ const styleIndex = item.source.indexOf('/styles.css');
79
+ const findings = [];
80
+ if (tailwindIndex >= 0 &&
81
+ (layerIndex < 0 || styleIndex < 0 || !(layerIndex < tailwindIndex && tailwindIndex < styleIndex))) {
82
+ findings.push(finding(relative(root, item.file), 'tailwind-layer-order', 'Tailwind and Lumen imports do not use the verified cascade order.', 'Import Lumen layers.css, then tailwindcss, then the matching Lumen styles.css.'));
83
+ }
84
+ for (const match of item.source.matchAll(/\.ui-([a-z0-9-]+)/g)) {
85
+ const selector = match[1] ?? '';
86
+ if (!publicRootSlots.has(selector)) {
87
+ findings.push(finding(relative(root, item.file), 'internal-selector', `Selector .ui-${selector} is not a documented stable root hook.`, 'Prefer component props, semantic tokens, documented custom properties, or [data-slot].', 'advisory'));
88
+ }
89
+ }
90
+ return findings;
91
+ });
92
+ const styleImportByFramework = {
93
+ astro: '@santi020k/lumen-astro/styles.css',
94
+ elements: '@santi020k/lumen-elements/styles.css',
95
+ react: '@santi020k/lumen-react/styles.css'
96
+ };
97
+ const collectFrameworkStyleFindings = (root, sources, frameworks) => frameworks.flatMap(framework => {
98
+ const references = sources.filter(item => item.source.includes(styleImportByFramework[framework]));
99
+ if (references.length === 0) {
100
+ return [finding('styles', 'framework-style-missing', `No ${styleImportByFramework[framework]} import was found.`, 'Load the matching adapter stylesheet once in the application root.')];
101
+ }
102
+ return references.slice(1).map(item => finding(relative(root, item.file), 'framework-style-duplicate', `The ${framework} stylesheet is loaded more than once.`, 'Keep one stylesheet import in the application root.'));
103
+ });
104
+ const collectAdapterMismatchFindings = (joined, frameworks) => {
105
+ const adapters = [...joined.matchAll(/@santi020k\/lumen-(astro|elements|react)\/styles\.css/g)]
106
+ .map(match => match[1])
107
+ .filter((adapter) => adapter === 'astro' || adapter === 'elements' || adapter === 'react');
108
+ return [...new Set(adapters)]
109
+ .filter(adapter => !frameworks.includes(adapter))
110
+ .map(adapter => finding('styles', 'adapter-style-mismatch', `The ${adapter} stylesheet is loaded without matching ${adapter} imports.`, 'Load the stylesheet from the adapter used by this application boundary.'));
111
+ };
112
+ export const inspectLumenIntegration = async (repository) => {
113
+ const root = resolve(repository);
114
+ if (!(await stat(root)).isDirectory())
115
+ throw new Error(`Not a directory: ${root}`);
116
+ const files = await findSourceFiles(root);
117
+ const sources = await Promise.all(files.map(async (file) => ({ file, source: await readFile(file, 'utf8') })));
118
+ const joined = sources.map(item => item.source).join('\n');
119
+ const frameworks = getFrameworks(joined);
120
+ const astroNames = sources.flatMap(item => importedNames(item.source, '@santi020k/lumen-astro'));
121
+ const runtimeComponents = [...new Set(astroNames.filter(name => name in lumenComponentBehavior &&
122
+ lumenComponentBehavior[name].astro === 'ui-primitives'))];
123
+ const findings = [
124
+ ...collectCompatibilityFindings(root, sources),
125
+ ...collectRuntimeFindings(root, sources, runtimeComponents),
126
+ ...collectCssFindings(root, sources),
127
+ ...collectFrameworkStyleFindings(root, sources, frameworks),
128
+ ...collectAdapterMismatchFindings(joined, frameworks)
129
+ ];
130
+ return {
131
+ catalogFingerprint: getCatalogFingerprint(sources),
132
+ findings,
133
+ frameworks,
134
+ generatedAt: new Date().toISOString(),
135
+ healthy: findings.every(item => item.severity !== 'error'),
136
+ repository: root,
137
+ runtimeComponents
138
+ };
139
+ };
140
+ export const formatLumenDiagnostics = (report) => {
141
+ const heading = report.healthy ? 'Lumen integration is healthy.' : 'Lumen integration has blocking findings.';
142
+ if (report.findings.length === 0)
143
+ return heading;
144
+ return [
145
+ heading,
146
+ ...report.findings.map(item => `[${item.severity}] ${item.file} ${item.rule}: ${item.message} ${item.remediation}`)
147
+ ].join('\n');
148
+ };
149
+ export const createLumenSetup = (framework, tailwind = false) => {
150
+ const setupByFramework = {
151
+ astro: {
152
+ styles: '@import "@santi020k/lumen-astro/styles.css";',
153
+ tailwind: '@import "@santi020k/lumen-astro/layers.css";\n' +
154
+ '@import "tailwindcss";\n' +
155
+ '@import "@santi020k/lumen-astro/styles.css";'
156
+ },
157
+ elements: {
158
+ styles: '@import "@santi020k/lumen-elements/styles.css";',
159
+ tailwind: '@import "@santi020k/lumen-elements/layers.css";\n' +
160
+ '@import "tailwindcss";\n' +
161
+ '@import "@santi020k/lumen-elements/styles.css";'
162
+ },
163
+ react: {
164
+ styles: '@import "@santi020k/lumen-react/styles.css";',
165
+ tailwind: '@import "@santi020k/lumen-react/layers.css";\n' +
166
+ '@import "tailwindcss";\n' +
167
+ '@import "@santi020k/lumen-react/styles.css";'
168
+ }
169
+ };
170
+ const styles = tailwind ? setupByFramework[framework].tailwind : setupByFramework[framework].styles;
171
+ if (framework === 'astro') {
172
+ return `${styles}\n\n---\nimport { UIPrimitives } from '@santi020k/lumen-astro'\n---\n\n<UIPrimitives />`;
173
+ }
174
+ if (framework === 'elements') {
175
+ return `${styles}\n\n` +
176
+ 'import { defineLumenElements } from \'@santi020k/lumen-elements/define\'\n\n' +
177
+ 'defineLumenElements()';
178
+ }
179
+ return styles;
180
+ };
@@ -27,6 +27,46 @@ export declare const lumenRegistry: {
27
27
  readonly name: "rich-text-editor";
28
28
  readonly type: "recipe";
29
29
  readonly components: readonly ["RichTextEditor", "ButtonGroup", "ToggleGroup", "Textarea"];
30
+ }, {
31
+ readonly name: "data-visualization";
32
+ readonly type: "recipe";
33
+ readonly components: readonly ["Chart", "Sparkline", "BarChart", "LineChart", "PieChart", "Stat", "Meter"];
34
+ }, {
35
+ readonly name: "analytics-dashboard";
36
+ readonly type: "recipe";
37
+ readonly components: readonly ["Sidebar", "Stat", "Sparkline", "LineChart", "BarChart", "DateRangePicker", "Table", "Badge"];
38
+ }, {
39
+ readonly name: "saas-admin";
40
+ readonly type: "recipe";
41
+ readonly components: readonly ["Sidebar", "Stat", "Sparkline", "Alert", "Progress", "SearchField", "Table", "Badge"];
42
+ }, {
43
+ readonly name: "commerce-dashboard";
44
+ readonly type: "recipe";
45
+ readonly components: readonly ["Sidebar", "Stat", "Sparkline", "BarChart", "PieChart", "Progress", "Table", "Badge"];
46
+ }, {
47
+ readonly name: "project-workspace";
48
+ readonly type: "recipe";
49
+ readonly components: readonly ["Sidebar", "Stat", "Sparkline", "Progress", "Timeline", "Avatar", "Table", "Badge"];
50
+ }, {
51
+ readonly name: "auth-onboarding";
52
+ readonly type: "recipe";
53
+ readonly components: readonly ["Card", "Stepper", "Field", "Label", "Input", "Alert", "Checkbox", "Progress", "Button"];
54
+ }, {
55
+ readonly name: "docs-shell";
56
+ readonly type: "recipe";
57
+ readonly components: readonly ["SkipLink", "NavigationMenu", "ThemeToggle", "Sidebar", "Sheet", "Prose", "Pagination", "Code", "CodeTabs"];
58
+ }, {
59
+ readonly name: "marketing-shell";
60
+ readonly type: "recipe";
61
+ readonly components: readonly ["SkipLink", "NavigationMenu", "ButtonLink", "Card", "ScrollReveal", "BackToTop"];
62
+ }, {
63
+ readonly name: "dashboard-shell";
64
+ readonly type: "recipe";
65
+ readonly components: readonly ["NavigationMenu", "Sidebar", "Card", "Stat", "StatTrend", "Badge", "SearchField", "DateRangePicker", "Empty", "Table", "Chart"];
66
+ }, {
67
+ readonly name: "validated-form";
68
+ readonly type: "recipe";
69
+ readonly components: readonly ["Form", "Field", "FieldError", "Label", "Input", "NativeSelect", "Textarea", "Button"];
30
70
  }, {
31
71
  readonly name: "ai-docs";
32
72
  readonly type: "documentation";
@@ -106,6 +146,13 @@ export declare const lumenRegistry: {
106
146
  readonly category: "Data display";
107
147
  readonly files: readonly ["packages/astro/components/Badge.astro", "packages/astro/styles/lumen.css"];
108
148
  readonly dependencies: readonly ["styles"];
149
+ }, {
150
+ readonly name: "BarChart";
151
+ readonly type: "component";
152
+ readonly description: "Compares categorical or discrete-period values with grouped and stacked bars.";
153
+ readonly category: "Data display";
154
+ readonly files: readonly ["packages/astro/components/BarChart.astro", "packages/astro/components/Chart.astro", "packages/astro/styles/lumen.css"];
155
+ readonly dependencies: readonly ["Chart", "styles"];
109
156
  }, {
110
157
  readonly name: "Breadcrumb";
111
158
  readonly type: "component";
@@ -155,6 +202,41 @@ export declare const lumenRegistry: {
155
202
  readonly category: "Layout";
156
203
  readonly files: readonly ["packages/astro/components/Card.astro", "packages/astro/styles/lumen.css"];
157
204
  readonly dependencies: readonly ["styles"];
205
+ }, {
206
+ readonly name: "CardContent";
207
+ readonly type: "component";
208
+ readonly description: "Provides the main content region inside a card.";
209
+ readonly category: "Layout";
210
+ readonly files: readonly ["packages/astro/components/CardContent.astro", "packages/astro/styles/lumen.css"];
211
+ readonly dependencies: readonly ["Card", "styles"];
212
+ }, {
213
+ readonly name: "CardDescription";
214
+ readonly type: "component";
215
+ readonly description: "Adds supporting copy to a card header.";
216
+ readonly category: "Layout";
217
+ readonly files: readonly ["packages/astro/components/CardDescription.astro", "packages/astro/styles/lumen.css"];
218
+ readonly dependencies: readonly ["Card", "styles"];
219
+ }, {
220
+ readonly name: "CardFooter";
221
+ readonly type: "component";
222
+ readonly description: "Groups actions at the end of a card.";
223
+ readonly category: "Layout";
224
+ readonly files: readonly ["packages/astro/components/CardFooter.astro", "packages/astro/styles/lumen.css"];
225
+ readonly dependencies: readonly ["Card", "styles"];
226
+ }, {
227
+ readonly name: "CardHeader";
228
+ readonly type: "component";
229
+ readonly description: "Groups introductory content at the start of a card.";
230
+ readonly category: "Layout";
231
+ readonly files: readonly ["packages/astro/components/CardHeader.astro", "packages/astro/styles/lumen.css"];
232
+ readonly dependencies: readonly ["Card", "styles"];
233
+ }, {
234
+ readonly name: "CardTitle";
235
+ readonly type: "component";
236
+ readonly description: "Provides a semantic card title with a stable styling hook.";
237
+ readonly category: "Layout";
238
+ readonly files: readonly ["packages/astro/components/CardTitle.astro", "packages/astro/styles/lumen.css"];
239
+ readonly dependencies: readonly ["Card", "styles"];
158
240
  }, {
159
241
  readonly name: "Carousel";
160
242
  readonly type: "component";
@@ -176,6 +258,13 @@ export declare const lumenRegistry: {
176
258
  readonly category: "Forms";
177
259
  readonly files: readonly ["packages/astro/components/Checkbox.astro", "packages/astro/styles/lumen.css"];
178
260
  readonly dependencies: readonly ["styles"];
261
+ }, {
262
+ readonly name: "CheckboxGroup";
263
+ readonly type: "component";
264
+ readonly description: "Groups related checkbox choices under one legend.";
265
+ readonly category: "Forms";
266
+ readonly files: readonly ["packages/astro/components/CheckboxGroup.astro", "packages/astro/styles/lumen.css"];
267
+ readonly dependencies: readonly ["Checkbox", "styles"];
179
268
  }, {
180
269
  readonly name: "Collapsible";
181
270
  readonly type: "component";
@@ -204,6 +293,20 @@ export declare const lumenRegistry: {
204
293
  readonly category: "Forms";
205
294
  readonly files: readonly ["packages/astro/components/Combobox.astro", "packages/astro/styles/lumen.css", "packages/astro/runtime/UIPrimitives.astro"];
206
295
  readonly dependencies: readonly ["styles", "runtime"];
296
+ }, {
297
+ readonly name: "Container";
298
+ readonly type: "component";
299
+ readonly description: "Centers page content within responsive gutters and a maximum width.";
300
+ readonly category: "Layout";
301
+ readonly files: readonly ["packages/astro/components/Container.astro", "packages/astro/styles/lumen.css"];
302
+ readonly dependencies: readonly ["styles"];
303
+ }, {
304
+ readonly name: "CopyButton";
305
+ readonly type: "component";
306
+ readonly description: "Copies arbitrary text or the content of another element with accessible feedback.";
307
+ readonly category: "Actions";
308
+ readonly files: readonly ["packages/astro/components/CopyButton.astro", "packages/astro/styles/lumen.css", "packages/astro/runtime/UIPrimitives.astro"];
309
+ readonly dependencies: readonly ["styles", "runtime"];
207
310
  }, {
208
311
  readonly name: "Command";
209
312
  readonly type: "component";
@@ -281,6 +384,13 @@ export declare const lumenRegistry: {
281
384
  readonly category: "Feedback";
282
385
  readonly files: readonly ["packages/astro/components/Empty.astro", "packages/astro/styles/lumen.css"];
283
386
  readonly dependencies: readonly ["styles"];
387
+ }, {
388
+ readonly name: "ErrorSummary";
389
+ readonly type: "component";
390
+ readonly description: "Summarizes form errors and links people back to invalid controls.";
391
+ readonly category: "Forms";
392
+ readonly files: readonly ["packages/astro/components/ErrorSummary.astro", "packages/astro/styles/lumen.css"];
393
+ readonly dependencies: readonly ["styles"];
284
394
  }, {
285
395
  readonly name: "Eyebrow";
286
396
  readonly type: "component";
@@ -295,6 +405,13 @@ export declare const lumenRegistry: {
295
405
  readonly category: "Forms";
296
406
  readonly files: readonly ["packages/astro/components/Input.astro", "packages/astro/components/Label.astro", "packages/astro/components/Field.astro", "packages/astro/styles/lumen.css"];
297
407
  readonly dependencies: readonly ["Input", "Label", "styles"];
408
+ }, {
409
+ readonly name: "FieldError";
410
+ readonly type: "component";
411
+ readonly description: "Displays an error connected to a form control.";
412
+ readonly category: "Forms";
413
+ readonly files: readonly ["packages/astro/components/FieldError.astro", "packages/astro/styles/lumen.css"];
414
+ readonly dependencies: readonly ["Field", "styles"];
298
415
  }, {
299
416
  readonly name: "FloatingBadge";
300
417
  readonly type: "component";
@@ -302,6 +419,13 @@ export declare const lumenRegistry: {
302
419
  readonly category: "Data display";
303
420
  readonly files: readonly ["packages/astro/components/FloatingBadge.astro", "packages/astro/styles/lumen.css"];
304
421
  readonly dependencies: readonly ["styles"];
422
+ }, {
423
+ readonly name: "Form";
424
+ readonly type: "component";
425
+ readonly description: "Adds consistent validation and submission state to a native form.";
426
+ readonly category: "Forms";
427
+ readonly files: readonly ["packages/astro/components/Form.astro", "packages/astro/styles/lumen.css", "packages/astro/runtime/UIPrimitives.astro"];
428
+ readonly dependencies: readonly ["styles", "runtime"];
305
429
  }, {
306
430
  readonly name: "FormattedDate";
307
431
  readonly type: "component";
@@ -379,6 +503,20 @@ export declare const lumenRegistry: {
379
503
  readonly category: "Navigation";
380
504
  readonly files: readonly ["packages/astro/components/Link.astro", "packages/astro/styles/lumen.css"];
381
505
  readonly dependencies: readonly ["styles"];
506
+ }, {
507
+ readonly name: "LineChart";
508
+ readonly type: "component";
509
+ readonly description: "Shows ordered trends, multiple series, missing-value gaps, areas, markers, and reference values.";
510
+ readonly category: "Data display";
511
+ readonly files: readonly ["packages/astro/components/LineChart.astro", "packages/astro/components/Chart.astro", "packages/astro/styles/lumen.css"];
512
+ readonly dependencies: readonly ["Chart", "styles"];
513
+ }, {
514
+ readonly name: "ListBox";
515
+ readonly type: "component";
516
+ readonly description: "Presents a visible single- or multi-select option list.";
517
+ readonly category: "Forms";
518
+ readonly files: readonly ["packages/astro/components/ListBox.astro", "packages/astro/styles/lumen.css", "packages/astro/runtime/UIPrimitives.astro"];
519
+ readonly dependencies: readonly ["styles", "runtime"];
382
520
  }, {
383
521
  readonly name: "Marker";
384
522
  readonly type: "component";
@@ -435,6 +573,13 @@ export declare const lumenRegistry: {
435
573
  readonly category: "Navigation";
436
574
  readonly files: readonly ["packages/astro/components/Pagination.astro", "packages/astro/styles/lumen.css"];
437
575
  readonly dependencies: readonly ["styles"];
576
+ }, {
577
+ readonly name: "PasswordField";
578
+ readonly type: "component";
579
+ readonly description: "Combines a password input with guidance, errors, and a visibility toggle.";
580
+ readonly category: "Forms";
581
+ readonly files: readonly ["packages/astro/components/PasswordField.astro", "packages/astro/styles/lumen.css", "packages/astro/runtime/UIPrimitives.astro"];
582
+ readonly dependencies: readonly ["Button", "Field", "FieldError", "Input", "Label", "styles", "runtime"];
438
583
  }, {
439
584
  readonly name: "PhoneInput";
440
585
  readonly type: "component";
@@ -442,6 +587,13 @@ export declare const lumenRegistry: {
442
587
  readonly category: "Forms";
443
588
  readonly files: readonly ["packages/astro/components/PhoneInput.astro", "packages/astro/styles/lumen.css"];
444
589
  readonly dependencies: readonly ["Input", "NativeSelect", "styles"];
590
+ }, {
591
+ readonly name: "PieChart";
592
+ readonly type: "component";
593
+ readonly description: "Shows part-to-whole relationships as an accessible donut or pie chart.";
594
+ readonly category: "Data display";
595
+ readonly files: readonly ["packages/astro/components/PieChart.astro", "packages/astro/components/Chart.astro", "packages/astro/styles/lumen.css"];
596
+ readonly dependencies: readonly ["Chart", "styles"];
445
597
  }, {
446
598
  readonly name: "Pill";
447
599
  readonly type: "component";
@@ -461,8 +613,8 @@ export declare const lumenRegistry: {
461
613
  readonly type: "component";
462
614
  readonly description: "Shows completion, loading progress, or quota usage.";
463
615
  readonly category: "Feedback";
464
- readonly files: readonly ["packages/astro/components/Progress.astro", "packages/astro/styles/lumen.css"];
465
- readonly dependencies: readonly ["styles"];
616
+ readonly files: readonly ["packages/astro/components/Progress.astro", "packages/astro/styles/lumen.css", "packages/astro/runtime/UIPrimitives.astro"];
617
+ readonly dependencies: readonly ["styles", "runtime"];
466
618
  }, {
467
619
  readonly name: "Prose";
468
620
  readonly type: "component";
@@ -498,6 +650,13 @@ export declare const lumenRegistry: {
498
650
  readonly category: "Layout";
499
651
  readonly files: readonly ["packages/astro/components/ScrollArea.astro", "packages/astro/styles/lumen.css"];
500
652
  readonly dependencies: readonly ["styles"];
653
+ }, {
654
+ readonly name: "ScrollProgress";
655
+ readonly type: "component";
656
+ readonly description: "Shows how far a reader has progressed through the current document.";
657
+ readonly category: "Feedback";
658
+ readonly files: readonly ["packages/astro/components/ScrollProgress.astro", "packages/astro/styles/lumen.css", "packages/astro/runtime/UIPrimitives.astro"];
659
+ readonly dependencies: readonly ["styles", "runtime"];
501
660
  }, {
502
661
  readonly name: "Schedule";
503
662
  readonly type: "component";
@@ -568,6 +727,13 @@ export declare const lumenRegistry: {
568
727
  readonly category: "Feedback";
569
728
  readonly files: readonly ["packages/astro/components/Sonner.astro", "packages/astro/styles/lumen.css", "packages/astro/runtime/UIPrimitives.astro"];
570
729
  readonly dependencies: readonly ["styles", "runtime"];
730
+ }, {
731
+ readonly name: "Sparkline";
732
+ readonly type: "component";
733
+ readonly description: "Shows a compact, text-labelled trend beside an existing metric.";
734
+ readonly category: "Data display";
735
+ readonly files: readonly ["packages/astro/components/Sparkline.astro", "packages/astro/styles/lumen.css"];
736
+ readonly dependencies: readonly ["styles"];
571
737
  }, {
572
738
  readonly name: "Spinner";
573
739
  readonly type: "component";
@@ -726,6 +892,48 @@ export declare const lumenRegistry: {
726
892
  readonly category: "Data display";
727
893
  readonly description: "A stat component.";
728
894
  readonly files: readonly ["packages/astro/components/Stat.astro", "packages/react/src/components.tsx"];
895
+ }, {
896
+ readonly name: "StatDescription";
897
+ readonly type: "component";
898
+ readonly description: "Adds supporting context to a composed statistic.";
899
+ readonly category: "Data display";
900
+ readonly files: readonly ["packages/astro/components/StatDescription.astro", "packages/astro/styles/lumen.css"];
901
+ readonly dependencies: readonly ["Stat", "styles"];
902
+ }, {
903
+ readonly name: "StatIcon";
904
+ readonly type: "component";
905
+ readonly description: "Provides an icon region for a composed statistic.";
906
+ readonly category: "Data display";
907
+ readonly files: readonly ["packages/astro/components/StatIcon.astro", "packages/astro/styles/lumen.css"];
908
+ readonly dependencies: readonly ["Stat", "styles"];
909
+ }, {
910
+ readonly name: "StatLabel";
911
+ readonly type: "component";
912
+ readonly description: "Labels a composed statistic.";
913
+ readonly category: "Data display";
914
+ readonly files: readonly ["packages/astro/components/StatLabel.astro", "packages/astro/styles/lumen.css"];
915
+ readonly dependencies: readonly ["Stat", "styles"];
916
+ }, {
917
+ readonly name: "StatTrend";
918
+ readonly type: "component";
919
+ readonly description: "Communicates a metric delta with a semantic tone.";
920
+ readonly category: "Data display";
921
+ readonly files: readonly ["packages/astro/components/StatTrend.astro", "packages/astro/styles/lumen.css"];
922
+ readonly dependencies: readonly ["Stat", "styles"];
923
+ }, {
924
+ readonly name: "StatValue";
925
+ readonly type: "component";
926
+ readonly description: "Displays the prominent value in a composed statistic.";
927
+ readonly category: "Data display";
928
+ readonly files: readonly ["packages/astro/components/StatValue.astro", "packages/astro/styles/lumen.css"];
929
+ readonly dependencies: readonly ["Stat", "styles"];
930
+ }, {
931
+ readonly name: "Stack";
932
+ readonly type: "component";
933
+ readonly description: "Arranges children with tokenized direction, spacing, and alignment.";
934
+ readonly category: "Layout";
935
+ readonly files: readonly ["packages/astro/components/Stack.astro", "packages/astro/styles/lumen.css"];
936
+ readonly dependencies: readonly ["styles"];
729
937
  }, {
730
938
  readonly name: "Meter";
731
939
  readonly type: "component";
@@ -876,6 +1084,20 @@ export declare const lumenRegistry: {
876
1084
  readonly category: "Navigation";
877
1085
  readonly description: "A floating action button with expandable sub-actions.";
878
1086
  readonly files: readonly ["packages/astro/components/SpeedDial.astro", "packages/react/src/components.tsx"];
1087
+ }, {
1088
+ readonly name: "Grid";
1089
+ readonly type: "component";
1090
+ readonly category: "Layout";
1091
+ readonly description: "Arranges content in fixed or responsive tokenized columns.";
1092
+ readonly files: readonly ["packages/astro/components/Grid.astro", "packages/astro/styles/lumen.css"];
1093
+ readonly dependencies: readonly ["styles"];
1094
+ }, {
1095
+ readonly name: "VisuallyHidden";
1096
+ readonly type: "component";
1097
+ readonly category: "Layout";
1098
+ readonly description: "Keeps meaningful content available to assistive technology without displaying it.";
1099
+ readonly files: readonly ["packages/astro/components/VisuallyHidden.astro", "packages/astro/styles/lumen.css"];
1100
+ readonly dependencies: readonly ["styles"];
879
1101
  }];
880
1102
  };
881
1103
  //# sourceMappingURL=registry-data.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry-data.d.ts","sourceRoot":"","sources":["../src/registry-data.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4sDQ,CAAA"}
1
+ {"version":3,"file":"registry-data.d.ts","sourceRoot":"","sources":["../src/registry-data.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+sEQ,CAAA"}