@santi020k/lumen 3.0.1 → 4.1.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 (125) hide show
  1. package/README.md +211 -3
  2. package/dist/cli.js +49 -5
  3. package/dist/consumer-upgrade-audit.d.ts +10 -0
  4. package/dist/consumer-upgrade-audit.d.ts.map +1 -0
  5. package/dist/consumer-upgrade-audit.js +52 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -0
  9. package/dist/installer.d.ts.map +1 -1
  10. package/dist/installer.js +16 -0
  11. package/dist/integration-diagnostics.d.ts.map +1 -1
  12. package/dist/integration-diagnostics.js +199 -3
  13. package/dist/registry-component-name.d.ts +2 -0
  14. package/dist/registry-component-name.d.ts.map +1 -0
  15. package/dist/registry-component-name.js +53 -0
  16. package/dist/registry-data.d.ts +339 -18
  17. package/dist/registry-data.d.ts.map +1 -1
  18. package/dist/registry-data.js +789 -3
  19. package/dist/registry.d.ts.map +1 -1
  20. package/dist/registry.js +11 -9
  21. package/dist/source-script-ranges.d.ts +3 -0
  22. package/dist/source-script-ranges.d.ts.map +1 -0
  23. package/dist/source-script-ranges.js +41 -0
  24. package/dist/v2-migration.d.ts +38 -0
  25. package/dist/v2-migration.d.ts.map +1 -1
  26. package/dist/v2-migration.js +26 -14
  27. package/dist/v4-migration.d.ts +26 -0
  28. package/dist/v4-migration.d.ts.map +1 -0
  29. package/dist/v4-migration.js +272 -0
  30. package/dist/version-migration-dependencies.d.ts +8 -0
  31. package/dist/version-migration-dependencies.d.ts.map +1 -0
  32. package/dist/version-migration-dependencies.js +10 -0
  33. package/dist/version-migration-source.d.ts +4 -0
  34. package/dist/version-migration-source.d.ts.map +1 -0
  35. package/dist/version-migration-source.js +281 -0
  36. package/dist/version-migration.d.ts +34 -0
  37. package/dist/version-migration.d.ts.map +1 -0
  38. package/dist/version-migration.js +158 -0
  39. package/native-components.json +564 -17
  40. package/package.json +26 -11
  41. package/release-manifest.json +22 -17
  42. package/styles/critical.css +696 -66
  43. package/styles/motion.css +61 -0
  44. package/styles/world-map.css +30 -0
  45. package/styles.css +1756 -409
  46. package/templates/astro/advanced-fields/src/lumen/advanced-fields.astro +35 -0
  47. package/templates/astro/ai-docs/llms.txt +3 -0
  48. package/templates/astro/analytics-dashboard/src/lumen/analytics-dashboard.astro +110 -0
  49. package/templates/astro/auth-onboarding/src/lumen/auth-onboarding.astro +107 -0
  50. package/templates/astro/command-center/src/lumen/command-center.astro +34 -0
  51. package/templates/astro/commerce-dashboard/src/lumen/commerce-dashboard.astro +108 -0
  52. package/templates/astro/content-flow-actions/src/lumen/content-flow-actions.astro +10 -0
  53. package/templates/astro/content-flow-header/src/lumen/content-flow-header.astro +14 -0
  54. package/templates/astro/content-flow-list/src/lumen/content-flow-list.astro +13 -0
  55. package/templates/astro/content-flow-settings/src/lumen/content-flow-settings.astro +17 -0
  56. package/templates/astro/data-collections/src/lumen/data-collections.astro +52 -0
  57. package/templates/astro/feature-preview/src/lumen/feature-preview.astro +32 -0
  58. package/templates/astro/guided-onboarding/src/lumen/guided-onboarding.astro +35 -0
  59. package/templates/astro/interactive-pricing/src/lumen/interactive-pricing.astro +32 -0
  60. package/templates/astro/media-workspace/src/lumen/adjustment-controls.astro +89 -0
  61. package/templates/astro/media-workspace/src/lumen/media-processing.astro +47 -0
  62. package/templates/astro/media-workspace/src/lumen/media-workspace.astro +77 -0
  63. package/templates/astro/page-header/src/lumen/page-header.astro +41 -0
  64. package/templates/astro/project-workspace/src/lumen/project-workspace.astro +103 -0
  65. package/templates/astro/rich-text-editor/src/lumen/rich-text-editor.astro +21 -0
  66. package/templates/astro/saas-admin/src/lumen/saas-admin.astro +110 -0
  67. package/templates/astro/scheduler/src/lumen/scheduler.astro +36 -0
  68. package/templates/astro/section-header/src/lumen/section-header.astro +35 -0
  69. package/templates/astro/theme-builder/src/lumen/theme-builder.astro +28 -0
  70. package/templates/elements/advanced-fields/src/lumen/advanced-fields.html +25 -0
  71. package/templates/elements/analytics-dashboard/src/lumen/analytics-dashboard.html +28 -0
  72. package/templates/elements/auth-onboarding/src/lumen/auth-onboarding.html +79 -0
  73. package/templates/elements/command-center/src/lumen/command-center.html +15 -0
  74. package/templates/elements/commerce-dashboard/src/lumen/commerce-dashboard.html +24 -0
  75. package/templates/elements/content-flow-actions/src/lumen/content-flow-actions.html +11 -0
  76. package/templates/elements/content-flow-header/src/lumen/content-flow-header.html +15 -0
  77. package/templates/elements/content-flow-list/src/lumen/content-flow-list.html +14 -0
  78. package/templates/elements/content-flow-settings/src/lumen/content-flow-settings.html +18 -0
  79. package/templates/elements/data-collections/src/lumen/data-collections.html +31 -0
  80. package/templates/elements/feature-preview/src/lumen/feature-preview.html +13 -0
  81. package/templates/elements/guided-onboarding/src/lumen/guided-onboarding.html +16 -0
  82. package/templates/elements/interactive-pricing/src/lumen/interactive-pricing.html +13 -0
  83. package/templates/elements/media-workspace/src/lumen/media-workspace.html +57 -0
  84. package/templates/elements/media-workspace/src/lumen/media-workspace.ts +163 -0
  85. package/templates/elements/page-header/src/lumen/page-header.html +20 -0
  86. package/templates/elements/project-workspace/src/lumen/project-workspace.html +17 -0
  87. package/templates/elements/rich-text-editor/src/lumen/rich-text-editor.html +17 -0
  88. package/templates/elements/saas-admin/src/lumen/saas-admin.html +18 -0
  89. package/templates/elements/scheduler/src/lumen/scheduler.html +27 -0
  90. package/templates/elements/section-header/src/lumen/section-header.html +21 -0
  91. package/templates/elements/theme-builder/src/lumen/theme-builder.html +59 -0
  92. package/templates/react/advanced-fields/src/lumen/advanced-fields.tsx +37 -0
  93. package/templates/react/analytics-dashboard/src/lumen/analytics-dashboard.tsx +143 -0
  94. package/templates/react/auth-onboarding/src/lumen/auth-onboarding.tsx +129 -0
  95. package/templates/react/command-center/src/lumen/command-center.tsx +85 -0
  96. package/templates/react/commerce-dashboard/src/lumen/commerce-dashboard.tsx +148 -0
  97. package/templates/react/content-flow-actions/src/lumen/content-flow-actions.tsx +11 -0
  98. package/templates/react/content-flow-header/src/lumen/content-flow-header.tsx +14 -0
  99. package/templates/react/content-flow-list/src/lumen/content-flow-list.tsx +19 -0
  100. package/templates/react/content-flow-settings/src/lumen/content-flow-settings.tsx +26 -0
  101. package/templates/react/data-collections/src/lumen/data-collections.tsx +60 -0
  102. package/templates/react/feature-preview/src/lumen/feature-preview.tsx +42 -0
  103. package/templates/react/guided-onboarding/src/lumen/guided-onboarding.tsx +100 -0
  104. package/templates/react/import-review/src/lumen/import-review.tsx +150 -0
  105. package/templates/react/interactive-pricing/src/lumen/interactive-pricing.tsx +60 -0
  106. package/templates/react/media-workspace/src/lumen/adjustment-controls.tsx +61 -0
  107. package/templates/react/media-workspace/src/lumen/media-processing.tsx +43 -0
  108. package/templates/react/media-workspace/src/lumen/media-workspace.tsx +100 -0
  109. package/templates/react/operational-records/src/lumen/operational-records.tsx +92 -0
  110. package/templates/react/page-header/src/lumen/page-header.tsx +41 -0
  111. package/templates/react/project-workspace/src/lumen/project-workspace.tsx +112 -0
  112. package/templates/react/record-workspace/src/lumen/record-workspace.tsx +67 -0
  113. package/templates/react/review-workflow/src/lumen/review-workflow.tsx +202 -0
  114. package/templates/react/rich-text-editor/src/lumen/rich-text-editor.tsx +33 -0
  115. package/templates/react/saas-admin/src/lumen/saas-admin.tsx +119 -0
  116. package/templates/react/scheduler/src/lumen/scheduler.tsx +45 -0
  117. package/templates/react/section-header/src/lumen/section-header.tsx +33 -0
  118. package/templates/react/styles.d.ts +1 -0
  119. package/templates/react/theme-builder/src/lumen/theme-builder.tsx +57 -0
  120. package/templates/react/tsconfig.json +14 -0
  121. package/templates/react/validated-form/src/lumen/validated-form.tsx +166 -0
  122. package/templates/shared/common/src/lumen/lumen-template.css +247 -0
  123. package/templates/shared/media-workspace/src/lumen/media-workspace.css +14 -0
  124. package/templates/shared/visual-blocks/src/lumen/product-blocks.ts +224 -0
  125. package/v4-migration.json +448 -0
@@ -0,0 +1,35 @@
1
+ ---
2
+ import {
3
+ Autocomplete,
4
+ ColorPicker,
5
+ DatePicker,
6
+ DateRangePicker,
7
+ NumberField,
8
+ SearchField,
9
+ TagGroup,
10
+ TimeField
11
+ } from '@santi020k/lumen-astro'
12
+ ---
13
+
14
+ <form class="lumen-recipe lumen-recipe--advanced-fields">
15
+ <SearchField name="q" placeholder="Search records" />
16
+ <Autocomplete list="assignees" placeholder="Assign to..." />
17
+ <datalist id="assignees">
18
+ <option value="Design" />
19
+ <option value="Engineering" />
20
+ <option value="Operations" />
21
+ </datalist>
22
+ <NumberField aria-label="Seats" min="1" value="3" />
23
+ <TimeField aria-label="Start time" value="09:30" />
24
+ <DateRangePicker>
25
+ <DatePicker aria-label="Start date" />
26
+ <DatePicker aria-label="End date" />
27
+ </DateRangePicker>
28
+ <ColorPicker aria-label="Brand color" value="#2563eb" />
29
+ <TagGroup aria-label="Selected filters">
30
+ <span data-ui-tag role="listitem">
31
+ Active
32
+ <button data-ui-tag-remove type="button">Remove</button>
33
+ </span>
34
+ </TagGroup>
35
+ </form>
@@ -0,0 +1,3 @@
1
+ # Lumen UI
2
+
3
+ Use @santi020k/lumen-astro for Astro apps, import @santi020k/lumen-astro/styles.css once, and mount UIPrimitives once in the root layout for interactive primitives. Do not place UIPrimitives next to every component instance.
@@ -0,0 +1,110 @@
1
+ ---
2
+ import './lumen-template.css'
3
+
4
+ import {
5
+ Badge,
6
+ BarChart,
7
+ Button,
8
+ Card,
9
+ LineChart,
10
+ Sidebar,
11
+ Sparkline,
12
+ Stat,
13
+ Table
14
+ } from '@santi020k/lumen-astro'
15
+
16
+ const metrics = [
17
+ { change: '+12.4%', label: 'Monthly revenue', values: [31, 33, 38, 41, 46, 52], value: '$184,320' },
18
+ { change: '+8.2%', label: 'Active accounts', values: [40, 42, 45, 49, 53, 57], value: '12,480' },
19
+ { change: '-1.6%', label: 'Customer churn', values: [26, 25, 24, 23, 20, 18], value: '2.8%' },
20
+ { change: '+3.1%', label: 'Net retention', values: [44, 45, 47, 49, 50, 54], value: '116%' }
21
+ ]
22
+
23
+ const revenue = [{
24
+ data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
25
+ .map((x, index) => ({ x, y: [118, 126, 132, 148, 162, 184][index] ?? 0 })),
26
+ id: 'revenue',
27
+ label: 'Revenue',
28
+ tone: 'brand'
29
+ }] as const
30
+
31
+ const channels = [{
32
+ data: [
33
+ { x: 'Organic', y: 4820 },
34
+ { x: 'Referral', y: 3180 },
35
+ { x: 'Paid', y: 2640 }
36
+ ],
37
+ id: 'visitors',
38
+ label: 'Visitors',
39
+ tone: 'brand'
40
+ }] as const
41
+ ---
42
+
43
+ <div class="lumen-template lumen-template__shell">
44
+ <Sidebar class="lumen-template__sidebar">
45
+ <strong>Pulse Analytics</strong>
46
+ <nav aria-label="Analytics">
47
+ <a aria-current="page" href="#overview">Overview</a>
48
+ <a href="#acquisition">Acquisition</a>
49
+ <a href="#accounts">Accounts</a>
50
+ </nav>
51
+ </Sidebar>
52
+ <main class="lumen-template__main" id="overview">
53
+ <header class="lumen-template__header">
54
+ <div>
55
+ <Badge variant="outline">Jun 1–30</Badge>
56
+ <h1>Growth overview</h1>
57
+ <p>Revenue, retention, and account health.</p>
58
+ </div>
59
+ <Button>Export report</Button>
60
+ </header>
61
+ <section class="lumen-template__metrics" aria-label="Key metrics">
62
+ {metrics.map(metric => (
63
+ <Card class="lumen-template__metric">
64
+ <Stat label={metric.label} value={metric.value} />
65
+ <Badge variant="success">{metric.change}</Badge>
66
+ <Sparkline label={`${metric.label} trend`} values={metric.values} />
67
+ </Card>
68
+ ))}
69
+ </section>
70
+ <section class="lumen-template__grid" id="acquisition">
71
+ <LineChart area heading="Revenue trajectory" series={revenue} />
72
+ <BarChart heading="Channel performance" series={channels} />
73
+ </section>
74
+ <Card class="lumen-template__panel" id="accounts">
75
+ <div class="lumen-template__section-header">
76
+ <div>
77
+ <h2>Accounts to watch</h2>
78
+ <p>Recent health changes.</p>
79
+ </div>
80
+ <Button variant="ghost">View all</Button>
81
+ </div>
82
+ <Table class="lumen-template__table">
83
+ <table>
84
+ <thead>
85
+ <tr>
86
+ <th>Account</th>
87
+ <th>Plan</th>
88
+ <th>Status</th>
89
+ <th>Value</th>
90
+ </tr>
91
+ </thead>
92
+ <tbody>
93
+ <tr>
94
+ <td>Northstar Labs</td>
95
+ <td>Enterprise</td>
96
+ <td><Badge variant="success">Active</Badge></td>
97
+ <td>$18,400</td>
98
+ </tr>
99
+ <tr>
100
+ <td>Arc & Field</td>
101
+ <td>Enterprise</td>
102
+ <td><Badge variant="destructive">At risk</Badge></td>
103
+ <td>$14,780</td>
104
+ </tr>
105
+ </tbody>
106
+ </table>
107
+ </Table>
108
+ </Card>
109
+ </main>
110
+ </div>
@@ -0,0 +1,107 @@
1
+ ---
2
+ import './lumen-template.css'
3
+
4
+ import {
5
+ Alert,
6
+ Button,
7
+ Card,
8
+ Checkbox,
9
+ Field,
10
+ Grid,
11
+ Input,
12
+ Label,
13
+ Progress,
14
+ Stepper
15
+ } from '@santi020k/lumen-astro'
16
+ ---
17
+
18
+ <main class="lumen-template lumen-template__form-shell">
19
+ <Card class="lumen-template__form">
20
+ <Stepper currentStep={1} steps={['Account', 'Workspace', 'Preferences', 'Invite']} />
21
+ <header>
22
+ <p class="lumen-template__muted">Step 2 of 4</p>
23
+ <h1>Create your workspace</h1>
24
+ <p class="lumen-template__muted">We’ll prepare the right starting point.</p>
25
+ </header>
26
+ <form class="lumen-template__form">
27
+ <Field class="lumen-template__field">
28
+ <Label for="workspace-name">Workspace name</Label>
29
+ <Input id="workspace-name" name="workspace" placeholder="Northstar Labs" required />
30
+ </Field>
31
+ <Field class="lumen-template__field">
32
+ <Label for="work-email">Work email</Label>
33
+ <Input aria-invalid="true" id="work-email" name="email" type="email" value="maya@example" required />
34
+ <Alert role="alert" variant="destructive">Enter a complete email address.</Alert>
35
+ </Field>
36
+ <fieldset class="lumen-template__choices">
37
+ <legend>What are you setting up?</legend>
38
+ <label class="lumen-template__choice">
39
+ <input checked name="intent" type="radio" value="team" />
40
+ {' '}
41
+ A team workspace
42
+ </label>
43
+ <label class="lumen-template__choice">
44
+ <input name="intent" type="radio" value="personal" />
45
+ {' '}
46
+ A personal workspace
47
+ </label>
48
+ </fieldset>
49
+ <label>
50
+ <Checkbox checked name="updates" value="updates" />
51
+ {' '}
52
+ Send occasional onboarding tips
53
+ </label>
54
+ <div>
55
+ <div class="lumen-template__section-header">
56
+ <span>Setup progress</span>
57
+ <strong>50%</strong>
58
+ </div>
59
+ <Progress aria-label="Setup is 50% complete" value={50} />
60
+ </div>
61
+ <div class="lumen-template__actions">
62
+ <Button variant="ghost">Back</Button>
63
+ <Button type="submit">Continue</Button>
64
+ </div>
65
+ </form>
66
+ </Card>
67
+ <section class="lumen-login-examples" aria-labelledby="login-examples-title">
68
+ <header>
69
+ <p>Returning members</p>
70
+ <h2 id="login-examples-title">A familiar way back in.</h2>
71
+ <p>Email codes and passkeys, composed with Lumen. These visual examples do not send codes or sign you in.</p>
72
+ </header>
73
+ <Grid class="lumen-login-examples__grid" minItemWidth="18rem">
74
+ <Card class="lumen-login-examples__card">
75
+ <h3>Welcome back</h3>
76
+ <p>Use a saved passkey or receive a code by email.</p>
77
+ <Button disabled type="button">Sign in with a passkey</Button>
78
+ <Field>
79
+ <Label for="login-email">Email address</Label>
80
+ <Input autocomplete="email" id="login-email" name="login-email" readonly type="email" value="member@example.com" />
81
+ </Field>
82
+ <Button disabled type="button">Send sign-in code</Button>
83
+ <p>No password to remember.</p>
84
+ </Card>
85
+ <Card class="lumen-login-examples__card">
86
+ <h3>Check your inbox</h3>
87
+ <p>If this address can sign in, a code will arrive shortly.</p>
88
+ <Field>
89
+ <Label for="login-code">Email code</Label>
90
+ <Input aria-describedby="login-code-hint" autocomplete="one-time-code" id="login-code" inputmode="numeric" name="login-code" placeholder="Enter your code" readonly />
91
+ <p id="login-code-hint">Paste the complete code from your email.</p>
92
+ </Field>
93
+ <Button disabled type="button">Verify and continue</Button>
94
+ <Button disabled type="button" variant="outline">Resend code</Button>
95
+ <p>Entered the wrong address? Return to email sign-in.</p>
96
+ </Card>
97
+ <Card class="lumen-login-examples__card">
98
+ <h3>Try another way</h3>
99
+ <Alert variant="destructive">Passkey sign-in was canceled. You can try again or request a code by email.</Alert>
100
+ <p>You can still use email when your passkey is unavailable.</p>
101
+ <Button disabled type="button">Try passkey again</Button>
102
+ <Button disabled type="button" variant="outline">Use an email code</Button>
103
+ <p>Your existing account and workspace stay the same.</p>
104
+ </Card>
105
+ </Grid>
106
+ </section>
107
+ </main>
@@ -0,0 +1,34 @@
1
+ ---
2
+ import { Command, Input, Typography } from '@santi020k/lumen-astro'
3
+ ---
4
+
5
+ <section data-product-block="command" aria-label="Workspace commands">
6
+ <Typography><h2>What would you like to do?</h2><p>Search with the keyboard, then choose a command.</p></Typography>
7
+ <Command><Input type="search" aria-label="Search workspace commands" placeholder="Search commands…" />
8
+ <button data-ui-command-item data-workspace-command="search" type="button">Search project documentation</button>
9
+ <button data-ui-command-item data-workspace-command="create" type="button">Create a task draft</button>
10
+ <button data-ui-command-item data-workspace-command="review" type="button">Review pending proposals</button>
11
+ </Command><p role="status" data-block-status>Choose a command.</p>
12
+ </section>
13
+
14
+ <script>
15
+ import { mountProductBlocks } from './product-blocks'
16
+
17
+ let cleanup: (() => void) | undefined
18
+
19
+ const mount = () => {
20
+ cleanup?.()
21
+
22
+ cleanup = mountProductBlocks(document)
23
+ }
24
+
25
+ mount()
26
+
27
+ document.addEventListener('astro:page-load', mount)
28
+
29
+ document.addEventListener('astro:before-swap', () => {
30
+ cleanup?.()
31
+
32
+ cleanup = undefined
33
+ })
34
+ </script>
@@ -0,0 +1,108 @@
1
+ ---
2
+ import './lumen-template.css'
3
+
4
+ import {
5
+ Badge,
6
+ BarChart,
7
+ Button,
8
+ Card,
9
+ PieChart,
10
+ Progress,
11
+ Sidebar,
12
+ Stat,
13
+ Table
14
+ } from '@santi020k/lumen-astro'
15
+
16
+ const sales = [{ data: [{ x: 'Mon', y: 11200 }, { x: 'Tue', y: 13800 }, { x: 'Wed', y: 12600 }, { x: 'Thu', y: 15400 }, { x: 'Fri', y: 16800 }], id: 'sales', label: 'Sales', tone: 'brand' }] as const
17
+ const sources = { data: [{ x: 'Online', y: 812 }, { x: 'Marketplace', y: 286 }, { x: 'POS', y: 186 }], id: 'orders', label: 'Orders' } as const
18
+ ---
19
+
20
+ <div class="lumen-template lumen-template__shell">
21
+ <Sidebar class="lumen-template__sidebar">
22
+ <strong>Mercury Commerce</strong>
23
+ <nav aria-label="Commerce">
24
+ <a aria-current="page" href="#overview">Overview</a>
25
+ <a href="#orders">Orders</a>
26
+ <a href="#inventory">Inventory</a>
27
+ </nav>
28
+ </Sidebar>
29
+ <main class="lumen-template__main" id="overview">
30
+ <header class="lumen-template__header">
31
+ <div>
32
+ <Badge variant="outline">Store overview</Badge>
33
+ <h1>Commerce command center</h1>
34
+ <p>Sales, fulfillment, and inventory risk.</p>
35
+ </div>
36
+ <Button>Add product</Button>
37
+ </header>
38
+ <section class="lumen-template__metrics" aria-label="Commerce metrics">
39
+ <Card class="lumen-template__metric">
40
+ <Stat label="Gross sales" value="$92,840" />
41
+ <Badge variant="success">+18.6%</Badge>
42
+ </Card>
43
+ <Card class="lumen-template__metric">
44
+ <Stat label="Orders" value="1,284" />
45
+ <Badge variant="success">+7.4%</Badge>
46
+ </Card>
47
+ <Card class="lumen-template__metric">
48
+ <Stat label="Average order" value="$72.31" />
49
+ <Badge variant="success">+$6.20</Badge>
50
+ </Card>
51
+ <Card class="lumen-template__metric">
52
+ <Stat label="Return rate" value="2.1%" />
53
+ <Badge variant="success">-0.4%</Badge>
54
+ </Card>
55
+ </section>
56
+ <section class="lumen-template__grid">
57
+ <BarChart heading="Sales this week" series={sales} />
58
+ <PieChart centerLabel="orders" centerValue="1,284" heading="Order sources" series={sources} />
59
+ </section>
60
+ <section class="lumen-template__grid" id="inventory">
61
+ <Card class="lumen-template__panel">
62
+ <h2>Fulfillment</h2>
63
+ <Stat label="Orders ready" value="42" />
64
+ <Progress aria-label="42 of 58 orders fulfilled" max={58} value={42} />
65
+ </Card>
66
+ <Card class="lumen-template__panel">
67
+ <h2>Inventory signals</h2>
68
+ <ul class="lumen-template__list">
69
+ <li>3 products below safety stock</li>
70
+ <li>8 transfers arriving this week</li>
71
+ <li>94% inventory accuracy</li>
72
+ </ul>
73
+ </Card>
74
+ </section>
75
+ <Card class="lumen-template__panel" id="orders">
76
+ <div class="lumen-template__section-header">
77
+ <h2>Recent orders</h2>
78
+ <Button variant="ghost">View all</Button>
79
+ </div>
80
+ <Table class="lumen-template__table">
81
+ <table>
82
+ <thead>
83
+ <tr>
84
+ <th>Order</th>
85
+ <th>Customer</th>
86
+ <th>Status</th>
87
+ <th>Total</th>
88
+ </tr>
89
+ </thead>
90
+ <tbody>
91
+ <tr>
92
+ <td>#10482</td>
93
+ <td>Nora Singh</td>
94
+ <td><Badge variant="success">Completed</Badge></td>
95
+ <td>$148.00</td>
96
+ </tr>
97
+ <tr>
98
+ <td>#10481</td>
99
+ <td>Theo Martin</td>
100
+ <td><Badge variant="warning">Pending</Badge></td>
101
+ <td>$84.50</td>
102
+ </tr>
103
+ </tbody>
104
+ </table>
105
+ </Table>
106
+ </Card>
107
+ </main>
108
+ </div>
@@ -0,0 +1,10 @@
1
+ ---
2
+ import { Button, Stack } from '@santi020k/lumen-astro'
3
+ ---
4
+
5
+ <Stack role="group" aria-label="Changes" gap="related">
6
+ <p role="status">You have unsaved changes.</p>
7
+ <Stack direction="horizontal" gap="related" wrap>
8
+ <Button>Save changes</Button><Button variant="secondary">Discard changes</Button>
9
+ </Stack>
10
+ </Stack>
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { Button, Stack, Typography } from '@santi020k/lumen-astro'
3
+ ---
4
+
5
+ <Stack as="section" gap="group" aria-labelledby="workspace-heading">
6
+ <Typography>
7
+ <h1 id="workspace-heading">Workspace settings</h1>
8
+ <p>Manage your team’s access and notification preferences.</p>
9
+ </Typography>
10
+ <Stack direction="horizontal" gap="related" wrap>
11
+ <Button>Invite a teammate</Button>
12
+ <Button variant="secondary">View activity</Button>
13
+ </Stack>
14
+ </Stack>
@@ -0,0 +1,13 @@
1
+ ---
2
+ import { Badge, Card, CardContent, CardHeader, CardTitle, Stack } from '@santi020k/lumen-astro'
3
+ ---
4
+
5
+ <Card as="section" aria-labelledby="members-heading">
6
+ <CardHeader><CardTitle as="h2" id="members-heading">Team members</CardTitle></CardHeader>
7
+ <CardContent>
8
+ <Stack role="list" gap="group">
9
+ <Stack role="listitem" direction="horizontal" align="center" justify="between" gap="related" wrap><span>Alex Morgan — Workspace owner</span><Badge>Active</Badge></Stack>
10
+ <Stack role="listitem" direction="horizontal" align="center" justify="between" gap="related" wrap><span>Jamie Lee — Design and operations</span><Badge variant="secondary">Invited</Badge></Stack>
11
+ </Stack>
12
+ </CardContent>
13
+ </Card>
@@ -0,0 +1,17 @@
1
+ ---
2
+ import { Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Field, Input, Label, Stack } from '@santi020k/lumen-astro'
3
+ ---
4
+
5
+ <Card as="section" aria-labelledby="notification-heading">
6
+ <CardHeader>
7
+ <CardTitle as="h2" id="notification-heading">Notifications</CardTitle>
8
+ <CardDescription>Choose where your team receives updates.</CardDescription>
9
+ </CardHeader>
10
+ <CardContent>
11
+ <Stack gap="group">
12
+ <Field><Label for="team-name">Team name</Label><Input id="team-name" name="team" autocomplete="organization" /></Field>
13
+ <Field><Label for="team-email">Team email</Label><Input id="team-email" name="email" type="email" autocomplete="email" /></Field>
14
+ </Stack>
15
+ </CardContent>
16
+ <CardFooter><Button>Save preferences</Button><Button variant="secondary">Discard changes</Button></CardFooter>
17
+ </Card>
@@ -0,0 +1,52 @@
1
+ ---
2
+ import {
3
+ Command,
4
+ DataTable,
5
+ Pagination,
6
+ Tree,
7
+ TreeGrid,
8
+ VirtualList
9
+ } from '@santi020k/lumen-astro'
10
+ ---
11
+
12
+ <section class="lumen-recipe lumen-recipe--data-collections">
13
+ <Command>
14
+ <input type="search" placeholder="Filter records" />
15
+ <button data-ui-command-item type="button">Open docs</button>
16
+ </Command>
17
+ <DataTable>
18
+ <table>
19
+ <thead>
20
+ <tr>
21
+ <th>Name</th>
22
+ <th>Status</th>
23
+ </tr>
24
+ </thead>
25
+ <tbody>
26
+ <tr>
27
+ <td>Docs</td>
28
+ <td>Ready</td>
29
+ </tr>
30
+ </tbody>
31
+ </table>
32
+ </DataTable>
33
+ <Tree aria-label="Files">
34
+ <div role="treeitem" aria-expanded="true">src</div>
35
+ <div role="treeitem">index.ts</div>
36
+ </Tree>
37
+ <TreeGrid aria-label="Project status">
38
+ <div role="row">
39
+ <span role="gridcell">Docs</span>
40
+ <span role="gridcell">Ready</span>
41
+ </div>
42
+ </TreeGrid>
43
+ <VirtualList data-ui-item-size="44" style="--ui-list-height: 12rem">
44
+ <div>Row 1</div>
45
+ <div>Row 2</div>
46
+ <div>Row 3</div>
47
+ </VirtualList>
48
+ <Pagination>
49
+ <a href="?page=1">Previous</a>
50
+ <a href="?page=2">Next</a>
51
+ </Pagination>
52
+ </section>
@@ -0,0 +1,32 @@
1
+ ---
2
+ import { Button, Card, MotionGroup, Stack, Typography, VisualEffect } from '@santi020k/lumen-astro'
3
+ ---
4
+
5
+ <section data-product-block="feature" aria-label="Feature preview">
6
+ <Typography><h2>From idea to delivery</h2></Typography>
7
+ <Stack direction="horizontal" gap="related" role="group" aria-label="Preview a workflow stage"><Button data-feature="plan" aria-pressed="true">Plan</Button><Button data-feature="review" aria-pressed="false">Review</Button><Button data-feature="ship" aria-pressed="false">Ship</Button></Stack>
8
+ <MotionGroup><Card data-ui-motion-key="plan" data-feature-panel="plan"><VisualEffect variant="mesh"><Typography><h3>Plan</h3><p>Bring the next three tasks into focus.</p></Typography></VisualEffect></Card><Card hidden data-ui-motion-key="review" data-feature-panel="review"><VisualEffect variant="mesh"><Typography><h3>Review</h3><p>Compare a proposal before deciding.</p></Typography></VisualEffect></Card><Card hidden data-ui-motion-key="ship" data-feature-panel="ship"><VisualEffect variant="mesh"><Typography><h3>Ship</h3><p>Check the release evidence before publishing.</p></Typography></VisualEffect></Card></MotionGroup>
9
+ <p role="status" data-block-status>Previewing plan.</p>
10
+ </section>
11
+
12
+ <script>
13
+ import { mountProductBlocks } from './product-blocks'
14
+
15
+ let cleanup: (() => void) | undefined
16
+
17
+ const mount = () => {
18
+ cleanup?.()
19
+
20
+ cleanup = mountProductBlocks(document)
21
+ }
22
+
23
+ mount()
24
+
25
+ document.addEventListener('astro:page-load', mount)
26
+
27
+ document.addEventListener('astro:before-swap', () => {
28
+ cleanup?.()
29
+
30
+ cleanup = undefined
31
+ })
32
+ </script>
@@ -0,0 +1,35 @@
1
+ ---
2
+ import { Button, Card, Form, Input, Label, Stack, Typography } from '@santi020k/lumen-astro'
3
+ ---
4
+
5
+ <section data-product-block="onboarding" aria-label="Workspace setup">
6
+ <Card><Stack gap="group"><Typography><h2>Prepare your workspace</h2><p>This draft stays local until your application handles completion.</p></Typography>
7
+ <Form enhance={false} method="post"><Stack gap="group">
8
+ <section data-onboarding-step="0"><Typography><h3 tabindex="-1">Workspace</h3></Typography><Label>Workspace name<Input name="workspace" data-workspace-name required maxlength="80" /></Label></section>
9
+ <section data-onboarding-step="1" hidden><Typography><h3 tabindex="-1">Review your draft</h3><p>Workspace: <span data-workspace-review></span></p></Typography></section>
10
+ <section data-onboarding-step="2" hidden><Typography><h3 tabindex="-1">Ready</h3><p>Workspace draft completed.</p></Typography><Button data-onboarding-edit type="button">Edit draft</Button></section>
11
+ <Stack direction="horizontal" gap="related"><Button data-onboarding-back type="button" hidden variant="secondary">Back</Button><Button data-onboarding-next disabled type="submit">Continue</Button></Stack>
12
+ </Stack></Form><p role="status" data-block-status>Step 1 of 3.</p></Stack></Card>
13
+ </section>
14
+
15
+ <script>
16
+ import { mountProductBlocks } from './product-blocks'
17
+
18
+ let cleanup: (() => void) | undefined
19
+
20
+ const mount = () => {
21
+ cleanup?.()
22
+
23
+ cleanup = mountProductBlocks(document)
24
+ }
25
+
26
+ mount()
27
+
28
+ document.addEventListener('astro:page-load', mount)
29
+
30
+ document.addEventListener('astro:before-swap', () => {
31
+ cleanup?.()
32
+
33
+ cleanup = undefined
34
+ })
35
+ </script>
@@ -0,0 +1,32 @@
1
+ ---
2
+ import { Button, Card, Grid, Stack, Typography, VisualEffect } from '@santi020k/lumen-astro'
3
+ ---
4
+
5
+ <section data-product-block="pricing" aria-label="Example pricing">
6
+ <Typography><h2>A plan for your next project</h2><p>Illustrative prices. Connect selections to your own checkout.</p></Typography>
7
+ <Stack direction="horizontal" gap="related" role="group" aria-label="Billing period"><Button data-billing="monthly" aria-pressed="true">Monthly</Button><Button data-billing="annual" aria-pressed="false">Annual</Button></Stack>
8
+ <Grid columns="auto"><Card><VisualEffect variant="border"><Typography><h3>Starter</h3><p data-monthly="10" data-annual="96">$10 / month</p></Typography><Button data-plan="starter">Choose starter</Button></VisualEffect></Card><Card><VisualEffect variant="mesh"><Typography><h3>Team</h3><p data-monthly="24" data-annual="240">$24 / month</p></Typography><Button data-plan="team">Choose team</Button></VisualEffect></Card></Grid>
9
+ <p role="status" data-block-status>Select a plan to compare billing.</p>
10
+ </section>
11
+
12
+ <script>
13
+ import { mountProductBlocks } from './product-blocks'
14
+
15
+ let cleanup: (() => void) | undefined
16
+
17
+ const mount = () => {
18
+ cleanup?.()
19
+
20
+ cleanup = mountProductBlocks(document)
21
+ }
22
+
23
+ mount()
24
+
25
+ document.addEventListener('astro:page-load', mount)
26
+
27
+ document.addEventListener('astro:before-swap', () => {
28
+ cleanup?.()
29
+
30
+ cleanup = undefined
31
+ })
32
+ </script>