astryx-dracula 0.5.1 → 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/icons.mjs +4 -0
- package/icons.tsx +8 -0
- package/package.json +22 -17
- package/shared/chaptered-doc.tsx +1 -2
- package/shared/chart-hues.ts +21 -6
- package/shared/chart-legend.tsx +2 -2
- package/shared/data-bar.tsx +2 -2
- package/shared/settings-data.ts +0 -6
- package/shared/settings-rows.tsx +1 -23
- package/templates/ai-chat-landing.template.mjs +1 -0
- package/templates/ai-chat-landing.tsx +24 -2
- package/templates/ai-chat.template.mjs +1 -0
- package/templates/ai-chat.tsx +4 -2
- package/templates/blank.template.mjs +1 -0
- package/templates/blank.tsx +4 -2
- package/templates/centered-hero.template.mjs +1 -0
- package/templates/centered-hero.tsx +5 -3
- package/templates/classic-gallery.template.mjs +1 -0
- package/templates/classic-gallery.tsx +4 -2
- package/templates/contact-form.template.mjs +1 -0
- package/templates/contact-form.tsx +4 -2
- package/templates/dashboard-portfolio.template.mjs +1 -0
- package/templates/dashboard-portfolio.tsx +4 -2
- package/templates/dashboard.template.mjs +1 -0
- package/templates/dashboard.tsx +4 -2
- package/templates/detail-page.template.mjs +1 -0
- package/templates/detail-page.tsx +16 -16
- package/templates/documentation-design.template.mjs +1 -0
- package/templates/documentation-design.tsx +5 -3
- package/templates/documentation-technical.template.mjs +1 -0
- package/templates/documentation-technical.tsx +4 -2
- package/templates/documentation.template.mjs +1 -0
- package/templates/documentation.tsx +4 -2
- package/templates/editor.template.mjs +1 -0
- package/templates/editor.tsx +4 -2
- package/templates/file-explorer.template.mjs +1 -0
- package/templates/file-explorer.tsx +4 -2
- package/templates/form-two-column.template.mjs +1 -0
- package/templates/form-two-column.tsx +8 -2
- package/templates/gallery-hero.template.mjs +1 -0
- package/templates/gallery-hero.tsx +4 -2
- package/templates/ide.template.mjs +1 -0
- package/templates/ide.tsx +11 -6
- package/templates/incident-console.template.mjs +1 -0
- package/templates/incident-console.tsx +122 -80
- package/templates/kanban-board.template.mjs +1 -0
- package/templates/kanban-board.tsx +6 -4
- package/templates/library.template.mjs +1 -0
- package/templates/library.tsx +4 -2
- package/templates/login-card.template.mjs +1 -0
- package/templates/login-card.tsx +4 -2
- package/templates/login-split.template.mjs +1 -0
- package/templates/login-split.tsx +5 -2
- package/templates/login-sso.template.mjs +1 -0
- package/templates/login-sso.tsx +4 -2
- package/templates/login.template.mjs +1 -0
- package/templates/login.tsx +4 -2
- package/templates/messaging-shell.template.mjs +1 -0
- package/templates/messaging-shell.tsx +6 -2
- package/templates/mixed-gallery.template.mjs +1 -0
- package/templates/mixed-gallery.tsx +4 -2
- package/templates/payment-form.template.mjs +1 -0
- package/templates/payment-form.tsx +5 -3
- package/templates/product-detail.template.mjs +1 -0
- package/templates/product-detail.tsx +9 -2
- package/templates/product-gallery.template.mjs +1 -0
- package/templates/product-gallery.tsx +4 -2
- package/templates/product-tour.template.mjs +1 -0
- package/templates/product-tour.tsx +13 -10
- package/templates/settings-dialog.template.mjs +1 -0
- package/templates/settings-dialog.tsx +5 -3
- package/templates/settings-sidebar.template.mjs +1 -0
- package/templates/settings-sidebar.tsx +6 -4
- package/templates/settings.template.mjs +1 -0
- package/templates/settings.tsx +6 -10
- package/templates/shell-nav.template.mjs +1 -0
- package/templates/shell-nav.tsx +24 -26
- package/templates/shell-side-nav.template.mjs +1 -0
- package/templates/shell-side-nav.tsx +23 -18
- package/templates/shell-top-nav.template.mjs +1 -0
- package/templates/shell-top-nav.tsx +4 -2
- package/templates/side-gallery.template.mjs +1 -0
- package/templates/side-gallery.tsx +4 -2
- package/templates/table-grouped.template.mjs +1 -0
- package/templates/table-grouped.tsx +5 -3
- package/templates/table-page-chart.template.mjs +1 -0
- package/templates/table-page-chart.tsx +4 -2
- package/templates/table-page-heatmap-status.template.mjs +1 -0
- package/templates/table-page-heatmap-status.tsx +4 -2
- package/templates/table-page-shoe-store-heatmap.template.mjs +1 -0
- package/templates/table-page-shoe-store-heatmap.tsx +4 -2
- package/templates/table-page.template.mjs +1 -0
- package/templates/table-page.tsx +4 -2
- package/templates/table.template.mjs +1 -0
- package/templates/table.tsx +4 -2
- package/templates/tech-report.template.mjs +1 -0
- package/templates/tech-report.tsx +10 -8
- package/templates/theme-showcase.template.mjs +1 -0
- package/templates/theme-showcase.tsx +23 -17
- package/theme.css +35 -77
- package/theme.css.d.ts +9 -0
- package/tokens.css +38 -42
|
@@ -1,11 +1,13 @@
|
|
|
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
|
+
// A[cp=0 h=auto @sideNav=(SN[collapsible header=SideNavHeading] > (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"Documentation"[t=supporting]) + Hd"Introduction"[level=1 t=display-2] + Tx"astryx-dracula v0.6.2"[t=supporting] + SE{Selector}"On this page") + Tx"astryx-dracula is a pure Dracula brand theme"[t=large] + AR[ratio=16/9] + (V[g=8] > (V[g=3] > Hd"What it is"[level=2] + Tx"Four decisions shape everything else"[t=body] + (UL > LI*4)))*2) + D + (H[g=3 j=between a=center] > SI[fill] + B.secondary"Install")) + (LP[!scroll] > Outline)
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Product Tour — a chaptered walkthrough of this theme.
|
|
7
9
|
*
|
|
8
|
-
* Frame-first layout (see `bunx
|
|
10
|
+
* Frame-first layout (see `bunx @astryxdesign/cli docs layout`):
|
|
9
11
|
*
|
|
10
12
|
* Frame: chapter rail 264 (SideNav) | chapter content (fill) | outline 240
|
|
11
13
|
*
|
|
@@ -251,9 +253,10 @@ import {astryxDraculaTheme} from 'astryx-dracula';
|
|
|
251
253
|
code: {
|
|
252
254
|
language: "bash",
|
|
253
255
|
title: "shell",
|
|
254
|
-
source: `# any of the 45 page ids
|
|
255
|
-
|
|
256
|
-
bunx
|
|
256
|
+
source: `# any of the 45 page ids — the path argument is required; without it the
|
|
257
|
+
# CLI prints the template source and writes nothing
|
|
258
|
+
bunx @astryxdesign/cli template dashboard --package astryx-dracula ./src/pages/dashboard.tsx
|
|
259
|
+
bunx @astryxdesign/cli template product-tour --package astryx-dracula ./src/pages/product-tour.tsx`,
|
|
257
260
|
},
|
|
258
261
|
},
|
|
259
262
|
{
|
|
@@ -264,12 +267,12 @@ bunx astryx template product-tour --package astryx-dracula`,
|
|
|
264
267
|
{
|
|
265
268
|
key: "xle-headers",
|
|
266
269
|
heading: "Read the header first",
|
|
267
|
-
body: "Every template leads with a one-line structural expression describing the frame it renders
|
|
270
|
+
body: "Every template leads with a one-line structural expression describing the frame it renders. Reading that line costs a fraction of reading the file, which makes adapting a page much cheaper than rebuilding it. The CLI no longer ships a validator for it — `astryx layout` was removed in 0.7.0 — so it is a reading aid and a human drift check: update it with the file, never alone.",
|
|
268
271
|
code: {
|
|
269
272
|
language: "bash",
|
|
270
273
|
title: "shell",
|
|
271
|
-
source: `#
|
|
272
|
-
|
|
274
|
+
source: `# read the structure comment at the top of the template
|
|
275
|
+
head -4 src/pages/dashboard.tsx`,
|
|
273
276
|
},
|
|
274
277
|
},
|
|
275
278
|
],
|
|
@@ -852,7 +855,7 @@ export default function ProductTour() {
|
|
|
852
855
|
railHref={SELF_HASH}
|
|
853
856
|
railIcon={<Icon icon={Sparkles} size="sm" />}
|
|
854
857
|
eyebrow="Documentation"
|
|
855
|
-
badge={() => "astryx-dracula v0.
|
|
858
|
+
badge={() => "astryx-dracula v0.6.2"}
|
|
856
859
|
art={(chapterId) => <ChapterArt chapterId={chapterId} />}
|
|
857
860
|
/>
|
|
858
861
|
);
|
|
@@ -1,6 +1,8 @@
|
|
|
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=auto] > LC[p=0] > Ctr[h=80vh] > B.primary"Open settings"[opens=#settings] ;; Dlg#settings > L[h=fill] > (LP[w=280 divider p=3] > V[g=4] > Tx"Account settings"[t=label] + (UL[density=spacious edge=flush] > LI"Personal information" + LI"Login & security"! + LI*6)) + (LC[p=6] > V[g=6] > DH"Login & security" + SE{Selector}"Settings section" + (V[g=0 mw=680] > (TL[divider] > Tab"Login"! + Tab"Shared access") + (V[g=8] > (V[g=2] > Hd"Login"[level=3] + (H[j=between a=start] > (V[g=1] > Tx"Password"[weight=semibold] + Tx"Not created"[t=body]) + B.secondary"Create")) + (V[g=2] > Hd"Social accounts"[level=3] + (H[j=between a=start] > (V[g=1] > Tx"Google"[weight=semibold] + Tx"Connected"[t=body]) + B.destructive"Disconnect")) + (V[g=2] > Hd"Device history"[level=3] + (H[g=3 a=start] > Ic + (SI[fill] > V[g=1] > (H[g=2 a=center wrap] > Tx"OS X 10.15.7 · Chrome"[weight=semibold] + SD.success) + Tx"March 30, 2026"[t=supporting]))*3) + (V[g=2] > Hd"Account"[level=3] + (H[j=between a=start] > (V[g=1] > Tx"Deactivate your account"[weight=semibold] + Tx"This action cannot be undone"[t=supporting]) + B.destructive"Deactivate")))))
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Settings Dialog — account sections inside one modal. Frame: the trigger page, then a Dialog that sizes to (Frame/responsive/container: see XLE header above.)
|
|
@@ -189,7 +191,7 @@ export default function SettingsDialog() {
|
|
|
189
191
|
<Text type="label" style={sideNavHeading}>
|
|
190
192
|
Account settings
|
|
191
193
|
</Text>
|
|
192
|
-
<List density="spacious">
|
|
194
|
+
<List density="spacious" edge="flush">
|
|
193
195
|
{NAV_ITEMS.map((item) => (
|
|
194
196
|
<ListItem
|
|
195
197
|
key={item.label}
|
|
@@ -1,6 +1,8 @@
|
|
|
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] > (LP[divider p=0] > V[g=4 paddingBlock=4 paddingInline=3] > Tx"Account settings"[t=label] + (UL[density=spacious edge=flush] > LI*8) + D + (UL[density=spacious edge=flush] > LI"Professional hosting tools")) + (LC[p=6] > V[g=0] > (Tbar[g=2] > B.ghost"Back to Account settings" + Hd"Personal information"[level=1]) + Hd"Personal information"[level=1] + (V[g=0] > (H[j=between a=start] > (V[g=1] > Tx"Legal name"[weight=semibold] + Tx"Vlad Dracul"[t=body]) + B.secondary"Edit")*7 + (H[j=between a=start] > (V[g=1] > Tx"Identity verification"[weight=semibold] + Tx"Verified"[t=body]))) + (C[p=4] > V[g=4] > (H[g=3 a=start] > Ctr[w=48 h=48] > Ic + (V[g=1] > Tx"Why isn't my info shown here?"[weight=semibold] + Tx[t=body]))*3)) ;; L[h=fill] > LC[p=0] > V[g=4 paddingBlock=4 paddingInline=3] > Tx"Account settings"[t=label] + (UL[density=spacious edge=flush] > LI*8) + D + (UL[density=spacious edge=flush] > LI"Professional hosting tools")
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Settings Panels — account sections with a nav panel and spaced rows. Frame: Layout nav panel (fill) | content column of section views. One (Frame/responsive/container: see XLE header above.)
|
|
@@ -131,7 +133,7 @@ export default function SettingsSidebar() {
|
|
|
131
133
|
<Text type="label" style={sideNavHeading}>
|
|
132
134
|
Account settings
|
|
133
135
|
</Text>
|
|
134
|
-
<List density="spacious">
|
|
136
|
+
<List density="spacious" edge="flush">
|
|
135
137
|
{NAV_ITEMS.map((item) => (
|
|
136
138
|
<ListItem
|
|
137
139
|
key={item.label}
|
|
@@ -146,7 +148,7 @@ export default function SettingsSidebar() {
|
|
|
146
148
|
))}
|
|
147
149
|
</List>
|
|
148
150
|
<Divider />
|
|
149
|
-
<List density="spacious">
|
|
151
|
+
<List density="spacious" edge="flush">
|
|
150
152
|
<ListItem label="Professional hosting tools" startContent={<Icon icon={Wrench} />} />
|
|
151
153
|
</List>
|
|
152
154
|
</VStack>
|
package/templates/settings.tsx
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
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] > (LH[divider p=6] > H[a=center wrap] > (SI[fill] > Hd"Settings"[level=1 t=display-2]) + TY"Search coven settings…") + (LP[w=260 p=2] > UL[density=balanced edge=flush] > LI*6) + (LC[p=6] > V[g=4] > (V[a=center] > (TL > Tab"Profile"! + Tab"Account" + Tab"Members" + TabMenu"More")) + (G[c={min:280} g=8] > (V[g=1] > Hd"Basic information"[level=2] + Tx"View and update your crypt details"[t=body]) + (V[g=4] > TI"Username" + TI"First name" + TI"Last name" + TI"Email address" + (H > B.primary"Save"))) + D + (G[c={min:280} g=8] > (V[g=1] > Hd"Change password"[level=2] + Tx"Update your password"[t=body]) + (V[g=4] > TI"Verify current password" + TI"New password" + TI"Confirm password" + (H > B.primary"Save"))) + D + (G[c={min:280} g=8] > (V[g=1] > Hd"Advanced settings"[level=2] + Tx"Configure detailed coven preferences"[t=body]) + (V[g=4] > CB"Data Export Access" + CB"Allow Admin to Add Members" + CB"Enable Two-Factor Authentication" + (H > B.primary"Save"))))
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Settings — one scrolling page of account sections.
|
|
@@ -65,13 +67,7 @@ const settingsSearchSource: SearchSource<SearchableItem> = {
|
|
|
65
67
|
// the fields in the right column. Text and check fields share one row shape;
|
|
66
68
|
// the renderer switches on `kind`.
|
|
67
69
|
type SettingsTextKey =
|
|
68
|
-
| "
|
|
69
|
-
| "firstName"
|
|
70
|
-
| "lastName"
|
|
71
|
-
| "email"
|
|
72
|
-
| "currentPw"
|
|
73
|
-
| "newPw"
|
|
74
|
-
| "confirmPw";
|
|
70
|
+
"username" | "firstName" | "lastName" | "email" | "currentPw" | "newPw" | "confirmPw";
|
|
75
71
|
type SettingsCheckKey = "dataExport" | "adminMembers" | "twoFactor";
|
|
76
72
|
type SettingsField =
|
|
77
73
|
| {
|
|
@@ -283,7 +279,7 @@ export default function SettingsTemplate() {
|
|
|
283
279
|
start={
|
|
284
280
|
isNarrow ? undefined : (
|
|
285
281
|
<LayoutPanel hasDivider={false} width={260} padding={2}>
|
|
286
|
-
<List density="balanced">
|
|
282
|
+
<List density="balanced" edge="flush">
|
|
287
283
|
{NAV_ITEMS.map((item) => (
|
|
288
284
|
<ListItem
|
|
289
285
|
key={item}
|
package/templates/shell-nav.tsx
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
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
|
+
// A[cp=0 @topNav=(TN > (B.ghost"File" + B.ghost"Edit" + B.ghost"View" + B.ghost"Window" + B.ghost"Help") + B.secondary"Search files and commands") @sideNav=(SN > TrL[density=compact])] > L[h=fill] > (LH[divider p=6] > H[g=2 wrap] > Sk[w=132 h=36]*2) + (LC[p=6] > V[g=2] > (H[g=3 a=center] > Sk + Sk)*2 + Sk + (H[g=3 a=center] > Sk + Sk) + Sk)
|
|
4
6
|
// Note: skeleton placeholders carry no Hd by design (skill skeleton-shell
|
|
5
7
|
// exemption) — routed pages supply the h1.
|
|
6
8
|
|
|
@@ -162,34 +164,30 @@ export default function ShellNav() {
|
|
|
162
164
|
topNav={
|
|
163
165
|
<TopNav
|
|
164
166
|
label="Dracula Studio menu bar"
|
|
165
|
-
startContent={
|
|
166
|
-
|
|
167
|
-
{
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
>
|
|
174
|
-
{/* Keyed by the group's first label, not its position:
|
|
167
|
+
startContent={MENUS.map((menu) => (
|
|
168
|
+
<DropdownMenu
|
|
169
|
+
key={menu.label}
|
|
170
|
+
button={{ label: menu.label, variant: "ghost", size: "sm" }}
|
|
171
|
+
hasChevron={false}
|
|
172
|
+
menuWidth={MENU_WIDTH}
|
|
173
|
+
>
|
|
174
|
+
{/* Keyed by the group's first label, not its position:
|
|
175
175
|
an index key remounts every group when the menu
|
|
176
176
|
data shifts. `gi` only decides the divider. */}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
))}
|
|
187
|
-
</Fragment>
|
|
177
|
+
{menu.groups.map((group, gi) => (
|
|
178
|
+
<Fragment key={group[0][0]}>
|
|
179
|
+
{gi > 0 && <Divider />}
|
|
180
|
+
{group.map(([label, shortcut]) => (
|
|
181
|
+
<DropdownMenuItem
|
|
182
|
+
key={label}
|
|
183
|
+
label={label}
|
|
184
|
+
endContent={shortcut ? <Kbd keys={shortcut} /> : undefined}
|
|
185
|
+
/>
|
|
188
186
|
))}
|
|
189
|
-
</
|
|
187
|
+
</Fragment>
|
|
190
188
|
))}
|
|
191
|
-
|
|
192
|
-
}
|
|
189
|
+
</DropdownMenu>
|
|
190
|
+
))}
|
|
193
191
|
endContent={
|
|
194
192
|
// A real palette trigger, not a lookalike field: the previous
|
|
195
193
|
// TextInput swallowed keystrokes while a wrapper div opened the
|
|
@@ -1,6 +1,8 @@
|
|
|
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
|
+
// A[cp=0 @sideNav=(SN[collapsible header=SideNavHeading] > (SNS > SNI"New chat" + SNI"Search" + SNI"Library") + D + (SNS > SNI"Personal" > (SNI"Full-moon rite planning"! + SNI"Potion recipes for the week" + SNI"Grimoire recommendations")) + (SNS > SNI"Settings" + SNI"Sarah Chen"))] > L[h=fill] > (LC[p=6] > V[g=5] > (H > C.muted[p=0])*4) + (LF > TI"Message Night Owl…")
|
|
4
6
|
// Note: skeleton placeholders carry no Hd by design (skill skeleton-shell
|
|
5
7
|
// exemption) — routed pages supply the h1.
|
|
6
8
|
|
|
@@ -93,22 +95,25 @@ export default function ShellSideNav() {
|
|
|
93
95
|
icon={workspace.icon}
|
|
94
96
|
collapsible={{ defaultIsCollapsed: false }}
|
|
95
97
|
>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
98
|
+
{/* The nested rows are direct children, not wrapped in a
|
|
99
|
+
VStack: core 0.7.2 made nested SideNavItems span the
|
|
100
|
+
full width of the nav list with the indent inside the row,
|
|
101
|
+
and any non-SideNavItem content in between (a VStack is
|
|
102
|
+
exactly that) takes the children out of that flow. */}
|
|
103
|
+
{workspace.chats.map((chat) => (
|
|
104
|
+
// The hover-only MoreMenu was four dead actions unreachable
|
|
105
|
+
// by keyboard and touch, so it goes: the status dot stays
|
|
106
|
+
// always visible (its label doubles as the tooltip), and
|
|
107
|
+
// selecting a conversation switches selection.
|
|
108
|
+
<SideNavItem
|
|
109
|
+
key={chat.label}
|
|
110
|
+
label={chat.label}
|
|
111
|
+
href={SELF_HASH}
|
|
112
|
+
isSelected={chat.label === selectedChat}
|
|
113
|
+
onClick={() => setSelectedChat(chat.label)}
|
|
114
|
+
endContent={<StatusDot variant={chat.status} label={chat.statusLabel} />}
|
|
115
|
+
/>
|
|
116
|
+
))}
|
|
112
117
|
</SideNavItem>
|
|
113
118
|
))}
|
|
114
119
|
</SideNavSection>
|
|
@@ -1,6 +1,8 @@
|
|
|
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
|
+
// A.surface[cp=6 @topNav=(TN > (Hd{TopNavHeading}"Nocturne") + (TNI{TopNavMegaMenu}"Shop" > (TNI{TopNavMegaMenuItem}*4 + C{TopNavMegaMenuFeaturedCard}"The Midnight Edit") + TNI{TopNavMegaMenu}"Brands" > (TNI{TopNavMegaMenuItem}*4 + C{TopNavMegaMenuFeaturedCard}"Meet Studio Mara") + TNI"Sale" + TNI"Service") + (IB"Search products" + B.ghost"Sign in" + B.primary"Checkout"))] > Ctr[axis=horizontal] > S.transparent[mw=1100 w=100% p=0] > V[g=10] > C.muted[p=0 w=100% h=360] + (V[g=4] > C.muted[p=0 w=200 h=24] + (G[c={min:160} g=4] > (V[g=2] > C.muted[p=0 w=100% h=120] + C.muted[p=0 w=60% h=14])*4))*3
|
|
4
6
|
// Note: skeleton placeholders carry no Hd by design (skill skeleton-shell
|
|
5
7
|
// exemption) — routed pages supply the h1.
|
|
6
8
|
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
-
// XLE (canonical structure
|
|
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):
|
|
3
5
|
// AR*9 is the live count: SCENE_TILE_ALTS has 9 entries and a bare .map renders
|
|
4
6
|
// all 9, with no slice.
|
|
5
|
-
// L > LC[p=6] > G[c={min:280}
|
|
7
|
+
// L[h=fill mw=1400] > LC[p=6] > G[c={min:280} g=8 a=center] > (V[g=6 a=center] > (V[g=3] > Tx"AFTER DARK"[t=supporting] + Hd"Make every night"[level=1] + Tx"The smallest rituals"[t=body]) + B.primary"Explore the night" + (V[g=4] > D + (H[g=6] > (V[g=0] > Tx"12k+"[t=display-3] + Tx"Night shots"[t=supporting])*3))) + (G[c=3 g=3] > AR[ratio=1]*9)
|
|
6
8
|
|
|
7
9
|
import { AspectRatio } from "@astryxdesign/core/AspectRatio";
|
|
8
10
|
import { Button } from "@astryxdesign/core/Button";
|
|
@@ -1,6 +1,8 @@
|
|
|
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] > (LH[divider p=6] > V[g=4] > (H[g=3 a=center wrap] > (SI[fill] > Hd"Night-shift issues"[level=1 t=display-2]) + B.primary"Raise issue"[opens=#raise-issue]) + (H[g=2 a=center] > (SI[fill] > PS"Filter issues…") + (Po > (B.secondary"View options" + (V[g=4] > RL"Group by" > RLI*5))))) + (LC[p=0] > T[hover density=balanced dv=rows] > (TR > THC*7) + ((TR > TC[colSpan=7] > (H[g=2 a=center] > Ic + Tx"In Progress"[t=body] + Bd.neutral"3")) + (TR > TC*7))*4)) + (LP[divider p=4] > V[g=4] > (H[g=2 a=center] > (SI[fill] > Tx[t=supporting]) + B.ghost"Close panel") + (V[g=1] > Hd[level=2] + Tx[t=body]) + (ML > MLI*6) + (D + (V[g=2] > Tx"Labels"[t=label] + (H[g=2] > Tk*2)))) ;; Dlg#raise-issue > L[h=auto] > (DH"Raise issue" + (LC[p=4] > V[g=4] > TI"Title" + SE{Selector}"Status" + SE{Selector}"Priority" + TI"Project") + (LF[divider] > H[g=2 j=end] > B.secondary"Cancel" + B.primary"Raise issue"))
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Table Grouped — the night-shift issue tracker: a grouped, collapsible issue table with a PowerSearch bar and a resizable detail inspector. (Frame/responsive/container: see XLE header above.)
|
|
@@ -1049,7 +1051,7 @@ export default function TableGrouped() {
|
|
|
1049
1051
|
content={
|
|
1050
1052
|
<LayoutContent padding={4}>
|
|
1051
1053
|
<VStack gap={4}>
|
|
1052
|
-
<TextInput label="Title" placeholder="Issue title" value="" />
|
|
1054
|
+
<TextInput label="Title" placeholder="Issue title" value="" onChange={() => {}} />
|
|
1053
1055
|
<Selector
|
|
1054
1056
|
label="Status"
|
|
1055
1057
|
value="todo"
|
|
@@ -1,6 +1,8 @@
|
|
|
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] > (LH[divider p=6] > H[a=center g=2] > (SI[size=fill] > Hd"Matcha Bar"[level=1 t=display-2]) + IB"Filter"[variant=ghost] + IB"Export"[variant=ghost] + B.primary"New order") + (LC[p=3] > V[g=4] > (V[g=3] > RC + Tx"Daily revenue · Jan 1–15"[t=supporting] + (H[g=2 a=center] > Ic + Tx"Revenue"[t=supporting])) + (T[hover density=balanced dv=rows] > (TR > THC"Order" + THC"Product" + THC"Amount" + THC"Customer" + THC"Email" + THC"Status" + THC"Date") + (TR > TC"ORD-1001" + TC"Ceremonial Matcha Latte" + TC"$6" + TC"Sarah Chen" + TC"sarah.chen@acme.co" + (TC > Tk.green"Completed") + TC"2025-01-15")*30))
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Matcha Bar — order desk: a daily revenue line over the full order log. Frame: page header (title + icon actions) | content column (chart, t (Frame/responsive/container: see XLE header above.)
|
|
@@ -1,6 +1,8 @@
|
|
|
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] > (LH[divider p=6] > H[g=2 a=center] > (SI[size=fill] > Hd"Status"[level=1 t=display-2]) + IB"Filter"[variant=ghost] + IB"Export"[variant=ghost] + B.secondary"Refresh") + (LC[p=3] > V[g=4] > (V[g=3] > C[p=4] + (V[g=1] > (H[g=2 a=center] > (H[g=1 a=center] > Sw + Tx"0"[t=supporting])*4) + Tx"Incidents by day and hour · Jan 12–18"[t=supporting])) + (T[hover density=balanced dv=rows] > (TR > THC"Incident" + THC"Product" + THC"Description" + THC"Started" + THC"Duration" + THC"On-call" + THC"Status" + THC"Date") + (TR > TC"INC-4008" + TC"Business Suite" + TC"Notification delivery delays" + TC"09:15" + TC"ongoing" + TC"Carlos Mendez" + (TC > Tk.red"Ongoing") + TC"2025-01-15")*14))
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Status — the incident heatmap for the week plus the log behind it.
|
|
@@ -1,6 +1,8 @@
|
|
|
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] > (LH[divider p=6] > H[g=2 a=center] > (SI[size=fill] > Hd"Midnight Kicks"[level=1 t=display-2]) + IB"Filter"[variant=ghost] + IB"Export"[variant=ghost] + B.primary"New order") + (LC[p=3] > V[g=4] > (V[g=3] > RC + Tx"Daily revenue · Jan 1–15"[t=supporting] + (H[g=2 a=center] > Ic + Tx"Revenue"[t=supporting])) + (T[hover density=balanced dv=rows] > (TR > THC"Order" + THC"Product" + THC"Amount" + THC"Customer" + THC"Email" + THC"Status" + THC"Date") + (TR > TC"ORD-1001" + TC"Air Max 90" + TC"$130" + TC"Sarah Chen" + TC"sarah.chen@acme.co" + (TC > Tk.green"Completed") + TC"2025-01-12")*59))
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Midnight Kicks — sneaker order desk: a daily revenue line over the order log. Frame: page header (title + icon actions) | content column (c (Frame/responsive/container: see XLE header above.)
|
package/templates/table-page.tsx
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
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] > (LH[divider p=6] > H[g=2 a=center] > (SI[fill] > Hd"Familiars"[level=1 t=display-2]) + IB"Filter"[variant=ghost] + IB"Download"[variant=ghost] + B.primary"Add") + (LC[p=3] > V[g=4] > PS"Search familiars…" + (T[hover density=balanced dv=rows] > (TR > THC"Name" + THC"Biography" + THC"Age") + (TR > TC*3)*38))
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Familiars — the full roster of the crypt's companions, with a PowerSearch field filter bar above one dense table. (Frame/responsive/container: see XLE header above.)
|
package/templates/table.tsx
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
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=auto] > (LH[divider] > H[a=center j=between] > Hd"Artifacts"[level=1] + B.primary"Add artifact") + (LC > T[hover w=auto] > (TR > THC"Name" + THC"Status" + THC"Updated" + THC"Actions") + (TR > TC"Blood Vial" + (TC > H[g=1 a=center] > SD.success + Tx"Active") + TC"2025-01-15" + (TC > B.secondary"Edit"))*3)
|
|
4
6
|
|
|
5
7
|
import { Button } from "@astryxdesign/core/Button";
|
|
6
8
|
import { HStack, Layout, LayoutContent, LayoutHeader } from "@astryxdesign/core/Layout";
|
|
@@ -1,6 +1,8 @@
|
|
|
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
|
+
// A[cp=0 h=auto @sideNav=(SN > (SNS"Overview" > (SNI"Abstract"! + SNI"Model at a glance")) + (SNS"Architecture" > (SNI"Causal Encoder-Decoder" + SNI"Compressed Sparse Attention 2" + SNI"Single-Pass mHC" + SNI"Engram, DSpark, FP4")) + (SNS"Infrastructure" > (SNI"Training infrastructure" + SNI"Inference system" + SNI"SWA Bounded Replay")) + (SNS"Training and evaluation" > (SNI"Pre-training" + SNI"Post-training" + SNI"Conclusion")))] > L[h=auto mw=960] > (LC[p=8 !scroll] > V[g=8] > (V[g=2] > (H[g=2 a=center] > MNT + Tx"DeepSeek-V4.1-Flash technical report"[t=supporting]) + Hd"Abstract"[level=1 t=display-2] + Tx"Chapter 1 of 12"[t=supporting]) + Tx"Intro"[t=large] + AR[ratio=16/9] + (V[g=8] > (V[g=3] > Hd"The bottleneck"[level=2] + Tx"Body"[t=body] + UL + Cd)*3) + D + (H[g=3 j=between a=center] > SI[fill] + B.secondary"Model at a glance") + (Tx"Checkpoints and the full report…"[t=supporting] > Lk"huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash")) + (LP[!scroll] > Outline)
|
|
4
6
|
|
|
5
7
|
import { Icon } from "@astryxdesign/core/Icon";
|
|
6
8
|
import { Link } from "@astryxdesign/core/Link";
|
|
@@ -892,9 +894,9 @@ function IndexerScene({ alt }: { alt: string }) {
|
|
|
892
894
|
width="276"
|
|
893
895
|
height="13"
|
|
894
896
|
rx="2"
|
|
895
|
-
fill="var(--color-data-categorical-cyan)"
|
|
897
|
+
fill={"var(--color-data-categorical-cyan, #8BE9FD)"}
|
|
896
898
|
fillOpacity={0.12}
|
|
897
|
-
stroke="var(--color-data-categorical-cyan)"
|
|
899
|
+
stroke={"var(--color-data-categorical-cyan, #8BE9FD)"}
|
|
898
900
|
strokeOpacity={0.45}
|
|
899
901
|
/>
|
|
900
902
|
) : null,
|
|
@@ -911,7 +913,7 @@ function IndexerScene({ alt }: { alt: string }) {
|
|
|
911
913
|
rx="1"
|
|
912
914
|
fill={
|
|
913
915
|
row.picks.includes(cell)
|
|
914
|
-
? "var(--color-data-categorical-green)"
|
|
916
|
+
? "var(--color-data-categorical-green, #50FA7B)"
|
|
915
917
|
: "var(--dracula-comment)"
|
|
916
918
|
}
|
|
917
919
|
/>
|
|
@@ -935,7 +937,7 @@ function IndexerScene({ alt }: { alt: string }) {
|
|
|
935
937
|
width="8"
|
|
936
938
|
height="8"
|
|
937
939
|
rx="1"
|
|
938
|
-
fill="var(--color-data-categorical-cyan)"
|
|
940
|
+
fill={"var(--color-data-categorical-cyan, #8BE9FD)"}
|
|
939
941
|
/>
|
|
940
942
|
<text x="54" y="204">
|
|
941
943
|
block kept by its top score
|
|
@@ -946,7 +948,7 @@ function IndexerScene({ alt }: { alt: string }) {
|
|
|
946
948
|
width="8"
|
|
947
949
|
height="8"
|
|
948
950
|
rx="1"
|
|
949
|
-
fill="var(--color-data-categorical-green)"
|
|
951
|
+
fill={"var(--color-data-categorical-green, #50FA7B)"}
|
|
950
952
|
/>
|
|
951
953
|
<text x="244" y="204">
|
|
952
954
|
position in Top-512
|
|
@@ -1465,7 +1467,7 @@ export default function TechReport() {
|
|
|
1465
1467
|
railHref={SELF_HASH}
|
|
1466
1468
|
railIcon={<Icon icon={ScrollText} size="sm" />}
|
|
1467
1469
|
eyebrow="DeepSeek-V4.1-Flash technical report"
|
|
1468
|
-
badge={(
|
|
1470
|
+
badge={(_chapter, index, total) =>
|
|
1469
1471
|
`Chapter ${index + 1} of ${total} · DeepSeek-AI · research@deepseek.com`
|
|
1470
1472
|
}
|
|
1471
1473
|
art={(chapterId) => <ChapterArt chapterId={chapterId} />}
|