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,22 +1,24 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
- // XLE (canonical structure, validated with `bunx astryx layout check`):
3
- // L > (LC > V[g=8] > (V[g=2] > Hd"Getting started with Astryx Dracula"[level=1] + Tx"Last updated March 30, 2026"[t=supporting]) + (C > V[g=3] > (H[j=between] > (H[g=2] > Ic + Tx"AI Assistance"[t=body]) + B"Copy prompt") + Tx"Prompt description"[t=body]) + (V[g=4] > Hd"Prerequisites"[level=2] + UL) + D + (V[g=4] > Hd"Install the package"[level=2] + Tx"Description"[t=body] + (V[g=2] > Tx"Step"[t=body] + Cd)*3) + D + (V[g=4] > Hd"Configure theming"[level=2] + Tx"Description"[t=body] + Cd + Tx"Note"[t=body]) + D + (V[g=4] > Hd"Next steps"[level=2] + UL)) + (LP > Outline)
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=auto mw=960] > (LC[p=8 !scroll] > V[g=8] > (V[g=2] > Hd"Getting started with Astryx Dracula"[level=1] + Tx"Last updated March 30, 2026"[t=supporting] + SE{Selector}"On this page") + (C > V[g=3] > (H[g=2 a=center] > (SI[fill] > (H[g=2 a=center] > Ic + Tx"AI Assistance"[t=body])) + B.ghost"Copy prompt") + Tx"Help me get set up"[t=body]) + (V[g=4] > Hd"Prerequisites"[level=2] + (UL[density=compact] > LI"Node.js 18+" + LI"React 18 or 19" + LI"A package manager")) + D + (V[g=4] > Hd"Install the package"[level=2] + Tx"Description"[t=body] + (V[g=2] > Tx"Step 1"[t=body] + Cd) + (V[g=2] > Tx"Step 2"[t=body] + Tx"Astryx ships precompiled CSS"[t=body] + Cd) + (V[g=2] > Tx"Step 3"[t=body] + Cd)) + D + (V[g=4] > Hd"Configure theming"[level=2] + Tx"Description"[t=body] + Cd + Tx"Note"[t=body]) + D + (V[g=4] > Hd"Next steps"[level=2] + (UL[density=compact] > LI"Fundamental concepts" + LI"Component API reference" + LI"Accessibility" + LI"CLI tools" + LI"Design tokens"))) + (LP[!scroll] > Outline)
4
6
 
5
- import {useCallback, useState} from 'react';
6
- import {Heading, Text} from '@astryxdesign/core/Text';
7
- import {Button} from '@astryxdesign/core/Button';
8
- import {Card} from '@astryxdesign/core/Card';
9
- import {List, ListItem} from '@astryxdesign/core/List';
10
- import {CodeBlock} from '@astryxdesign/core/CodeBlock';
11
- import {Selector} from '@astryxdesign/core/Selector';
12
- import {HStack, VStack, StackItem} from '@astryxdesign/core/Stack';
13
- import {Layout, LayoutContent, LayoutPanel} from '@astryxdesign/core/Layout';
14
- import {Divider} from '@astryxdesign/core/Divider';
15
- import {Icon} from '@astryxdesign/core/Icon';
16
- import {Outline, type OutlineItem} from '@astryxdesign/core/Outline';
17
- import {useMediaQuery} from '@astryxdesign/core/hooks';
18
- import {Sparkles, ClipboardCopy} from 'lucide-react';
19
- import {outlinePanel} from 'astryx-dracula/shared/chaptered-doc-config';
7
+ import { Button } from "@astryxdesign/core/Button";
8
+ import { Card } from "@astryxdesign/core/Card";
9
+ import { CodeBlock } from "@astryxdesign/core/CodeBlock";
10
+ import { Divider } from "@astryxdesign/core/Divider";
11
+ import { useMediaQuery } from "@astryxdesign/core/hooks";
12
+ import { Icon } from "@astryxdesign/core/Icon";
13
+ import { Layout, LayoutContent, LayoutPanel } from "@astryxdesign/core/Layout";
14
+ import { List, ListItem } from "@astryxdesign/core/List";
15
+ import { Outline, type OutlineItem } from "@astryxdesign/core/Outline";
16
+ import { Selector } from "@astryxdesign/core/Selector";
17
+ import { HStack, StackItem, VStack } from "@astryxdesign/core/Stack";
18
+ import { Heading, Text } from "@astryxdesign/core/Text";
19
+ import { outlinePanel } from "astryx-dracula/shared/chaptered-doc-config";
20
+ import { ClipboardCopy, Sparkles } from "lucide-react";
21
+ import { useCallback, useState } from "react";
20
22
 
21
23
  // ---------------------------------------------------------------------------
22
24
  // Main component
@@ -29,187 +31,182 @@ import {outlinePanel} from 'astryx-dracula/shared/chaptered-doc-config';
29
31
  // Same prompt in the copy action and the visible body: one string, so the
30
32
  // two can never drift.
31
33
  const SETUP_PROMPT =
32
- 'Help me get set up with Astryx Dracula. Based on my project, do the following: 1. Install @astryxdesign/core and the StyleX compiler. 2. Wrap my app in the Theme component. 3. Replace one existing component with an Astryx equivalent. After setup, suggest relevant next steps based on my project.';
33
-
34
+ "Help me get set up with Astryx Dracula. Based on my project, do the following: 1. Install @astryxdesign/core and the StyleX compiler. 2. Wrap my app in the Theme component. 3. Replace one existing component with an Astryx equivalent. After setup, suggest relevant next steps based on my project.";
34
35
 
35
36
  const OUTLINE_ITEMS: OutlineItem[] = [
36
- {id: 'prerequisites', label: 'Prerequisites', level: 2},
37
- {id: 'install-package', label: 'Install the package', level: 2},
38
- {id: 'configure-theming', label: 'Configure theming', level: 2},
39
- {id: 'next-steps', label: 'Next steps', level: 2},
37
+ { id: "prerequisites", label: "Prerequisites", level: 2 },
38
+ { id: "install-package", label: "Install the package", level: 2 },
39
+ { id: "configure-theming", label: "Configure theming", level: 2 },
40
+ { id: "next-steps", label: "Next steps", level: 2 },
40
41
  ];
41
42
 
42
- const OUTLINE_OPTIONS = OUTLINE_ITEMS.map(item => ({
43
- value: item.id,
44
- label: item.label,
43
+ const OUTLINE_OPTIONS = OUTLINE_ITEMS.map((item) => ({
44
+ value: item.id,
45
+ label: item.label,
45
46
  }));
46
47
 
47
48
  export default function DocumentationTechnical() {
48
- const [activeId, setActiveId] = useState<string | undefined>(
49
- OUTLINE_ITEMS[0]?.id,
50
- );
51
- const isMobile = useMediaQuery('(max-width: 768px)');
49
+ const [activeId, setActiveId] = useState<string | undefined>(OUTLINE_ITEMS[0]?.id);
50
+ const isMobile = useMediaQuery("(max-width: 768px)");
52
51
 
53
- const scrollToId = useCallback((id: string) => {
54
- setActiveId(id);
55
- const target = document.getElementById(id);
56
- if (target != null) {
57
- target.scrollIntoView({behavior: 'smooth', block: 'start'});
58
- window.history.pushState(null, '', `#${id}`);
59
- }
60
- }, []);
52
+ const scrollToId = useCallback((id: string) => {
53
+ setActiveId(id);
54
+ const target = document.getElementById(id);
55
+ if (target != null) {
56
+ target.scrollIntoView({ behavior: "smooth", block: "start" });
57
+ window.history.pushState(null, "", `#${id}`);
58
+ }
59
+ }, []);
61
60
 
62
- return (
63
- <Layout
64
- height="auto"
65
- contentWidth={960}
66
- end={
67
- isMobile ? undefined : (
68
- <LayoutPanel
69
- isScrollable={false}
70
- label="On this page"
71
- role="complementary"
72
- style={outlinePanel}>
73
- <Outline items={OUTLINE_ITEMS} onActiveIdChange={setActiveId} />
74
- </LayoutPanel>
75
- )
76
- }
77
- content={
78
- <LayoutContent isScrollable={false} padding={8}>
79
- <VStack gap={8}>
80
- <VStack gap={2}>
81
- <Heading level={1}>Getting started with Astryx Dracula</Heading>
82
- <Text type="supporting" color="secondary" hasTabularNumbers>
83
- Last updated March 30, 2026
84
- </Text>
85
- {isMobile && (
86
- <Selector
87
- label="On this page"
88
- isLabelHidden
89
- options={OUTLINE_OPTIONS}
90
- value={activeId}
91
- onChange={scrollToId}
92
- width="100%"
93
- />
94
- )}
95
- </VStack>
61
+ return (
62
+ <Layout
63
+ height="auto"
64
+ contentWidth={960}
65
+ end={
66
+ isMobile ? undefined : (
67
+ <LayoutPanel
68
+ isScrollable={false}
69
+ label="On this page"
70
+ role="complementary"
71
+ style={outlinePanel}
72
+ >
73
+ <Outline items={OUTLINE_ITEMS} onActiveIdChange={setActiveId} />
74
+ </LayoutPanel>
75
+ )
76
+ }
77
+ content={
78
+ <LayoutContent isScrollable={false} padding={8}>
79
+ <VStack gap={8}>
80
+ <VStack gap={2}>
81
+ <Heading level={1}>Getting started with Astryx Dracula</Heading>
82
+ <Text type="supporting" color="secondary" hasTabularNumbers>
83
+ Last updated March 30, 2026
84
+ </Text>
85
+ {isMobile && (
86
+ <Selector
87
+ label="On this page"
88
+ isLabelHidden
89
+ options={OUTLINE_OPTIONS}
90
+ value={activeId}
91
+ onChange={scrollToId}
92
+ width="100%"
93
+ />
94
+ )}
95
+ </VStack>
96
96
 
97
- <Card>
98
- <VStack gap={3}>
99
- <HStack gap={2} vAlign="center">
100
- <StackItem size="fill">
101
- <HStack gap={2} vAlign="center">
102
- <Icon icon={Sparkles} size="sm" color="secondary" />
103
- <Text type="body" weight="semibold">
104
- AI Assistance
105
- </Text>
106
- </HStack>
107
- </StackItem>
108
- <Button
109
- label="Copy prompt"
110
- variant="ghost"
111
- size="sm"
112
- icon={<Icon icon={ClipboardCopy} />}
113
- onClick={() => {
114
- void navigator.clipboard.writeText(SETUP_PROMPT);
115
- }}
116
- />
117
- </HStack>
118
- <Text type="body" color="secondary">
119
- Help me get set up with Astryx Dracula. Based on my project,
120
- do the following: 1. Install @astryxdesign/core and the
121
- StyleX compiler. 2. Wrap my app in the Theme component. 3.
122
- Replace one existing component with an Astryx equivalent.
123
- </Text>
124
- </VStack>
125
- </Card>
97
+ <Card>
98
+ <VStack gap={3}>
99
+ <HStack gap={2} vAlign="center">
100
+ <StackItem size="fill">
101
+ <HStack gap={2} vAlign="center">
102
+ <Icon icon={Sparkles} size="sm" color="secondary" />
103
+ <Text type="body" weight="semibold">
104
+ AI Assistance
105
+ </Text>
106
+ </HStack>
107
+ </StackItem>
108
+ <Button
109
+ label="Copy prompt"
110
+ variant="ghost"
111
+ size="sm"
112
+ icon={<Icon icon={ClipboardCopy} />}
113
+ onClick={() => {
114
+ void navigator.clipboard.writeText(SETUP_PROMPT);
115
+ }}
116
+ />
117
+ </HStack>
118
+ <Text type="body" color="secondary">
119
+ Help me get set up with Astryx Dracula. Based on my project, do the following: 1.
120
+ Install @astryxdesign/core and the StyleX compiler. 2. Wrap my app in the Theme
121
+ component. 3. Replace one existing component with an Astryx equivalent.
122
+ </Text>
123
+ </VStack>
124
+ </Card>
126
125
 
127
- <VStack gap={4}>
128
- <Heading id="prerequisites" level={2}>
129
- Prerequisites
130
- </Heading>
131
- <List density="compact" listStyle="disc">
132
- <ListItem label="Node.js 18+" />
133
- <ListItem label="React 18 or 19" />
134
- <ListItem
135
- label="A package manager"
136
- description={
137
- <Text type="body" color="secondary" textWrap="wrap">
138
- npm, yarn, or pnpm
139
- </Text>
140
- }
141
- />
142
- </List>
143
- </VStack>
126
+ <VStack gap={4}>
127
+ <Heading id="prerequisites" level={2}>
128
+ Prerequisites
129
+ </Heading>
130
+ <List density="compact" listStyle="disc">
131
+ <ListItem label="Node.js 18+" />
132
+ <ListItem label="React 18 or 19" />
133
+ <ListItem
134
+ label="A package manager"
135
+ description={
136
+ <Text type="body" color="secondary" textWrap="wrap">
137
+ npm, yarn, or pnpm
138
+ </Text>
139
+ }
140
+ />
141
+ </List>
142
+ </VStack>
144
143
 
145
- <Divider />
144
+ <Divider />
146
145
 
147
- <VStack gap={4}>
148
- <Heading id="install-package" level={2}>
149
- Install the package
150
- </Heading>
151
- <Text type="body">
152
- Every project starts with installing the core package. This
153
- gives you access to all components, tokens, and utilities.
154
- </Text>
155
- <VStack gap={2}>
156
- <Text type="body" weight="semibold">
157
- Step 1: Install the core package
158
- </Text>
159
- <CodeBlock
160
- code="npm install @astryxdesign/core"
161
- language="bash"
162
- width="100%"
163
- hasCopyButton
164
- />
165
- </VStack>
166
- <VStack gap={2}>
167
- <Text type="body" weight="semibold">
168
- Step 2: Import the precompiled styles
169
- </Text>
170
- <Text type="body" color="secondary">
171
- Astryx ships precompiled CSS, so there is no build plugin to
172
- configure. Import the reset and component stylesheets once at
173
- your app entry point.
174
- </Text>
175
- <CodeBlock
176
- code={`import '@astryxdesign/core/reset.css';
146
+ <VStack gap={4}>
147
+ <Heading id="install-package" level={2}>
148
+ Install the package
149
+ </Heading>
150
+ <Text type="body">
151
+ Every project starts with installing the core package. This gives you access to all
152
+ components, tokens, and utilities.
153
+ </Text>
154
+ <VStack gap={2}>
155
+ <Text type="body" weight="semibold">
156
+ Step 1: Install the core package
157
+ </Text>
158
+ <CodeBlock
159
+ code="npm install @astryxdesign/core"
160
+ language="bash"
161
+ width="100%"
162
+ hasCopyButton
163
+ />
164
+ </VStack>
165
+ <VStack gap={2}>
166
+ <Text type="body" weight="semibold">
167
+ Step 2: Import the precompiled styles
168
+ </Text>
169
+ <Text type="body" color="secondary">
170
+ Astryx ships precompiled CSS, so there is no build plugin to configure. Import the
171
+ reset and component stylesheets once at your app entry point.
172
+ </Text>
173
+ <CodeBlock
174
+ code={`import '@astryxdesign/core/reset.css';
177
175
  import '@astryxdesign/core/astryx.css';`}
178
- language="tsx"
179
- width="100%"
180
- hasCopyButton
181
- />
182
- </VStack>
183
- <VStack gap={2}>
184
- <Text type="body" weight="semibold">
185
- Step 3: Import your first component
186
- </Text>
187
- <CodeBlock
188
- code={`import { Button } from '@astryxdesign/core/Button';
176
+ language="tsx"
177
+ width="100%"
178
+ hasCopyButton
179
+ />
180
+ </VStack>
181
+ <VStack gap={2}>
182
+ <Text type="body" weight="semibold">
183
+ Step 3: Import your first component
184
+ </Text>
185
+ <CodeBlock
186
+ code={`import { Button } from '@astryxdesign/core/Button';
189
187
 
190
188
  export default function App() {
191
189
  return <Button label="Hello Astryx" variant="primary" />;
192
190
  }`}
193
- language="tsx"
194
- width="100%"
195
- hasCopyButton
196
- />
197
- </VStack>
198
- </VStack>
191
+ language="tsx"
192
+ width="100%"
193
+ hasCopyButton
194
+ />
195
+ </VStack>
196
+ </VStack>
199
197
 
200
- <Divider />
198
+ <Divider />
201
199
 
202
- <VStack gap={4}>
203
- <Heading id="configure-theming" level={2}>
204
- Configure theming
205
- </Heading>
206
- <Text type="body">
207
- Astryx ships with a default theme that works out of the box. To
208
- customize colors, typography, and spacing, wrap your app in the
209
- Theme component.
210
- </Text>
211
- <CodeBlock
212
- code={`import { type ReactNode } from 'react';
200
+ <VStack gap={4}>
201
+ <Heading id="configure-theming" level={2}>
202
+ Configure theming
203
+ </Heading>
204
+ <Text type="body">
205
+ Astryx ships with a default theme that works out of the box. To customize colors,
206
+ typography, and spacing, wrap your app in the Theme component.
207
+ </Text>
208
+ <CodeBlock
209
+ code={`import { type ReactNode } from 'react';
213
210
  import { Theme } from '@astryxdesign/core/theme';
214
211
  import { astryxDraculaTheme } from 'astryx-dracula';
215
212
 
@@ -220,67 +217,67 @@ export default function App({ children }: { children: ReactNode }) {
220
217
  </Theme>
221
218
  );
222
219
  }`}
223
- language="tsx"
224
- width="100%"
225
- hasCopyButton
226
- />
227
- <Text type="body" color="secondary">
228
- See the theming guide for the full list of customizable tokens.
229
- </Text>
230
- </VStack>
220
+ language="tsx"
221
+ width="100%"
222
+ hasCopyButton
223
+ />
224
+ <Text type="body" color="secondary">
225
+ See the theming guide for the full list of customizable tokens.
226
+ </Text>
227
+ </VStack>
231
228
 
232
- <Divider />
229
+ <Divider />
233
230
 
234
- <VStack gap={4}>
235
- <Heading id="next-steps" level={2}>
236
- Next steps
237
- </Heading>
238
- <List density="compact" listStyle="disc">
239
- <ListItem
240
- label="Fundamental concepts"
241
- description={
242
- <Text type="body" color="secondary" textWrap="wrap">
243
- How theming, layout, and composition work
244
- </Text>
245
- }
246
- />
247
- <ListItem
248
- label="Component API reference"
249
- description={
250
- <Text type="body" color="secondary" textWrap="wrap">
251
- Props, variants, and examples for every component
252
- </Text>
253
- }
254
- />
255
- <ListItem
256
- label="Accessibility"
257
- description={
258
- <Text type="body" color="secondary" textWrap="wrap">
259
- Built-in a11y features and ARIA patterns
260
- </Text>
261
- }
262
- />
263
- <ListItem
264
- label="CLI tools"
265
- description={
266
- <Text type="body" color="secondary" textWrap="wrap">
267
- Scaffold projects and manage templates
268
- </Text>
269
- }
270
- />
271
- <ListItem
272
- label="Design tokens"
273
- description={
274
- <Text type="body" color="secondary" textWrap="wrap">
275
- Colors, spacing, typography, and sizing
276
- </Text>
277
- }
278
- />
279
- </List>
280
- </VStack>
281
- </VStack>
282
- </LayoutContent>
283
- }
284
- />
285
- );
231
+ <VStack gap={4}>
232
+ <Heading id="next-steps" level={2}>
233
+ Next steps
234
+ </Heading>
235
+ <List density="compact" listStyle="disc">
236
+ <ListItem
237
+ label="Fundamental concepts"
238
+ description={
239
+ <Text type="body" color="secondary" textWrap="wrap">
240
+ How theming, layout, and composition work
241
+ </Text>
242
+ }
243
+ />
244
+ <ListItem
245
+ label="Component API reference"
246
+ description={
247
+ <Text type="body" color="secondary" textWrap="wrap">
248
+ Props, variants, and examples for every component
249
+ </Text>
250
+ }
251
+ />
252
+ <ListItem
253
+ label="Accessibility"
254
+ description={
255
+ <Text type="body" color="secondary" textWrap="wrap">
256
+ Built-in a11y features and ARIA patterns
257
+ </Text>
258
+ }
259
+ />
260
+ <ListItem
261
+ label="CLI tools"
262
+ description={
263
+ <Text type="body" color="secondary" textWrap="wrap">
264
+ Scaffold projects and manage templates
265
+ </Text>
266
+ }
267
+ />
268
+ <ListItem
269
+ label="Design tokens"
270
+ description={
271
+ <Text type="body" color="secondary" textWrap="wrap">
272
+ Colors, spacing, typography, and sizing
273
+ </Text>
274
+ }
275
+ />
276
+ </List>
277
+ </VStack>
278
+ </VStack>
279
+ </LayoutContent>
280
+ }
281
+ />
282
+ );
286
283
  }
@@ -1,6 +1,7 @@
1
1
  export default {
2
- type: 'page',
3
- name: 'Component Catalog',
4
- description: 'Hero plus categorized component grid',
5
- category: 'docs',
2
+ type: "page",
3
+ name: "Component Catalog",
4
+ description: "Hero plus categorized component grid",
5
+ keywords: ["documentation", "docs", "guide", "manual", "reference", "handbook"],
6
+ category: "docs",
6
7
  };