@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.
- package/README.md +211 -3
- package/dist/cli.js +49 -5
- package/dist/consumer-upgrade-audit.d.ts +10 -0
- package/dist/consumer-upgrade-audit.d.ts.map +1 -0
- package/dist/consumer-upgrade-audit.js +52 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +16 -0
- package/dist/integration-diagnostics.d.ts.map +1 -1
- package/dist/integration-diagnostics.js +199 -3
- package/dist/registry-component-name.d.ts +2 -0
- package/dist/registry-component-name.d.ts.map +1 -0
- package/dist/registry-component-name.js +53 -0
- package/dist/registry-data.d.ts +339 -18
- package/dist/registry-data.d.ts.map +1 -1
- package/dist/registry-data.js +789 -3
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +11 -9
- package/dist/source-script-ranges.d.ts +3 -0
- package/dist/source-script-ranges.d.ts.map +1 -0
- package/dist/source-script-ranges.js +41 -0
- package/dist/v2-migration.d.ts +38 -0
- package/dist/v2-migration.d.ts.map +1 -1
- package/dist/v2-migration.js +26 -14
- package/dist/v4-migration.d.ts +26 -0
- package/dist/v4-migration.d.ts.map +1 -0
- package/dist/v4-migration.js +272 -0
- package/dist/version-migration-dependencies.d.ts +8 -0
- package/dist/version-migration-dependencies.d.ts.map +1 -0
- package/dist/version-migration-dependencies.js +10 -0
- package/dist/version-migration-source.d.ts +4 -0
- package/dist/version-migration-source.d.ts.map +1 -0
- package/dist/version-migration-source.js +281 -0
- package/dist/version-migration.d.ts +34 -0
- package/dist/version-migration.d.ts.map +1 -0
- package/dist/version-migration.js +158 -0
- package/native-components.json +564 -17
- package/package.json +26 -11
- package/release-manifest.json +22 -17
- package/styles/critical.css +696 -66
- package/styles/motion.css +61 -0
- package/styles/world-map.css +30 -0
- package/styles.css +1756 -409
- package/templates/astro/advanced-fields/src/lumen/advanced-fields.astro +35 -0
- package/templates/astro/ai-docs/llms.txt +3 -0
- package/templates/astro/analytics-dashboard/src/lumen/analytics-dashboard.astro +110 -0
- package/templates/astro/auth-onboarding/src/lumen/auth-onboarding.astro +107 -0
- package/templates/astro/command-center/src/lumen/command-center.astro +34 -0
- package/templates/astro/commerce-dashboard/src/lumen/commerce-dashboard.astro +108 -0
- package/templates/astro/content-flow-actions/src/lumen/content-flow-actions.astro +10 -0
- package/templates/astro/content-flow-header/src/lumen/content-flow-header.astro +14 -0
- package/templates/astro/content-flow-list/src/lumen/content-flow-list.astro +13 -0
- package/templates/astro/content-flow-settings/src/lumen/content-flow-settings.astro +17 -0
- package/templates/astro/data-collections/src/lumen/data-collections.astro +52 -0
- package/templates/astro/feature-preview/src/lumen/feature-preview.astro +32 -0
- package/templates/astro/guided-onboarding/src/lumen/guided-onboarding.astro +35 -0
- package/templates/astro/interactive-pricing/src/lumen/interactive-pricing.astro +32 -0
- package/templates/astro/media-workspace/src/lumen/adjustment-controls.astro +89 -0
- package/templates/astro/media-workspace/src/lumen/media-processing.astro +47 -0
- package/templates/astro/media-workspace/src/lumen/media-workspace.astro +77 -0
- package/templates/astro/page-header/src/lumen/page-header.astro +41 -0
- package/templates/astro/project-workspace/src/lumen/project-workspace.astro +103 -0
- package/templates/astro/rich-text-editor/src/lumen/rich-text-editor.astro +21 -0
- package/templates/astro/saas-admin/src/lumen/saas-admin.astro +110 -0
- package/templates/astro/scheduler/src/lumen/scheduler.astro +36 -0
- package/templates/astro/section-header/src/lumen/section-header.astro +35 -0
- package/templates/astro/theme-builder/src/lumen/theme-builder.astro +28 -0
- package/templates/elements/advanced-fields/src/lumen/advanced-fields.html +25 -0
- package/templates/elements/analytics-dashboard/src/lumen/analytics-dashboard.html +28 -0
- package/templates/elements/auth-onboarding/src/lumen/auth-onboarding.html +79 -0
- package/templates/elements/command-center/src/lumen/command-center.html +15 -0
- package/templates/elements/commerce-dashboard/src/lumen/commerce-dashboard.html +24 -0
- package/templates/elements/content-flow-actions/src/lumen/content-flow-actions.html +11 -0
- package/templates/elements/content-flow-header/src/lumen/content-flow-header.html +15 -0
- package/templates/elements/content-flow-list/src/lumen/content-flow-list.html +14 -0
- package/templates/elements/content-flow-settings/src/lumen/content-flow-settings.html +18 -0
- package/templates/elements/data-collections/src/lumen/data-collections.html +31 -0
- package/templates/elements/feature-preview/src/lumen/feature-preview.html +13 -0
- package/templates/elements/guided-onboarding/src/lumen/guided-onboarding.html +16 -0
- package/templates/elements/interactive-pricing/src/lumen/interactive-pricing.html +13 -0
- package/templates/elements/media-workspace/src/lumen/media-workspace.html +57 -0
- package/templates/elements/media-workspace/src/lumen/media-workspace.ts +163 -0
- package/templates/elements/page-header/src/lumen/page-header.html +20 -0
- package/templates/elements/project-workspace/src/lumen/project-workspace.html +17 -0
- package/templates/elements/rich-text-editor/src/lumen/rich-text-editor.html +17 -0
- package/templates/elements/saas-admin/src/lumen/saas-admin.html +18 -0
- package/templates/elements/scheduler/src/lumen/scheduler.html +27 -0
- package/templates/elements/section-header/src/lumen/section-header.html +21 -0
- package/templates/elements/theme-builder/src/lumen/theme-builder.html +59 -0
- package/templates/react/advanced-fields/src/lumen/advanced-fields.tsx +37 -0
- package/templates/react/analytics-dashboard/src/lumen/analytics-dashboard.tsx +143 -0
- package/templates/react/auth-onboarding/src/lumen/auth-onboarding.tsx +129 -0
- package/templates/react/command-center/src/lumen/command-center.tsx +85 -0
- package/templates/react/commerce-dashboard/src/lumen/commerce-dashboard.tsx +148 -0
- package/templates/react/content-flow-actions/src/lumen/content-flow-actions.tsx +11 -0
- package/templates/react/content-flow-header/src/lumen/content-flow-header.tsx +14 -0
- package/templates/react/content-flow-list/src/lumen/content-flow-list.tsx +19 -0
- package/templates/react/content-flow-settings/src/lumen/content-flow-settings.tsx +26 -0
- package/templates/react/data-collections/src/lumen/data-collections.tsx +60 -0
- package/templates/react/feature-preview/src/lumen/feature-preview.tsx +42 -0
- package/templates/react/guided-onboarding/src/lumen/guided-onboarding.tsx +100 -0
- package/templates/react/import-review/src/lumen/import-review.tsx +150 -0
- package/templates/react/interactive-pricing/src/lumen/interactive-pricing.tsx +60 -0
- package/templates/react/media-workspace/src/lumen/adjustment-controls.tsx +61 -0
- package/templates/react/media-workspace/src/lumen/media-processing.tsx +43 -0
- package/templates/react/media-workspace/src/lumen/media-workspace.tsx +100 -0
- package/templates/react/operational-records/src/lumen/operational-records.tsx +92 -0
- package/templates/react/page-header/src/lumen/page-header.tsx +41 -0
- package/templates/react/project-workspace/src/lumen/project-workspace.tsx +112 -0
- package/templates/react/record-workspace/src/lumen/record-workspace.tsx +67 -0
- package/templates/react/review-workflow/src/lumen/review-workflow.tsx +202 -0
- package/templates/react/rich-text-editor/src/lumen/rich-text-editor.tsx +33 -0
- package/templates/react/saas-admin/src/lumen/saas-admin.tsx +119 -0
- package/templates/react/scheduler/src/lumen/scheduler.tsx +45 -0
- package/templates/react/section-header/src/lumen/section-header.tsx +33 -0
- package/templates/react/styles.d.ts +1 -0
- package/templates/react/theme-builder/src/lumen/theme-builder.tsx +57 -0
- package/templates/react/tsconfig.json +14 -0
- package/templates/react/validated-form/src/lumen/validated-form.tsx +166 -0
- package/templates/shared/common/src/lumen/lumen-template.css +247 -0
- package/templates/shared/media-workspace/src/lumen/media-workspace.css +14 -0
- package/templates/shared/visual-blocks/src/lumen/product-blocks.ts +224 -0
- 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,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>
|