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