@astryxdesign/cli 0.6.3 → 0.6.4-canary.10dd683
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/CHANGELOG.md +194 -0
- package/README.md +117 -78
- package/api/blog/blog.doc.mjs +1 -0
- package/api/build/_adapter.d.mts +50 -0
- package/api/build/_adapter.mjs +60 -0
- package/api/build/build.doc.mjs +16 -9
- package/api/build/build.test.mjs +197 -8
- package/api/build/build.type.d.mts +91 -2
- package/api/build/build.type.mjs +52 -8
- package/api/build/help/help.d.mts +12 -5
- package/api/build/help/help.mjs +69 -6
- package/api/build/kit/kit.d.mts +4 -1
- package/api/build/kit/kit.mjs +165 -49
- package/api/build/kit/rank.d.mts +44 -0
- package/api/build/kit/rank.mjs +432 -0
- package/api/build/kit/rank.test.mjs +196 -0
- package/api/component/_adapter.d.mts +6 -12
- package/api/component/_adapter.mjs +20 -10
- package/api/component/component.doc.mjs +13 -3
- package/api/component/component.mjs +91 -14
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +22 -11
- package/api/component/component.type.mjs +32 -24
- package/api/component/detail/blocks/blocks.d.mts +2 -1
- package/api/component/detail/blocks/blocks.mjs +4 -3
- package/api/component/list/list.d.mts +0 -5
- package/api/component/list/list.mjs +40 -11
- package/api/discover/_adapter.d.mts +114 -6
- package/api/discover/_adapter.mjs +372 -17
- package/api/discover/_adapter.test.mjs +215 -0
- package/api/discover/_catalog-view.d.mts +115 -0
- package/api/discover/_catalog-view.mjs +203 -0
- package/api/discover/_catalog-view.test.mjs +128 -0
- package/api/discover/detail/detail.d.mts +18 -6
- package/api/discover/detail/detail.mjs +67 -13
- package/api/discover/detail/detail.test.mjs +85 -0
- package/api/discover/detail/item/item.d.mts +26 -0
- package/api/discover/detail/item/item.mjs +78 -0
- package/api/discover/detail/item/item.test.mjs +73 -0
- package/api/discover/discover.d.mts +3 -9
- package/api/discover/discover.doc.mjs +62 -18
- package/api/discover/discover.mjs +220 -36
- package/api/discover/discover.test.mjs +11 -2
- package/api/discover/discover.type.d.mts +150 -11
- package/api/discover/discover.type.mjs +107 -17
- package/api/discover/list/list.d.mts +20 -6
- package/api/discover/list/list.mjs +45 -12
- package/api/discover/list/list.test.mjs +46 -0
- package/api/discover/search/search.d.mts +18 -16
- package/api/discover/search/search.mjs +102 -56
- package/api/discover/search/search.test.mjs +144 -10
- package/api/docs/_adapter.d.mts +272 -41
- package/api/docs/_adapter.mjs +985 -108
- package/api/docs/compiled-topics.test.mjs +78 -0
- package/api/docs/detail/detail.mjs +22 -63
- package/api/docs/detail/section/section.d.mts +1 -1
- package/api/docs/detail/section/section.mjs +54 -19
- package/api/docs/detail/section/section.test.mjs +50 -0
- package/api/docs/docs.d.mts +10 -3
- package/api/docs/docs.doc.mjs +55 -16
- package/api/docs/docs.mjs +53 -10
- package/api/docs/docs.test.mjs +164 -4
- package/api/docs/docs.type.d.mts +221 -5
- package/api/docs/docs.type.mjs +153 -11
- package/api/docs/index/index.d.mts +18 -0
- package/api/docs/index/index.mjs +40 -0
- package/api/docs/index/index.test.mjs +62 -0
- package/api/docs/integration-tree.test.mjs +555 -0
- package/api/docs/integrationDocs.test.mjs +114 -8
- package/api/docs/list/list.mjs +28 -12
- package/api/docs/node/node.d.mts +43 -0
- package/api/docs/node/node.mjs +192 -0
- package/api/docs/reference-blocks.test.mjs +406 -0
- package/api/doctor/doctor.d.mts +99 -1
- package/api/doctor/doctor.doc.mjs +1 -0
- package/api/doctor/doctor.mjs +548 -1
- package/api/doctor/doctor.test.mjs +610 -1
- package/api/gap-report/gap-report.doc.mjs +8 -4
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +1 -0
- package/api/hook/hook.type.d.mts +3 -3
- package/api/hook/hook.type.mjs +11 -11
- package/api/hook/list/list.d.mts +2 -2
- package/api/hook/list/list.mjs +69 -17
- package/api/index.d.mts +1 -1
- package/api/index.mjs +1 -0
- package/api/init/init.doc.mjs +6 -1
- package/api/init/init.test.mjs +41 -1
- package/api/init/remove/remove.mjs +1 -1
- package/api/init/run/run.mjs +20 -10
- package/api/integration/add-contribution.component-names.test.mjs +120 -0
- package/api/integration/add-contribution.d.mts +2 -1
- package/api/integration/add-contribution.mjs +130 -15
- package/api/integration/add-contribution.test.mjs +258 -7
- package/api/integration/add-helpers.d.mts +5 -2
- package/api/integration/add-helpers.mjs +36 -9
- package/api/integration/add-theme.mjs +34 -64
- package/api/integration/add-theme.test.mjs +105 -21
- package/api/integration/authoring-checks.mjs +138 -28
- package/api/integration/authoring-checks.test.mjs +179 -7
- package/api/integration/authoring-checks.type.mjs +6 -1
- package/api/integration/integration-authoring.type.d.mts +3 -1
- package/api/integration/integration-authoring.type.mjs +2 -0
- package/api/integration/integration-block-exports.test.mjs +10 -6
- package/api/integration/integrationAdd.doc.mjs +14 -4
- package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
- package/api/integration/integrationAddCodemod.doc.mjs +1 -0
- package/api/integration/integrationAddComponent.doc.mjs +2 -1
- package/api/integration/integrationAddDoc.doc.mjs +8 -1
- package/api/integration/integrationAddTemplate.doc.mjs +1 -0
- package/api/integration/integrationAddTheme.doc.mjs +6 -5
- package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
- package/api/integration/integrationDocConflicts.doc.mjs +2 -1
- package/api/integration/integrationPackCheck.doc.mjs +2 -1
- package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
- package/api/integration/pack-check.mjs +83 -7
- package/api/integration/pack-check.test.mjs +387 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +14 -1
- package/api/integration/summarizeIssues.doc.mjs +1 -0
- package/api/integration/template-conflict-compatibility.test.mjs +73 -0
- package/api/integration/validate-integration-fixes.test.mjs +1389 -0
- package/api/integration/validate-integration.mjs +52 -102
- package/api/integration/validate-integration.test.mjs +179 -26
- package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
- package/api/integration/validateIntegration.doc.mjs +3 -2
- package/api/json/assertResponse.doc.mjs +1 -0
- package/api/json/envelope-types.test.mjs +76 -0
- package/api/json/index.ts +2 -0
- package/api/json/isError.doc.mjs +1 -0
- package/api/json/parseResponse.doc.mjs +3 -2
- package/api/layout/_adapter.mjs +20 -5
- package/api/layout/expand/expand.mjs +7 -5
- package/api/layout/expand/expand.path-safety.test.mjs +53 -0
- package/api/layout/grammar/grammar.mjs +2 -1
- package/api/layout/layoutCheck.doc.mjs +1 -0
- package/api/layout/layoutExpand.doc.mjs +2 -1
- package/api/layout/layoutGrammar.doc.mjs +1 -0
- package/api/search/search-return-type.test.mjs +54 -0
- package/api/search/search.d.mts +62 -11
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +471 -83
- package/api/search/search.test.mjs +124 -1
- package/api/search/search.type.d.mts +15 -3
- package/api/search/search.type.mjs +5 -2
- package/api/swizzle/copy/copy.mjs +28 -11
- package/api/swizzle/swizzle.doc.mjs +2 -1
- package/api/swizzle/swizzle.type.d.mts +2 -2
- package/api/swizzle/swizzle.type.mjs +2 -2
- package/api/template/copy/copy.mjs +17 -23
- package/api/template/copy/copy.test.mjs +17 -0
- package/api/template/list/list.mjs +1 -0
- package/api/template/table-floating-bulk-actions.test.mjs +66 -0
- package/api/template/template-integration.test.mjs +1072 -3
- package/api/template/template-suffix.test.mjs +41 -21
- package/api/template/template.d.mts +1 -1
- package/api/template/template.doc.mjs +30 -8
- package/api/template/template.mjs +45 -8
- package/api/template/template.type.d.mts +12 -14
- package/api/template/template.type.mjs +15 -14
- package/api/theme/_adapter.d.mts +2 -3
- package/api/theme/_adapter.mjs +4 -5
- package/api/theme/add/add.binary.test.mjs +84 -0
- package/api/theme/add/add.mjs +31 -22
- package/api/theme/add/add.rollback.test.mjs +158 -0
- package/api/theme/add/add.staging.test.mjs +83 -0
- package/api/theme/add/add.test.mjs +14 -1
- package/api/theme/build/build.family.test.mjs +7 -12
- package/api/theme/build/build.mjs +140 -59
- package/api/theme/build/build.public-component-vars.test.mjs +1 -1
- package/api/theme/build/build.receipt-doc.test.mjs +111 -0
- package/api/theme/build/build.rollback.test.mjs +148 -0
- package/api/theme/build/build.test.mjs +127 -0
- package/api/theme/build/font-warning.mjs +3 -3
- package/api/theme/build/font-warning.test.mjs +5 -2
- package/api/theme/generateTonalPalette.doc.mjs +1 -0
- package/api/theme/integration-themes.test.mjs +39 -28
- package/api/theme/list/list.test.mjs +19 -20
- package/api/theme/listThemes.doc.mjs +6 -5
- package/api/theme/palette/generate/generate.mjs +8 -3
- package/api/theme/palette/generate/generate.test.mjs +96 -0
- package/api/theme/palette/generate/generator.d.mts +10 -13
- package/api/theme/palette/generate/generator.mjs +15 -4
- package/api/theme/palette/generate/generator.test.mjs +10 -0
- package/api/theme/template/template.mjs +11 -2
- package/api/theme/template/template.test.mjs +20 -0
- package/api/theme/theme.type.d.mts +170 -11
- package/api/theme/theme.type.mjs +94 -27
- package/api/theme/themeAdd.doc.mjs +4 -3
- package/api/theme/themeBuild.doc.mjs +8 -4
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +5 -3
- package/api/theme/themePaletteGenerate.doc.mjs +1 -0
- package/api/theme/themeTargets.doc.mjs +1 -0
- package/api/theme/themeTemplate.doc.mjs +6 -2
- package/api/upgrade/_adapter.d.mts +32 -5
- package/api/upgrade/_adapter.mjs +139 -22
- package/api/upgrade/list/list.mjs +2 -1
- package/api/upgrade/list/list.test.mjs +73 -0
- package/api/upgrade/project-context.test.mjs +272 -0
- package/api/upgrade/provider-agreement.test.mjs +152 -0
- package/api/upgrade/run/run.mjs +356 -59
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +12 -5
- package/api/upgrade/upgrade.type.d.mts +43 -5
- package/api/upgrade/upgrade.type.mjs +27 -11
- package/assets/codemods/__tests__/registry.test.mjs +1 -0
- package/assets/codemods/__tests__/runner.test.mjs +330 -8
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -0
- package/assets/codemods/integration-runner.mjs +56 -4
- package/assets/codemods/integration-runner.protection.test.mjs +153 -0
- package/assets/codemods/registry.mjs +1 -0
- package/assets/codemods/run-codemod.mjs +177 -34
- package/assets/codemods/runner.mjs +350 -102
- package/assets/codemods/term-log.mjs +32 -8
- package/assets/codemods/term-log.test.mjs +19 -1
- package/assets/codemods/transform-prop.mjs +109 -0
- package/assets/codemods/transform-prop.test.mjs +95 -0
- package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
- package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
- package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
- package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
- package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
- package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
- package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
- package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
- package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
- package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
- package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
- package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
- package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
- package/assets/docs/README.md +9 -0
- package/assets/docs/authoring.doc.mjs +14 -0
- package/assets/docs/getting-started.doc.mjs +2 -2
- package/assets/docs/internationalization.doc.mjs +7 -5
- package/assets/docs/layout.doc.dense.mjs +2 -2
- package/assets/docs/layout.doc.mjs +1 -1
- package/assets/docs/principles.doc.mjs +6 -6
- package/assets/docs/styling-libraries.doc.mjs +4 -4
- package/assets/docs/styling.doc.mjs +4 -4
- package/assets/docs/theme.doc.mjs +5 -5
- package/assets/docs/tokens.doc.mjs +1 -1
- package/assets/docs/tree/api.doc.mjs +30 -0
- package/assets/docs/tree/cli.doc.mjs +23 -0
- package/assets/docs/tree/commands.doc.mjs +25 -0
- package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +144 -26
- package/assets/docs/tree/integrations.test.mjs +62 -0
- package/assets/docs/tree/writing-docs.doc.mjs +286 -0
- package/assets/docs/working-with-ai.doc.mjs +4 -4
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
- package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
- package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
- package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
- package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
- package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
- package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
- package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
- package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
- package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
- package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
- package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
- package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
- package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
- package/assets/templates/pages/table-tree/page.tsx +1704 -0
- package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
- package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
- package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
- package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
- package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
- package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
- package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
- package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
- package/authoring/_shared/contract.ts +22 -0
- package/authoring/codemod/codemod.doc.mjs +7 -2
- package/authoring/codemod/parse.d.mts +8 -8
- package/authoring/codemod/parse.mjs +8 -6
- package/authoring/codemod/type.ts +12 -0
- package/authoring/config/config.doc.mjs +10 -2
- package/authoring/config/debug-composition.test.mjs +92 -0
- package/authoring/config/parse.d.mts +15 -13
- package/authoring/config/parse.mjs +27 -8
- package/authoring/config/parse.test.mjs +8 -0
- package/authoring/config/type.ts +29 -6
- package/authoring/debug/debug.doc.d.mts +11 -0
- package/authoring/debug/debug.doc.mjs +182 -0
- package/authoring/debug/parse.d.mts +8 -8
- package/authoring/debug/parse.mjs +3 -3
- package/authoring/discover/discover.doc.d.mts +13 -0
- package/authoring/discover/discover.doc.mjs +138 -0
- package/authoring/discover/parse.d.mts +24 -0
- package/authoring/discover/parse.mjs +128 -0
- package/authoring/discover/parse.test.mjs +124 -0
- package/authoring/discover/type.ts +87 -0
- package/authoring/doctypes/_schema.d.mts +790 -23
- package/authoring/doctypes/_schema.mjs +543 -39
- package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
- package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
- package/authoring/doctypes/base/type.ts +41 -0
- package/authoring/doctypes/command/command.doc.mjs +4 -3
- package/authoring/doctypes/command/parse.d.mts +2 -2
- package/authoring/doctypes/command/parse.mjs +1 -1
- package/authoring/doctypes/command/type.ts +5 -4
- package/authoring/doctypes/component/component.doc.mjs +6 -3
- package/authoring/doctypes/component/parse.d.mts +2 -2
- package/authoring/doctypes/component/parse.mjs +1 -1
- package/authoring/doctypes/component/type.ts +6 -5
- package/authoring/doctypes/doctypes-new.test.mjs +48 -6
- package/authoring/doctypes/enum/enum.doc.mjs +1 -1
- package/authoring/doctypes/enum/parse.d.mts +2 -2
- package/authoring/doctypes/enum/parse.mjs +1 -1
- package/authoring/doctypes/enum/type.ts +4 -2
- package/authoring/doctypes/function/function.doc.mjs +7 -2
- package/authoring/doctypes/function/parse.d.mts +2 -2
- package/authoring/doctypes/function/parse.mjs +1 -1
- package/authoring/doctypes/function/type.ts +9 -4
- package/authoring/doctypes/hook/hook.doc.mjs +4 -0
- package/authoring/doctypes/hook/parse.d.mts +2 -2
- package/authoring/doctypes/hook/parse.mjs +1 -1
- package/authoring/doctypes/hook/type.ts +5 -4
- package/authoring/doctypes/legacy.d.mts +8 -6
- package/authoring/doctypes/legacy.mjs +5 -4
- package/authoring/doctypes/load-contract.test.mjs +233 -0
- package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
- package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
- package/authoring/doctypes/namespace/parse.d.mts +12 -0
- package/authoring/doctypes/namespace/parse.mjs +25 -0
- package/authoring/doctypes/namespace/parse.test.mjs +163 -0
- package/authoring/doctypes/namespace/type.ts +74 -0
- package/authoring/doctypes/parse.d.mts +22 -18
- package/authoring/doctypes/parse.mjs +22 -11
- package/authoring/doctypes/parse.test.mjs +77 -3
- package/authoring/doctypes/reference/parse.d.mts +2 -2
- package/authoring/doctypes/reference/parse.mjs +8 -5
- package/authoring/doctypes/reference/reference.doc.mjs +48 -6
- package/authoring/doctypes/reference/type.ts +70 -7
- package/authoring/doctypes/schema/parse.d.mts +2 -2
- package/authoring/doctypes/schema/parse.mjs +1 -1
- package/authoring/doctypes/schema/schema.doc.mjs +1 -1
- package/authoring/doctypes/schema/type.ts +4 -4
- package/authoring/doctypes/template/parse.d.mts +94 -1
- package/authoring/doctypes/template/parse.mjs +40 -2
- package/authoring/doctypes/template/parse.test.mjs +26 -2
- package/authoring/doctypes/template/template.doc.mjs +13 -3
- package/authoring/doctypes/template/type.ts +13 -2
- package/authoring/doctypes/theme/parse.d.mts +35 -0
- package/authoring/doctypes/theme/parse.mjs +76 -0
- package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
- package/authoring/doctypes/theme/theme.doc.mjs +79 -0
- package/authoring/doctypes/theme/type.ts +42 -0
- package/authoring/doctypes/types.ts +12 -10
- package/authoring/gap-report/gap-report.doc.d.mts +12 -0
- package/authoring/gap-report/gap-report.doc.mjs +183 -0
- package/authoring/gap-report/parse.d.mts +10 -10
- package/authoring/gap-report/parse.mjs +6 -6
- package/authoring/gap-report/type.ts +1 -1
- package/authoring/identity/identity.doc.d.mts +9 -0
- package/authoring/identity/identity.doc.mjs +61 -0
- package/authoring/identity/type.ts +132 -0
- package/authoring/index.d.mts +3 -0
- package/authoring/index.d.ts +62 -17
- package/authoring/index.mjs +4 -1
- package/authoring/integration/integration.doc.mjs +15 -8
- package/authoring/integration/parse.d.mts +2 -2
- package/authoring/integration/parse.mjs +1 -1
- package/authoring/integration/parse.test.mjs +10 -1
- package/authoring/integration/schema.d.mts +6 -4
- package/authoring/integration/schema.mjs +9 -3
- package/authoring/integration/type.ts +19 -8
- package/authoring/shadcn/receipt.d.mts +6 -6
- package/clients/cli/__tests__/cliManifest.test.ts +27 -29
- package/clients/cli/command-load-failure.test.mjs +83 -0
- package/clients/cli/commands/blog.doc.mjs +1 -1
- package/clients/cli/commands/blog.mjs +23 -8
- package/clients/cli/commands/blog.test.mjs +42 -1
- package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
- package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
- package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
- package/clients/cli/commands/build-theme.mjs +16 -50
- package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
- package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
- package/clients/cli/commands/build.doc.mjs +16 -8
- package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
- package/clients/cli/commands/build.mjs +137 -114
- package/clients/cli/commands/build.playbook.test.mjs +75 -0
- package/clients/cli/commands/build.text-fields.test.mjs +81 -0
- package/clients/cli/commands/component/index.mjs +3 -8
- package/clients/cli/commands/component-ownership.test.mjs +3 -3
- package/clients/cli/commands/component-package.test.mjs +46 -0
- package/clients/cli/commands/component-resolution.test.mjs +21 -0
- package/clients/cli/commands/component.doc.mjs +1 -1
- package/clients/cli/commands/component.test.mjs +19 -0
- package/clients/cli/commands/detail-levels.test.mjs +2 -2
- package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
- package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
- package/clients/cli/commands/discover.doc.mjs +55 -9
- package/clients/cli/commands/discover.mjs +393 -118
- package/clients/cli/commands/discover.sources.test.mjs +267 -0
- package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
- package/clients/cli/commands/docs.doc.mjs +28 -6
- package/clients/cli/commands/docs.mjs +240 -26
- package/clients/cli/commands/docs.test.mjs +193 -1
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
- package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
- package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
- package/clients/cli/commands/doctor-integration.test.mjs +90 -8
- package/clients/cli/commands/doctor.doc.mjs +1 -1
- package/clients/cli/commands/doctor.mjs +59 -32
- package/clients/cli/commands/doctor.test.mjs +42 -0
- package/clients/cli/commands/gap-report.doc.mjs +17 -6
- package/clients/cli/commands/gap-report.test.mjs +72 -0
- package/clients/cli/commands/hook/index.mjs +7 -17
- package/clients/cli/commands/hook.doc.mjs +1 -1
- package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
- package/clients/cli/commands/init.doc.mjs +20 -9
- package/clients/cli/commands/init.flag-help.test.mjs +153 -0
- package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
- package/clients/cli/commands/integration-add.doc.mjs +32 -6
- package/clients/cli/commands/integration-authoring.test.mjs +13 -9
- package/clients/cli/commands/integration-pack.doc.mjs +1 -1
- package/clients/cli/commands/integration-real-world.test.mjs +3 -9
- package/clients/cli/commands/integration.doc.mjs +1 -1
- package/clients/cli/commands/integration.mjs +1 -0
- package/clients/cli/commands/interactive-guard.test.mjs +101 -24
- package/clients/cli/commands/json-contract.test.mjs +33 -0
- package/clients/cli/commands/layout-check.doc.mjs +15 -4
- package/clients/cli/commands/layout-expand.doc.mjs +22 -5
- package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
- package/clients/cli/commands/layout.doc.mjs +3 -3
- package/clients/cli/commands/layout.mjs +21 -9
- 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/no-prompt-wording.test.mjs +94 -0
- package/clients/cli/commands/search.doc.mjs +7 -4
- package/clients/cli/commands/search.mjs +28 -9
- package/clients/cli/commands/search.test.mjs +75 -0
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +3 -2
- package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
- package/clients/cli/commands/template.doc.mjs +52 -13
- package/clients/cli/commands/template.flag-help.test.mjs +117 -0
- package/clients/cli/commands/template.mjs +4 -91
- package/clients/cli/commands/template.path-help.test.mjs +40 -0
- package/clients/cli/commands/text-json-parity.test.mjs +719 -0
- package/clients/cli/commands/theme-add.doc.mjs +4 -3
- package/clients/cli/commands/theme-build.doc.mjs +8 -7
- package/clients/cli/commands/theme-list.doc.mjs +2 -2
- package/clients/cli/commands/theme-palette-generate.doc.mjs +9 -5
- package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
- package/clients/cli/commands/theme-palette.doc.mjs +1 -1
- package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
- package/clients/cli/commands/theme-targets.doc.mjs +1 -1
- package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
- package/clients/cli/commands/theme-template.doc.mjs +2 -2
- package/clients/cli/commands/theme.doc.mjs +1 -1
- package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
- package/clients/cli/commands/upgrade.doc.mjs +22 -10
- package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
- package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
- package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
- package/clients/cli/commands/upgrade.mjs +29 -7
- package/clients/cli/formatters/index.mjs +164 -1
- package/clients/cli/formatters/index.test.mjs +97 -0
- package/clients/cli/index.mjs +21 -30
- package/clients/cli/latest-version-env.test.mjs +50 -0
- package/clients/cli/lib/cli-error.test.mjs +7 -0
- package/clients/cli/lib/component-format.mjs +9 -9
- package/clients/cli/lib/component-format.test.mjs +1 -1
- package/clients/cli/lib/define-command.mjs +32 -6
- package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
- package/clients/cli/lib/exit-codes.test.mjs +97 -0
- package/clients/cli/lib/hook-format.mjs +19 -10
- package/clients/cli/lib/json-shim.mjs +38 -2
- package/clients/cli/lib/json-shim.test.mjs +83 -0
- package/clients/cli/lib/manifest.d.ts +2 -0
- package/clients/cli/lib/manifest.mjs +37 -2
- package/clients/cli/lib/manifest.test.mjs +17 -0
- package/foundation/agent-docs/agent-docs.d.mts +7 -2
- package/foundation/agent-docs/agent-docs.mjs +82 -12
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
- package/foundation/agent-docs/agent-docs.test.mjs +19 -1
- package/foundation/config/integration-debug.test.mjs +28 -3
- package/foundation/config/project-themes.test.mjs +11 -19
- package/foundation/config/project.d.mts +20 -11
- package/foundation/config/project.mjs +263 -91
- package/foundation/config/project.test.mjs +270 -21
- package/foundation/discovery/authoring-self-docs.d.mts +87 -0
- package/foundation/discovery/authoring-self-docs.mjs +237 -0
- package/foundation/discovery/authoring-self-docs.test.mjs +170 -0
- package/foundation/discovery/authoring-surface.d.mts +74 -0
- package/foundation/discovery/authoring-surface.mjs +525 -0
- package/foundation/discovery/authoring-surface.test.mjs +392 -0
- package/foundation/discovery/cli-self-docs.d.mts +119 -0
- package/foundation/discovery/cli-self-docs.mjs +490 -0
- package/foundation/discovery/cli-self-docs.test.mjs +375 -0
- package/foundation/discovery/component-discovery.d.mts +39 -1
- package/foundation/discovery/component-discovery.mjs +50 -1
- package/foundation/discovery/component-loader.d.mts +35 -38
- package/foundation/discovery/component-loader.mjs +53 -222
- package/foundation/discovery/docs-discovery.d.mts +119 -11
- package/foundation/discovery/docs-discovery.mjs +423 -108
- package/foundation/discovery/docs-discovery.test.mjs +365 -20
- package/foundation/discovery/docs-output-budget.d.mts +28 -0
- package/foundation/discovery/docs-output-budget.mjs +50 -0
- package/foundation/discovery/docs-section-key.d.mts +116 -0
- package/foundation/discovery/docs-section-key.mjs +322 -0
- package/foundation/discovery/docs-section-key.test.mjs +246 -0
- package/foundation/discovery/template-adapter.d.mts +113 -11
- package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
- package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
- package/foundation/discovery/template-adapter.mjs +774 -83
- package/foundation/discovery/template-adapter.test.mjs +57 -0
- package/foundation/discovery/template-conflict-release.d.mts +13 -0
- package/foundation/discovery/template-conflict-release.mjs +40 -0
- package/foundation/discovery/template-conflict-release.test.mjs +40 -0
- package/foundation/discovery/theme-discovery.d.mts +67 -7
- package/foundation/discovery/theme-discovery.mjs +916 -186
- package/foundation/discovery/theme-discovery.test.mjs +613 -219
- package/foundation/discovery/theming-targets.test.mjs +4 -0
- package/foundation/doc-compiler/bundle.d.mts +47 -0
- package/foundation/doc-compiler/bundle.mjs +278 -0
- package/foundation/doc-compiler/bundle.test.mjs +266 -0
- package/foundation/doc-compiler/compile.d.mts +343 -0
- package/foundation/doc-compiler/compile.mjs +558 -0
- package/foundation/doc-compiler/diagnostics.d.mts +126 -0
- package/foundation/doc-compiler/diagnostics.mjs +305 -0
- package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
- package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
- package/foundation/doc-compiler/import.d.mts +24 -0
- package/foundation/doc-compiler/import.mjs +59 -0
- package/foundation/doc-compiler/inputs.d.mts +102 -0
- package/foundation/doc-compiler/inputs.mjs +291 -0
- package/foundation/doc-compiler/inputs.test.mjs +299 -0
- package/foundation/doc-compiler/ir.d.mts +22 -0
- package/foundation/doc-compiler/ir.mjs +471 -0
- package/foundation/doc-compiler/lenses.d.mts +36 -0
- package/foundation/doc-compiler/lenses.mjs +173 -0
- package/foundation/doc-compiler/links.d.mts +162 -0
- package/foundation/doc-compiler/links.mjs +294 -0
- package/foundation/doc-compiler/links.test.mjs +192 -0
- package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
- package/foundation/doc-compiler/overlays.d.mts +37 -0
- package/foundation/doc-compiler/overlays.mjs +206 -0
- package/foundation/doc-compiler/parse-readable.d.mts +9 -0
- package/foundation/doc-compiler/parse-readable.mjs +29 -0
- package/foundation/doc-compiler/read.d.mts +127 -0
- package/foundation/doc-compiler/read.mjs +325 -0
- package/foundation/doc-compiler/read.test.mjs +313 -0
- package/foundation/doc-compiler/source.d.mts +33 -0
- package/foundation/doc-compiler/source.mjs +128 -0
- package/foundation/doc-compiler/tree.d.mts +288 -0
- package/foundation/doc-compiler/tree.mjs +876 -0
- package/foundation/doc-compiler/tree.test.mjs +598 -0
- package/foundation/fs/file-protection.d.mts +33 -0
- package/foundation/fs/file-protection.mjs +825 -0
- package/foundation/fs/file-protection.test.mjs +250 -0
- package/foundation/fs/module-loader.d.mts +1 -0
- package/foundation/fs/module-loader.mjs +50 -1
- package/foundation/fs/module-loader.stdout.test.mjs +332 -0
- package/foundation/fs/path-safety.d.mts +3 -2
- package/foundation/fs/path-safety.mjs +49 -19
- package/foundation/fs/path-safety.test.mjs +50 -0
- package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
- package/foundation/identity/provider-identity.d.mts +90 -0
- package/foundation/identity/provider-identity.mjs +320 -0
- package/foundation/identity/provider-identity.test.mjs +254 -0
- package/foundation/identity/providers.d.mts +7 -0
- package/foundation/identity/providers.mjs +16 -0
- package/foundation/integrations/autolink.d.mts +58 -1
- package/foundation/integrations/autolink.mjs +143 -45
- package/foundation/integrations/autolink.test.mjs +1 -1
- package/foundation/integrations/cli-requirement.d.mts +45 -0
- package/foundation/integrations/cli-requirement.mjs +154 -0
- package/foundation/integrations/cli-requirement.test.mjs +84 -0
- package/foundation/integrations/contribution-fixes.d.mts +145 -0
- package/foundation/integrations/contribution-fixes.mjs +1284 -0
- package/foundation/integrations/contribution-inventory.d.mts +3 -2
- package/foundation/integrations/contribution-inventory.mjs +27 -24
- package/foundation/integrations/contribution-inventory.test.mjs +86 -27
- package/foundation/integrations/integration-warnings.d.mts +9 -2
- package/foundation/integrations/integration-warnings.mjs +52 -21
- package/foundation/integrations/integration-warnings.test.mjs +74 -1
- package/foundation/integrations/integrations.d.mts +63 -3
- package/foundation/integrations/integrations.mjs +122 -9
- package/foundation/integrations/integrations.test.mjs +415 -1
- package/foundation/integrations/provider-conflicts.test.mjs +125 -0
- package/foundation/integrations/provider-ledger.test.mjs +275 -0
- package/foundation/integrations/provider-resolution.d.mts +152 -0
- package/foundation/integrations/provider-resolution.mjs +576 -0
- package/foundation/integrations/provider-resolution.test.mjs +369 -0
- package/foundation/integrations/theme-descriptor.d.mts +8 -0
- package/foundation/integrations/theme-descriptor.mjs +44 -0
- package/foundation/integrations/validate-contributions.d.mts +2 -0
- package/foundation/integrations/validate-contributions.mjs +131 -29
- package/foundation/response/base.d.ts +8 -4
- package/foundation/response/error-codes.d.mts +3 -1
- package/foundation/response/error-codes.d.ts +2 -0
- package/foundation/response/error-codes.doc.mjs +13 -4
- package/foundation/response/error-codes.mjs +8 -2
- package/foundation/response/error-codes.test.mjs +137 -10
- package/foundation/response/json-contract.test.mjs +57 -17
- package/foundation/response/json.d.mts +4 -2
- package/foundation/response/json.mjs +8 -10
- package/foundation/response/response-types.doc.d.mts +5 -1
- package/foundation/response/response-types.doc.mjs +41 -21
- package/foundation/response/response-types.doc.test.mjs +158 -0
- package/foundation/response/response.doc.mjs +1 -1
- package/foundation/text/string-utils.d.mts +8 -0
- package/foundation/text/string-utils.mjs +40 -10
- package/foundation/xle/expand.d.mts +2 -0
- package/foundation/xle/expand.mjs +4 -3
- package/foundation/xle/expand.test.mjs +54 -0
- package/foundation/xle/xle.test.mjs +13 -0
- package/package.json +10 -11
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/lib/update-check.mjs +0 -83
- package/clients/cli/lib/update-check.test.mjs +0 -137
- package/clients/cli/update-hint-commands.test.mjs +0 -54
package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import * as stylex from '@stylexjs/stylex';
|
|
6
|
+
import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
|
|
7
|
+
import {Card} from '@astryxdesign/core/Card';
|
|
8
|
+
import {Grid} from '@astryxdesign/core/Grid';
|
|
9
|
+
import {VStack} from '@astryxdesign/core/Layout';
|
|
10
|
+
import {Heading, Text} from '@astryxdesign/core/Text';
|
|
11
|
+
import {
|
|
12
|
+
borderVars,
|
|
13
|
+
colorVars,
|
|
14
|
+
radiusVars,
|
|
15
|
+
} from '@astryxdesign/core/theme/tokens.stylex';
|
|
16
|
+
|
|
17
|
+
const styles = stylex.create({
|
|
18
|
+
// A hairline frame so the nested viewport's edge — the edge the gesture
|
|
19
|
+
// meets — is visible.
|
|
20
|
+
sectionFrame: {
|
|
21
|
+
borderWidth: borderVars['--border-width'],
|
|
22
|
+
borderStyle: 'solid',
|
|
23
|
+
borderColor: colorVars['--color-border'],
|
|
24
|
+
borderRadius: radiusVars['--radius-element'],
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const SHARED = [
|
|
29
|
+
{id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
|
|
30
|
+
{id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
|
|
31
|
+
{id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
|
|
32
|
+
{id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
|
|
33
|
+
{id: 'tax', title: 'Tax region notes', meta: 'Hugo Bernard'},
|
|
34
|
+
{id: 'sso', title: 'SSO rollout plan', meta: 'Sofia Marchetti'},
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
const ARCHIVED = [
|
|
38
|
+
{id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
|
|
39
|
+
{id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
|
|
40
|
+
{id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
|
|
41
|
+
{id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
|
|
42
|
+
{id: 'survey', title: 'Q4 survey results', meta: 'Archived in January'},
|
|
43
|
+
{id: 'offsite', title: 'Offsite agenda', meta: 'Archived last year'},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
function FileGrid({
|
|
47
|
+
files,
|
|
48
|
+
}: {
|
|
49
|
+
files: Array<{id: string; title: string; meta: string}>;
|
|
50
|
+
}) {
|
|
51
|
+
return (
|
|
52
|
+
<Grid columns={2} gap={2}>
|
|
53
|
+
{files.map(file => (
|
|
54
|
+
<Card key={file.id} variant="muted" padding={3}>
|
|
55
|
+
<VStack gap={1}>
|
|
56
|
+
<Text weight="medium" maxLines={1}>
|
|
57
|
+
{file.title}
|
|
58
|
+
</Text>
|
|
59
|
+
<Text type="supporting" maxLines={1}>
|
|
60
|
+
{file.meta}
|
|
61
|
+
</Text>
|
|
62
|
+
</VStack>
|
|
63
|
+
</Card>
|
|
64
|
+
))}
|
|
65
|
+
</Grid>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export default function ScrollableAreaOverscrollChaining() {
|
|
70
|
+
return (
|
|
71
|
+
<Card width={400} padding={0}>
|
|
72
|
+
<ScrollableArea
|
|
73
|
+
axis="block"
|
|
74
|
+
role="region"
|
|
75
|
+
label="Workspace files"
|
|
76
|
+
height={300}
|
|
77
|
+
padding={4}>
|
|
78
|
+
<VStack gap={4}>
|
|
79
|
+
<VStack gap={0.5}>
|
|
80
|
+
<Heading level={3}>Workspace files</Heading>
|
|
81
|
+
<Text type="supporting">Two sections, two edge policies</Text>
|
|
82
|
+
</VStack>
|
|
83
|
+
|
|
84
|
+
<VStack gap={2}>
|
|
85
|
+
<Text type="label" color="secondary">
|
|
86
|
+
Shared with you
|
|
87
|
+
</Text>
|
|
88
|
+
{/* Default overscroll="allow": a gesture that reaches this
|
|
89
|
+
section's end carries on scrolling the panel behind it. */}
|
|
90
|
+
<ScrollableArea
|
|
91
|
+
axis="block"
|
|
92
|
+
label="Shared with you"
|
|
93
|
+
height={150}
|
|
94
|
+
padding={2}
|
|
95
|
+
xstyle={styles.sectionFrame}>
|
|
96
|
+
<FileGrid files={SHARED} />
|
|
97
|
+
</ScrollableArea>
|
|
98
|
+
<Text type="supporting">
|
|
99
|
+
Scroll past the end and the panel keeps going.
|
|
100
|
+
</Text>
|
|
101
|
+
</VStack>
|
|
102
|
+
|
|
103
|
+
<VStack gap={2}>
|
|
104
|
+
<Text type="label" color="secondary">
|
|
105
|
+
Archived
|
|
106
|
+
</Text>
|
|
107
|
+
{/* overscroll="contain" stops the gesture at this section's
|
|
108
|
+
edge, so the panel behind it stays put. */}
|
|
109
|
+
<ScrollableArea
|
|
110
|
+
axis="block"
|
|
111
|
+
label="Archived"
|
|
112
|
+
overscroll="contain"
|
|
113
|
+
height={150}
|
|
114
|
+
padding={2}
|
|
115
|
+
xstyle={styles.sectionFrame}>
|
|
116
|
+
<FileGrid files={ARCHIVED} />
|
|
117
|
+
</ScrollableArea>
|
|
118
|
+
<Text type="supporting">
|
|
119
|
+
Scroll past the end and the panel stays where it is.
|
|
120
|
+
</Text>
|
|
121
|
+
</VStack>
|
|
122
|
+
</VStack>
|
|
123
|
+
</ScrollableArea>
|
|
124
|
+
</Card>
|
|
125
|
+
);
|
|
126
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'ScrollableArea',
|
|
7
|
+
name: 'ScrollableArea',
|
|
8
|
+
displayName: 'Scrollable Area',
|
|
9
|
+
description:
|
|
10
|
+
'A fixed-height file panel that scrolls on the block axis; the heading sits inside the viewport, so it scrolls away with the content.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 1,
|
|
13
|
+
isShowcase: true,
|
|
14
|
+
componentsUsed: ['ScrollableArea', 'Card', 'Grid'],
|
|
15
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
|
|
6
|
+
import {Card} from '@astryxdesign/core/Card';
|
|
7
|
+
import {Grid} from '@astryxdesign/core/Grid';
|
|
8
|
+
import {VStack} from '@astryxdesign/core/Layout';
|
|
9
|
+
import {Heading, Text} from '@astryxdesign/core/Text';
|
|
10
|
+
|
|
11
|
+
const SECTIONS = [
|
|
12
|
+
{
|
|
13
|
+
label: 'Recently opened',
|
|
14
|
+
files: [
|
|
15
|
+
{id: 'brief', title: 'Q3 launch brief', meta: 'Edited 2 days ago'},
|
|
16
|
+
{id: 'pricing', title: 'Pricing rework', meta: 'Edited 3 days ago'},
|
|
17
|
+
{
|
|
18
|
+
id: 'onboarding',
|
|
19
|
+
title: 'Onboarding flow v4',
|
|
20
|
+
meta: 'Edited 4 days ago',
|
|
21
|
+
},
|
|
22
|
+
{id: 'macros', title: 'Support macros', meta: 'Edited last week'},
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
label: 'Shared with you',
|
|
27
|
+
files: [
|
|
28
|
+
{id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
|
|
29
|
+
{id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
|
|
30
|
+
{id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
|
|
31
|
+
{id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
|
|
32
|
+
],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
label: 'Archived',
|
|
36
|
+
files: [
|
|
37
|
+
{id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
|
|
38
|
+
{id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
|
|
39
|
+
{id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
|
|
40
|
+
{id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
export default function ScrollableAreaShowcase() {
|
|
46
|
+
return (
|
|
47
|
+
<Card width={380} padding={0}>
|
|
48
|
+
{/* The heading sits inside the viewport, so it scrolls away with the
|
|
49
|
+
content instead of staying pinned above it. */}
|
|
50
|
+
<ScrollableArea
|
|
51
|
+
axis="block"
|
|
52
|
+
role="region"
|
|
53
|
+
label="Workspace files"
|
|
54
|
+
height={300}
|
|
55
|
+
padding={4}>
|
|
56
|
+
<VStack gap={4}>
|
|
57
|
+
<VStack gap={0.5}>
|
|
58
|
+
<Heading level={3}>Workspace files</Heading>
|
|
59
|
+
<Text type="supporting">12 files across 3 sections</Text>
|
|
60
|
+
</VStack>
|
|
61
|
+
{SECTIONS.map(section => (
|
|
62
|
+
<VStack key={section.label} gap={2}>
|
|
63
|
+
<Text type="label" color="secondary">
|
|
64
|
+
{section.label}
|
|
65
|
+
</Text>
|
|
66
|
+
<Grid columns={2} gap={2}>
|
|
67
|
+
{section.files.map(file => (
|
|
68
|
+
<Card key={file.id} variant="muted" padding={3}>
|
|
69
|
+
<VStack gap={1}>
|
|
70
|
+
<Text weight="medium" maxLines={1}>
|
|
71
|
+
{file.title}
|
|
72
|
+
</Text>
|
|
73
|
+
<Text type="supporting" maxLines={1}>
|
|
74
|
+
{file.meta}
|
|
75
|
+
</Text>
|
|
76
|
+
</VStack>
|
|
77
|
+
</Card>
|
|
78
|
+
))}
|
|
79
|
+
</Grid>
|
|
80
|
+
</VStack>
|
|
81
|
+
))}
|
|
82
|
+
</VStack>
|
|
83
|
+
</ScrollableArea>
|
|
84
|
+
</Card>
|
|
85
|
+
);
|
|
86
|
+
}
|
package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'ScrollableArea',
|
|
7
|
+
name: 'ScrollableArea — Sticky Section Labels',
|
|
8
|
+
displayName: 'Scrollable Area — Sticky Section Labels',
|
|
9
|
+
description:
|
|
10
|
+
'A scrollable viewport is the containing block for position: sticky, so section labels pin to the top edge of the list instead of the page.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 1,
|
|
13
|
+
componentsUsed: ['ScrollableArea', 'Card', 'Grid'],
|
|
14
|
+
};
|
package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import * as stylex from '@stylexjs/stylex';
|
|
6
|
+
import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
|
|
7
|
+
import {Card} from '@astryxdesign/core/Card';
|
|
8
|
+
import {Grid} from '@astryxdesign/core/Grid';
|
|
9
|
+
import {VStack} from '@astryxdesign/core/Layout';
|
|
10
|
+
import {Heading, Text} from '@astryxdesign/core/Text';
|
|
11
|
+
import {colorVars, spacingVars} from '@astryxdesign/core/theme/tokens.stylex';
|
|
12
|
+
|
|
13
|
+
const styles = stylex.create({
|
|
14
|
+
sectionLabel: {
|
|
15
|
+
position: 'sticky',
|
|
16
|
+
insetBlockStart: 0,
|
|
17
|
+
zIndex: 1,
|
|
18
|
+
backgroundColor: colorVars['--color-background-card'],
|
|
19
|
+
paddingBlock: spacingVars['--spacing-2'],
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const SECTIONS = [
|
|
24
|
+
{
|
|
25
|
+
label: 'Recently opened',
|
|
26
|
+
files: [
|
|
27
|
+
{id: 'brief', title: 'Q3 launch brief', meta: 'Edited 2 days ago'},
|
|
28
|
+
{id: 'pricing', title: 'Pricing rework', meta: 'Edited 3 days ago'},
|
|
29
|
+
{
|
|
30
|
+
id: 'onboarding',
|
|
31
|
+
title: 'Onboarding flow v4',
|
|
32
|
+
meta: 'Edited 4 days ago',
|
|
33
|
+
},
|
|
34
|
+
{id: 'macros', title: 'Support macros', meta: 'Edited last week'},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
label: 'Shared with you',
|
|
39
|
+
files: [
|
|
40
|
+
{id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
|
|
41
|
+
{id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
|
|
42
|
+
{id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
|
|
43
|
+
{id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
label: 'Archived',
|
|
48
|
+
files: [
|
|
49
|
+
{id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
|
|
50
|
+
{id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
|
|
51
|
+
{id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
|
|
52
|
+
{id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
export default function ScrollableAreaStickyGroupHeaders() {
|
|
58
|
+
return (
|
|
59
|
+
<Card width={380} padding={0}>
|
|
60
|
+
{/* The viewport is the containing block for position: sticky. The panel
|
|
61
|
+
heading is ordinary content and scrolls away; the section labels
|
|
62
|
+
below it pin to the top of the list, not the page. */}
|
|
63
|
+
<ScrollableArea
|
|
64
|
+
axis="block"
|
|
65
|
+
role="region"
|
|
66
|
+
label="Workspace files"
|
|
67
|
+
height={300}
|
|
68
|
+
padding={4}>
|
|
69
|
+
<VStack gap={0.5} paddingBlockEnd={2}>
|
|
70
|
+
<Heading level={3}>Workspace files</Heading>
|
|
71
|
+
<Text type="supporting">12 files across 3 sections</Text>
|
|
72
|
+
</VStack>
|
|
73
|
+
{SECTIONS.map(section => (
|
|
74
|
+
<section key={section.label}>
|
|
75
|
+
<div {...stylex.props(styles.sectionLabel)}>
|
|
76
|
+
<Text type="label" color="secondary">
|
|
77
|
+
{section.label}
|
|
78
|
+
</Text>
|
|
79
|
+
</div>
|
|
80
|
+
<Grid columns={2} gap={2}>
|
|
81
|
+
{section.files.map(file => (
|
|
82
|
+
<Card key={file.id} variant="muted" padding={3}>
|
|
83
|
+
<VStack gap={1}>
|
|
84
|
+
<Text weight="medium" maxLines={1}>
|
|
85
|
+
{file.title}
|
|
86
|
+
</Text>
|
|
87
|
+
<Text type="supporting" maxLines={1}>
|
|
88
|
+
{file.meta}
|
|
89
|
+
</Text>
|
|
90
|
+
</VStack>
|
|
91
|
+
</Card>
|
|
92
|
+
))}
|
|
93
|
+
</Grid>
|
|
94
|
+
</section>
|
|
95
|
+
))}
|
|
96
|
+
</ScrollableArea>
|
|
97
|
+
</Card>
|
|
98
|
+
);
|
|
99
|
+
}
|
package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'ScrollableArea',
|
|
7
|
+
name: 'ScrollableArea — Sticky Passthrough',
|
|
8
|
+
displayName: 'Scrollable Area — Sticky Passthrough',
|
|
9
|
+
description:
|
|
10
|
+
'A section whose content fits clips instead of scrolling, so its sticky label passes outward and pins to the panel edge. The next section sets stickyContainment="always" and keeps its label in its own box.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 1,
|
|
13
|
+
componentsUsed: ['ScrollableArea', 'Card', 'Grid'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import * as stylex from '@stylexjs/stylex';
|
|
6
|
+
import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
|
|
7
|
+
import {Card} from '@astryxdesign/core/Card';
|
|
8
|
+
import {Grid} from '@astryxdesign/core/Grid';
|
|
9
|
+
import {VStack} from '@astryxdesign/core/Layout';
|
|
10
|
+
import {Heading, Text} from '@astryxdesign/core/Text';
|
|
11
|
+
import {colorVars, spacingVars} from '@astryxdesign/core/theme/tokens.stylex';
|
|
12
|
+
|
|
13
|
+
const styles = stylex.create({
|
|
14
|
+
sectionLabel: {
|
|
15
|
+
position: 'sticky',
|
|
16
|
+
insetBlockStart: 0,
|
|
17
|
+
zIndex: 1,
|
|
18
|
+
backgroundColor: colorVars['--color-background-card'],
|
|
19
|
+
paddingBlock: spacingVars['--spacing-2'],
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const SHARED = [
|
|
24
|
+
{id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
|
|
25
|
+
{id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
|
|
26
|
+
{id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
|
|
27
|
+
{id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
|
|
28
|
+
{id: 'tax', title: 'Tax region notes', meta: 'Hugo Bernard'},
|
|
29
|
+
{id: 'sso', title: 'SSO rollout plan', meta: 'Sofia Marchetti'},
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
const TEMPLATES = [
|
|
33
|
+
{id: 'weekly', title: 'Weekly report', meta: 'Used 24 times'},
|
|
34
|
+
{id: 'checklist', title: 'Launch checklist', meta: 'Used 18 times'},
|
|
35
|
+
{id: 'review', title: 'Design review', meta: 'Used 11 times'},
|
|
36
|
+
{id: 'retro', title: 'Retro board', meta: 'Used 9 times'},
|
|
37
|
+
{id: 'brief', title: 'Project brief', meta: 'Used 7 times'},
|
|
38
|
+
{id: 'postmortem', title: 'Postmortem', meta: 'Used 4 times'},
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const ARCHIVED = [
|
|
42
|
+
{id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
|
|
43
|
+
{id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
|
|
44
|
+
{id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
|
|
45
|
+
{id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
|
|
46
|
+
{id: 'survey', title: 'Q4 survey results', meta: 'Archived in January'},
|
|
47
|
+
{id: 'offsite', title: 'Offsite agenda', meta: 'Archived last year'},
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
function FileGrid({
|
|
51
|
+
files,
|
|
52
|
+
}: {
|
|
53
|
+
files: Array<{id: string; title: string; meta: string}>;
|
|
54
|
+
}) {
|
|
55
|
+
return (
|
|
56
|
+
<Grid columns={2} gap={2}>
|
|
57
|
+
{files.map(file => (
|
|
58
|
+
<Card key={file.id} variant="muted" padding={3}>
|
|
59
|
+
<VStack gap={1}>
|
|
60
|
+
<Text weight="medium" maxLines={1}>
|
|
61
|
+
{file.title}
|
|
62
|
+
</Text>
|
|
63
|
+
<Text type="supporting" maxLines={1}>
|
|
64
|
+
{file.meta}
|
|
65
|
+
</Text>
|
|
66
|
+
</VStack>
|
|
67
|
+
</Card>
|
|
68
|
+
))}
|
|
69
|
+
</Grid>
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export default function ScrollableAreaStickyPassthrough() {
|
|
74
|
+
return (
|
|
75
|
+
<Card width={400} padding={0}>
|
|
76
|
+
<ScrollableArea
|
|
77
|
+
axis="block"
|
|
78
|
+
role="region"
|
|
79
|
+
label="Workspace files"
|
|
80
|
+
height={300}
|
|
81
|
+
padding={4}>
|
|
82
|
+
<VStack gap={0.5} paddingBlockEnd={2}>
|
|
83
|
+
<Heading level={3}>Workspace files</Heading>
|
|
84
|
+
<Text type="supporting">18 files across 3 sections</Text>
|
|
85
|
+
</VStack>
|
|
86
|
+
|
|
87
|
+
{/* This section's content fits, so its viewport clips instead of
|
|
88
|
+
scrolling and never becomes the Sticky boundary: the label
|
|
89
|
+
passes outward and pins to the panel's edge. */}
|
|
90
|
+
<ScrollableArea axis="block" label="Shared with you">
|
|
91
|
+
<div {...stylex.props(styles.sectionLabel)}>
|
|
92
|
+
<Text type="label" color="secondary">
|
|
93
|
+
Shared with you
|
|
94
|
+
</Text>
|
|
95
|
+
</div>
|
|
96
|
+
<FileGrid files={SHARED} />
|
|
97
|
+
</ScrollableArea>
|
|
98
|
+
|
|
99
|
+
{/* Same fitting content, but containment is explicit: this viewport
|
|
100
|
+
stays the Sticky boundary, so its label leaves with the box. */}
|
|
101
|
+
<ScrollableArea
|
|
102
|
+
axis="block"
|
|
103
|
+
label="Templates"
|
|
104
|
+
stickyContainment="always">
|
|
105
|
+
<div {...stylex.props(styles.sectionLabel)}>
|
|
106
|
+
<Text type="label" color="secondary">
|
|
107
|
+
Templates
|
|
108
|
+
</Text>
|
|
109
|
+
</div>
|
|
110
|
+
<FileGrid files={TEMPLATES} />
|
|
111
|
+
</ScrollableArea>
|
|
112
|
+
|
|
113
|
+
<div {...stylex.props(styles.sectionLabel)}>
|
|
114
|
+
<Text type="label" color="secondary">
|
|
115
|
+
Archived
|
|
116
|
+
</Text>
|
|
117
|
+
</div>
|
|
118
|
+
<FileGrid files={ARCHIVED} />
|
|
119
|
+
</ScrollableArea>
|
|
120
|
+
</Card>
|
|
121
|
+
);
|
|
122
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'ScrollableArea',
|
|
7
|
+
name: 'ScrollableArea — Two-Axis Board',
|
|
8
|
+
displayName: 'Scrollable Area — Two-Axis Board',
|
|
9
|
+
description:
|
|
10
|
+
'axis="both" gives the content box max-content inline sizing, so a board wider and taller than its panel scrolls on both axes from one viewport.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 1,
|
|
13
|
+
componentsUsed: ['ScrollableArea', 'Card', 'Grid'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {ScrollableArea} from '@astryxdesign/core/ScrollableArea';
|
|
6
|
+
import {Card} from '@astryxdesign/core/Card';
|
|
7
|
+
import {HStack, VStack} from '@astryxdesign/core/Layout';
|
|
8
|
+
import {Heading, Text} from '@astryxdesign/core/Text';
|
|
9
|
+
|
|
10
|
+
const COLUMNS = [
|
|
11
|
+
{
|
|
12
|
+
label: 'Recently opened',
|
|
13
|
+
files: [
|
|
14
|
+
{id: 'brief', title: 'Q3 launch brief', meta: 'Edited 2 days ago'},
|
|
15
|
+
{id: 'pricing', title: 'Pricing rework', meta: 'Edited 3 days ago'},
|
|
16
|
+
{
|
|
17
|
+
id: 'onboarding',
|
|
18
|
+
title: 'Onboarding flow v4',
|
|
19
|
+
meta: 'Edited 4 days ago',
|
|
20
|
+
},
|
|
21
|
+
{id: 'macros', title: 'Support macros', meta: 'Edited last week'},
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: 'Shared with you',
|
|
26
|
+
files: [
|
|
27
|
+
{id: 'brand', title: 'Brand refresh', meta: 'Priya Raman'},
|
|
28
|
+
{id: 'checkout', title: 'Checkout audit', meta: 'Tomas Lindqvist'},
|
|
29
|
+
{id: 'partner', title: 'Partner deck', meta: 'Ines Okafor'},
|
|
30
|
+
{id: 'research', title: 'Research synthesis', meta: 'Mei Watanabe'},
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
label: 'Templates',
|
|
35
|
+
files: [
|
|
36
|
+
{id: 'weekly', title: 'Weekly report', meta: 'Used 24 times'},
|
|
37
|
+
{id: 'checklist', title: 'Launch checklist', meta: 'Used 18 times'},
|
|
38
|
+
{id: 'review', title: 'Design review', meta: 'Used 11 times'},
|
|
39
|
+
{id: 'retro', title: 'Retro board', meta: 'Used 9 times'},
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
label: 'Archived',
|
|
44
|
+
files: [
|
|
45
|
+
{id: 'roadmap', title: '2025 roadmap', meta: 'Archived in March'},
|
|
46
|
+
{id: 'legacy', title: 'Legacy pricing', meta: 'Archived in March'},
|
|
47
|
+
{id: 'kit', title: 'Old brand kit', meta: 'Archived in January'},
|
|
48
|
+
{id: 'beta', title: 'Beta feedback', meta: 'Archived in January'},
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
export default function ScrollableAreaTwoAxisBoard() {
|
|
54
|
+
return (
|
|
55
|
+
<Card width={420} padding={0}>
|
|
56
|
+
{/* axis="both" gives the content box max-content inline sizing, so the
|
|
57
|
+
board is free to be wider than the viewport on both axes. The
|
|
58
|
+
heading is inside that box and travels with it. */}
|
|
59
|
+
<ScrollableArea
|
|
60
|
+
axis="both"
|
|
61
|
+
role="region"
|
|
62
|
+
label="Workspace board"
|
|
63
|
+
height={300}
|
|
64
|
+
padding={4}>
|
|
65
|
+
<VStack gap={4}>
|
|
66
|
+
<VStack gap={0.5}>
|
|
67
|
+
<Heading level={3}>Workspace board</Heading>
|
|
68
|
+
<Text type="supporting">16 files across 4 sections</Text>
|
|
69
|
+
</VStack>
|
|
70
|
+
<HStack gap={3} vAlign="start">
|
|
71
|
+
{COLUMNS.map(column => (
|
|
72
|
+
<VStack key={column.label} gap={2} width={180}>
|
|
73
|
+
<Text type="label" color="secondary">
|
|
74
|
+
{column.label}
|
|
75
|
+
</Text>
|
|
76
|
+
{column.files.map(file => (
|
|
77
|
+
<Card key={file.id} variant="muted" padding={3}>
|
|
78
|
+
<VStack gap={1}>
|
|
79
|
+
<Text weight="medium" maxLines={1}>
|
|
80
|
+
{file.title}
|
|
81
|
+
</Text>
|
|
82
|
+
<Text type="supporting" maxLines={1}>
|
|
83
|
+
{file.meta}
|
|
84
|
+
</Text>
|
|
85
|
+
</VStack>
|
|
86
|
+
</Card>
|
|
87
|
+
))}
|
|
88
|
+
</VStack>
|
|
89
|
+
))}
|
|
90
|
+
</HStack>
|
|
91
|
+
</VStack>
|
|
92
|
+
</ScrollableArea>
|
|
93
|
+
</Card>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** @type {import('@astryxdesign/cli/authoring').TemplateDoc} */
|
|
4
|
+
export const doc = {
|
|
5
|
+
type: 'block',
|
|
6
|
+
exampleFor: 'useTableSelection',
|
|
7
|
+
name: 'Table: Bulk Actions',
|
|
8
|
+
displayName: 'Table: Bulk Actions',
|
|
9
|
+
description:
|
|
10
|
+
'Controlled row selection with the reusable TableSelectionToolbar rendered in flow above the table. Product actions occupy the logical start; synchronized selection count and complete clear action occupy the logical end.',
|
|
11
|
+
isReady: true,
|
|
12
|
+
aspectRatio: 16 / 9,
|
|
13
|
+
componentsUsed: ['Table', 'TableSelectionToolbar', 'Button'],
|
|
14
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
import {useState} from 'react';
|
|
6
|
+
import {Button} from '@astryxdesign/core/Button';
|
|
7
|
+
import {
|
|
8
|
+
Table,
|
|
9
|
+
TableSelectionToolbar,
|
|
10
|
+
useTableSelection,
|
|
11
|
+
useTableSelectionState,
|
|
12
|
+
proportional,
|
|
13
|
+
} from '@astryxdesign/core/Table';
|
|
14
|
+
import type {TableColumn} from '@astryxdesign/core/Table';
|
|
15
|
+
|
|
16
|
+
interface User extends Record<string, unknown> {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
email: string;
|
|
20
|
+
role: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const users: User[] = [
|
|
24
|
+
{id: '1', name: 'Alice', email: 'alice@example.com', role: 'Engineer'},
|
|
25
|
+
{id: '2', name: 'Bob', email: 'bob@example.com', role: 'Designer'},
|
|
26
|
+
{id: '3', name: 'Charlie', email: 'charlie@example.com', role: 'Manager'},
|
|
27
|
+
{id: '4', name: 'Diana', email: 'diana@example.com', role: 'Engineer'},
|
|
28
|
+
{id: '5', name: 'Eve', email: 'eve@example.com', role: 'Admin'},
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const columns: TableColumn<User>[] = [
|
|
32
|
+
{key: 'name', header: 'Name', width: proportional(1)},
|
|
33
|
+
{key: 'email', header: 'Email', width: proportional(2)},
|
|
34
|
+
{key: 'role', header: 'Role', width: proportional(1)},
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
export default function TableBulkActionsTable() {
|
|
38
|
+
const [selectedKeys, setSelectedKeys] = useState<Set<string>>(new Set());
|
|
39
|
+
|
|
40
|
+
const {selectionConfig, selectionState} = useTableSelectionState<User>({
|
|
41
|
+
data: users,
|
|
42
|
+
idKey: 'id',
|
|
43
|
+
selectedKeys,
|
|
44
|
+
setSelectedKeys,
|
|
45
|
+
});
|
|
46
|
+
const selectionPlugin = useTableSelection<User>(selectionConfig);
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<div>
|
|
50
|
+
<TableSelectionToolbar
|
|
51
|
+
selection={selectionState}
|
|
52
|
+
startContent={
|
|
53
|
+
<>
|
|
54
|
+
<Button label="Export" variant="ghost" onClick={() => {}} />
|
|
55
|
+
<Button
|
|
56
|
+
label="Delete"
|
|
57
|
+
variant="ghost"
|
|
58
|
+
onClick={selectionState.clearSelection}
|
|
59
|
+
/>
|
|
60
|
+
</>
|
|
61
|
+
}
|
|
62
|
+
/>
|
|
63
|
+
<Table
|
|
64
|
+
data={users}
|
|
65
|
+
columns={columns}
|
|
66
|
+
idKey="id"
|
|
67
|
+
plugins={{selection: selectionPlugin}}
|
|
68
|
+
/>
|
|
69
|
+
</div>
|
|
70
|
+
);
|
|
71
|
+
}
|