@astryxdesign/cli 0.6.4-canary.f0355e3 → 0.6.4
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/README.md +96 -99
- package/api/build/build.doc.mjs +1 -6
- package/api/build/build.test.mjs +0 -22
- package/api/build/kit/kit.mjs +5 -44
- package/api/component/_adapter.d.mts +0 -25
- package/api/component/_adapter.mjs +5 -59
- package/api/component/component.d.mts +3 -6
- package/api/component/component.doc.mjs +17 -37
- package/api/component/component.mjs +9 -249
- package/api/component/component.type.d.mts +0 -25
- package/api/component/component.type.mjs +0 -44
- package/api/discover/_adapter.d.mts +6 -114
- package/api/discover/_adapter.mjs +17 -372
- package/api/discover/detail/detail.d.mts +6 -18
- package/api/discover/detail/detail.mjs +13 -67
- package/api/discover/detail/detail.test.mjs +0 -85
- package/api/discover/discover.d.mts +9 -3
- package/api/discover/discover.doc.mjs +18 -61
- package/api/discover/discover.mjs +36 -220
- package/api/discover/discover.test.mjs +2 -11
- package/api/discover/discover.type.d.mts +8 -147
- package/api/discover/discover.type.mjs +12 -102
- package/api/discover/list/list.d.mts +6 -20
- package/api/discover/list/list.mjs +12 -45
- package/api/discover/list/list.test.mjs +0 -46
- package/api/discover/search/search.d.mts +16 -18
- package/api/discover/search/search.mjs +56 -102
- package/api/discover/search/search.test.mjs +10 -144
- package/api/docs/_adapter.d.mts +3 -8
- package/api/docs/_adapter.mjs +6 -14
- package/api/docs/docOverlays.test.mjs +1 -27
- package/api/docs/docs.doc.mjs +2 -2
- package/api/docs/docs.test.mjs +243 -0
- package/api/docs/integration-tree.test.mjs +555 -0
- package/api/docs/integrationDocs.test.mjs +314 -0
- package/api/doctor/doctor.d.mts +3 -8
- package/api/doctor/doctor.doc.mjs +8 -17
- package/api/doctor/doctor.mjs +9 -90
- package/api/doctor/doctor.test.mjs +10 -122
- package/api/doctor/doctor.type.d.mts +1 -1
- package/api/doctor/doctor.type.mjs +1 -1
- package/api/gap-report/gap-report.doc.mjs +10 -19
- package/api/hook/hook.doc.mjs +3 -6
- package/api/index.d.mts +2 -1
- package/api/index.mjs +5 -5
- package/api/init/init.doc.mjs +12 -17
- package/api/integration/add-helpers.d.mts +2 -5
- package/api/integration/add-helpers.mjs +9 -36
- package/api/integration/add-theme.mjs +1 -22
- package/api/integration/add-theme.test.mjs +0 -34
- package/api/integration/authoring-checks.mjs +2 -2
- package/api/integration/integrationPackCheck.doc.mjs +3 -3
- package/api/integration/pack-check.mjs +9 -82
- package/api/integration/pack-check.test.mjs +0 -90
- package/api/integration/pack-check.type.mjs +1 -1
- package/api/json/assertResponse.doc.mjs +1 -1
- package/api/json/index.ts +1 -0
- package/api/json/isError.doc.mjs +1 -1
- package/api/layout/_adapter.d.mts +34 -0
- package/api/layout/_adapter.mjs +148 -0
- package/api/layout/check/check.d.mts +16 -0
- package/api/layout/check/check.mjs +40 -0
- package/api/layout/expand/expand.d.mts +22 -0
- package/api/layout/expand/expand.mjs +155 -0
- package/api/layout/expand/expand.path-safety.test.mjs +53 -0
- package/api/layout/grammar/grammar.d.mts +13 -0
- package/api/layout/grammar/grammar.mjs +87 -0
- package/api/layout/layout.d.mts +6 -0
- package/api/layout/layout.mjs +17 -0
- package/api/layout/layout.test.mjs +297 -0
- package/api/layout/layout.type.d.mts +89 -0
- package/api/layout/layout.type.mjs +103 -0
- package/api/layout/layoutCheck.doc.d.mts +11 -0
- package/api/layout/layoutCheck.doc.mjs +85 -0
- package/api/layout/layoutExpand.doc.d.mts +11 -0
- package/api/layout/layoutExpand.doc.mjs +107 -0
- package/api/layout/layoutGrammar.doc.d.mts +11 -0
- package/api/layout/layoutGrammar.doc.mjs +57 -0
- package/api/search/search.d.mts +1 -27
- package/api/search/search.doc.mjs +2 -2
- package/api/search/search.mjs +16 -228
- package/api/search/search.test.mjs +512 -0
- package/api/swizzle/swizzle.doc.mjs +5 -7
- package/api/template/copy/copy.mjs +1 -1
- package/api/template/copy/copy.test.mjs +0 -9
- package/api/template/template-integration.test.mjs +65 -1
- package/api/template/template.doc.mjs +1 -2
- package/api/template/template.mjs +1 -1
- package/api/theme/add/add.mjs +25 -17
- package/api/theme/add/add.staging.test.mjs +23 -40
- package/api/theme/build/build.family.test.mjs +12 -7
- package/api/theme/build/build.mjs +18 -8
- package/api/theme/generateTonalPalette.doc.mjs +2 -1
- package/api/theme/listThemes.doc.mjs +1 -1
- package/api/theme/themeAdd.doc.mjs +10 -9
- package/api/theme/themeBuild.doc.mjs +13 -13
- package/api/theme/themeList.doc.mjs +1 -1
- package/api/theme/themeListAvailable.doc.mjs +1 -2
- package/api/theme/themePaletteGenerate.doc.mjs +8 -15
- package/api/theme/themeTargets.doc.mjs +2 -3
- package/api/theme/themeTemplate.doc.mjs +1 -2
- package/api/upgrade/run/run.mjs +4 -6
- package/api/upgrade/upgrade.doc.mjs +22 -24
- package/api/upgrade/upgrade.type.mjs +2 -2
- package/assets/codemods/__tests__/runner.test.mjs +1 -3
- package/assets/codemods/integration-runner.mjs +3 -3
- package/assets/codemods/runner.mjs +4 -5
- package/assets/docs/README.md +2 -4
- package/assets/docs/browser-support.doc.mjs +11 -11
- package/assets/docs/color.doc.mjs +2 -8
- package/assets/docs/elevation.doc.mjs +4 -6
- package/assets/docs/getting-started.doc.mjs +16 -5
- package/assets/docs/icons.doc.mjs +21 -2
- package/assets/docs/illustrations.doc.mjs +15 -7
- package/assets/docs/internationalization.doc.mjs +5 -7
- package/assets/docs/layout.doc.dense.mjs +82 -130
- package/assets/docs/layout.doc.mjs +77 -133
- package/assets/docs/migration.doc.mjs +21 -19
- package/assets/docs/motion.doc.mjs +3 -16
- package/assets/docs/principles.doc.dense.mjs +5 -5
- package/assets/docs/principles.doc.mjs +0 -8
- package/assets/docs/principles.doc.zh.mjs +6 -6
- package/assets/docs/shape.doc.mjs +3 -8
- package/assets/docs/spacing.doc.mjs +2 -7
- package/assets/docs/styling-libraries.doc.mjs +2 -6
- package/assets/docs/styling.doc.mjs +23 -19
- package/assets/docs/theme.doc.dense.mjs +18 -58
- package/assets/docs/theme.doc.mjs +46 -56
- package/assets/docs/theme.doc.zh.mjs +8 -9
- package/assets/docs/tokens.doc.dense.mjs +2 -2
- package/assets/docs/tokens.doc.mjs +8 -389
- package/assets/docs/tokens.doc.zh.mjs +2 -2
- package/assets/docs/tree/integrations.doc.mjs +451 -25
- package/assets/docs/tree/integrations.test.mjs +62 -0
- package/assets/docs/tree/writing-docs.doc.mjs +286 -0
- package/assets/docs/typography.doc.mjs +4 -24
- package/assets/docs/working-with-ai.doc.mjs +22 -30
- package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
- package/authoring/config/config.doc.mjs +2 -10
- package/authoring/config/parse.d.mts +0 -2
- package/authoring/config/parse.mjs +0 -19
- package/authoring/config/parse.test.mjs +0 -8
- package/authoring/config/type.ts +2 -13
- package/authoring/doctypes/_schema.d.mts +2 -3
- package/authoring/doctypes/_schema.mjs +0 -6
- package/authoring/doctypes/base/graph-fields.doc.mjs +3 -3
- package/authoring/doctypes/base/type.ts +2 -4
- package/authoring/doctypes/command/command.doc.mjs +1 -1
- package/authoring/doctypes/command/type.ts +1 -1
- package/authoring/doctypes/component/component.doc.mjs +0 -6
- package/authoring/doctypes/component/type.ts +0 -8
- package/authoring/doctypes/reference/reference.doc.mjs +0 -7
- package/authoring/doctypes/reference/type.ts +0 -5
- package/authoring/doctypes/schema/schema.doc.mjs +2 -2
- package/authoring/doctypes/template/template.doc.mjs +1 -1
- package/authoring/doctypes/template/type.ts +2 -2
- package/authoring/index.d.mts +0 -1
- package/authoring/index.d.ts +0 -10
- package/authoring/index.mjs +0 -1
- package/authoring/integration/integration.doc.mjs +10 -12
- package/clients/cli/command-result-coverage.test.mjs +7 -7
- package/clients/cli/commands/component/index.mjs +55 -152
- package/clients/cli/commands/component-ownership.test.mjs +0 -89
- package/clients/cli/commands/component.doc.mjs +9 -27
- package/clients/cli/commands/debug-result-summary.test.mjs +2 -2
- package/clients/cli/commands/discover.doc.mjs +9 -53
- package/clients/cli/commands/discover.mjs +118 -393
- package/clients/cli/commands/docs.doc.mjs +1 -1
- package/clients/cli/commands/docs.mjs +17 -60
- package/clients/cli/commands/docs.test.mjs +294 -0
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +2 -3
- package/clients/cli/commands/doctor-integration.test.mjs +0 -53
- package/clients/cli/commands/doctor.doc.mjs +1 -3
- package/clients/cli/commands/doctor.mjs +5 -49
- package/clients/cli/commands/gap-report.doc.mjs +9 -10
- package/clients/cli/commands/init.doc.mjs +6 -9
- package/clients/cli/commands/integration-add.doc.mjs +9 -9
- package/clients/cli/commands/integration-authoring.test.mjs +10 -61
- package/clients/cli/commands/integration-pack.doc.mjs +9 -5
- package/clients/cli/commands/integration-real-world.test.mjs +1 -1
- package/clients/cli/commands/integration.doc.mjs +4 -4
- package/clients/cli/commands/integration.mjs +43 -74
- package/clients/cli/commands/layout-check.doc.mjs +65 -0
- package/clients/cli/commands/layout-expand.doc.mjs +83 -0
- package/clients/cli/commands/layout-grammar.doc.mjs +30 -0
- package/clients/cli/commands/layout.doc.mjs +34 -0
- package/clients/cli/commands/layout.error-codes.test.mjs +66 -0
- package/clients/cli/commands/layout.exit-parity.test.mjs +41 -0
- package/clients/cli/commands/layout.mjs +275 -0
- package/clients/cli/commands/layout.path-help.test.mjs +33 -0
- package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
- package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
- package/clients/cli/commands/manifest.doc.mjs +1 -1
- package/clients/cli/commands/search.doc.mjs +3 -10
- package/clients/cli/commands/search.mjs +2 -21
- package/clients/cli/commands/search.test.mjs +4 -21
- package/clients/cli/commands/swizzle.doc.mjs +1 -1
- package/clients/cli/commands/template.doc.mjs +1 -1
- package/clients/cli/commands/text-json-parity.test.mjs +16 -5
- package/clients/cli/commands/theme-add.doc.mjs +1 -1
- package/clients/cli/commands/theme-palette-generate.doc.mjs +2 -3
- package/clients/cli/commands/theme-palette.doc.mjs +2 -1
- package/clients/cli/commands/theme-targets.doc.mjs +2 -2
- package/clients/cli/commands/theme.doc.mjs +1 -2
- package/clients/cli/commands/upgrade.doc.mjs +3 -62
- package/clients/cli/index.mjs +10 -28
- package/clients/cli/lib/define-command.mjs +4 -28
- package/clients/cli/lib/define-command.test.mjs +0 -54
- package/clients/cli/lib/exit-codes.test.mjs +9 -18
- package/clients/cli/lib/json-shim.mjs +14 -24
- package/clients/cli/lib/json-shim.test.mjs +20 -6
- package/clients/cli/lib/manifest.mjs +13 -18
- package/clients/cli/lib/manifest.test.mjs +2 -5
- package/foundation/agent-docs/agent-docs.mjs +1 -1
- package/foundation/agent-docs/agent-docs.test.mjs +1159 -0
- package/foundation/discovery/authoring-self-docs.mjs +0 -1
- package/foundation/discovery/authoring-self-docs.test.mjs +2 -6
- package/foundation/discovery/cli-self-docs.mjs +2 -16
- package/foundation/discovery/cli-self-docs.test.mjs +0 -20
- package/foundation/discovery/docs-discovery.mjs +1 -5
- package/foundation/discovery/docs-discovery.test.mjs +0 -21
- package/foundation/discovery/docs-section-key.d.mts +1 -1
- package/foundation/discovery/docs-section-key.mjs +1 -1
- package/foundation/discovery/template-adapter.mjs +1 -1
- package/foundation/doc-compiler/doc-loads.test.mjs +14 -3
- package/foundation/doc-compiler/tree.d.mts +0 -4
- package/foundation/doc-compiler/tree.mjs +1 -6
- package/foundation/doc-compiler/tree.test.mjs +598 -0
- package/foundation/integrations/cli-requirement.d.mts +6 -26
- package/foundation/integrations/cli-requirement.mjs +11 -46
- package/foundation/integrations/cli-requirement.test.mjs +2 -7
- package/foundation/integrations/contribution-inventory.mjs +1 -1
- package/foundation/integrations/integrations.d.mts +1 -14
- package/foundation/integrations/integrations.mjs +1 -41
- package/foundation/integrations/integrations.test.mjs +0 -31
- package/foundation/response/error-codes.doc.mjs +8 -6
- package/foundation/response/error-codes.test.mjs +5 -30
- package/foundation/response/response-types.doc.d.mts +3 -4
- package/foundation/response/response-types.doc.mjs +27 -40
- package/foundation/response/response-types.doc.test.mjs +0 -23
- package/foundation/response/response.doc.mjs +10 -11
- package/foundation/xle/browser.d.mts +3 -3
- package/foundation/xle/browser.mjs +3 -3
- package/foundation/xle/expand.mjs +2 -2
- package/foundation/xle/parse.mjs +1 -1
- package/foundation/xle/print.mjs +2 -2
- package/foundation/xle/splice.mjs +1 -1
- package/package.json +9 -9
- package/api/discover/_adapter.test.mjs +0 -215
- package/api/discover/_catalog-view.d.mts +0 -115
- package/api/discover/_catalog-view.mjs +0 -203
- package/api/discover/_catalog-view.test.mjs +0 -128
- package/api/discover/detail/item/item.d.mts +0 -26
- package/api/discover/detail/item/item.mjs +0 -78
- package/api/discover/detail/item/item.test.mjs +0 -73
- package/api/integration/pack-check.lifecycle-output.test.mjs +0 -107
- package/api/theme/add/add.rollback.test.mjs +0 -158
- package/api/theme/build/build.rollback.test.mjs +0 -148
- package/api/upgrade/run/files-changed.test.mjs +0 -111
- package/assets/codemods/file-count.test.mjs +0 -163
- package/assets/docs/tree/add-a-component.doc.mjs +0 -75
- package/assets/docs/tree/add-a-theme.doc.mjs +0 -85
- package/assets/docs/tree/add-a-topic.doc.mjs +0 -144
- package/assets/docs/tree/agent-guidance.doc.mjs +0 -138
- package/assets/docs/tree/block-template.doc.mjs +0 -130
- package/assets/docs/tree/build-the-template.doc.mjs +0 -28
- package/assets/docs/tree/building-blocks.doc.mjs +0 -46
- package/assets/docs/tree/check-your-docs.doc.mjs +0 -137
- package/assets/docs/tree/checks.doc.mjs +0 -119
- package/assets/docs/tree/codemods.doc.mjs +0 -147
- package/assets/docs/tree/component-family.doc.mjs +0 -113
- package/assets/docs/tree/component-imports.doc.mjs +0 -69
- package/assets/docs/tree/component-lookups.doc.mjs +0 -149
- package/assets/docs/tree/components.doc.mjs +0 -23
- package/assets/docs/tree/configuration.doc.mjs +0 -23
- package/assets/docs/tree/debug-and-gap-reports.doc.mjs +0 -182
- package/assets/docs/tree/define-the-theme.doc.mjs +0 -118
- package/assets/docs/tree/describe-the-component.doc.mjs +0 -57
- package/assets/docs/tree/docs.doc.mjs +0 -21
- package/assets/docs/tree/document-the-template.doc.mjs +0 -28
- package/assets/docs/tree/document-the-theme.doc.mjs +0 -68
- package/assets/docs/tree/export-template-assets.doc.mjs +0 -147
- package/assets/docs/tree/extend-or-replace.doc.mjs +0 -103
- package/assets/docs/tree/fonts-and-assets.doc.mjs +0 -106
- package/assets/docs/tree/generate-a-palette.doc.mjs +0 -66
- package/assets/docs/tree/grade-template-with-agent.doc.mjs +0 -105
- package/assets/docs/tree/help.doc.mjs +0 -16
- package/assets/docs/tree/links.doc.mjs +0 -98
- package/assets/docs/tree/package-and-test.doc.mjs +0 -32
- package/assets/docs/tree/page-template.doc.mjs +0 -71
- package/assets/docs/tree/publishing.doc.mjs +0 -111
- package/assets/docs/tree/quick-start.doc.mjs +0 -272
- package/assets/docs/tree/replace-a-core-component.doc.mjs +0 -104
- package/assets/docs/tree/replace-a-core-template.doc.mjs +0 -172
- package/assets/docs/tree/sections-and-placement.doc.mjs +0 -108
- package/assets/docs/tree/see-it-in-an-app.doc.mjs +0 -59
- package/assets/docs/tree/ship.doc.mjs +0 -16
- package/assets/docs/tree/short-and-findable.doc.mjs +0 -108
- package/assets/docs/tree/single-component.doc.mjs +0 -165
- package/assets/docs/tree/start-a-template.doc.mjs +0 -143
- package/assets/docs/tree/subcomponent.doc.mjs +0 -115
- package/assets/docs/tree/template-assets.doc.mjs +0 -64
- package/assets/docs/tree/template-doc-overview.doc.mjs +0 -109
- package/assets/docs/tree/template-fonts.doc.mjs +0 -102
- package/assets/docs/tree/template-grading-rubric.doc.mjs +0 -452
- package/assets/docs/tree/template-icons.doc.mjs +0 -97
- package/assets/docs/tree/template-images-media.doc.mjs +0 -127
- package/assets/docs/tree/template-styles.doc.mjs +0 -93
- package/assets/docs/tree/templates.doc.mjs +0 -34
- package/assets/docs/tree/test-in-an-app.doc.mjs +0 -115
- package/assets/docs/tree/test-template-in-app.doc.mjs +0 -128
- package/assets/docs/tree/themes.doc.mjs +0 -39
- package/assets/docs/tree/troubleshooting.doc.mjs +0 -149
- package/assets/docs/tree/upgrading.doc.mjs +0 -103
- package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +0 -51
- package/assets/docs/tree/verify-packed-template.doc.mjs +0 -77
- package/assets/docs/tree/versioning.doc.mjs +0 -161
- package/assets/docs/tree/write-good-templates.doc.mjs +0 -64
- package/assets/docs/tree/write-the-template-file.doc.mjs +0 -154
- package/authoring/discover/discover.doc.d.mts +0 -13
- package/authoring/discover/discover.doc.mjs +0 -138
- package/authoring/discover/parse.d.mts +0 -24
- package/authoring/discover/parse.mjs +0 -128
- package/authoring/discover/parse.test.mjs +0 -124
- package/authoring/discover/type.ts +0 -87
- package/clients/cli/commands/component-batch.test.mjs +0 -341
- package/clients/cli/commands/discover.sources.test.mjs +0 -267
- package/clients/cli/commands/integration-verify.doc.mjs +0 -22
- package/clients/cli/lib/parse-error-format.test.mjs +0 -81
- package/foundation/response/batch.type.d.mts +0 -33
- package/foundation/response/batch.type.mjs +0 -34
|
@@ -34,40 +34,9 @@ export const docs = {
|
|
|
34
34
|
],
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
|
-
id: 'scaffold',
|
|
38
37
|
title: 'Scaffold',
|
|
39
38
|
content: [
|
|
40
|
-
{
|
|
41
|
-
type: 'prose',
|
|
42
|
-
text: 'Pick the shell, budget each region, and choose navigation, before any content exists. Shell and Navigation cover each step; these rules hold for both.',
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
type: 'list',
|
|
46
|
-
style: 'do',
|
|
47
|
-
items: [
|
|
48
|
-
'Decide the frame, region width budgets, and fill or capped before any content exists',
|
|
49
|
-
'State the reason for the navigation choice, or inherit the template pairing',
|
|
50
|
-
'Reserve raw px for structural widths; interior spacing uses tokens',
|
|
51
|
-
],
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
type: 'list',
|
|
55
|
-
style: 'dont',
|
|
56
|
-
items: [
|
|
57
|
-
'Build content-first and wrap each section in a Card, producing a padded scroll column',
|
|
58
|
-
'Stretch prose, forms, or lists across a wide region instead of capping with contentWidth',
|
|
59
|
-
'SideNav when the nav is really filters or controls, or must hold wide elements like breadcrumbs',
|
|
60
|
-
'TopNav when top-slot ownership is unclear, or the hierarchy is deep or still growing',
|
|
61
|
-
'Both bars when the ecosystem layer is thin, so the second only wastes space',
|
|
62
|
-
'Deviate from the template navigation pairing without a stated reason',
|
|
63
|
-
],
|
|
64
|
-
},
|
|
65
|
-
],
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
id: 'shell',
|
|
69
|
-
title: 'Shell',
|
|
70
|
-
content: [
|
|
39
|
+
{type: 'heading', level: 3, text: 'Shell'},
|
|
71
40
|
{
|
|
72
41
|
type: 'prose',
|
|
73
42
|
text: 'Pick the shell and budget its regions before any content exists. Structural widths are the one place raw px belongs; everything inside them uses the spacing scale.',
|
|
@@ -106,12 +75,8 @@ export const docs = {
|
|
|
106
75
|
type: 'prose',
|
|
107
76
|
text: 'Verify: every region has a width budget, a fill-or-capped decision, and a container policy written down before any content exists.',
|
|
108
77
|
},
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
{
|
|
112
|
-
id: 'navigation',
|
|
113
|
-
title: 'Navigation',
|
|
114
|
-
content: [
|
|
78
|
+
|
|
79
|
+
{type: 'heading', level: 3, text: 'Navigation'},
|
|
115
80
|
{
|
|
116
81
|
type: 'prose',
|
|
117
82
|
text: 'When the frame leaves navigation open, default to SideNav: it absorbs destinations you have not planned yet. App type and destination count are guiding indicators, not determining rules.',
|
|
@@ -143,47 +108,35 @@ export const docs = {
|
|
|
143
108
|
type: 'prose',
|
|
144
109
|
text: 'Verify: you can state the reason in one sentence, and the choice still holds if the nav doubles in size. `npx astryx build "<idea>"` names the template to start from; scaffold it and the pairing is already wired up.',
|
|
145
110
|
},
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
{
|
|
149
|
-
id: 'structure',
|
|
150
|
-
title: 'Structure',
|
|
151
|
-
content: [
|
|
152
|
-
{
|
|
153
|
-
type: 'prose',
|
|
154
|
-
text: 'Rank the content in each region, then pick the weakest container that groups it. Type hierarchy, Card or rows, Headers and footers, and Side panels cover each step; these rules hold for all of them.',
|
|
155
|
-
},
|
|
111
|
+
|
|
112
|
+
{type: 'heading', level: 3, text: 'Best practices'},
|
|
156
113
|
{
|
|
157
114
|
type: 'list',
|
|
158
115
|
style: 'do',
|
|
159
116
|
items: [
|
|
160
|
-
'
|
|
161
|
-
'
|
|
162
|
-
'
|
|
163
|
-
'Render collections as rows (Table or List), edge-to-edge with dividers',
|
|
164
|
-
'Open a fixed-width side panel on select; let it yield width at narrow sizes',
|
|
117
|
+
'Decide the frame, region width budgets, and fill or capped before any content exists',
|
|
118
|
+
'State the reason for the navigation choice, or inherit the template pairing',
|
|
119
|
+
'Reserve raw px for structural widths; interior spacing uses tokens',
|
|
165
120
|
],
|
|
166
121
|
},
|
|
167
122
|
{
|
|
168
123
|
type: 'list',
|
|
169
124
|
style: 'dont',
|
|
170
125
|
items: [
|
|
171
|
-
'
|
|
172
|
-
'
|
|
173
|
-
'
|
|
174
|
-
'
|
|
175
|
-
'
|
|
176
|
-
'
|
|
177
|
-
'Two competing primary actions in one region',
|
|
178
|
-
'Badge as decoration; use StatusDot or Token for status and metadata',
|
|
126
|
+
'Build content-first and wrap each section in a Card, producing a padded scroll column',
|
|
127
|
+
'Stretch prose, forms, or lists across a wide region instead of capping with contentWidth',
|
|
128
|
+
'SideNav when the nav is really filters or controls, or must hold wide elements like breadcrumbs',
|
|
129
|
+
'TopNav when top-slot ownership is unclear, or the hierarchy is deep or still growing',
|
|
130
|
+
'Both bars when the ecosystem layer is thin, so the second only wastes space',
|
|
131
|
+
'Deviate from the template navigation pairing without a stated reason',
|
|
179
132
|
],
|
|
180
133
|
},
|
|
181
134
|
],
|
|
182
135
|
},
|
|
183
136
|
{
|
|
184
|
-
|
|
185
|
-
title: 'Type hierarchy',
|
|
137
|
+
title: 'Structure',
|
|
186
138
|
content: [
|
|
139
|
+
{type: 'heading', level: 3, text: 'Type hierarchy'},
|
|
187
140
|
{
|
|
188
141
|
type: 'prose',
|
|
189
142
|
text: 'Give every region one lead, then rank the rest with weight and color rather than size. Content uses two text colors, primary and secondary, and nothing dimmer: body copy needs no props at all.',
|
|
@@ -217,12 +170,8 @@ export const docs = {
|
|
|
217
170
|
type: 'prose',
|
|
218
171
|
text: 'Squint test: blurred, you read lead, then support, then groups, in that order. If everything reads at once, raise contrast with weight and color, not borders and not smaller text.',
|
|
219
172
|
},
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
{
|
|
223
|
-
id: 'containers',
|
|
224
|
-
title: 'Card or rows',
|
|
225
|
-
content: [
|
|
173
|
+
|
|
174
|
+
{type: 'heading', level: 3, text: 'Containers'},
|
|
226
175
|
{
|
|
227
176
|
type: 'prose',
|
|
228
177
|
text: 'Reach for the weakest container that reads as a group, and escalate only when it fails. Weakest to strongest:',
|
|
@@ -253,12 +202,8 @@ export const docs = {
|
|
|
253
202
|
type: 'prose',
|
|
254
203
|
text: 'Decision test: records render as rows, Table for columnar and List for single-line; a self-contained widget or hard boundary is a Card; everything else is a Section.',
|
|
255
204
|
},
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
{
|
|
259
|
-
id: 'headers-and-footers',
|
|
260
|
-
title: 'Headers and footers',
|
|
261
|
-
content: [
|
|
205
|
+
|
|
206
|
+
{type: 'heading', level: 3, text: 'Headers and footers'},
|
|
262
207
|
{
|
|
263
208
|
type: 'prose',
|
|
264
209
|
text: 'A region can pin a header or footer while its body scrolls. Both are Layout slots, and padding set once on Layout reaches all three, so header, body, and footer share one content line.',
|
|
@@ -290,12 +235,8 @@ export const docs = {
|
|
|
290
235
|
type: 'prose',
|
|
291
236
|
text: 'Verify: scroll the body. The header and footer stay put, their dividers run full-bleed, and all three still share one left content line.',
|
|
292
237
|
},
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
{
|
|
296
|
-
id: 'side-panels',
|
|
297
|
-
title: 'Side panels',
|
|
298
|
-
content: [
|
|
238
|
+
|
|
239
|
+
{type: 'heading', level: 3, text: 'Side panels'},
|
|
299
240
|
{
|
|
300
241
|
type: 'prose',
|
|
301
242
|
text: 'Master-detail: selecting a row opens a fixed-width side panel instead of navigating away.',
|
|
@@ -337,45 +278,41 @@ end={
|
|
|
337
278
|
},
|
|
338
279
|
{
|
|
339
280
|
type: 'prose',
|
|
340
|
-
text: 'Verify: at narrow widths the panel yields width instead of squeezing content (see
|
|
341
|
-
},
|
|
342
|
-
],
|
|
343
|
-
},
|
|
344
|
-
{
|
|
345
|
-
id: 'spacing',
|
|
346
|
-
title: 'Spacing',
|
|
347
|
-
content: [
|
|
348
|
-
{
|
|
349
|
-
type: 'prose',
|
|
350
|
-
text: 'Hold one content line per region, then tune gaps and density. Alignment, Rhythm, and Density and size cover each step; these rules hold for all of them.',
|
|
281
|
+
text: 'Verify: at narrow widths the panel yields width instead of squeezing content (see Breakpoints), and only one element between the regions draws a border.',
|
|
351
282
|
},
|
|
283
|
+
|
|
284
|
+
{type: 'heading', level: 3, text: 'Best practices'},
|
|
352
285
|
{
|
|
353
286
|
type: 'list',
|
|
354
287
|
style: 'do',
|
|
355
288
|
items: [
|
|
356
|
-
'
|
|
357
|
-
'
|
|
358
|
-
'
|
|
359
|
-
'
|
|
360
|
-
'
|
|
289
|
+
'One lead per region; rank with weight and color; one primary action',
|
|
290
|
+
'Leave body copy at its defaults; demote by weight and color, not size',
|
|
291
|
+
'Default to Section; use the weakest container that reads as a group',
|
|
292
|
+
'Render collections as rows (Table or List), edge-to-edge with dividers',
|
|
293
|
+
'Open a fixed-width side panel on select; let it yield width at narrow sizes',
|
|
361
294
|
],
|
|
362
295
|
},
|
|
363
296
|
{
|
|
364
297
|
type: 'list',
|
|
365
298
|
style: 'dont',
|
|
366
299
|
items: [
|
|
367
|
-
'
|
|
368
|
-
'
|
|
369
|
-
'
|
|
370
|
-
'
|
|
300
|
+
'Grey and shrink body copy, so a whole region reads as secondary metadata',
|
|
301
|
+
'The disabled color for content; it fails contrast and is for disabled controls',
|
|
302
|
+
'Card soup: each record wrapped in its own Card instead of rendered as rows',
|
|
303
|
+
'Cards inside Cards, or full-width Cards stacked as page structure',
|
|
304
|
+
'A header or footer rebuilt inside the body, where it scrolls away with the rows',
|
|
305
|
+
'Flexbox soup: nested ad-hoc flexboxes instead of Grid, Layout, Section, or FormLayout',
|
|
306
|
+
'Two competing primary actions in one region',
|
|
307
|
+
'Badge as decoration; use StatusDot or Token for status and metadata',
|
|
371
308
|
],
|
|
372
309
|
},
|
|
373
310
|
],
|
|
374
311
|
},
|
|
375
312
|
{
|
|
376
|
-
|
|
377
|
-
title: 'Alignment',
|
|
313
|
+
title: 'Spacing',
|
|
378
314
|
content: [
|
|
315
|
+
{type: 'heading', level: 3, text: 'Alignment'},
|
|
379
316
|
{
|
|
380
317
|
type: 'prose',
|
|
381
318
|
text: 'The container owns padding and child gaps; children zero their margins, and interior spacing is always a token. Pick one content line per region and hold it constant, not the padding: `container_inset = content_line - component_intrinsic_inset`.',
|
|
@@ -405,12 +342,8 @@ end={
|
|
|
405
342
|
type: 'prose',
|
|
406
343
|
text: 'Verify: draw one vertical line down the left of the region. Every label touches it; only hover and selected backgrounds cross it.',
|
|
407
344
|
},
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
{
|
|
411
|
-
id: 'rhythm',
|
|
412
|
-
title: 'Rhythm',
|
|
413
|
-
content: [
|
|
345
|
+
|
|
346
|
+
{type: 'heading', level: 3, text: 'Rhythm'},
|
|
414
347
|
{
|
|
415
348
|
type: 'prose',
|
|
416
349
|
text: 'Grouping comes from contrast between tight and generous gaps, not one repeated value. If every gap is the same step, proximity does no work.',
|
|
@@ -442,12 +375,8 @@ end={
|
|
|
442
375
|
type: 'prose',
|
|
443
376
|
text: 'Verify: with every border removed, you can still name the groups from spacing alone. If you cannot, the intervals are too uniform. Form fields are the exception: FormLayout owns their spacing.',
|
|
444
377
|
},
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
{
|
|
448
|
-
id: 'density',
|
|
449
|
-
title: 'Density and size',
|
|
450
|
-
content: [
|
|
378
|
+
|
|
379
|
+
{type: 'heading', level: 3, text: 'Density and size'},
|
|
451
380
|
{
|
|
452
381
|
type: 'prose',
|
|
453
382
|
text: 'Match density to how often a region is used, and give every control in a row the same size so heights share a baseline.',
|
|
@@ -474,40 +403,35 @@ end={
|
|
|
474
403
|
type: 'prose',
|
|
475
404
|
text: 'Verify: every interactive element in a row shares one size, and that size is paired with the density of the region it sits in.',
|
|
476
405
|
},
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
{
|
|
480
|
-
id: 'breakpoints',
|
|
481
|
-
title: 'Breakpoints',
|
|
482
|
-
content: [
|
|
483
|
-
{
|
|
484
|
-
type: 'prose',
|
|
485
|
-
text: 'Decide what each region does as width changes. Responsive contract covers it; these rules hold for every region.',
|
|
486
|
-
},
|
|
406
|
+
|
|
407
|
+
{type: 'heading', level: 3, text: 'Best practices'},
|
|
487
408
|
{
|
|
488
409
|
type: 'list',
|
|
489
410
|
style: 'do',
|
|
490
411
|
items: [
|
|
491
|
-
'
|
|
492
|
-
'
|
|
493
|
-
'
|
|
412
|
+
'Let the container own padding; children zero their own margins',
|
|
413
|
+
'Hold one content line per region: text on the line, hover backgrounds bleed to the edge',
|
|
414
|
+
'Hold one padding token across a region header, body, and footer',
|
|
415
|
+
'Contrast tight and generous gaps so grouping reads without borders',
|
|
416
|
+
'One control size per row; match density to use frequency',
|
|
494
417
|
],
|
|
495
418
|
},
|
|
496
419
|
{
|
|
497
420
|
type: 'list',
|
|
498
421
|
style: 'dont',
|
|
499
422
|
items: [
|
|
500
|
-
'
|
|
501
|
-
'
|
|
502
|
-
'
|
|
423
|
+
'Double padding: a component indented past its Section heading (keep one inset owner)',
|
|
424
|
+
'Raw px for interior spacing; tokens only, px is for structural widths',
|
|
425
|
+
'One repeated gap everywhere, which flattens grouping',
|
|
426
|
+
'Mixed control sizes in a single row',
|
|
503
427
|
],
|
|
504
428
|
},
|
|
505
429
|
],
|
|
506
430
|
},
|
|
507
431
|
{
|
|
508
|
-
|
|
509
|
-
title: 'Responsive contract',
|
|
432
|
+
title: 'Breakpoints',
|
|
510
433
|
content: [
|
|
434
|
+
{type: 'heading', level: 3, text: 'Responsive contract'},
|
|
511
435
|
{
|
|
512
436
|
type: 'prose',
|
|
513
437
|
text: 'Lock what each region does as width changes, and pair every line of the contract with the prop or hook that enforces it.',
|
|
@@ -544,6 +468,26 @@ const isNarrow = useMediaQuery('(max-width: 1024px)');
|
|
|
544
468
|
type: 'prose',
|
|
545
469
|
text: 'Verify: every contract line names a mechanism, so the comment cannot drift from the behavior.',
|
|
546
470
|
},
|
|
471
|
+
|
|
472
|
+
{type: 'heading', level: 3, text: 'Best practices'},
|
|
473
|
+
{
|
|
474
|
+
type: 'list',
|
|
475
|
+
style: 'do',
|
|
476
|
+
items: [
|
|
477
|
+
'Write the contract down for every region before you call the layout done',
|
|
478
|
+
'Decide per region whether it is revealed, resized, or swapped at each width',
|
|
479
|
+
'Drop a region rather than let it compete for width it does not have',
|
|
480
|
+
],
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
type: 'list',
|
|
484
|
+
style: 'dont',
|
|
485
|
+
items: [
|
|
486
|
+
'Hold three regions at a width where none of them has usable space',
|
|
487
|
+
'Shrink every region uniformly instead of swapping or dropping one',
|
|
488
|
+
'Wire a breakpoint in CSS that the contract comment never mentions',
|
|
489
|
+
],
|
|
490
|
+
},
|
|
547
491
|
],
|
|
548
492
|
},
|
|
549
493
|
],
|
|
@@ -30,12 +30,12 @@ export const docs = {
|
|
|
30
30
|
type: 'list',
|
|
31
31
|
style: 'ordered',
|
|
32
32
|
items: [
|
|
33
|
-
'Install the
|
|
33
|
+
'Install the design system and run init so the project has package scripts, theme CSS, and agent docs.',
|
|
34
34
|
'Wrap the app root with Theme and choose the initial light, dark, or system mode behavior.',
|
|
35
35
|
'Make Tailwind and design system CSS layer order explicit before replacing components.',
|
|
36
36
|
'Render the foundation smoke test page and confirm primitives keep their padding before migrating any surface.',
|
|
37
37
|
'Move the persistent frame first: AppShell, TopNav, SideNav, page content, and mobile navigation.',
|
|
38
|
-
'Replace shared primitives: Button, IconButton, TextInput, NumberInput, Switch, CheckboxInput, RadioList, Selector,
|
|
38
|
+
'Replace shared primitives: Button, IconButton, TextInput, NumberInput, Switch, CheckboxInput, RadioList, Selector, Tabs, Dialog, AlertDialog, Banner, Toast, Badge, Card, Table, and ListItem.',
|
|
39
39
|
'Replace global workflows: command palette, settings popover, theme toggle, search, filters, create flows, and destructive confirmation dialogs.',
|
|
40
40
|
'Remove legacy Tailwind classes from each completed surface, keeping only token-backed layout utilities or local wrappers that still need to be migrated.',
|
|
41
41
|
'Verify both light and dark modes, keyboard navigation, responsive layout, and empty/error/loading states before moving to the next route.',
|
|
@@ -69,13 +69,13 @@ astryx component TextInput`,
|
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
71
|
type: 'prose',
|
|
72
|
-
text: '
|
|
72
|
+
text: 'Use --dense when pasting output into an AI coding tool, and use --json when building automated migration reports.',
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
type: 'code',
|
|
76
76
|
lang: 'bash',
|
|
77
|
-
label: '
|
|
78
|
-
code: `astryx docs migration --
|
|
77
|
+
label: 'Dense and JSON modes',
|
|
78
|
+
code: `astryx docs migration --dense
|
|
79
79
|
astryx component Button --json`,
|
|
80
80
|
},
|
|
81
81
|
],
|
|
@@ -110,7 +110,21 @@ export function AppRoot({children}: {children: React.ReactNode}) {
|
|
|
110
110
|
},
|
|
111
111
|
{
|
|
112
112
|
type: 'prose',
|
|
113
|
-
text: 'When Tailwind remains in the app, declare layer order once in the global CSS file.
|
|
113
|
+
text: 'When Tailwind remains in the app, declare layer order once in the global CSS file. design system reset and theme CSS should load before Tailwind utilities so migrated components keep design system defaults while legacy utility classes still work.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'code',
|
|
117
|
+
lang: 'css',
|
|
118
|
+
label: 'Tailwind v4 coexistence',
|
|
119
|
+
code: `@layer reset, theme, base, astryx-base, astryx-theme, components, utilities;
|
|
120
|
+
|
|
121
|
+
@import "tailwindcss/theme.css" layer(theme);
|
|
122
|
+
@import "tailwindcss/preflight.css" layer(base);
|
|
123
|
+
@import "@astryxdesign/core/reset.css";
|
|
124
|
+
@import "@astryxdesign/core/astryx.css";
|
|
125
|
+
@import "@astryxdesign/theme-neutral/theme.css";
|
|
126
|
+
@import "@astryxdesign/core/tailwind-theme.css";
|
|
127
|
+
@import "tailwindcss/utilities.css" layer(utilities);`,
|
|
114
128
|
},
|
|
115
129
|
{
|
|
116
130
|
type: 'prose',
|
|
@@ -135,8 +149,7 @@ export function AppRoot({children}: {children: React.ReactNode}) {
|
|
|
135
149
|
],
|
|
136
150
|
},
|
|
137
151
|
{
|
|
138
|
-
|
|
139
|
-
title: 'Why resets break cascade layers',
|
|
152
|
+
title: 'Cascade Layer Safety',
|
|
140
153
|
content: [
|
|
141
154
|
{
|
|
142
155
|
type: 'prose',
|
|
@@ -153,16 +166,6 @@ export function AppRoot({children}: {children: React.ReactNode}) {
|
|
|
153
166
|
code: `/* was: @import "./legacy-reset.css"; (unlayered: beats every layer) */
|
|
154
167
|
@import "./legacy-reset.css" layer(reset);`,
|
|
155
168
|
},
|
|
156
|
-
{
|
|
157
|
-
type: 'prose',
|
|
158
|
-
text: 'Before building screens, check every stylesheet against Cascade layer audit.',
|
|
159
|
-
},
|
|
160
|
-
],
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
id: 'layer-audit',
|
|
164
|
-
title: 'Cascade layer audit',
|
|
165
|
-
content: [
|
|
166
169
|
{
|
|
167
170
|
type: 'prose',
|
|
168
171
|
text: 'Audit the layers around the design system with this checklist before building screens.',
|
|
@@ -307,7 +310,6 @@ if (getComputedStyle(button).paddingInline === '0px') {
|
|
|
307
310
|
],
|
|
308
311
|
},
|
|
309
312
|
{
|
|
310
|
-
id: 'command-palette',
|
|
311
313
|
title: 'Command Palette, Settings, and Theme',
|
|
312
314
|
content: [
|
|
313
315
|
{
|
|
@@ -33,10 +33,6 @@ export const docs = {
|
|
|
33
33
|
title: 'Duration',
|
|
34
34
|
category: 'foundations',
|
|
35
35
|
content: [
|
|
36
|
-
{
|
|
37
|
-
type: 'prose',
|
|
38
|
-
text: 'Nine duration tokens in fast, medium, and slow bands.',
|
|
39
|
-
},
|
|
40
36
|
{
|
|
41
37
|
type: 'token-ref',
|
|
42
38
|
topic: 'tokens',
|
|
@@ -48,10 +44,6 @@ export const docs = {
|
|
|
48
44
|
title: 'Easing',
|
|
49
45
|
category: 'foundations',
|
|
50
46
|
content: [
|
|
51
|
-
{
|
|
52
|
-
type: 'prose',
|
|
53
|
-
text: 'One easing curve, `--ease-standard`.',
|
|
54
|
-
},
|
|
55
47
|
{
|
|
56
48
|
type: 'token-ref',
|
|
57
49
|
topic: 'tokens',
|
|
@@ -109,24 +101,19 @@ export const docs = {
|
|
|
109
101
|
content: [
|
|
110
102
|
{
|
|
111
103
|
type: 'prose',
|
|
112
|
-
text: 'Some users experience motion sensitivity; animation that feels polished to one person can cause discomfort for another.
|
|
104
|
+
text: 'Some users experience motion sensitivity; animation that feels polished to one person can cause discomfort for another. Components should honor the operating system\'s reduced motion setting. When it\'s enabled, replace animations with instant state changes.',
|
|
113
105
|
},
|
|
114
106
|
],
|
|
115
107
|
},
|
|
116
108
|
{
|
|
117
|
-
|
|
118
|
-
title: 'Animate with motion tokens',
|
|
109
|
+
title: 'Usage',
|
|
119
110
|
category: 'foundations',
|
|
120
111
|
content: [
|
|
121
|
-
{
|
|
122
|
-
type: 'prose',
|
|
123
|
-
text: 'Set transition durations and easing from the motion tokens, so a theme that retunes motion retunes your animations too.',
|
|
124
|
-
},
|
|
125
112
|
{
|
|
126
113
|
type: 'code',
|
|
127
114
|
lang: 'tsx',
|
|
128
115
|
label: 'Applying motion tokens',
|
|
129
|
-
code: `import {durationVars, easeVars} from '@astryxdesign/core
|
|
116
|
+
code: `import {durationVars, easeVars} from '@astryxdesign/core';
|
|
130
117
|
|
|
131
118
|
const styles = stylex.create({
|
|
132
119
|
fadeIn: {
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
export const docsDense = {
|
|
6
6
|
description: 'core design principles + rules for the design system',
|
|
7
7
|
sections: [
|
|
8
|
-
{ section: 'Design Philosophy', title: 'Philosophy', content: [{ type: '
|
|
9
|
-
{ section: 'Rules', title: 'Rules', content: [{ type: '
|
|
10
|
-
{ section: 'Styling Approach', title: 'Styling', content: [{ type: 'prose', text: 'xstyle prop for component overrides. StyleX or Tailwind for layout.
|
|
11
|
-
{ section: 'Anti-Patterns', title: 'Anti-Patterns', content: [{ type: '
|
|
12
|
-
{ section: 'Design Tokens', title: 'Tokens', content: [{ type: 'prose', text: '
|
|
8
|
+
{ section: 'Design Philosophy', title: 'Philosophy', content: [{ type: 'list', items: ['components over primitives', 'semantic tokens over hardcoded values', 'theme-agnostic code', 'open internals'] }] },
|
|
9
|
+
{ section: 'Rules', title: 'Rules', content: [{ type: 'list', items: ['use components', 'frame-first layout: shell + region budgets before content (astryx docs layout)', 'dense data = rows (Table, List/Item) not Cards; Card = widgets/galleries/settings groups', 'StyleX or Tailwind for styling', 'semantic tokens only', 'CSS vars for colors', 'controlled form inputs', 'useLinkComponent() for navigation'] }] },
|
|
10
|
+
{ section: 'Styling Approach', title: 'Styling', content: [{ type: 'prose', text: 'xstyle prop for component overrides. StyleX or Tailwind for layout. See astryx docs styling.' }] },
|
|
11
|
+
{ section: 'Anti-Patterns', title: 'Anti-Patterns', content: [{ type: 'list', items: ['no inline styles on raw elements', 'no hardcoded colors — use tokens or Tailwind semantic classes', 'no hardcoded spacing', 'no hardcoded <a> — use useLinkComponent()', 'no Card-wrapped list items — frame first, rows for dense data (astryx docs layout)', 'no decorative Badge — StatusDot/Token for status', 'read docs before inventing props'] }] },
|
|
12
|
+
{ section: 'Design Tokens', title: 'Tokens', content: [{ type: 'prose', text: 'run astryx docs tokens for full reference' }] },
|
|
13
13
|
],
|
|
14
14
|
};
|
|
@@ -34,10 +34,6 @@ export const docs = {
|
|
|
34
34
|
title: 'Rules',
|
|
35
35
|
category: 'guide',
|
|
36
36
|
content: [
|
|
37
|
-
{
|
|
38
|
-
type: 'prose',
|
|
39
|
-
text: 'Eight rules that keep app code on-system.',
|
|
40
|
-
},
|
|
41
37
|
{
|
|
42
38
|
type: 'list',
|
|
43
39
|
style: 'ordered',
|
|
@@ -72,10 +68,6 @@ export const docs = {
|
|
|
72
68
|
title: 'Anti-Patterns',
|
|
73
69
|
category: 'guide',
|
|
74
70
|
content: [
|
|
75
|
-
{
|
|
76
|
-
type: 'prose',
|
|
77
|
-
text: 'Patterns that break theming, routing, or layout, and what to use instead.',
|
|
78
|
-
},
|
|
79
71
|
{
|
|
80
72
|
type: 'list',
|
|
81
73
|
style: 'dont',
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
/** @type {import('@astryxdesign/cli/authoring').ReferenceTranslationDoc} */
|
|
4
4
|
|
|
5
5
|
export const docsZh = {
|
|
6
|
-
description: '
|
|
6
|
+
description: 'XDS 核心设计原则和规则。',
|
|
7
7
|
sections: [
|
|
8
|
-
{ section: 'Design Philosophy', title: '设计哲学', content: [{ type: '
|
|
9
|
-
{ section: 'Rules', title: '规则', content: [{ type: '
|
|
10
|
-
{ section: 'Styling Approach', title: '样式方法', content: [{ type: 'prose', text: '组件覆盖使用 xstyle 属性。布局使用 StyleX 或 Tailwind
|
|
11
|
-
{ section: 'Anti-Patterns', title: '反模式', content: [{ type: '
|
|
12
|
-
{ section: 'Design Tokens', title: '设计令牌', content: [{ type: 'prose', text: '
|
|
8
|
+
{ section: 'Design Philosophy', title: '设计哲学', content: [{ type: 'list', items: ['组件优于原始元素 — 优先使用 XDS 组件', '语义化令牌优于硬编码值', '主题无关的代码 — 深色模式自动生效', '开放的内部机制 — 所有基础组件均可导出和组合'] }] },
|
|
9
|
+
{ section: 'Rules', title: '规则', content: [{ type: 'list', items: ['所有支持的场景都使用 XDS 组件', '布局采用框架优先:先选定外壳并规划区域尺寸,再编写内容(见 astryx docs layout)', '密集数据使用行(Table、List/Item)通栏渲染;Card 用于小部件、画廊和设置分组', '使用 StyleX 或 Tailwind 进行样式设置', '使用语义化令牌,不使用硬编码值', '使用 CSS 变量设置颜色,不使用十六进制值', '表单输入为受控组件(value + onChange)', '使用 useLinkComponent() 进行导航'] }] },
|
|
10
|
+
{ section: 'Styling Approach', title: '样式方法', content: [{ type: 'prose', text: '组件覆盖使用 xstyle 属性。布局使用 StyleX 或 Tailwind。详见 astryx docs styling。' }] },
|
|
11
|
+
{ section: 'Anti-Patterns', title: '反模式', content: [{ type: 'list', items: ['不要在原始元素上使用内联样式', '不要硬编码颜色 — 使用令牌或 Tailwind 语义类', '不要硬编码间距', '不要硬编码 <a> 元素 — 使用 useLinkComponent()', '不要把每个列表项都包在 Card 里 — 先定框架,密集数据用行渲染(见 astryx docs layout)', '不要把 Badge 当装饰 — 状态请使用 StatusDot 或 Token', '不要自创属性。先阅读组件文档'] }] },
|
|
12
|
+
{ section: 'Design Tokens', title: '设计令牌', content: [{ type: 'prose', text: '运行 astryx docs tokens 查看完整参考' }] },
|
|
13
13
|
],
|
|
14
14
|
};
|
|
@@ -25,10 +25,6 @@ export const docs = {
|
|
|
25
25
|
title: 'Radius Scale',
|
|
26
26
|
category: 'foundations',
|
|
27
27
|
content: [
|
|
28
|
-
{
|
|
29
|
-
type: 'prose',
|
|
30
|
-
text: 'Seven radius tokens, from 0px to 9999px.',
|
|
31
|
-
},
|
|
32
28
|
{
|
|
33
29
|
type: 'token-ref',
|
|
34
30
|
topic: 'tokens',
|
|
@@ -42,15 +38,14 @@ export const docs = {
|
|
|
42
38
|
content: [
|
|
43
39
|
{
|
|
44
40
|
type: 'prose',
|
|
45
|
-
text: '
|
|
41
|
+
text: 'When a rounded container has padding, inner elements need a smaller radius to appear concentric. Components like Card handle this automatically; the inner radius is computed as max(0, outerRadius - padding).',
|
|
46
42
|
},
|
|
47
43
|
{
|
|
48
44
|
type: 'code',
|
|
49
45
|
lang: 'css',
|
|
50
46
|
label: 'Concentric radius formula',
|
|
51
|
-
code:
|
|
52
|
-
|
|
53
|
-
}`,
|
|
47
|
+
code: `/* Automatic in Astryx Card */
|
|
48
|
+
--card-concentric-radius: max(0px, calc(var(--_card-radius) - var(--card-padding)));`,
|
|
54
49
|
},
|
|
55
50
|
],
|
|
56
51
|
},
|
|
@@ -8,7 +8,6 @@ export const docs = {
|
|
|
8
8
|
category: 'foundations',
|
|
9
9
|
description:
|
|
10
10
|
'Spacing scale tokens for padding, gap, and margin: the rhythmic foundation of design system layouts.',
|
|
11
|
-
keywords: ['padding', 'margin', 'gap'],
|
|
12
11
|
tokenCategory: 'spacing',
|
|
13
12
|
|
|
14
13
|
sections: [
|
|
@@ -26,10 +25,6 @@ export const docs = {
|
|
|
26
25
|
title: 'Scale',
|
|
27
26
|
category: 'foundations',
|
|
28
27
|
content: [
|
|
29
|
-
{
|
|
30
|
-
type: 'prose',
|
|
31
|
-
text: 'Fifteen spacing tokens, from 0px to 48px.',
|
|
32
|
-
},
|
|
33
28
|
{
|
|
34
29
|
type: 'token-ref',
|
|
35
30
|
topic: 'tokens',
|
|
@@ -43,7 +38,7 @@ export const docs = {
|
|
|
43
38
|
content: [
|
|
44
39
|
{
|
|
45
40
|
type: 'prose',
|
|
46
|
-
text: '
|
|
41
|
+
text: 'Most components accept a `gap` prop using step values (0 through 12). For custom layouts, use the spacing tokens directly in StyleX.',
|
|
47
42
|
},
|
|
48
43
|
{
|
|
49
44
|
type: 'code',
|
|
@@ -53,7 +48,7 @@ export const docs = {
|
|
|
53
48
|
<Stack gap={4}>{/* 16px gap */}</Stack>
|
|
54
49
|
|
|
55
50
|
// Via StyleX tokens (custom layouts)
|
|
56
|
-
import {spacingVars} from '@astryxdesign/core
|
|
51
|
+
import {spacingVars} from '@astryxdesign/core';
|
|
57
52
|
|
|
58
53
|
const styles = stylex.create({
|
|
59
54
|
custom: {
|