astryx-dracula 0.5.0 → 0.6.2
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/BRAND.md +3 -3
- package/README.md +7 -4
- package/USAGE.md +49 -49
- package/astryx-dracula.d.ts +2 -2
- package/astryx-dracula.js +25 -9
- package/astryx-dracula.variants.d.ts +2 -2
- package/astryx.integration.mjs +1 -1
- package/icons.mjs +21 -17
- package/icons.tsx +69 -62
- package/package.json +125 -120
- package/shared/auth-chrome-config.ts +6 -6
- package/shared/auth-chrome.tsx +143 -144
- package/shared/auth-copy.ts +14 -14
- package/shared/chaptered-doc-config.ts +48 -51
- package/shared/chaptered-doc.tsx +267 -289
- package/shared/chart-hues.ts +25 -10
- package/shared/chart-labels.tsx +31 -30
- package/shared/chart-legend.tsx +55 -56
- package/shared/chart-panel-style.ts +3 -3
- package/shared/data-bar.tsx +97 -102
- package/shared/format-money.ts +1 -1
- package/shared/gallery-image.ts +6 -6
- package/shared/login-demo.ts +1 -1
- package/shared/metric-card.tsx +101 -105
- package/shared/metric-delta.tsx +28 -27
- package/shared/order-desk.tsx +205 -216
- package/shared/revenue-chart.tsx +145 -165
- package/shared/scene-castle.tsx +206 -291
- package/shared/scene-frame.tsx +33 -32
- package/shared/scene-hues.ts +17 -17
- package/shared/scene-tile.tsx +88 -92
- package/shared/settings-data.ts +119 -125
- package/shared/settings-rows.tsx +122 -159
- package/shared/sparkline.tsx +75 -88
- package/shared/sso-icons.tsx +10 -22
- package/shared/stars.tsx +16 -25
- package/templates/ai-chat-landing.template.mjs +5 -4
- package/templates/ai-chat-landing.tsx +473 -460
- package/templates/ai-chat.template.mjs +5 -4
- package/templates/ai-chat.tsx +543 -612
- package/templates/blank.template.mjs +5 -4
- package/templates/blank.tsx +18 -14
- package/templates/centered-hero.template.mjs +5 -4
- package/templates/centered-hero.tsx +55 -68
- package/templates/classic-gallery.template.mjs +5 -4
- package/templates/classic-gallery.tsx +97 -104
- package/templates/contact-form.template.mjs +5 -4
- package/templates/contact-form.tsx +247 -282
- package/templates/dashboard-portfolio.template.mjs +5 -4
- package/templates/dashboard-portfolio.tsx +717 -548
- package/templates/dashboard.template.mjs +5 -4
- package/templates/dashboard.tsx +596 -567
- package/templates/detail-page.template.mjs +5 -4
- package/templates/detail-page.tsx +546 -603
- package/templates/documentation-design.template.mjs +5 -4
- package/templates/documentation-design.tsx +231 -243
- package/templates/documentation-technical.template.mjs +5 -4
- package/templates/documentation-technical.tsx +236 -239
- package/templates/documentation.template.mjs +5 -4
- package/templates/documentation.tsx +267 -279
- package/templates/editor.template.mjs +5 -4
- package/templates/editor.tsx +844 -877
- package/templates/file-explorer.template.mjs +5 -4
- package/templates/file-explorer.tsx +566 -590
- package/templates/form-two-column.template.mjs +5 -4
- package/templates/form-two-column.tsx +195 -210
- package/templates/gallery-hero.template.mjs +5 -4
- package/templates/gallery-hero.tsx +93 -114
- package/templates/ide.template.mjs +5 -4
- package/templates/ide.tsx +407 -453
- package/templates/incident-console.template.mjs +5 -4
- package/templates/incident-console.tsx +593 -575
- package/templates/kanban-board.template.mjs +5 -4
- package/templates/kanban-board.tsx +665 -683
- package/templates/library.template.mjs +5 -4
- package/templates/library.tsx +409 -430
- package/templates/login-card.template.mjs +5 -4
- package/templates/login-card.tsx +63 -72
- package/templates/login-split.template.mjs +5 -4
- package/templates/login-split.tsx +192 -193
- package/templates/login-sso.template.mjs +5 -4
- package/templates/login-sso.tsx +257 -258
- package/templates/login.template.mjs +5 -4
- package/templates/login.tsx +53 -49
- package/templates/messaging-shell.template.mjs +5 -4
- package/templates/messaging-shell.tsx +556 -574
- package/templates/mixed-gallery.template.mjs +5 -4
- package/templates/mixed-gallery.tsx +60 -58
- package/templates/payment-form.template.mjs +5 -4
- package/templates/payment-form.tsx +882 -991
- package/templates/product-detail.template.mjs +5 -4
- package/templates/product-detail.tsx +261 -272
- package/templates/product-gallery.template.mjs +5 -4
- package/templates/product-gallery.tsx +126 -137
- package/templates/product-tour.template.mjs +5 -4
- package/templates/product-tour.tsx +741 -773
- package/templates/settings-dialog.template.mjs +5 -4
- package/templates/settings-dialog.tsx +688 -717
- package/templates/settings-sidebar.template.mjs +5 -4
- package/templates/settings-sidebar.tsx +762 -807
- package/templates/settings.template.mjs +5 -4
- package/templates/settings.tsx +289 -304
- package/templates/shell-nav.template.mjs +5 -4
- package/templates/shell-nav.tsx +212 -219
- package/templates/shell-side-nav.template.mjs +5 -4
- package/templates/shell-side-nav.tsx +135 -157
- package/templates/shell-top-nav.template.mjs +5 -4
- package/templates/shell-top-nav.tsx +182 -203
- package/templates/side-gallery.template.mjs +5 -4
- package/templates/side-gallery.tsx +85 -90
- package/templates/table-grouped.template.mjs +5 -4
- package/templates/table-grouped.tsx +1000 -1053
- package/templates/table-page-chart.template.mjs +5 -4
- package/templates/table-page-chart.tsx +400 -398
- package/templates/table-page-heatmap-status.template.mjs +5 -4
- package/templates/table-page-heatmap-status.tsx +483 -512
- package/templates/table-page-shoe-store-heatmap.template.mjs +5 -4
- package/templates/table-page-shoe-store-heatmap.tsx +748 -746
- package/templates/table-page.template.mjs +5 -4
- package/templates/table-page.tsx +396 -405
- package/templates/table.template.mjs +5 -4
- package/templates/table.tsx +92 -93
- package/templates/tech-report.template.mjs +5 -4
- package/templates/tech-report.tsx +1316 -1304
- package/templates/theme-showcase.template.mjs +5 -4
- package/templates/theme-showcase.tsx +871 -951
- package/theme.css +35 -77
- package/theme.css.d.ts +9 -0
- package/tokens.css +373 -380
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
// XLE (canonical structure
|
|
3
|
-
//
|
|
2
|
+
// XLE (canonical structure of the tree below; the CLI had no XLE validator
|
|
3
|
+
// after `astryx layout` was removed in 0.7.0, so this is a reading aid and a
|
|
4
|
+
// human drift check — update it with the file, never alone):
|
|
5
|
+
// L[h=fill] > LC[p=6] > V[g=8] > (G[c={min:280} g=4 a=start] > Hd"Small comforts for the midnight hours."[level=1 t=display-2] + (V[g=3 a=start] > Tx"Provisions from the castle workshops"[t=body] + B.primary"Browse the collection")) + (V[g=8] > (V[g=2] > Hd"The collection"[level=2] + Tx"Each piece is made in small batches"[t=body]) + (G[c={min:280} g=4] > (V[g=3] > (C[p=0] > AR[ratio=1] > Scene{SceneTile}) + (V[g=1] > Hd"Nightfall Stoneware Mug"[level=3] + Tx"A hand-thrown mug that sits easy"[t=body color=secondary] + Tx.lg"$75.00"))*6))
|
|
4
6
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {Grid} from
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {SceneTile} from
|
|
14
|
-
import
|
|
7
|
+
import { AspectRatio } from "@astryxdesign/core/AspectRatio";
|
|
8
|
+
import { Button } from "@astryxdesign/core/Button";
|
|
9
|
+
import { Card } from "@astryxdesign/core/Card";
|
|
10
|
+
import { Grid } from "@astryxdesign/core/Grid";
|
|
11
|
+
import { Icon } from "@astryxdesign/core/Icon";
|
|
12
|
+
import { Layout, LayoutContent, VStack } from "@astryxdesign/core/Layout";
|
|
13
|
+
import { Heading, Text } from "@astryxdesign/core/Text";
|
|
14
|
+
import type { SceneHue } from "astryx-dracula/shared/scene-hues";
|
|
15
|
+
import { SceneTile } from "astryx-dracula/shared/scene-tile";
|
|
16
|
+
import { ArrowRight } from "lucide-react";
|
|
15
17
|
|
|
16
18
|
// ─── Styles ─────────────────────────────────────────────────────────────────
|
|
17
19
|
// Product tile art lives in shared/scene-tile (large fork); there is no Image
|
|
@@ -20,145 +22,132 @@ import type {SceneHue} from 'astryx-dracula/shared/scene-hues';
|
|
|
20
22
|
// ─── Product Data ───────────────────────────────────────────────────────────
|
|
21
23
|
|
|
22
24
|
interface Product {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
id: number;
|
|
26
|
+
name: string;
|
|
27
|
+
description: string;
|
|
28
|
+
price: number;
|
|
29
|
+
hue: SceneHue;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
// One accent per product from the fixed badge vocabulary.
|
|
31
33
|
const PRODUCTS: Product[] = [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
name: 'Transylvanian Tea Blend',
|
|
75
|
-
description:
|
|
76
|
-
'Black tea with midnight berries, packed for the cold months.',
|
|
77
|
-
price: 80.0,
|
|
78
|
-
hue: 'var(--dracula-green)',
|
|
79
|
-
},
|
|
34
|
+
{
|
|
35
|
+
id: 1,
|
|
36
|
+
name: "Nightfall Stoneware Mug",
|
|
37
|
+
description: "A hand-thrown mug that sits easy in the hand through the longest night watch.",
|
|
38
|
+
price: 75.0,
|
|
39
|
+
hue: "var(--dracula-orange)",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: 2,
|
|
43
|
+
name: "Coven Gathering Candle",
|
|
44
|
+
description: "Smoked amber and clove poured for slow evenings around the table.",
|
|
45
|
+
price: 80.0,
|
|
46
|
+
hue: "var(--dracula-orange)",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 3,
|
|
50
|
+
name: "Belfry Wool Throw",
|
|
51
|
+
description: "A heavy weave that keeps the chill of the tower off your shoulders.",
|
|
52
|
+
price: 75.0,
|
|
53
|
+
hue: "var(--dracula-cyan)",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 4,
|
|
57
|
+
name: "Crypt Archive Journal",
|
|
58
|
+
description: "Stitched pages that take ink well for field notes and midnight lists.",
|
|
59
|
+
price: 75.0,
|
|
60
|
+
hue: "var(--dracula-yellow)",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 5,
|
|
64
|
+
name: "Moonrise Enamel Pin",
|
|
65
|
+
description: "A small harvest moon for the lapel of your favourite coat.",
|
|
66
|
+
price: 60.0,
|
|
67
|
+
hue: "var(--dracula-pink)",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: 6,
|
|
71
|
+
name: "Transylvanian Tea Blend",
|
|
72
|
+
description: "Black tea with midnight berries, packed for the cold months.",
|
|
73
|
+
price: 80.0,
|
|
74
|
+
hue: "var(--dracula-green)",
|
|
75
|
+
},
|
|
80
76
|
];
|
|
81
77
|
|
|
82
78
|
const fmt = (n: number) => `$${n.toFixed(2)}`;
|
|
83
79
|
|
|
84
80
|
// ─── Product Card ───────────────────────────────────────────────────────────
|
|
85
81
|
|
|
86
|
-
function ProductCard({product}: {product: Product}) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
</Text>
|
|
106
|
-
</VStack>
|
|
107
|
-
</VStack>
|
|
108
|
-
);
|
|
82
|
+
function ProductCard({ product }: { product: Product }) {
|
|
83
|
+
return (
|
|
84
|
+
<VStack gap={3}>
|
|
85
|
+
<Card padding={0}>
|
|
86
|
+
<AspectRatio ratio={1}>
|
|
87
|
+
<SceneTile label={`${product.name} thumbnail`} hue={product.hue} size="lg" />
|
|
88
|
+
</AspectRatio>
|
|
89
|
+
</Card>
|
|
90
|
+
<VStack gap={1}>
|
|
91
|
+
<Heading level={3}>{product.name}</Heading>
|
|
92
|
+
<Text type="body" color="secondary" maxLines={2}>
|
|
93
|
+
{product.description}
|
|
94
|
+
</Text>
|
|
95
|
+
<Text type="large" hasTabularNumbers>
|
|
96
|
+
{fmt(product.price)}
|
|
97
|
+
</Text>
|
|
98
|
+
</VStack>
|
|
99
|
+
</VStack>
|
|
100
|
+
);
|
|
109
101
|
}
|
|
110
102
|
|
|
111
103
|
// ─── Main Page ──────────────────────────────────────────────────────────────
|
|
112
104
|
|
|
113
105
|
export default function ProductGallery() {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
</VStack>
|
|
142
|
-
</Grid>
|
|
106
|
+
return (
|
|
107
|
+
<Layout
|
|
108
|
+
height="fill"
|
|
109
|
+
contentWidth={1200}
|
|
110
|
+
content={
|
|
111
|
+
<LayoutContent padding={6}>
|
|
112
|
+
<VStack gap={8}>
|
|
113
|
+
{/* Header — Grid handles responsive stacking */}
|
|
114
|
+
<Grid columns={{ minWidth: 280 }} gap={4} align="start">
|
|
115
|
+
<Heading level={1} type="display-2">
|
|
116
|
+
Small comforts for the midnight hours.
|
|
117
|
+
</Heading>
|
|
118
|
+
<VStack gap={3} hAlign="start">
|
|
119
|
+
<Text type="body">
|
|
120
|
+
Provisions from the castle workshops: kiln-fired, hand-poured, and stitched by the
|
|
121
|
+
coven.
|
|
122
|
+
</Text>
|
|
123
|
+
<Button
|
|
124
|
+
label="Browse the collection"
|
|
125
|
+
variant="primary"
|
|
126
|
+
endContent={<Icon icon={ArrowRight} color="inherit" />}
|
|
127
|
+
clickAction={() =>
|
|
128
|
+
document.getElementById("products")?.scrollIntoView({ behavior: "smooth" })
|
|
129
|
+
}
|
|
130
|
+
/>
|
|
131
|
+
</VStack>
|
|
132
|
+
</Grid>
|
|
143
133
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
);
|
|
134
|
+
{/* Product Grid — reflows 3 → 2 → 1 columns as width narrows */}
|
|
135
|
+
<VStack gap={8}>
|
|
136
|
+
<VStack gap={2}>
|
|
137
|
+
<Heading level={2}>The collection</Heading>
|
|
138
|
+
<Text type="body" color="secondary">
|
|
139
|
+
Each piece is made in small batches and restocked with every full moon.
|
|
140
|
+
</Text>
|
|
141
|
+
</VStack>
|
|
142
|
+
<Grid columns={{ minWidth: 280 }} gap={4} id="products">
|
|
143
|
+
{PRODUCTS.map((product) => (
|
|
144
|
+
<ProductCard key={product.id} product={product} />
|
|
145
|
+
))}
|
|
146
|
+
</Grid>
|
|
147
|
+
</VStack>
|
|
148
|
+
</VStack>
|
|
149
|
+
</LayoutContent>
|
|
150
|
+
}
|
|
151
|
+
/>
|
|
152
|
+
);
|
|
164
153
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
type: "page",
|
|
3
|
+
name: "Product Tour",
|
|
4
|
+
description: "Chapter rail, walkthrough content, and outline",
|
|
5
|
+
keywords: ["tour", "walkthrough", "onboarding", "product", "guide", "tour steps"],
|
|
6
|
+
category: "marketing",
|
|
6
7
|
};
|