astryx-dracula 0.2.0 → 0.3.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/BRAND.md +30 -18
- package/README.md +22 -11
- package/USAGE.md +29 -10
- package/astryx-dracula.js +19 -13
- package/astryx-dracula.variants.d.ts +15 -0
- package/package.json +59 -17
- package/shared/auth-chrome-config.ts +18 -0
- package/shared/auth-chrome.tsx +25 -0
- package/shared/auth-copy.ts +22 -0
- package/shared/chaptered-doc-config.ts +92 -0
- package/shared/chaptered-doc.tsx +332 -0
- package/shared/chart-hues.ts +27 -0
- package/shared/chart-labels.tsx +44 -0
- package/shared/chart-legend.tsx +100 -0
- package/shared/chart-panel-style.ts +13 -0
- package/shared/data-bar.tsx +160 -0
- package/shared/gallery-image.ts +20 -0
- package/shared/login-demo.ts +7 -0
- package/shared/metric-delta.tsx +36 -0
- package/shared/order-desk.tsx +273 -0
- package/shared/revenue-chart.tsx +174 -0
- package/shared/scene-castle.tsx +322 -0
- package/shared/scene-frame.tsx +88 -0
- package/shared/scene-hues.ts +49 -0
- package/shared/scene-tile.tsx +128 -0
- package/shared/settings-data.ts +125 -0
- package/shared/settings-rows.tsx +179 -0
- package/shared/sparkline.tsx +94 -0
- package/shared/sso-icons.tsx +30 -0
- package/templates/ai-chat-landing.tsx +67 -32
- package/templates/ai-chat.tsx +41 -20
- package/templates/blank.tsx +5 -2
- package/templates/centered-hero.tsx +15 -124
- package/templates/classic-gallery.tsx +21 -65
- package/templates/contact-form.tsx +62 -40
- package/templates/dashboard-portfolio.tsx +146 -227
- package/templates/dashboard.tsx +123 -121
- package/templates/detail-page.tsx +101 -95
- package/templates/documentation-design.template.mjs +1 -1
- package/templates/documentation-design.tsx +85 -96
- package/templates/documentation-technical.template.mjs +1 -1
- package/templates/documentation-technical.tsx +33 -21
- package/templates/documentation.template.mjs +1 -1
- package/templates/documentation.tsx +54 -74
- package/templates/editor.tsx +119 -89
- package/templates/file-explorer.tsx +133 -84
- package/templates/form-two-column.tsx +62 -124
- package/templates/gallery-hero.tsx +17 -171
- package/templates/ide.tsx +27 -21
- package/templates/incident-console.tsx +105 -69
- package/templates/kanban-board.tsx +100 -41
- package/templates/library.template.mjs +2 -2
- package/templates/library.tsx +38 -41
- package/templates/login-card.tsx +59 -86
- package/templates/login-split.tsx +88 -128
- package/templates/login-sso.tsx +107 -68
- package/templates/login.tsx +108 -52
- package/templates/messaging-shell.tsx +172 -143
- package/templates/mixed-gallery.tsx +31 -130
- package/templates/payment-form.tsx +369 -289
- package/templates/product-detail.tsx +40 -57
- package/templates/product-gallery.tsx +31 -40
- package/templates/product-tour.template.mjs +6 -0
- package/templates/product-tour.tsx +916 -0
- package/templates/settings-dialog.tsx +145 -286
- package/templates/settings-sidebar.tsx +179 -267
- package/templates/settings.tsx +42 -13
- package/templates/shell-nav.tsx +32 -23
- package/templates/shell-side-nav.tsx +30 -19
- package/templates/shell-top-nav.tsx +81 -43
- package/templates/side-gallery.tsx +39 -93
- package/templates/table-grouped.tsx +63 -33
- package/templates/table-page-chart.tsx +24 -297
- package/templates/table-page-heatmap-status.tsx +157 -91
- package/templates/table-page-shoe-store-heatmap.tsx +19 -288
- package/templates/table-page.tsx +24 -6
- package/templates/table.tsx +24 -7
- package/templates/tech-report.template.mjs +6 -0
- package/templates/tech-report.tsx +1486 -0
- package/templates/theme-showcase.template.mjs +1 -1
- package/templates/theme-showcase.tsx +313 -249
- package/theme.css +76 -14
- package/tokens.css +425 -30
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
// XLE (canonical structure, validated with `bunx astryx layout check`):
|
|
3
|
+
// Ctr > V[a=center] > S.transparent[p=6] > V[g=6] > (V[g=2 a=center] > Hd"Let's brew after dark"[level=1] + Tx"Tell us a bit"[t=body]) + (V[g=4] > Hd"Why work with us"[level=2] + (G[c={min:200} g=4] > (C > V[g=3] > Ic + (V[g=1] > Hd"Title"[level=3] + Tx"Desc"[t=body]))*3)) + (V[g=4] > Hd"Your details"[level=2] + (G[c={min:260} g=4] > TI"Full name" + TI"Email") + (G[c={min:260} g=4] > TI"Company" + TI"Phone")) + D + (V[g=4] > Hd"Your project"[level=2] + (Fd"Goals"[req] > (H[g=2] > Tk"Goal"*10)) + SE"Timeline" + SE"Budget" + (RL"Source" > RLI*5) + TA"Notes" + CB"Decision maker") + (V[g=3] > B.primary"Send it into the night" + (H[j=center g=1] > Tx[t=supporting] > Lk"Privacy Policy"))
|
|
2
4
|
|
|
3
5
|
import {useState} from 'react';
|
|
4
6
|
import {VStack, HStack} from '@astryxdesign/core/Layout';
|
|
@@ -7,7 +9,7 @@ import {Section} from '@astryxdesign/core/Section';
|
|
|
7
9
|
import {Grid} from '@astryxdesign/core/Grid';
|
|
8
10
|
import {Card} from '@astryxdesign/core/Card';
|
|
9
11
|
import {Button} from '@astryxdesign/core/Button';
|
|
10
|
-
import {Text} from '@astryxdesign/core/Text';
|
|
12
|
+
import {Text, Heading} from '@astryxdesign/core/Text';
|
|
11
13
|
import {Icon} from '@astryxdesign/core/Icon';
|
|
12
14
|
import {TextInput} from '@astryxdesign/core/TextInput';
|
|
13
15
|
import {Selector} from '@astryxdesign/core/Selector';
|
|
@@ -17,8 +19,8 @@ import {Token} from '@astryxdesign/core/Token';
|
|
|
17
19
|
import {RadioList, RadioListItem} from '@astryxdesign/core/RadioList';
|
|
18
20
|
import {TextArea} from '@astryxdesign/core/TextArea';
|
|
19
21
|
import {Divider} from '@astryxdesign/core/Divider';
|
|
20
|
-
import {
|
|
21
|
-
import {Rocket, SlidersHorizontal, Hand} from 'lucide-react';
|
|
22
|
+
import {Field} from '@astryxdesign/core/Field';
|
|
23
|
+
import {Rocket, SlidersHorizontal, Hand, Check} from 'lucide-react';
|
|
22
24
|
|
|
23
25
|
const CAMPAIGN_GOALS = [
|
|
24
26
|
'Brand Awareness',
|
|
@@ -103,36 +105,30 @@ export default function ContactForm() {
|
|
|
103
105
|
return (
|
|
104
106
|
<Center axis="horizontal">
|
|
105
107
|
<VStack hAlign="center" width="100%">
|
|
106
|
-
<Section
|
|
107
|
-
maxWidth={800}
|
|
108
|
-
width="100%"
|
|
109
|
-
padding={6}
|
|
110
|
-
paddingBlock={10}
|
|
111
|
-
variant="section">
|
|
108
|
+
<Section maxWidth={800} width="100%" padding={6} variant="transparent">
|
|
112
109
|
<VStack gap={6}>
|
|
113
110
|
{/* Header */}
|
|
114
111
|
<VStack gap={2} hAlign="center" style={{textAlign: 'center'}}>
|
|
115
|
-
<
|
|
112
|
+
<Heading level={1} type="display-2">
|
|
116
113
|
Let's brew after dark
|
|
117
|
-
</
|
|
114
|
+
</Heading>
|
|
118
115
|
<Text type="body" color="secondary">
|
|
119
|
-
Tell us a bit about what you're summoning
|
|
116
|
+
Tell us a bit about what you're summoning, and the coven
|
|
120
117
|
would love to help it take flight.
|
|
121
118
|
</Text>
|
|
122
119
|
</VStack>
|
|
123
120
|
|
|
124
121
|
{/* Why work with us */}
|
|
125
|
-
<VStack gap={
|
|
122
|
+
<VStack gap={4}>
|
|
123
|
+
<Heading level={2}>Why work with us</Heading>
|
|
126
124
|
<Grid columns={{minWidth: 200}} gap={4}>
|
|
127
125
|
{WHY_US.map(item => (
|
|
128
126
|
<Card key={item.title}>
|
|
129
127
|
<VStack gap={3}>
|
|
130
|
-
<Icon icon={item.icon} size="lg" color="
|
|
128
|
+
<Icon icon={item.icon} size="lg" color="secondary" />
|
|
131
129
|
<VStack gap={1}>
|
|
132
|
-
<
|
|
133
|
-
|
|
134
|
-
</Text>
|
|
135
|
-
<Text type="supporting" color="secondary">
|
|
130
|
+
<Heading level={3}>{item.title}</Heading>
|
|
131
|
+
<Text type="body" color="secondary">
|
|
136
132
|
{item.description}
|
|
137
133
|
</Text>
|
|
138
134
|
</VStack>
|
|
@@ -143,11 +139,13 @@ export default function ContactForm() {
|
|
|
143
139
|
</VStack>
|
|
144
140
|
|
|
145
141
|
{/* Your details */}
|
|
146
|
-
<VStack gap={
|
|
142
|
+
<VStack gap={4}>
|
|
143
|
+
<Heading level={2}>Your details</Heading>
|
|
147
144
|
<Grid columns={{minWidth: 260}} gap={4}>
|
|
148
145
|
<TextInput
|
|
149
|
-
label="Full
|
|
150
|
-
|
|
146
|
+
label="Full name"
|
|
147
|
+
isRequired
|
|
148
|
+
placeholder="Full name"
|
|
151
149
|
value={fullName}
|
|
152
150
|
onChange={setFullName}
|
|
153
151
|
status={
|
|
@@ -158,6 +156,7 @@ export default function ContactForm() {
|
|
|
158
156
|
/>
|
|
159
157
|
<TextInput
|
|
160
158
|
label="Email"
|
|
159
|
+
isRequired
|
|
161
160
|
placeholder="you@company.com"
|
|
162
161
|
value={email}
|
|
163
162
|
onChange={setEmail}
|
|
@@ -171,6 +170,7 @@ export default function ContactForm() {
|
|
|
171
170
|
<Grid columns={{minWidth: 260}} gap={4}>
|
|
172
171
|
<TextInput
|
|
173
172
|
label="Company"
|
|
173
|
+
isRequired
|
|
174
174
|
placeholder="Company"
|
|
175
175
|
value={company}
|
|
176
176
|
onChange={setCompany}
|
|
@@ -182,6 +182,7 @@ export default function ContactForm() {
|
|
|
182
182
|
/>
|
|
183
183
|
<TextInput
|
|
184
184
|
label="Phone"
|
|
185
|
+
isRequired
|
|
185
186
|
placeholder="Phone number"
|
|
186
187
|
value={phone}
|
|
187
188
|
onChange={setPhone}
|
|
@@ -197,26 +198,47 @@ export default function ContactForm() {
|
|
|
197
198
|
<Divider />
|
|
198
199
|
|
|
199
200
|
{/* Your project */}
|
|
200
|
-
<VStack gap={
|
|
201
|
-
<
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
201
|
+
<VStack gap={4}>
|
|
202
|
+
<Heading level={2}>Your project</Heading>
|
|
203
|
+
<Field
|
|
204
|
+
label="What are you going for?"
|
|
205
|
+
inputID="campaign-goals"
|
|
206
|
+
labelID="campaign-goals-label"
|
|
207
|
+
isGroupLabel
|
|
208
|
+
isRequired
|
|
209
|
+
status={
|
|
210
|
+
errors.goals
|
|
211
|
+
? {type: 'error', message: errors.goals}
|
|
212
|
+
: undefined
|
|
213
|
+
}>
|
|
214
|
+
<HStack
|
|
215
|
+
gap={2}
|
|
216
|
+
wrap="wrap"
|
|
217
|
+
role="group"
|
|
218
|
+
aria-labelledby="campaign-goals-label">
|
|
219
|
+
{CAMPAIGN_GOALS.map(goal => {
|
|
220
|
+
const isSelected = goals.includes(goal);
|
|
221
|
+
return (
|
|
222
|
+
<Token
|
|
223
|
+
key={goal}
|
|
224
|
+
label={goal}
|
|
225
|
+
color={isSelected ? 'yellow' : 'default'}
|
|
226
|
+
icon={
|
|
227
|
+
isSelected ? (
|
|
228
|
+
<Icon icon={Check} size="xsm" color="inherit" />
|
|
229
|
+
) : undefined
|
|
230
|
+
}
|
|
231
|
+
description={isSelected ? 'Selected' : undefined}
|
|
232
|
+
onClick={() => toggleGoal(goal)}
|
|
233
|
+
/>
|
|
234
|
+
);
|
|
235
|
+
})}
|
|
214
236
|
</HStack>
|
|
215
|
-
|
|
216
|
-
</VStack>
|
|
237
|
+
</Field>
|
|
217
238
|
|
|
218
239
|
<Selector
|
|
219
240
|
label="When are you thinking?"
|
|
241
|
+
isRequired
|
|
220
242
|
placeholder="When are you thinking of launching?"
|
|
221
243
|
options={LAUNCH_OPTIONS}
|
|
222
244
|
value={timeline}
|
|
@@ -230,6 +252,7 @@ export default function ContactForm() {
|
|
|
230
252
|
|
|
231
253
|
<Selector
|
|
232
254
|
label="Ballpark budget?"
|
|
255
|
+
isRequired
|
|
233
256
|
placeholder="What's your rough monthly budget?"
|
|
234
257
|
options={BUDGET_OPTIONS}
|
|
235
258
|
value={budget}
|
|
@@ -254,7 +277,7 @@ export default function ContactForm() {
|
|
|
254
277
|
|
|
255
278
|
<TextArea
|
|
256
279
|
label="Anything else?"
|
|
257
|
-
placeholder="Tell us whatever else is on your mind
|
|
280
|
+
placeholder="Tell us whatever else is on your mind…"
|
|
258
281
|
value={message}
|
|
259
282
|
onChange={setMessage}
|
|
260
283
|
/>
|
|
@@ -269,9 +292,8 @@ export default function ContactForm() {
|
|
|
269
292
|
{/* Submit */}
|
|
270
293
|
<VStack gap={3}>
|
|
271
294
|
<Button
|
|
272
|
-
label="
|
|
295
|
+
label="Send it into the night"
|
|
273
296
|
variant="primary"
|
|
274
|
-
size="lg"
|
|
275
297
|
onClick={() => setSubmitted(true)}
|
|
276
298
|
/>
|
|
277
299
|
<HStack gap={1} hAlign="center">
|