astryx-dracula 0.3.1 → 0.4.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/USAGE.md +25 -0
- package/astryx-dracula.d.ts +2 -2
- package/astryx-dracula.js +384 -3
- package/astryx-dracula.variants.d.ts +2 -14
- package/icons.mjs +125 -0
- package/package.json +16 -8
- package/shared/revenue-chart.tsx +63 -7
- package/shared/settings-data.ts +43 -1
- package/shared/settings-rows.tsx +81 -30
- package/templates/ai-chat-landing.tsx +17 -9
- package/templates/ai-chat.tsx +2 -2
- package/templates/centered-hero.tsx +2 -2
- package/templates/contact-form.tsx +11 -10
- package/templates/dashboard.tsx +7 -3
- package/templates/detail-page.tsx +11 -4
- package/templates/documentation-design.tsx +43 -29
- package/templates/documentation-technical.tsx +11 -9
- package/templates/file-explorer.tsx +82 -70
- package/templates/form-two-column.tsx +1 -1
- package/templates/ide.tsx +6 -6
- package/templates/incident-console.tsx +27 -4
- package/templates/login-card.tsx +8 -5
- package/templates/login-split.tsx +21 -12
- package/templates/login-sso.tsx +57 -41
- package/templates/login.tsx +23 -20
- package/templates/payment-form.tsx +39 -45
- package/templates/product-detail.tsx +4 -6
- package/templates/product-tour.tsx +2 -2
- package/templates/settings-dialog.tsx +84 -87
- package/templates/settings-sidebar.tsx +92 -80
- package/templates/table-grouped.tsx +126 -29
- package/templates/table.tsx +21 -2
- package/templates/tech-report.tsx +1 -1
- package/theme.css +211 -119
package/templates/login.tsx
CHANGED
|
@@ -87,26 +87,27 @@ export default function LoginPage() {
|
|
|
87
87
|
/>
|
|
88
88
|
|
|
89
89
|
<VStack gap={1}>
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
90
|
+
<TextInput
|
|
91
|
+
label="Password"
|
|
92
|
+
isLabelHidden
|
|
93
|
+
value={password}
|
|
94
|
+
onChange={v => {
|
|
95
|
+
setPassword(v);
|
|
96
|
+
setError(null);
|
|
97
|
+
}}
|
|
98
|
+
placeholder={AUTH_PASSWORD_PLACEHOLDER}
|
|
99
|
+
type="password"
|
|
100
|
+
{...inputAutoComplete('current-password')}
|
|
101
|
+
size="lg"
|
|
102
|
+
onEnter={handleSignIn}
|
|
103
|
+
status={error ? {type: 'error', message: error} : undefined}
|
|
104
|
+
/>
|
|
105
105
|
{error && (
|
|
106
106
|
<VStack hAlign="end">
|
|
107
107
|
<Link
|
|
108
108
|
href="#/templates/login"
|
|
109
|
-
color="secondary"
|
|
109
|
+
color="secondary"
|
|
110
|
+
isStandalone>
|
|
110
111
|
{AUTH_FORGOT_PASSWORD}
|
|
111
112
|
</Link>
|
|
112
113
|
</VStack>
|
|
@@ -122,11 +123,13 @@ export default function LoginPage() {
|
|
|
122
123
|
onClick={handleSignIn}
|
|
123
124
|
/>
|
|
124
125
|
|
|
125
|
-
{/*
|
|
126
|
+
{/* Prose links. A link inside a sentence needs a persistent
|
|
127
|
+
underline — colour alone is not a cue (WCAG 1.4.1 / F73),
|
|
128
|
+
and the kit underlines on hover only. */}
|
|
126
129
|
<VStack hAlign="center">
|
|
127
130
|
<Text type="supporting" color="secondary">
|
|
128
131
|
{AUTH_SIGNUP_PROMPT}{' '}
|
|
129
|
-
<Link href="#/templates/login" type="supporting">
|
|
132
|
+
<Link href="#/templates/login" type="supporting" hasUnderline>
|
|
130
133
|
{AUTH_SIGNUP_LINK}
|
|
131
134
|
</Link>
|
|
132
135
|
</Text>
|
|
@@ -138,11 +141,11 @@ export default function LoginPage() {
|
|
|
138
141
|
<VStack hAlign="center" width="100%">
|
|
139
142
|
<Text type="supporting" color="secondary" justify="center">
|
|
140
143
|
{AUTH_TERMS_PREFIX}{' '}
|
|
141
|
-
<Link href="#/templates/login" type="supporting">
|
|
144
|
+
<Link href="#/templates/login" type="supporting" hasUnderline>
|
|
142
145
|
{AUTH_TERMS_SERVICE}
|
|
143
146
|
</Link>{' '}
|
|
144
147
|
and{' '}
|
|
145
|
-
<Link href="#/templates/login" type="supporting">
|
|
148
|
+
<Link href="#/templates/login" type="supporting" hasUnderline>
|
|
146
149
|
{AUTH_TERMS_PRIVACY}
|
|
147
150
|
</Link>
|
|
148
151
|
.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
// XLE (canonical structure, validated with `bunx astryx layout check`):
|
|
3
|
-
// L > LC[p=0] > Ctr > S.transparent[p=6 mw=1100] > V[g=5] > (V[g=6] > (V[g=2] > (Hd"Payment Request"[level=1 t=display-2] + Tx"Review your order"[t=body]) + D) + H[g=8] > (SI > V[g=8] > (V[g=1] > (H[j=between] > (Hd"Sign in to check out"[level=2] + B"Sign in") + Tx"Sign in to track your order"[t=body]) + V[g=3] > (Hd"Contact information"[level=2] + TI"Email" + CB"Email offers") + V[g=3] > (Hd"Shipping information"[level=2] + G[c=2 g=3] > (TI"First Name" + TI"Last Name") + TI"Address" + G[c=2 g=3] > (TI"City" + TI"ZIP Code") + SE"State" + TI"Phone Number" + CB"Save information") + V[g=3] > (V[g=1] > (Hd"Delivery"[level=2] + Tx"Processing time"[t=body]) + RL"Delivery method" > RLI*2) + V[g=3] > (V[g=1] > (Hd"Payment method"[level=2] + Tx"Encrypted"[t=body]) + G[c=2 g=3] > (B"PayPal" + B"Google Pay") + D"Or pay with card" + TI"Card Number" + G[c=3 g=3] > (SE"Expiry Month" + SE"Expiry Year" + TI"CVC") + TI"Name on Card" + CB"Billing address") + V[g=3] > (Hd"Promo code"[level=2] + H[g=2] > (TI"Promo code" + B"Apply")) + V[g=3] > (Hd"Gift options"[level=2] + CB"Gift message" + TA"Gift message") + V[g=4] > (H[g=5] > (H[g=1] > (Ic + Tx))*3 + V[g=2] > (B"Place order"[primary] + B"Continue shopping") + D + H[g=4] > (Lk"Refund policy" + Lk"Privacy policy" + Lk"Terms" + Lk"Cancellations"))) + SI > C[p=4] > Col"Order Summary" > V[g=4] > (V[g=3] >
|
|
3
|
+
// L > LC[p=0] > Ctr > S.transparent[p=6 mw=1100] > V[g=5] > (V[g=6] > (V[g=2] > (Hd"Payment Request"[level=1 t=display-2] + Tx"Review your order"[t=body]) + D) + H[g=8] > (SI > V[g=8] > (V[g=1] > (H[j=between] > (Hd"Sign in to check out"[level=2] + B"Sign in") + Tx"Sign in to track your order"[t=body]) + V[g=3] > (Hd"Contact information"[level=2] + TI"Email" + CB"Email offers") + V[g=3] > (Hd"Shipping information"[level=2] + G[c=2 g=3] > (TI"First Name" + TI"Last Name") + TI"Address" + G[c=2 g=3] > (TI"City" + TI"ZIP Code") + SE"State" + TI"Phone Number" + CB"Save information") + V[g=3] > (V[g=1] > (Hd"Delivery"[level=2] + Tx"Processing time"[t=body]) + RL"Delivery method" > RLI*2) + V[g=3] > (V[g=1] > (Hd"Payment method"[level=2] + Tx"Encrypted"[t=body]) + G[c=2 g=3] > (B"PayPal" + B"Google Pay") + D"Or pay with card" + TI"Card Number" + G[c=3 g=3] > (SE"Expiry Month" + SE"Expiry Year" + TI"CVC") + TI"Name on Card" + CB"Billing address") + V[g=3] > (Hd"Promo code"[level=2] + H[g=2] > (TI"Promo code" + B"Apply")) + V[g=3] > (Hd"Gift options"[level=2] + CB"Gift message" + TA"Gift message") + V[g=4] > (H[g=5] > (H[g=1] > (Ic + Tx))*3 + V[g=2] > (B"Place order"[primary] + B"Continue shopping") + D + H[g=4] > (Lk"Refund policy" + Lk"Privacy policy" + Lk"Terms" + Lk"Cancellations"))) + SI > C[p=4] > Col"Order Summary" > V[g=4] > (V[g=3] > H[g=3] > (Tmb + V[g=1] > (Tx"Obsidian Ritual Chalice" + Tx"Hand-carved"[t=supporting])))*3 + V[g=3] > (Hd"Order Total"[level=3] + H[j=between] > (Tx"Subtotal" + Tx"$91.20") + D + H[j=between] > (Tx"Total"[t=large] + Tx"$91.20"[t=large]) + Bn"Free shipping over $300"))))
|
|
4
4
|
|
|
5
5
|
import {useState, type CSSProperties} from 'react';
|
|
6
6
|
import {
|
|
@@ -202,53 +202,47 @@ function OrderLineItem({
|
|
|
202
202
|
onChangeQty: (v: number) => void;
|
|
203
203
|
}) {
|
|
204
204
|
return (
|
|
205
|
-
<
|
|
206
|
-
<
|
|
207
|
-
|
|
208
|
-
<
|
|
209
|
-
<
|
|
210
|
-
<HStack gap={2}
|
|
211
|
-
<
|
|
212
|
-
|
|
213
|
-
{item.name}
|
|
214
|
-
</Text>
|
|
215
|
-
{item.limited && (
|
|
216
|
-
<HStack gap={1} vAlign="center">
|
|
217
|
-
<StatusDot variant="warning" label="Limited edition" />
|
|
218
|
-
<Text type="supporting" color="secondary">
|
|
219
|
-
Limited edition
|
|
220
|
-
</Text>
|
|
221
|
-
</HStack>
|
|
222
|
-
)}
|
|
223
|
-
</HStack>
|
|
224
|
-
<Text type="body" hasTabularNumbers>
|
|
225
|
-
{fmt(item.price)}
|
|
205
|
+
<HStack gap={3} vAlign="start">
|
|
206
|
+
<OrderItemPhoto item={item} />
|
|
207
|
+
<StackItem size="fill">
|
|
208
|
+
<VStack gap={1}>
|
|
209
|
+
<HStack gap={2} hAlign="between" vAlign="start">
|
|
210
|
+
<HStack gap={2} vAlign="center" wrap="wrap">
|
|
211
|
+
<Text type="body" weight="semibold">
|
|
212
|
+
{item.name}
|
|
226
213
|
</Text>
|
|
214
|
+
{item.limited && (
|
|
215
|
+
<HStack gap={1} vAlign="center">
|
|
216
|
+
<StatusDot variant="warning" label="Limited edition" />
|
|
217
|
+
<Text type="supporting" color="secondary">
|
|
218
|
+
Limited edition
|
|
219
|
+
</Text>
|
|
220
|
+
</HStack>
|
|
221
|
+
)}
|
|
227
222
|
</HStack>
|
|
228
|
-
<Text type="
|
|
229
|
-
{item.
|
|
223
|
+
<Text type="body" hasTabularNumbers>
|
|
224
|
+
{fmt(item.price)}
|
|
230
225
|
</Text>
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
</
|
|
248
|
-
</
|
|
249
|
-
</
|
|
250
|
-
|
|
251
|
-
</VStack>
|
|
226
|
+
</HStack>
|
|
227
|
+
<Text type="supporting" color="secondary">
|
|
228
|
+
{item.variant}
|
|
229
|
+
</Text>
|
|
230
|
+
<HStack gap={2} vAlign="end" wrap="wrap">
|
|
231
|
+
<NumberInput
|
|
232
|
+
label="Qty"
|
|
233
|
+
value={qty}
|
|
234
|
+
onChange={onChangeQty}
|
|
235
|
+
min={1}
|
|
236
|
+
max={10}
|
|
237
|
+
isIntegerOnly
|
|
238
|
+
/>
|
|
239
|
+
{/* Editing the order in place — an action, never a destination. */}
|
|
240
|
+
<Button label="Remove" variant="ghost" onClick={() => {}} />
|
|
241
|
+
<Button label="Save" variant="ghost" onClick={() => {}} />
|
|
242
|
+
</HStack>
|
|
243
|
+
</VStack>
|
|
244
|
+
</StackItem>
|
|
245
|
+
</HStack>
|
|
252
246
|
);
|
|
253
247
|
}
|
|
254
248
|
|
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
} from '@astryxdesign/core/SegmentedControl';
|
|
17
17
|
import {Token} from '@astryxdesign/core/Token';
|
|
18
18
|
import {Banner} from '@astryxdesign/core/Banner';
|
|
19
|
-
import {Divider} from '@astryxdesign/core/Divider';
|
|
20
19
|
import {Collapsible, CollapsibleGroup} from '@astryxdesign/core/Collapsible';
|
|
21
20
|
import {AspectRatio} from '@astryxdesign/core/AspectRatio';
|
|
22
21
|
import {SelectableCard} from '@astryxdesign/core/SelectableCard';
|
|
@@ -282,8 +281,10 @@ function ProductInfo() {
|
|
|
282
281
|
}
|
|
283
282
|
/>
|
|
284
283
|
</VStack>
|
|
285
|
-
<CollapsibleGroup
|
|
286
|
-
|
|
284
|
+
<CollapsibleGroup
|
|
285
|
+
type="multiple"
|
|
286
|
+
defaultValue={['composition']}
|
|
287
|
+
hasDividers>
|
|
287
288
|
<Collapsible
|
|
288
289
|
value="composition"
|
|
289
290
|
trigger={
|
|
@@ -293,7 +294,6 @@ function ProductInfo() {
|
|
|
293
294
|
}>
|
|
294
295
|
<Text type="body">{PRODUCT.composition}</Text>
|
|
295
296
|
</Collapsible>
|
|
296
|
-
<Divider />
|
|
297
297
|
<Collapsible
|
|
298
298
|
value="delivery"
|
|
299
299
|
defaultIsOpen={false}
|
|
@@ -304,7 +304,6 @@ function ProductInfo() {
|
|
|
304
304
|
}>
|
|
305
305
|
<Text type="body">{PRODUCT.deliveryReturns}</Text>
|
|
306
306
|
</Collapsible>
|
|
307
|
-
<Divider />
|
|
308
307
|
<Collapsible
|
|
309
308
|
value="dimensions"
|
|
310
309
|
defaultIsOpen={false}
|
|
@@ -317,7 +316,6 @@ function ProductInfo() {
|
|
|
317
316
|
{PRODUCT.dimensions}
|
|
318
317
|
</Text>
|
|
319
318
|
</Collapsible>
|
|
320
|
-
<Divider />
|
|
321
319
|
</CollapsibleGroup>
|
|
322
320
|
</VStack>
|
|
323
321
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
// XLE (canonical structure, validated with `bunx astryx layout check`):
|
|
3
|
-
// A[cp=0 @sideNav=(SN > (SNS"Getting started" > (SNI"Introduction"! + SNI"Install")) + (SNS"The brand" > (SNI"Palette" + SNI"Type and shape")) + (SNS"In practice" > (SNI"Components" + SNI"Templates")) + (SNS"Reference" > (SNI"Tokens" + SNI"Migrating")))] > L[h=auto] > (LC[p=8 !scroll] > V[g=8] > (V[g=2] > (H[g=2 a=center] > MNT + Tx[t=supporting]) + Hd"Introduction"[level=1 t=display-2] + Tx"v0.
|
|
3
|
+
// A[cp=0 @sideNav=(SN > (SNS"Getting started" > (SNI"Introduction"! + SNI"Install")) + (SNS"The brand" > (SNI"Palette" + SNI"Type and shape")) + (SNS"In practice" > (SNI"Components" + SNI"Templates")) + (SNS"Reference" > (SNI"Tokens" + SNI"Migrating")))] > L[h=auto] > (LC[p=8 !scroll] > V[g=8] > (V[g=2] > (H[g=2 a=center] > MNT + Tx[t=supporting]) + Hd"Introduction"[level=1 t=display-2] + Tx"v0.4.0"[t=supporting]) + Tx"Intro"[t=large] + AR + (V[g=8] > (V[g=3] > Hd"What it is"[level=2] + Tx"Body"[t=body] + UL + Cd)*2) + D + (H[j=between] > B.secondary"Previous" + B.secondary"Next")) + (LP[!scroll] > Outline)
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Product Tour — a chaptered walkthrough of this theme.
|
|
@@ -909,7 +909,7 @@ export default function ProductTour() {
|
|
|
909
909
|
railHref={SELF_HASH}
|
|
910
910
|
railIcon={<Icon icon={Sparkles} size="sm" />}
|
|
911
911
|
eyebrow="Documentation"
|
|
912
|
-
badge={() => 'astryx-dracula v0.
|
|
912
|
+
badge={() => 'astryx-dracula v0.4.0'}
|
|
913
913
|
art={chapterId => <ChapterArt chapterId={chapterId} />}
|
|
914
914
|
/>
|
|
915
915
|
);
|