@astryxdesign/cli 0.6.3 → 0.6.4-canary.078fd25
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 +152 -107
- 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 +22 -10
- package/api/build/build.test.mjs +219 -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 +208 -53
- 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 +31 -12
- package/api/component/_adapter.mjs +79 -15
- package/api/component/component.d.mts +6 -3
- package/api/component/component.doc.mjs +49 -19
- package/api/component/component.mjs +339 -22
- package/api/component/component.test.mjs +38 -0
- package/api/component/component.type.d.mts +47 -11
- package/api/component/component.type.mjs +76 -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 +277 -41
- package/api/docs/_adapter.mjs +993 -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/docOverlays.test.mjs +27 -1
- 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.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/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 +104 -1
- package/api/doctor/doctor.doc.mjs +18 -8
- package/api/doctor/doctor.mjs +635 -7
- package/api/doctor/doctor.test.mjs +732 -11
- 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 +27 -14
- package/api/hook/_adapter.mjs +19 -5
- package/api/hook/hook.doc.mjs +7 -3
- 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 +2 -1
- package/api/index.mjs +6 -3
- package/api/init/init.doc.mjs +22 -12
- 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 +56 -65
- package/api/integration/add-theme.test.mjs +139 -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 +5 -4
- package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
- package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
- package/api/integration/pack-check.lifecycle-output.test.mjs +107 -0
- package/api/integration/pack-check.mjs +160 -11
- package/api/integration/pack-check.test.mjs +477 -47
- package/api/integration/pack-check.type.d.mts +26 -2
- package/api/integration/pack-check.type.mjs +15 -2
- 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 +2 -1
- package/api/json/envelope-types.test.mjs +76 -0
- package/api/json/index.ts +2 -0
- package/api/json/isError.doc.mjs +2 -1
- 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 +89 -12
- package/api/search/search.doc.mjs +8 -2
- package/api/search/search.mjs +697 -97
- 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 +8 -5
- package/api/swizzle/swizzle.type.d.mts +2 -2
- package/api/swizzle/swizzle.type.mjs +2 -2
- package/api/template/copy/copy.mjs +18 -24
- package/api/template/copy/copy.test.mjs +26 -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 +32 -9
- 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 +2 -2
- 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 +12 -12
- package/api/theme/themeBuild.doc.mjs +21 -17
- package/api/theme/themeList.doc.mjs +6 -3
- package/api/theme/themeListAvailable.doc.mjs +6 -3
- package/api/theme/themePaletteGenerate.doc.mjs +16 -8
- package/api/theme/themeTargets.doc.mjs +4 -2
- package/api/theme/themeTemplate.doc.mjs +8 -3
- 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/files-changed.test.mjs +111 -0
- package/api/upgrade/run/run.mjs +358 -59
- package/api/upgrade/status/status.mjs +2 -2
- package/api/upgrade/upgrade.doc.mjs +32 -23
- package/api/upgrade/upgrade.type.d.mts +43 -5
- package/api/upgrade/upgrade.type.mjs +29 -13
- package/assets/codemods/__tests__/registry.test.mjs +1 -0
- package/assets/codemods/__tests__/runner.test.mjs +332 -8
- package/assets/codemods/file-count.test.mjs +163 -0
- package/assets/codemods/integration-discovery.mjs +48 -4
- package/assets/codemods/integration-discovery.test.mjs +73 -0
- package/assets/codemods/integration-runner.mjs +59 -7
- 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 +353 -104
- 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 +12 -1
- package/assets/docs/authoring.doc.mjs +14 -0
- package/assets/docs/browser-support.doc.mjs +11 -11
- package/assets/docs/color.doc.mjs +8 -2
- package/assets/docs/elevation.doc.mjs +6 -4
- package/assets/docs/getting-started.doc.mjs +6 -17
- package/assets/docs/icons.doc.mjs +2 -21
- package/assets/docs/illustrations.doc.mjs +7 -15
- package/assets/docs/internationalization.doc.mjs +7 -5
- package/assets/docs/layout.doc.dense.mjs +132 -84
- package/assets/docs/layout.doc.mjs +134 -78
- package/assets/docs/migration.doc.mjs +19 -21
- package/assets/docs/motion.doc.mjs +16 -3
- package/assets/docs/principles.doc.dense.mjs +5 -5
- package/assets/docs/principles.doc.mjs +14 -6
- package/assets/docs/principles.doc.zh.mjs +6 -6
- package/assets/docs/shape.doc.mjs +8 -3
- package/assets/docs/spacing.doc.mjs +7 -2
- package/assets/docs/styling-libraries.doc.mjs +10 -6
- package/assets/docs/styling.doc.mjs +22 -26
- package/assets/docs/theme.doc.dense.mjs +58 -18
- package/assets/docs/theme.doc.mjs +60 -50
- package/assets/docs/theme.doc.zh.mjs +9 -8
- package/assets/docs/tokens.doc.dense.mjs +2 -2
- package/assets/docs/tokens.doc.mjs +390 -9
- package/assets/docs/tokens.doc.zh.mjs +2 -2
- package/assets/docs/tree/add-a-component.doc.mjs +75 -0
- package/assets/docs/tree/add-a-theme.doc.mjs +85 -0
- package/assets/docs/tree/add-a-topic.doc.mjs +144 -0
- package/assets/docs/tree/agent-guidance.doc.mjs +138 -0
- package/assets/docs/tree/api.doc.mjs +30 -0
- package/assets/docs/tree/block-template.doc.mjs +130 -0
- package/assets/docs/tree/build-the-template.doc.mjs +28 -0
- package/assets/docs/tree/building-blocks.doc.mjs +46 -0
- package/assets/docs/tree/check-your-docs.doc.mjs +137 -0
- package/assets/docs/tree/checks.doc.mjs +119 -0
- package/assets/docs/tree/cli.doc.mjs +23 -0
- package/assets/docs/tree/codemods.doc.mjs +147 -0
- package/assets/docs/tree/commands.doc.mjs +25 -0
- package/assets/docs/tree/component-family.doc.mjs +113 -0
- package/assets/docs/tree/component-imports.doc.mjs +69 -0
- package/assets/docs/tree/component-lookups.doc.mjs +149 -0
- package/assets/docs/tree/components.doc.mjs +23 -0
- package/assets/docs/tree/configuration.doc.mjs +23 -0
- package/assets/docs/tree/debug-and-gap-reports.doc.mjs +182 -0
- package/assets/docs/tree/define-the-theme.doc.mjs +118 -0
- package/assets/docs/tree/describe-the-component.doc.mjs +57 -0
- package/assets/docs/tree/docs.doc.mjs +21 -0
- package/assets/docs/tree/document-the-template.doc.mjs +28 -0
- package/assets/docs/tree/document-the-theme.doc.mjs +68 -0
- package/assets/docs/tree/export-template-assets.doc.mjs +147 -0
- package/assets/docs/tree/extend-or-replace.doc.mjs +103 -0
- package/assets/docs/tree/fonts-and-assets.doc.mjs +106 -0
- package/assets/docs/tree/generate-a-palette.doc.mjs +66 -0
- package/assets/docs/tree/grade-template-with-agent.doc.mjs +105 -0
- package/assets/docs/tree/help.doc.mjs +16 -0
- package/assets/docs/tree/integrations.doc.mjs +40 -0
- package/assets/docs/tree/links.doc.mjs +98 -0
- package/assets/docs/tree/package-and-test.doc.mjs +32 -0
- package/assets/docs/tree/page-template.doc.mjs +71 -0
- package/assets/docs/tree/publishing.doc.mjs +111 -0
- package/assets/docs/tree/quick-start.doc.mjs +272 -0
- package/assets/docs/tree/replace-a-core-component.doc.mjs +104 -0
- package/assets/docs/tree/replace-a-core-template.doc.mjs +172 -0
- package/assets/docs/tree/sections-and-placement.doc.mjs +108 -0
- package/assets/docs/tree/see-it-in-an-app.doc.mjs +59 -0
- package/assets/docs/tree/ship.doc.mjs +16 -0
- package/assets/docs/tree/short-and-findable.doc.mjs +108 -0
- package/assets/docs/tree/single-component.doc.mjs +165 -0
- package/assets/docs/tree/start-a-template.doc.mjs +143 -0
- package/assets/docs/tree/subcomponent.doc.mjs +115 -0
- package/assets/docs/tree/template-assets.doc.mjs +64 -0
- package/assets/docs/tree/template-doc-overview.doc.mjs +109 -0
- package/assets/docs/tree/template-fonts.doc.mjs +102 -0
- package/assets/docs/tree/template-grading-rubric.doc.mjs +452 -0
- package/assets/docs/tree/template-icons.doc.mjs +97 -0
- package/assets/docs/tree/template-images-media.doc.mjs +127 -0
- package/assets/docs/tree/template-styles.doc.mjs +93 -0
- package/assets/docs/tree/templates.doc.mjs +34 -0
- package/assets/docs/tree/test-in-an-app.doc.mjs +115 -0
- package/assets/docs/tree/test-template-in-app.doc.mjs +128 -0
- package/assets/docs/tree/themes.doc.mjs +39 -0
- package/assets/docs/tree/troubleshooting.doc.mjs +149 -0
- package/assets/docs/tree/upgrading.doc.mjs +103 -0
- package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +51 -0
- package/assets/docs/tree/verify-packed-template.doc.mjs +77 -0
- package/assets/docs/tree/versioning.doc.mjs +161 -0
- package/assets/docs/tree/write-good-templates.doc.mjs +64 -0
- package/assets/docs/tree/write-the-template-file.doc.mjs +154 -0
- package/assets/docs/typography.doc.mjs +24 -4
- package/assets/docs/working-with-ai.doc.mjs +34 -26
- 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 +11 -3
- 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 +792 -24
- package/authoring/doctypes/_schema.mjs +549 -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 +43 -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 +12 -3
- package/authoring/doctypes/component/parse.d.mts +2 -2
- package/authoring/doctypes/component/parse.mjs +1 -1
- package/authoring/doctypes/component/type.ts +14 -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 +55 -6
- package/authoring/doctypes/reference/type.ts +75 -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 +2 -2
- 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 +22 -13
- 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 +153 -61
- package/clients/cli/commands/component-batch.test.mjs +341 -0
- package/clients/cli/commands/component-ownership.test.mjs +92 -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 +28 -10
- 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 +295 -38
- package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
- package/clients/cli/commands/doctor-integration-docs.doc.mjs +6 -5
- 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 +143 -8
- package/clients/cli/commands/doctor.doc.mjs +4 -2
- package/clients/cli/commands/doctor.mjs +108 -37
- package/clients/cli/commands/doctor.test.mjs +42 -0
- package/clients/cli/commands/gap-report.doc.mjs +27 -15
- 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 +24 -10
- 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 +39 -13
- package/clients/cli/commands/integration-authoring.test.mjs +74 -19
- package/clients/cli/commands/integration-pack.doc.mjs +6 -10
- package/clients/cli/commands/integration-real-world.test.mjs +4 -10
- package/clients/cli/commands/integration-verify.doc.mjs +22 -0
- package/clients/cli/commands/integration.doc.mjs +5 -5
- package/clients/cli/commands/integration.mjs +75 -43
- 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 +2 -2
- package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
- package/clients/cli/commands/search.doc.mjs +16 -6
- package/clients/cli/commands/search.mjs +49 -11
- package/clients/cli/commands/search.test.mjs +92 -0
- package/clients/cli/commands/setup-nudge.test.mjs +6 -0
- package/clients/cli/commands/swizzle.doc.mjs +4 -3
- package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
- package/clients/cli/commands/template.doc.mjs +53 -14
- 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 +725 -0
- package/clients/cli/commands/theme-add.doc.mjs +5 -4
- 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 +12 -7
- package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
- package/clients/cli/commands/theme-palette.doc.mjs +2 -3
- package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
- package/clients/cli/commands/theme-targets.doc.mjs +3 -3
- 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 +3 -2
- package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
- package/clients/cli/commands/upgrade.doc.mjs +83 -12
- 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 +47 -34
- 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 +56 -6
- package/clients/cli/lib/define-command.test.mjs +54 -0
- package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
- package/clients/cli/lib/exit-codes.test.mjs +113 -0
- package/clients/cli/lib/hook-format.mjs +19 -10
- package/clients/cli/lib/json-shim.mjs +62 -16
- 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 +53 -6
- package/clients/cli/lib/manifest.test.mjs +22 -2
- package/clients/cli/lib/parse-error-format.test.mjs +81 -0
- package/foundation/agent-docs/agent-docs.d.mts +7 -2
- package/foundation/agent-docs/agent-docs.mjs +83 -13
- package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
- 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 +174 -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 +504 -0
- package/foundation/discovery/cli-self-docs.test.mjs +395 -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 +427 -108
- package/foundation/discovery/docs-discovery.test.mjs +386 -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 +1643 -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 +298 -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 +292 -0
- package/foundation/doc-compiler/tree.mjs +881 -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 +65 -0
- package/foundation/integrations/cli-requirement.mjs +189 -0
- package/foundation/integrations/cli-requirement.test.mjs +89 -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 +28 -25
- 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/batch.type.d.mts +33 -0
- package/foundation/response/batch.type.mjs +34 -0
- 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 +19 -12
- package/foundation/response/error-codes.mjs +8 -2
- package/foundation/response/error-codes.test.mjs +166 -14
- 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 +7 -2
- package/foundation/response/response-types.doc.mjs +69 -25
- package/foundation/response/response-types.doc.test.mjs +181 -0
- package/foundation/response/response.doc.mjs +12 -11
- 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/api/docs/docs.test.mjs +0 -83
- package/api/docs/integrationDocs.test.mjs +0 -208
- package/api/search/search.test.mjs +0 -389
- package/assets/docs/cli-integrations.doc.mjs +0 -367
- package/assets/templates/themes/manifest.json +0 -95
- package/clients/cli/commands/docs.test.mjs +0 -102
- 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/foundation/agent-docs/agent-docs.test.mjs +0 -1141
|
@@ -12,15 +12,17 @@ import {
|
|
|
12
12
|
|
|
13
13
|
/** @typedef {import('../../theme.type.mjs').TonalPaletteAnchor} TonalPaletteAnchor */
|
|
14
14
|
/** @typedef {import('../../theme.type.mjs').TonalPaletteGenerationInput} TonalPaletteGenerationInput */
|
|
15
|
+
/** @typedef {import('../../theme.type.mjs').TonalPaletteRampDiagnostics} TonalPaletteRampDiagnostics */
|
|
16
|
+
/** @typedef {import('../../theme.type.mjs').TonalPaletteCoordinationDiagnostics} TonalPaletteCoordinationDiagnostics */
|
|
17
|
+
/** @typedef {import('../../theme.type.mjs').TonalPaletteNormalizedRequest} NormalizedRequest */
|
|
15
18
|
/** @typedef {[number, number, number]} ColorTriple */
|
|
16
19
|
/** @typedef {'light' | 'dark'} PaletteMode */
|
|
17
20
|
/** @typedef {{lightness: number, chroma: number, hue: number}} PolarColor */
|
|
18
21
|
/** @typedef {TonalPaletteAnchor & {color: string, generatedColor: string, deltaE: number}} AnchorResult */
|
|
19
|
-
/** @typedef {{colors: Record<number, string>, diagnostics:
|
|
22
|
+
/** @typedef {{colors: Record<number, string>, diagnostics: TonalPaletteRampDiagnostics}} GeneratedRamp */
|
|
20
23
|
/** @typedef {{id: string, name: string, seed: string, kind: 'chromatic' | 'neutral', anchors: TonalPaletteAnchor[]}} NormalizedFamily */
|
|
21
|
-
/** @typedef {{recipe: typeof PALETTE_RECIPE, vibrancy: number, neutralProfile: string, modeStrategy: string, stops: number[], families: NormalizedFamily[]}} NormalizedRequest */
|
|
22
24
|
/** @typedef {{id: string, name: string, seed: string, light?: GeneratedRamp, dark?: GeneratedRamp}} GeneratedFamily */
|
|
23
|
-
/** @typedef {{recipe: typeof PALETTE_RECIPE, status: 'candidate', request: NormalizedRequest, families: GeneratedFamily[], coordination:
|
|
25
|
+
/** @typedef {{recipe: typeof PALETTE_RECIPE, status: 'candidate', request: NormalizedRequest, families: GeneratedFamily[], coordination: TonalPaletteCoordinationDiagnostics[], errors: {familyId: string, message: string}[]}} PaletteGenerationResult */
|
|
24
26
|
|
|
25
27
|
export const PALETTE_RECIPE = 'astryx-oklch-v1';
|
|
26
28
|
export const PALETTE_BLACK = '#000000';
|
|
@@ -35,6 +37,7 @@ export const COMPACT_11_STOPS = Object.freeze([
|
|
|
35
37
|
|
|
36
38
|
const DARK_CHROMA_FACTOR = 0.85;
|
|
37
39
|
const RESERVED_FAMILY_IDS = new Set(['black', 'white']);
|
|
40
|
+
const NEUTRAL_PROFILES = ['neutral-v1', 'warm-v1', 'cool-v1', 'custom'];
|
|
38
41
|
|
|
39
42
|
/** @param {number} value @param {number} minimum @param {number} maximum */
|
|
40
43
|
function clamp(value, minimum, maximum) {
|
|
@@ -411,6 +414,7 @@ function buildDiagnostics(colors, stops, sourceHue, gamutMappedStops, anchors) {
|
|
|
411
414
|
let minimumAdjacentDeltaE = Number.POSITIVE_INFINITY;
|
|
412
415
|
let maximumAdjacentDeltaE = 0;
|
|
413
416
|
let maximumHueDrift = 0;
|
|
417
|
+
/** @type {TonalPaletteRampDiagnostics['hueIdentityRisk']} */
|
|
414
418
|
let hueIdentityRisk = null;
|
|
415
419
|
for (let index = 0; index < stops.length; index++) {
|
|
416
420
|
const stop = stops[index];
|
|
@@ -526,6 +530,7 @@ function buildCoordinationDiagnostics(request, families) {
|
|
|
526
530
|
chroma: hexToOklch(color).C,
|
|
527
531
|
};
|
|
528
532
|
});
|
|
533
|
+
/** @type {[string, string] | null} */
|
|
529
534
|
let closestFamilies = null;
|
|
530
535
|
let minimumFamilyDeltaE = Number.POSITIVE_INFINITY;
|
|
531
536
|
for (let index = 0; index < samples.length; index++) {
|
|
@@ -661,11 +666,17 @@ export function normalizeGenerationRequest(input) {
|
|
|
661
666
|
anchors,
|
|
662
667
|
};
|
|
663
668
|
});
|
|
669
|
+
const neutralProfile = input.neutralProfile ?? 'neutral-v1';
|
|
670
|
+
// The receipt records this request, so an unknown profile fails even when no
|
|
671
|
+
// neutral family reads it.
|
|
672
|
+
if (!NEUTRAL_PROFILES.includes(neutralProfile)) {
|
|
673
|
+
throw new Error(`Unknown neutral profile: ${String(neutralProfile)}`);
|
|
674
|
+
}
|
|
664
675
|
/** @type {NormalizedRequest} */
|
|
665
676
|
const request = {
|
|
666
677
|
recipe: PALETTE_RECIPE,
|
|
667
678
|
vibrancy: input.vibrancy ?? 50,
|
|
668
|
-
neutralProfile
|
|
679
|
+
neutralProfile,
|
|
669
680
|
modeStrategy,
|
|
670
681
|
stops,
|
|
671
682
|
families: normalizedFamilies,
|
|
@@ -293,6 +293,16 @@ describe('astryx-oklch-v1 palette generator', () => {
|
|
|
293
293
|
).toThrow('Anchor mode dark is not generated by mode strategy light-only');
|
|
294
294
|
});
|
|
295
295
|
|
|
296
|
+
it('rejects an unknown neutral profile even without a neutral family', () => {
|
|
297
|
+
expect(() =>
|
|
298
|
+
generatePaletteSet({neutralProfile: 'warm-v2', families: [families[1]]}),
|
|
299
|
+
).toThrow('Unknown neutral profile: warm-v2');
|
|
300
|
+
expect(
|
|
301
|
+
generatePaletteSet({neutralProfile: 'warm-v1', families: [families[1]]})
|
|
302
|
+
.request.neutralProfile,
|
|
303
|
+
).toBe('warm-v1');
|
|
304
|
+
});
|
|
305
|
+
|
|
296
306
|
it('normalizes anchor colors in the generation receipt', () => {
|
|
297
307
|
const result = generatePaletteSet({
|
|
298
308
|
modeStrategy: 'light-only',
|
|
@@ -62,8 +62,17 @@ export function themeTemplate(options = {}) {
|
|
|
62
62
|
|
|
63
63
|
// Our repo header has no business in someone else's source tree.
|
|
64
64
|
const contents = stripCopyrightHeader(fs.readFileSync(THEME_TEMPLATE_SRC, 'utf-8'));
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
try {
|
|
66
|
+
fs.mkdirSync(path.dirname(resolved), {recursive: true});
|
|
67
|
+
fs.writeFileSync(resolved, contents);
|
|
68
|
+
} catch (err) {
|
|
69
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
70
|
+
throw new AstryxError(
|
|
71
|
+
`Failed to write the theme template to ${relative}: ${message}`,
|
|
72
|
+
undefined,
|
|
73
|
+
ERROR_CODES.ERR_WRITE_FAILED,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
67
76
|
|
|
68
77
|
return {type: 'theme.template', data: {path: relative, written: true, reason: null}};
|
|
69
78
|
}
|
|
@@ -13,7 +13,9 @@ import {describe, it, expect, beforeEach, afterEach} from 'vitest';
|
|
|
13
13
|
import * as fs from 'node:fs';
|
|
14
14
|
import * as path from 'node:path';
|
|
15
15
|
import * as os from 'node:os';
|
|
16
|
+
import {themeTemplate as publicThemeTemplate} from '../../index.mjs';
|
|
16
17
|
import {themeTemplate, THEME_TEMPLATE_DEFAULT_PATH} from './template.mjs';
|
|
18
|
+
import {isErrorCode} from '../../../foundation/response/error-codes.mjs';
|
|
17
19
|
|
|
18
20
|
let tmpDir;
|
|
19
21
|
beforeEach(() => {
|
|
@@ -24,6 +26,10 @@ afterEach(() => {
|
|
|
24
26
|
});
|
|
25
27
|
|
|
26
28
|
describe('themeTemplate()', () => {
|
|
29
|
+
it('is available through the public API entry point', () => {
|
|
30
|
+
expect(publicThemeTemplate).toBe(themeTemplate);
|
|
31
|
+
});
|
|
32
|
+
|
|
27
33
|
it('writes the template and returns a theme.template receipt', () => {
|
|
28
34
|
const res = themeTemplate({cwd: tmpDir});
|
|
29
35
|
|
|
@@ -79,4 +85,18 @@ describe('themeTemplate()', () => {
|
|
|
79
85
|
);
|
|
80
86
|
expect(fs.existsSync(path.join(path.dirname(tmpDir), 'escaped.ts'))).toBe(false);
|
|
81
87
|
});
|
|
88
|
+
|
|
89
|
+
it('reports a failed write with a registered error code', () => {
|
|
90
|
+
fs.writeFileSync(path.join(tmpDir, 'blocker'), '');
|
|
91
|
+
|
|
92
|
+
let error;
|
|
93
|
+
try {
|
|
94
|
+
themeTemplate({cwd: tmpDir, targetPath: 'blocker/theme.ts'});
|
|
95
|
+
} catch (caught) {
|
|
96
|
+
error = caught;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
expect(error).toMatchObject({code: 'ERR_WRITE_FAILED'});
|
|
100
|
+
expect(isErrorCode(error.code)).toBe(true);
|
|
101
|
+
});
|
|
82
102
|
});
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* astryx --json theme build <file>
|
|
6
6
|
*/
|
|
7
7
|
export type ThemeBuildResponse = {
|
|
8
8
|
/**
|
|
@@ -27,7 +27,7 @@ export type ThemeBuildResponse = {
|
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
30
|
+
* astryx --json theme build <file> --check
|
|
31
31
|
*/
|
|
32
32
|
export type ThemeBuildCheckResponse = {
|
|
33
33
|
type: "theme.build.check";
|
|
@@ -42,7 +42,7 @@ export type ThemeBuildCheckResponse = {
|
|
|
42
42
|
};
|
|
43
43
|
};
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* astryx --json theme build <a> <b> … — several themes in one invocation. Each
|
|
46
46
|
* result carries the file as it was passed and the receipt a single-file build
|
|
47
47
|
* would have returned (null when that theme produced no CSS). One file still
|
|
48
48
|
* returns the bare theme.build / theme.build.check envelope.
|
|
@@ -71,14 +71,14 @@ export type ThemeListEntry = {
|
|
|
71
71
|
package?: string | undefined;
|
|
72
72
|
};
|
|
73
73
|
/**
|
|
74
|
-
*
|
|
74
|
+
* astryx --json theme list
|
|
75
75
|
*/
|
|
76
76
|
export type ThemeListResponse = {
|
|
77
77
|
type: "theme.list";
|
|
78
78
|
data: ThemeListEntry[];
|
|
79
79
|
};
|
|
80
80
|
/**
|
|
81
|
-
*
|
|
81
|
+
* astryx --json theme add <slug>
|
|
82
82
|
*/
|
|
83
83
|
export type ThemeAddResponse = {
|
|
84
84
|
type: "theme.add";
|
|
@@ -94,7 +94,7 @@ export type ThemeAddResponse = {
|
|
|
94
94
|
};
|
|
95
95
|
};
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
97
|
+
* astryx --json theme template
|
|
98
98
|
* `written: false` with `reason: 'exists'` is a success: the command is safe to
|
|
99
99
|
* re-run, and an edited template is the consumer's file to keep.
|
|
100
100
|
*/
|
|
@@ -123,7 +123,7 @@ export type ThemeTargetEntry = {
|
|
|
123
123
|
deprecatedFor?: string | undefined;
|
|
124
124
|
};
|
|
125
125
|
/**
|
|
126
|
-
*
|
|
126
|
+
* astryx --json theme targets [filter]
|
|
127
127
|
*/
|
|
128
128
|
export type ThemeTargetsResponse = {
|
|
129
129
|
type: "theme.targets";
|
|
@@ -134,8 +134,7 @@ export type ThemeTargetsResponse = {
|
|
|
134
134
|
};
|
|
135
135
|
};
|
|
136
136
|
/**
|
|
137
|
-
* A
|
|
138
|
-
* and is not connected to runtime theme values.
|
|
137
|
+
* A color an author pins at one stop of one mode, constraining generation.
|
|
139
138
|
*/
|
|
140
139
|
export type TonalPaletteAnchor = {
|
|
141
140
|
/**
|
|
@@ -146,6 +145,10 @@ export type TonalPaletteAnchor = {
|
|
|
146
145
|
* Existing requested stop where the anchor applies.
|
|
147
146
|
*/
|
|
148
147
|
stop: number;
|
|
148
|
+
/**
|
|
149
|
+
* sRGB hex the stop is pulled toward: three or six
|
|
150
|
+
* digits, with or without `#`; the generator normalizes it.
|
|
151
|
+
*/
|
|
149
152
|
color: string;
|
|
150
153
|
/**
|
|
151
154
|
* `exact` preserves the
|
|
@@ -159,11 +162,32 @@ export type TonalPaletteAnchor = {
|
|
|
159
162
|
*/
|
|
160
163
|
maxDeltaE?: number | undefined;
|
|
161
164
|
};
|
|
165
|
+
/**
|
|
166
|
+
* One requested family: a seed color and the constraints applied to its ramp.
|
|
167
|
+
*/
|
|
162
168
|
export type TonalPaletteFamilyInput = {
|
|
169
|
+
/**
|
|
170
|
+
* Lower-kebab-case key for the family in the generated
|
|
171
|
+
* palette. `black` and `white` are reserved for the standalone values.
|
|
172
|
+
*/
|
|
163
173
|
id: string;
|
|
174
|
+
/**
|
|
175
|
+
* sRGB hex the ramp is generated from: three or six
|
|
176
|
+
* digits, with or without `#`; the generator normalizes it.
|
|
177
|
+
*/
|
|
164
178
|
seed: string;
|
|
179
|
+
/**
|
|
180
|
+
* Display name for review artifacts; defaults to `id`.
|
|
181
|
+
*/
|
|
165
182
|
name?: string | undefined;
|
|
183
|
+
/**
|
|
184
|
+
* `neutral` derives the ramp from
|
|
185
|
+
* `neutralProfile` instead of the seed hue; defaults to `chromatic`.
|
|
186
|
+
*/
|
|
166
187
|
kind?: "neutral" | "chromatic" | undefined;
|
|
188
|
+
/**
|
|
189
|
+
* Colors pinned at specific stops.
|
|
190
|
+
*/
|
|
167
191
|
anchors?: TonalPaletteAnchor[] | undefined;
|
|
168
192
|
};
|
|
169
193
|
export type TonalPaletteGenerationInput = {
|
|
@@ -173,6 +197,11 @@ export type TonalPaletteGenerationInput = {
|
|
|
173
197
|
* (default) to 100 (most vivid).
|
|
174
198
|
*/
|
|
175
199
|
vibrancy?: number | undefined;
|
|
200
|
+
/**
|
|
201
|
+
* Hue treatment for `neutral` families: `neutral-v1` is fully achromatic,
|
|
202
|
+
* `warm-v1` and `cool-v1` add a slight tint, and `custom` derives the hue from
|
|
203
|
+
* the family's own seed. Defaults to `neutral-v1`.
|
|
204
|
+
*/
|
|
176
205
|
neutralProfile?: "custom" | "neutral-v1" | "warm-v1" | "cool-v1" | undefined;
|
|
177
206
|
modeStrategy?: "light-only" | "dark-only" | "light-and-dark" | undefined;
|
|
178
207
|
/**
|
|
@@ -182,6 +211,10 @@ export type TonalPaletteGenerationInput = {
|
|
|
182
211
|
*/
|
|
183
212
|
stops?: number[] | undefined;
|
|
184
213
|
};
|
|
214
|
+
/**
|
|
215
|
+
* A generated palette candidate. The palette is still subject to author review
|
|
216
|
+
* and is not connected to runtime theme values.
|
|
217
|
+
*/
|
|
185
218
|
export type TonalPaletteCandidate = {
|
|
186
219
|
schemaVersion: 1;
|
|
187
220
|
status: "candidate";
|
|
@@ -205,7 +238,133 @@ export type TonalPaletteCandidate = {
|
|
|
205
238
|
}>;
|
|
206
239
|
};
|
|
207
240
|
/**
|
|
208
|
-
*
|
|
241
|
+
* Per-ramp evidence recorded for one family in one mode.
|
|
242
|
+
*/
|
|
243
|
+
export type TonalPaletteRampDiagnostics = {
|
|
244
|
+
/**
|
|
245
|
+
* Whether luminance rises across every stop.
|
|
246
|
+
*/
|
|
247
|
+
monotonic: boolean;
|
|
248
|
+
/**
|
|
249
|
+
* Smallest perceptual gap between
|
|
250
|
+
* neighboring stops; a small value means two stops read as one color.
|
|
251
|
+
*/
|
|
252
|
+
minimumAdjacentDeltaE: number;
|
|
253
|
+
/**
|
|
254
|
+
* Largest gap between neighboring stops.
|
|
255
|
+
*/
|
|
256
|
+
maximumAdjacentDeltaE: number;
|
|
257
|
+
/**
|
|
258
|
+
* Largest hue distance, in degrees, between
|
|
259
|
+
* a stop and the family's reference hue.
|
|
260
|
+
*/
|
|
261
|
+
maximumHueDrift: number;
|
|
262
|
+
/**
|
|
263
|
+
* Named
|
|
264
|
+
* drift the ramp is at risk of, or `null`.
|
|
265
|
+
*/
|
|
266
|
+
hueIdentityRisk: "blue-to-purple" | "yellow-to-brown" | null;
|
|
267
|
+
/**
|
|
268
|
+
* Stops whose ideal color fell outside
|
|
269
|
+
* sRGB and was mapped back into it.
|
|
270
|
+
*/
|
|
271
|
+
gamutMappedStops: number[];
|
|
272
|
+
/**
|
|
273
|
+
* Each anchor with the color the stop received after its policy was applied
|
|
274
|
+
* and the perceptual distance that color still has from the requested target.
|
|
275
|
+
*/
|
|
276
|
+
anchors: Array<TonalPaletteAnchor & {
|
|
277
|
+
generatedColor: string;
|
|
278
|
+
deltaE: number;
|
|
279
|
+
}>;
|
|
280
|
+
};
|
|
281
|
+
/**
|
|
282
|
+
* Cross-family evidence for one mode, sampled at the stop nearest 50.
|
|
283
|
+
*/
|
|
284
|
+
export type TonalPaletteCoordinationDiagnostics = {
|
|
285
|
+
/**
|
|
286
|
+
* Mode these samples come from.
|
|
287
|
+
*/
|
|
288
|
+
mode: "light" | "dark";
|
|
289
|
+
/**
|
|
290
|
+
* Sampled stop.
|
|
291
|
+
*/
|
|
292
|
+
stop: number;
|
|
293
|
+
/**
|
|
294
|
+
* The two chromatic
|
|
295
|
+
* families hardest to tell apart, or `null` with fewer than two.
|
|
296
|
+
*/
|
|
297
|
+
closestFamilies: [string, string] | null;
|
|
298
|
+
/**
|
|
299
|
+
* Perceptual distance between them.
|
|
300
|
+
*/
|
|
301
|
+
minimumFamilyDeltaE: number | null;
|
|
302
|
+
/**
|
|
303
|
+
* Most saturated family at this stop.
|
|
304
|
+
*/
|
|
305
|
+
strongestFamily: string | null;
|
|
306
|
+
/**
|
|
307
|
+
* Least saturated family at this stop.
|
|
308
|
+
*/
|
|
309
|
+
weakestFamily: string | null;
|
|
310
|
+
/**
|
|
311
|
+
* Strongest chroma over weakest; a large
|
|
312
|
+
* ratio means the families are unbalanced.
|
|
313
|
+
*/
|
|
314
|
+
chromaRatio: number | null;
|
|
315
|
+
};
|
|
316
|
+
/**
|
|
317
|
+
* The request as the generator resolved it, with every default filled in.
|
|
318
|
+
*/
|
|
319
|
+
export type TonalPaletteNormalizedRequest = {
|
|
320
|
+
recipe: "astryx-oklch-v1";
|
|
321
|
+
vibrancy: number;
|
|
322
|
+
neutralProfile: "neutral-v1" | "warm-v1" | "cool-v1" | "custom";
|
|
323
|
+
modeStrategy: "light-only" | "dark-only" | "light-and-dark";
|
|
324
|
+
stops: number[];
|
|
325
|
+
families: Array<{
|
|
326
|
+
id: string;
|
|
327
|
+
name: string;
|
|
328
|
+
seed: string;
|
|
329
|
+
kind: "chromatic" | "neutral";
|
|
330
|
+
anchors: TonalPaletteAnchor[];
|
|
331
|
+
}>;
|
|
332
|
+
};
|
|
333
|
+
/**
|
|
334
|
+
* The detached receipt written beside a candidate. It records what was asked
|
|
335
|
+
* for and what the generator observed, so a candidate can be traced back to
|
|
336
|
+
* its request without rerunning generation.
|
|
337
|
+
*/
|
|
338
|
+
export type TonalPaletteGenerationReceipt = {
|
|
339
|
+
schemaVersion: 1;
|
|
340
|
+
/**
|
|
341
|
+
* Recipe that produced the candidate.
|
|
342
|
+
*/
|
|
343
|
+
recipe: "astryx-oklch-v1";
|
|
344
|
+
/**
|
|
345
|
+
* SHA-256 over the candidate bytes as written.
|
|
346
|
+
*/
|
|
347
|
+
candidateSha256: string;
|
|
348
|
+
/**
|
|
349
|
+
* Present when preview
|
|
350
|
+
* content was generated for the request, even if no file was written because
|
|
351
|
+
* the target already exists.
|
|
352
|
+
*/
|
|
353
|
+
preview?: {
|
|
354
|
+
version: string;
|
|
355
|
+
sha256: string;
|
|
356
|
+
} | undefined;
|
|
357
|
+
request: TonalPaletteNormalizedRequest;
|
|
358
|
+
diagnostics: {
|
|
359
|
+
families: Record<string, {
|
|
360
|
+
light?: TonalPaletteRampDiagnostics;
|
|
361
|
+
dark?: TonalPaletteRampDiagnostics;
|
|
362
|
+
}>;
|
|
363
|
+
coordination: TonalPaletteCoordinationDiagnostics[];
|
|
364
|
+
};
|
|
365
|
+
};
|
|
366
|
+
/**
|
|
367
|
+
* astryx --json theme palette generate <config>
|
|
209
368
|
*/
|
|
210
369
|
export type ThemePaletteGenerateResponse = {
|
|
211
370
|
type: "theme.palette.generate";
|
|
@@ -221,6 +380,6 @@ export type ThemePaletteGenerateResponse = {
|
|
|
221
380
|
written: boolean;
|
|
222
381
|
reason: "exists" | null;
|
|
223
382
|
candidate: TonalPaletteCandidate;
|
|
224
|
-
generationReceipt:
|
|
383
|
+
generationReceipt: TonalPaletteGenerationReceipt;
|
|
225
384
|
};
|
|
226
385
|
};
|
package/api/theme/theme.type.mjs
CHANGED
|
@@ -6,23 +6,23 @@
|
|
|
6
6
|
* directly (functions own their types); the public `@astryxdesign/cli/api`
|
|
7
7
|
* surface re-exports them via types/theme.d.ts, so consumers see the same names.
|
|
8
8
|
*
|
|
9
|
-
* Invocation
|
|
9
|
+
* Invocation -> type discriminator
|
|
10
10
|
* ------------------------------------------------------------------
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* (file not found / parse error)
|
|
11
|
+
* astryx --json theme build <file> -> theme.build
|
|
12
|
+
* astryx --json theme build <file> --check -> theme.build.check
|
|
13
|
+
* astryx --json theme build <a> <b> … -> theme.build.batch
|
|
14
|
+
* astryx --json theme list -> theme.list
|
|
15
|
+
* astryx --json theme add <slug> -> theme.add
|
|
16
|
+
* astryx --json theme template -> theme.template
|
|
17
|
+
* astryx --json theme targets [filter] -> theme.targets
|
|
18
|
+
* astryx --json theme palette generate <file> -> theme.palette.generate
|
|
19
|
+
* (file not found / parse error) -> CLIError
|
|
20
20
|
*
|
|
21
21
|
* @position api — colocated typedefs for api/theme/{theme,build,add,list,template,targets,_adapter}
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* astryx --json theme build <file>
|
|
26
26
|
* @typedef {object} ThemeBuildResponse
|
|
27
27
|
* @property {'theme.build'} type
|
|
28
28
|
* `warnings` are defects the theme author should fix. `notices` are advisories
|
|
@@ -32,14 +32,14 @@
|
|
|
32
32
|
*/
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* astryx --json theme build <file> --check
|
|
36
36
|
* @typedef {object} ThemeBuildCheckResponse
|
|
37
37
|
* @property {'theme.build.check'} type
|
|
38
38
|
* @property {{name: string, upToDate: boolean, stale: Array<{path: string, reason: 'missing' | 'outdated'}>, checked: string[]}} data
|
|
39
39
|
*/
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* astryx --json theme build <a> <b> … — several themes in one invocation. Each
|
|
43
43
|
* result carries the file as it was passed and the receipt a single-file build
|
|
44
44
|
* would have returned (null when that theme produced no CSS). One file still
|
|
45
45
|
* returns the bare theme.build / theme.build.check envelope.
|
|
@@ -59,21 +59,21 @@
|
|
|
59
59
|
*/
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
62
|
+
* astryx --json theme list
|
|
63
63
|
* @typedef {object} ThemeListResponse
|
|
64
64
|
* @property {'theme.list'} type
|
|
65
65
|
* @property {ThemeListEntry[]} data
|
|
66
66
|
*/
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
|
-
*
|
|
69
|
+
* astryx --json theme add <slug>
|
|
70
70
|
* @typedef {object} ThemeAddResponse
|
|
71
71
|
* @property {'theme.add'} type
|
|
72
72
|
* @property {{slug: string, displayName: string, maintained: boolean, package: string, outputDir: string, entry: string, exportName: string, files: string[]}} data
|
|
73
73
|
*/
|
|
74
74
|
|
|
75
75
|
/**
|
|
76
|
-
*
|
|
76
|
+
* astryx --json theme template
|
|
77
77
|
* `written: false` with `reason: 'exists'` is a success: the command is safe to
|
|
78
78
|
* re-run, and an edited template is the consumer's file to keep.
|
|
79
79
|
* @typedef {object} ThemeTemplateResponse
|
|
@@ -95,19 +95,19 @@
|
|
|
95
95
|
*/
|
|
96
96
|
|
|
97
97
|
/**
|
|
98
|
-
*
|
|
98
|
+
* astryx --json theme targets [filter]
|
|
99
99
|
* @typedef {object} ThemeTargetsResponse
|
|
100
100
|
* @property {'theme.targets'} type
|
|
101
101
|
* @property {{filter: string | null, componentCount: number, targets: ThemeTargetEntry[]}} data
|
|
102
102
|
*/
|
|
103
103
|
|
|
104
104
|
/**
|
|
105
|
-
* A
|
|
106
|
-
* and is not connected to runtime theme values.
|
|
105
|
+
* A color an author pins at one stop of one mode, constraining generation.
|
|
107
106
|
* @typedef {object} TonalPaletteAnchor
|
|
108
107
|
* @property {'light' | 'dark'} mode Mode containing the anchored stop.
|
|
109
108
|
* @property {number} stop Existing requested stop where the anchor applies.
|
|
110
|
-
* @property {string} color
|
|
109
|
+
* @property {string} color sRGB hex the stop is pulled toward: three or six
|
|
110
|
+
* digits, with or without `#`; the generator normalizes it.
|
|
111
111
|
* @property {'exact' | 'bounded' | 'flexible'} policy `exact` preserves the
|
|
112
112
|
* chosen color at that stop; `bounded` permits adjustment within `maxDeltaE`;
|
|
113
113
|
* `flexible` treats the color as guidance and blends toward it.
|
|
@@ -116,12 +116,16 @@
|
|
|
116
116
|
*/
|
|
117
117
|
|
|
118
118
|
/**
|
|
119
|
+
* One requested family: a seed color and the constraints applied to its ramp.
|
|
119
120
|
* @typedef {object} TonalPaletteFamilyInput
|
|
120
|
-
* @property {string} id
|
|
121
|
-
*
|
|
122
|
-
* @property {string}
|
|
123
|
-
*
|
|
124
|
-
* @property {
|
|
121
|
+
* @property {string} id Lower-kebab-case key for the family in the generated
|
|
122
|
+
* palette. `black` and `white` are reserved for the standalone values.
|
|
123
|
+
* @property {string} seed sRGB hex the ramp is generated from: three or six
|
|
124
|
+
* digits, with or without `#`; the generator normalizes it.
|
|
125
|
+
* @property {string} [name] Display name for review artifacts; defaults to `id`.
|
|
126
|
+
* @property {'chromatic' | 'neutral'} [kind] `neutral` derives the ramp from
|
|
127
|
+
* `neutralProfile` instead of the seed hue; defaults to `chromatic`.
|
|
128
|
+
* @property {TonalPaletteAnchor[]} [anchors] Colors pinned at specific stops.
|
|
125
129
|
*/
|
|
126
130
|
|
|
127
131
|
/**
|
|
@@ -130,6 +134,9 @@
|
|
|
130
134
|
* @property {number} [vibrancy] Chroma control from 0 (most muted) through 50
|
|
131
135
|
* (default) to 100 (most vivid).
|
|
132
136
|
* @property {'neutral-v1' | 'warm-v1' | 'cool-v1' | 'custom'} [neutralProfile]
|
|
137
|
+
* Hue treatment for `neutral` families: `neutral-v1` is fully achromatic,
|
|
138
|
+
* `warm-v1` and `cool-v1` add a slight tint, and `custom` derives the hue from
|
|
139
|
+
* the family's own seed. Defaults to `neutral-v1`.
|
|
133
140
|
* @property {'light-only' | 'dark-only' | 'light-and-dark'} [modeStrategy]
|
|
134
141
|
* @property {number[]} [stops] Ordered stops shared by every requested family;
|
|
135
142
|
* defaults to 0 through 100 in increments of 5. Decimal stops are supported,
|
|
@@ -137,6 +144,8 @@
|
|
|
137
144
|
*/
|
|
138
145
|
|
|
139
146
|
/**
|
|
147
|
+
* A generated palette candidate. The palette is still subject to author review
|
|
148
|
+
* and is not connected to runtime theme values.
|
|
140
149
|
* @typedef {object} TonalPaletteCandidate
|
|
141
150
|
* @property {1} schemaVersion
|
|
142
151
|
* @property {'candidate'} status
|
|
@@ -148,10 +157,68 @@
|
|
|
148
157
|
*/
|
|
149
158
|
|
|
150
159
|
/**
|
|
151
|
-
*
|
|
160
|
+
* Per-ramp evidence recorded for one family in one mode.
|
|
161
|
+
* @typedef {object} TonalPaletteRampDiagnostics
|
|
162
|
+
* @property {boolean} monotonic Whether luminance rises across every stop.
|
|
163
|
+
* @property {number} minimumAdjacentDeltaE Smallest perceptual gap between
|
|
164
|
+
* neighboring stops; a small value means two stops read as one color.
|
|
165
|
+
* @property {number} maximumAdjacentDeltaE Largest gap between neighboring stops.
|
|
166
|
+
* @property {number} maximumHueDrift Largest hue distance, in degrees, between
|
|
167
|
+
* a stop and the family's reference hue.
|
|
168
|
+
* @property {'blue-to-purple' | 'yellow-to-brown' | null} hueIdentityRisk Named
|
|
169
|
+
* drift the ramp is at risk of, or `null`.
|
|
170
|
+
* @property {number[]} gamutMappedStops Stops whose ideal color fell outside
|
|
171
|
+
* sRGB and was mapped back into it.
|
|
172
|
+
* @property {Array<TonalPaletteAnchor & {generatedColor: string, deltaE: number}>} anchors
|
|
173
|
+
* Each anchor with the color the stop received after its policy was applied
|
|
174
|
+
* and the perceptual distance that color still has from the requested target.
|
|
175
|
+
*/
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Cross-family evidence for one mode, sampled at the stop nearest 50.
|
|
179
|
+
* @typedef {object} TonalPaletteCoordinationDiagnostics
|
|
180
|
+
* @property {'light' | 'dark'} mode Mode these samples come from.
|
|
181
|
+
* @property {number} stop Sampled stop.
|
|
182
|
+
* @property {[string, string] | null} closestFamilies The two chromatic
|
|
183
|
+
* families hardest to tell apart, or `null` with fewer than two.
|
|
184
|
+
* @property {number | null} minimumFamilyDeltaE Perceptual distance between them.
|
|
185
|
+
* @property {string | null} strongestFamily Most saturated family at this stop.
|
|
186
|
+
* @property {string | null} weakestFamily Least saturated family at this stop.
|
|
187
|
+
* @property {number | null} chromaRatio Strongest chroma over weakest; a large
|
|
188
|
+
* ratio means the families are unbalanced.
|
|
189
|
+
*/
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* The request as the generator resolved it, with every default filled in.
|
|
193
|
+
* @typedef {object} TonalPaletteNormalizedRequest
|
|
194
|
+
* @property {'astryx-oklch-v1'} recipe
|
|
195
|
+
* @property {number} vibrancy
|
|
196
|
+
* @property {'neutral-v1' | 'warm-v1' | 'cool-v1' | 'custom'} neutralProfile
|
|
197
|
+
* @property {'light-only' | 'dark-only' | 'light-and-dark'} modeStrategy
|
|
198
|
+
* @property {number[]} stops
|
|
199
|
+
* @property {Array<{id: string, name: string, seed: string, kind: 'chromatic' | 'neutral', anchors: TonalPaletteAnchor[]}>} families
|
|
200
|
+
*/
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* The detached receipt written beside a candidate. It records what was asked
|
|
204
|
+
* for and what the generator observed, so a candidate can be traced back to
|
|
205
|
+
* its request without rerunning generation.
|
|
206
|
+
* @typedef {object} TonalPaletteGenerationReceipt
|
|
207
|
+
* @property {1} schemaVersion
|
|
208
|
+
* @property {'astryx-oklch-v1'} recipe Recipe that produced the candidate.
|
|
209
|
+
* @property {string} candidateSha256 SHA-256 over the candidate bytes as written.
|
|
210
|
+
* @property {{version: string, sha256: string}} [preview] Present when preview
|
|
211
|
+
* content was generated for the request, even if no file was written because
|
|
212
|
+
* the target already exists.
|
|
213
|
+
* @property {TonalPaletteNormalizedRequest} request
|
|
214
|
+
* @property {{families: Record<string, {light?: TonalPaletteRampDiagnostics, dark?: TonalPaletteRampDiagnostics}>, coordination: TonalPaletteCoordinationDiagnostics[]}} diagnostics
|
|
215
|
+
*/
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* astryx --json theme palette generate <config>
|
|
152
219
|
* @typedef {object} ThemePaletteGenerateResponse
|
|
153
220
|
* @property {'theme.palette.generate'} type
|
|
154
|
-
* @property {{recipe: 'astryx-oklch-v1', status: 'candidate', familyCount: number, stopCount: number, modes: string[], output: string | null, receipt: string | null, preview: string | null, written: boolean, reason: 'exists' | null, candidate: TonalPaletteCandidate, generationReceipt:
|
|
221
|
+
* @property {{recipe: 'astryx-oklch-v1', status: 'candidate', familyCount: number, stopCount: number, modes: string[], output: string | null, receipt: string | null, preview: string | null, written: boolean, reason: 'exists' | null, candidate: TonalPaletteCandidate, generationReceipt: TonalPaletteGenerationReceipt}} data
|
|
155
222
|
*/
|
|
156
223
|
|
|
157
224
|
// Make this a module so the @typedefs above are importable as types via
|