@ccslabs/xtend 0.1.0-rc.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/README.md +4 -0
- package/catalog/component-catalog-coverage.js +2 -0
- package/catalog/epic13-package-export-lock.js +11 -1
- package/catalog/epic13-rmt-production-readiness.js +0 -1
- package/catalog/epic18-rmt-action-effect-runtime.d.ts +36 -0
- package/catalog/epic18-rmt-action-effect-runtime.js +249 -0
- package/catalog/epic18-rmt-app-platform-authoring.d.ts +39 -0
- package/catalog/epic18-rmt-app-platform-authoring.js +319 -0
- package/catalog/epic18-rmt-app-platform-fixture.d.ts +33 -0
- package/catalog/epic18-rmt-app-platform-fixture.js +221 -0
- package/catalog/epic18-rmt-app-platform-release-handoff.d.ts +30 -0
- package/catalog/epic18-rmt-app-platform-release-handoff.js +231 -0
- package/catalog/epic18-rmt-app-platform-tooling.d.ts +38 -0
- package/catalog/epic18-rmt-app-platform-tooling.js +242 -0
- package/catalog/epic18-rmt-component-template-primitives.d.ts +33 -0
- package/catalog/epic18-rmt-component-template-primitives.js +240 -0
- package/catalog/epic18-rmt-dom-descriptor-renderer.d.ts +35 -0
- package/catalog/epic18-rmt-dom-descriptor-renderer.js +232 -0
- package/catalog/epic18-rmt-event-routing-runtime.d.ts +35 -0
- package/catalog/epic18-rmt-event-routing-runtime.js +234 -0
- package/catalog/epic18-rmt-state-selector-runtime.d.ts +34 -0
- package/catalog/epic18-rmt-state-selector-runtime.js +216 -0
- package/catalog/epic18-rmt-surface-resource-graph-runtime.d.ts +36 -0
- package/catalog/epic18-rmt-surface-resource-graph-runtime.js +256 -0
- package/catalog/surface-manager-controller.js +5 -1
- package/catalog/surface-manager-materialization.js +7 -1
- package/catalog/surface-manager-overlay-bridge.js +41 -6
- package/catalog/surface-manager-workbench-fixture.js +1 -1
- package/catalog/surface-type-capability-matrix.d.ts +61 -0
- package/catalog/surface-type-capability-matrix.js +183 -0
- package/catalog/type-exports-rmt.js +37 -1
- package/catalog/type-exports.js +3 -3
- package/components/icon-packs/lucide.js +4 -0
- package/components/manifest.json +2 -0
- package/components/prism-rmt.d.ts +34 -0
- package/components/prism-rmt.js +130 -0
- package/components/xcards.js +15 -0
- package/components/xcode.d.ts +36 -1
- package/components/xcode.js +215 -20
- package/components/xfooter.js +17 -0
- package/components/xheader.js +14 -0
- package/components/xhero.js +16 -1
- package/components/xlink.js +97 -14
- package/components/xmasonry.js +15 -0
- package/components/xplayer.d.ts +44 -2
- package/components/xplayer.js +242 -15
- package/components/xrouter.js +27 -2
- package/components/xsection.js +15 -0
- package/components/xsidepanel.js +10 -2
- package/components/xsurfacemanager-controller.d.ts +2 -1
- package/components/xsurfacemanager-controller.js +27 -3
- package/components/xsurfacemanager.d.ts +2 -0
- package/components/xsurfacemanager.js +20 -8
- package/components/xsurfaceoverlay-bridge.d.ts +20 -5
- package/components/xsurfaceoverlay-bridge.js +114 -18
- package/components/xsurfaceportal.d.ts +29 -0
- package/components/xsurfaceportal.js +122 -0
- package/components/xsurfaceregion.d.ts +50 -0
- package/components/xsurfaceregion.js +285 -0
- package/components/xsurfacewindow.js +2 -1
- package/components/xtooltip.js +89 -23
- package/docs/README.md +222 -298
- package/docs/changelog.md +107 -0
- package/docs/component-catalog-coverage.md +9 -9
- package/docs/component-platform.md +19 -1
- package/docs/component-ux-app-authoring.md +56 -63
- package/docs/components/xcode.md +83 -53
- package/docs/components/xsurfaceportal.md +32 -0
- package/docs/components/xsurfaceregion.md +37 -0
- package/docs/components.md +105 -69
- package/docs/de/README.md +264 -0
- package/docs/de/XTend-ADR.md +221 -0
- package/docs/de/a11y-keyboard-smokes.md +62 -0
- package/docs/de/about.md +18 -0
- package/docs/de/api.md +157 -0
- package/docs/de/best-practices.md +76 -0
- package/docs/de/changelog.md +107 -0
- package/docs/de/component-catalog-coverage.md +58 -0
- package/docs/de/component-lab.md +103 -0
- package/docs/de/component-long-tail-migration.md +41 -0
- package/docs/de/component-platform.md +177 -0
- package/docs/de/component-ux-app-authoring.md +123 -0
- package/docs/de/component-ux-authoring.md +96 -0
- package/docs/de/component-ux-gates.md +45 -0
- package/docs/de/components/x-rmt-lifecycle-demo-build.md +60 -0
- package/docs/de/components/xalert.md +81 -0
- package/docs/de/components/xbutton.md +103 -0
- package/docs/de/components/xcalendar.md +82 -0
- package/docs/de/components/xcards.md +128 -0
- package/docs/de/components/xcheckbox.md +102 -0
- package/docs/de/components/xcode.md +156 -0
- package/docs/de/components/xdialog.md +92 -0
- package/docs/de/components/xdrawer.md +84 -0
- package/docs/de/components/xfooter.md +126 -0
- package/docs/de/components/xform.md +128 -0
- package/docs/de/components/xheader.md +308 -0
- package/docs/de/components/xhero.md +142 -0
- package/docs/de/components/xicon.md +125 -0
- package/docs/de/components/xinput.md +129 -0
- package/docs/de/components/xlightbox.md +98 -0
- package/docs/de/components/xlink.md +109 -0
- package/docs/de/components/xmasonry.md +124 -0
- package/docs/de/components/xmenu.md +158 -0
- package/docs/de/components/xmodal.md +82 -0
- package/docs/de/components/xplayer.md +104 -0
- package/docs/de/components/xpopover.md +67 -0
- package/docs/de/components/xprogress.md +56 -0
- package/docs/de/components/xradio.md +103 -0
- package/docs/de/components/xrouter.md +260 -0
- package/docs/de/components/xsection.md +125 -0
- package/docs/de/components/xselect.md +105 -0
- package/docs/de/components/xsidepanel.md +30 -0
- package/docs/de/components/xspinner.md +102 -0
- package/docs/de/components/xstate.md +148 -0
- package/docs/de/components/xstatus.md +55 -0
- package/docs/de/components/xsummary.md +78 -0
- package/docs/de/components/xsurfacemanager.md +27 -0
- package/docs/de/components/xsurfacewindow.md +21 -0
- package/docs/de/components/xtabs.md +160 -0
- package/docs/de/components/xtextarea.md +98 -0
- package/docs/de/components/xtheme.md +167 -0
- package/docs/de/components/xtoast.md +62 -0
- package/docs/de/components/xtooltip.md +66 -0
- package/docs/de/components/xtype.md +82 -0
- package/docs/de/components/xutils.md +144 -0
- package/docs/de/components/xwriter.md +94 -0
- package/docs/de/components.md +153 -0
- package/docs/de/conditional-network-evidence-ci.md +38 -0
- package/docs/de/conditional-network-evidence.md +50 -0
- package/docs/de/core-migration-guide.md +110 -0
- package/docs/de/design-tokens.md +116 -0
- package/docs/de/docs-rmt-production-hardening.md +31 -0
- package/docs/de/enterprise-adoption.md +413 -0
- package/docs/de/enterprise-component-flex-release-handoff.md +129 -0
- package/docs/de/epic10-platform-gates.md +62 -0
- package/docs/de/epic10-release-handoff.md +81 -0
- package/docs/de/epic11-enterprise-ux-handoff.md +70 -0
- package/docs/de/epic12-rc0-handoff.md +61 -0
- package/docs/de/epic18-media-manager-vendor-upstream.md +318 -0
- package/docs/de/epic18-rmt-app-platform-release-handoff.md +67 -0
- package/docs/de/epic18-vendor-bugfixes.md +34 -0
- package/docs/de/existing-component-metadata.md +67 -0
- package/docs/de/hydration-performance-closure.md +34 -0
- package/docs/de/hydration-policies.md +71 -0
- package/docs/de/known-residual-triage.md +22 -0
- package/docs/de/manifest-import-policy.md +79 -0
- package/docs/de/manifest.md +112 -0
- package/docs/de/motion-contrast.md +67 -0
- package/docs/de/package-export-lock.md +44 -0
- package/docs/de/performance-measurements.md +106 -0
- package/docs/de/performance-regression.md +89 -0
- package/docs/de/performance.md +94 -0
- package/docs/de/previews/README.md +17 -0
- package/docs/de/prod-browser-csp-smokes.md +40 -0
- package/docs/de/public-component-types.md +79 -0
- package/docs/de/quick-start-guide.md +220 -0
- package/docs/de/rc0-adoption-guide.md +102 -0
- package/docs/de/rc0-gate-matrix.md +58 -0
- package/docs/de/rc1-gate-matrix-ci-handoff.md +56 -0
- package/docs/de/rc1-migration-notes.md +69 -0
- package/docs/de/rc1-readiness.md +46 -0
- package/docs/de/release-owner-acceptance.md +56 -0
- package/docs/de/release-report-pack-dry-run-evidence.md +39 -0
- package/docs/de/rmt-action-effect-runtime.md +81 -0
- package/docs/de/rmt-app-platform-authoring.md +54 -0
- package/docs/de/rmt-app-platform-fixture.md +46 -0
- package/docs/de/rmt-app-platform-migration-guide.md +88 -0
- package/docs/de/rmt-app-platform-tooling.md +79 -0
- package/docs/de/rmt-component-template-primitives.md +57 -0
- package/docs/de/rmt-dom-descriptor-renderer.md +64 -0
- package/docs/de/rmt-dsl-authoring-polish.md +145 -0
- package/docs/de/rmt-event-routing-runtime.md +81 -0
- package/docs/de/rmt-first-demo-app.md +77 -0
- package/docs/de/rmt-first-xtend-apps.md +129 -0
- package/docs/de/rmt-kernel-panic-recovery-incident-handoff.md +61 -0
- package/docs/de/rmt-kernel-security-hardening-migration.md +50 -0
- package/docs/de/rmt-kernel-trusted-output-authoring.md +69 -0
- package/docs/de/rmt-language-server.md +234 -0
- package/docs/de/rmt-lifecycle-demo.md +24 -0
- package/docs/de/rmt-linter.md +140 -0
- package/docs/de/rmt-node-ssr-adapter.md +100 -0
- package/docs/de/rmt-php-ssr-adapter.md +120 -0
- package/docs/de/rmt-production-readiness.md +63 -0
- package/docs/de/rmt-state-selector-runtime.md +47 -0
- package/docs/de/rmt-surface-resource-graph-runtime.md +92 -0
- package/docs/de/rmt-tooling-release-gates.md +77 -0
- package/docs/de/rmt-vnext-authoring.md +170 -0
- package/docs/de/rmt-vnext-component-primitives.md +188 -0
- package/docs/de/rmt-vnext-cross-surface-events.md +68 -0
- package/docs/de/rmt-vnext-enterprise-mfe-handoff.md +70 -0
- package/docs/de/rmt-vnext-fabric-bridge-evidence.md +81 -0
- package/docs/de/rmt-vnext-migration-notes.md +62 -0
- package/docs/de/rmt-vnext-primitive-authoring-tooling.md +247 -0
- package/docs/de/rmt-vnext-primitive-grammar-design.md +289 -0
- package/docs/de/rmt-vnext-primitive-lowering.md +108 -0
- package/docs/de/rmt-vnext-primitive-migration.md +119 -0
- package/docs/de/rmt-vnext-primitive-parser-ast.md +76 -0
- package/docs/de/rmt-vnext-primitive-semantic-graph.md +118 -0
- package/docs/de/rmt-vnext-primitives-compiler-backlog.md +739 -0
- package/docs/de/rmt-vnext-release-handoff.md +83 -0
- package/docs/de/rmt-vnext-remote-surfaces.md +90 -0
- package/docs/de/rmt-vnext-source-to-sea-gate.md +612 -0
- package/docs/de/rmt-vnext-surface-registry-enterprise.md +76 -0
- package/docs/de/screenreader-signals.md +56 -0
- package/docs/de/supply-chain-gates.md +100 -0
- package/docs/de/surface-manager-authoring-guide.md +94 -0
- package/docs/de/surface-manager-browser-lab.md +45 -0
- package/docs/de/surface-manager-component-lab.md +43 -0
- package/docs/de/surface-manager-controller.md +66 -0
- package/docs/de/surface-manager-layout-engines.md +32 -0
- package/docs/de/surface-manager-lazy-hydration.md +63 -0
- package/docs/de/surface-manager-migration-guide.md +122 -0
- package/docs/de/surface-manager-native-rmt-surfaces.md +38 -0
- package/docs/de/surface-manager-overlay-bridge.md +53 -0
- package/docs/de/surface-manager-persistence.md +30 -0
- package/docs/de/surface-manager-quality-gates.md +51 -0
- package/docs/de/surface-manager-release-handoff.md +68 -0
- package/docs/de/surface-manager-remote-policy.md +54 -0
- package/docs/de/surface-manager-rmt-authoring.md +102 -0
- package/docs/de/surface-manager-route-lifecycle.md +59 -0
- package/docs/de/surface-manager-runtime-release-handoff.md +69 -0
- package/docs/de/surface-manager-side-panel-runtime.md +36 -0
- package/docs/de/surface-manager-stack-policy.md +39 -0
- package/docs/de/surface-manager-window-runtime.md +47 -0
- package/docs/de/surface-manager-workbench-fixture.md +43 -0
- package/docs/de/third-party-design-authoring.md +406 -0
- package/docs/de/trusted-dom-boundary-browser-proof.md +32 -0
- package/docs/de/trusted-dom-sanitizing.md +110 -0
- package/docs/de/type-exports.md +61 -0
- package/docs/de/typescript-components.md +63 -0
- package/docs/de/visual-browser-regression.md +83 -0
- package/docs/de/visual-owner-artifacts.md +46 -0
- package/docs/de/visual-snapshot-automation.md +87 -0
- package/docs/de/xtend-api-types.md +55 -0
- package/docs/de/xtend-builder-types.md +55 -0
- package/docs/de/xtend-catalog-types.md +44 -0
- package/docs/de/xtend-fabric-rmt-lane-mapping.md +143 -0
- package/docs/de/xtend-fabric.md +474 -0
- package/docs/de/xtend-loader-types.md +58 -0
- package/docs/de/xtend-loader.md +265 -0
- package/docs/de/xtend-policy-types.md +38 -0
- package/docs/de/xtend-rmt-types.md +40 -0
- package/docs/de/xtend-vendor-types.md +36 -0
- package/docs/de/xtendrmt-app-dsl.md +334 -0
- package/docs/de/xtendrmt-migration-guide.md +266 -0
- package/docs/de/xtendrmt-native-authoring.md +333 -0
- package/docs/de/xtendrmt-overview.md +109 -0
- package/docs/de/xtendrmt-parsedown-scheduling.md +301 -0
- package/docs/de/xtendrmt-runtime-bridge.md +155 -0
- package/docs/en/README.md +163 -0
- package/docs/en/XTend-ADR.md +221 -0
- package/docs/en/a11y-keyboard-smokes.md +68 -0
- package/docs/en/about.md +25 -0
- package/docs/en/api.md +171 -0
- package/docs/en/best-practices.md +125 -0
- package/docs/en/changelog.md +104 -0
- package/docs/en/component-catalog-coverage.md +104 -0
- package/docs/en/component-lab.md +103 -0
- package/docs/en/component-long-tail-migration.md +41 -0
- package/docs/en/component-platform.md +243 -0
- package/docs/en/component-ux-app-authoring.md +118 -0
- package/docs/en/component-ux-authoring.md +96 -0
- package/docs/en/component-ux-gates.md +45 -0
- package/docs/en/components/x-rmt-lifecycle-demo-build.md +75 -0
- package/docs/en/components/xalert.md +94 -0
- package/docs/en/components/xbutton.md +118 -0
- package/docs/en/components/xcalendar.md +95 -0
- package/docs/en/components/xcards.md +139 -0
- package/docs/en/components/xcheckbox.md +118 -0
- package/docs/en/components/xcode.md +153 -0
- package/docs/en/components/xdialog.md +108 -0
- package/docs/en/components/xdrawer.md +110 -0
- package/docs/en/components/xfooter.md +138 -0
- package/docs/en/components/xform.md +147 -0
- package/docs/en/components/xheader.md +308 -0
- package/docs/en/components/xhero.md +157 -0
- package/docs/en/components/xicon.md +149 -0
- package/docs/en/components/xinput.md +147 -0
- package/docs/en/components/xlightbox.md +113 -0
- package/docs/en/components/xlink.md +130 -0
- package/docs/en/components/xmasonry.md +136 -0
- package/docs/en/components/xmenu.md +185 -0
- package/docs/en/components/xmodal.md +102 -0
- package/docs/en/components/xplayer.md +114 -0
- package/docs/en/components/xpopover.md +87 -0
- package/docs/en/components/xprogress.md +73 -0
- package/docs/en/components/xradio.md +119 -0
- package/docs/en/components/xrouter.md +260 -0
- package/docs/en/components/xsection.md +136 -0
- package/docs/en/components/xselect.md +122 -0
- package/docs/en/components/xsidepanel.md +48 -0
- package/docs/en/components/xspinner.md +118 -0
- package/docs/en/components/xstate.md +163 -0
- package/docs/en/components/xstatus.md +71 -0
- package/docs/en/components/xsummary.md +90 -0
- package/docs/en/components/xsurfacemanager.md +42 -0
- package/docs/en/components/xsurfacewindow.md +31 -0
- package/docs/en/components/xtabs.md +187 -0
- package/docs/en/components/xtextarea.md +115 -0
- package/docs/en/components/xtheme.md +203 -0
- package/docs/en/components/xtoast.md +78 -0
- package/docs/en/components/xtooltip.md +85 -0
- package/docs/en/components/xtype.md +91 -0
- package/docs/en/components/xutils.md +161 -0
- package/docs/en/components/xwriter.md +106 -0
- package/docs/en/components.md +151 -0
- package/docs/en/conditional-network-evidence-ci.md +38 -0
- package/docs/en/conditional-network-evidence.md +50 -0
- package/docs/en/core-migration-guide.md +110 -0
- package/docs/en/design-tokens.md +137 -0
- package/docs/en/docs-rmt-production-hardening.md +31 -0
- package/docs/en/enterprise-adoption.md +413 -0
- package/docs/en/enterprise-component-flex-release-handoff.md +129 -0
- package/docs/en/epic10-platform-gates.md +62 -0
- package/docs/en/epic10-release-handoff.md +81 -0
- package/docs/en/epic11-enterprise-ux-handoff.md +70 -0
- package/docs/en/epic12-rc0-handoff.md +61 -0
- package/docs/en/epic18-media-manager-vendor-upstream.md +232 -0
- package/docs/en/epic18-rmt-app-platform-release-handoff.md +60 -0
- package/docs/en/epic18-vendor-bugfixes.md +29 -0
- package/docs/en/existing-component-metadata.md +67 -0
- package/docs/en/hydration-performance-closure.md +34 -0
- package/docs/en/hydration-policies.md +75 -0
- package/docs/en/known-residual-triage.md +22 -0
- package/docs/en/manifest-import-policy.md +81 -0
- package/docs/en/manifest.md +135 -0
- package/docs/en/motion-contrast.md +67 -0
- package/docs/en/package-export-lock.md +44 -0
- package/docs/en/performance-measurements.md +106 -0
- package/docs/en/performance-regression.md +89 -0
- package/docs/en/performance.md +132 -0
- package/docs/en/previews/README.md +17 -0
- package/docs/en/prod-browser-csp-smokes.md +40 -0
- package/docs/en/public-component-types.md +79 -0
- package/docs/en/quick-start-guide.md +189 -0
- package/docs/en/rc0-adoption-guide.md +102 -0
- package/docs/en/rc0-gate-matrix.md +58 -0
- package/docs/en/rc1-gate-matrix-ci-handoff.md +56 -0
- package/docs/en/rc1-migration-notes.md +69 -0
- package/docs/en/rc1-readiness.md +46 -0
- package/docs/en/release-owner-acceptance.md +56 -0
- package/docs/en/release-report-pack-dry-run-evidence.md +39 -0
- package/docs/en/rmt-action-effect-runtime.md +101 -0
- package/docs/en/rmt-app-platform-authoring.md +47 -0
- package/docs/en/rmt-app-platform-fixture.md +35 -0
- package/docs/en/rmt-app-platform-migration-guide.md +75 -0
- package/docs/en/rmt-app-platform-tooling.md +58 -0
- package/docs/en/rmt-component-template-primitives.md +49 -0
- package/docs/en/rmt-dom-descriptor-renderer.md +54 -0
- package/docs/en/rmt-dsl-authoring-polish.md +143 -0
- package/docs/en/rmt-event-routing-runtime.md +98 -0
- package/docs/en/rmt-first-demo-app.md +87 -0
- package/docs/en/rmt-first-xtend-apps.md +127 -0
- package/docs/en/rmt-kernel-panic-recovery-incident-handoff.md +60 -0
- package/docs/en/rmt-kernel-security-hardening-migration.md +49 -0
- package/docs/en/rmt-kernel-trusted-output-authoring.md +68 -0
- package/docs/en/rmt-language-server.md +243 -0
- package/docs/en/rmt-lifecycle-demo.md +23 -0
- package/docs/en/rmt-linter.md +146 -0
- package/docs/en/rmt-node-ssr-adapter.md +99 -0
- package/docs/en/rmt-php-ssr-adapter.md +118 -0
- package/docs/en/rmt-production-readiness.md +63 -0
- package/docs/en/rmt-state-selector-runtime.md +34 -0
- package/docs/en/rmt-surface-resource-graph-runtime.md +68 -0
- package/docs/en/rmt-tooling-release-gates.md +77 -0
- package/docs/en/rmt-vnext-authoring.md +102 -0
- package/docs/en/rmt-vnext-component-primitives.md +185 -0
- package/docs/en/rmt-vnext-cross-surface-events.md +59 -0
- package/docs/en/rmt-vnext-enterprise-mfe-handoff.md +62 -0
- package/docs/en/rmt-vnext-fabric-bridge-evidence.md +64 -0
- package/docs/en/rmt-vnext-migration-notes.md +62 -0
- package/docs/en/rmt-vnext-primitive-authoring-tooling.md +174 -0
- package/docs/en/rmt-vnext-primitive-grammar-design.md +268 -0
- package/docs/en/rmt-vnext-primitive-lowering.md +91 -0
- package/docs/en/rmt-vnext-primitive-migration.md +93 -0
- package/docs/en/rmt-vnext-primitive-parser-ast.md +59 -0
- package/docs/en/rmt-vnext-primitive-semantic-graph.md +103 -0
- package/docs/en/rmt-vnext-primitives-compiler-backlog.md +327 -0
- package/docs/en/rmt-vnext-release-handoff.md +83 -0
- package/docs/en/rmt-vnext-remote-surfaces.md +81 -0
- package/docs/en/rmt-vnext-source-to-sea-gate.md +482 -0
- package/docs/en/rmt-vnext-surface-registry-enterprise.md +68 -0
- package/docs/en/screenreader-signals.md +56 -0
- package/docs/en/supply-chain-gates.md +106 -0
- package/docs/en/surface-manager-authoring-guide.md +94 -0
- package/docs/en/surface-manager-browser-lab.md +45 -0
- package/docs/en/surface-manager-component-lab.md +43 -0
- package/docs/en/surface-manager-controller.md +66 -0
- package/docs/en/surface-manager-layout-engines.md +32 -0
- package/docs/en/surface-manager-lazy-hydration.md +63 -0
- package/docs/en/surface-manager-migration-guide.md +113 -0
- package/docs/en/surface-manager-native-rmt-surfaces.md +38 -0
- package/docs/en/surface-manager-overlay-bridge.md +53 -0
- package/docs/en/surface-manager-persistence.md +30 -0
- package/docs/en/surface-manager-quality-gates.md +51 -0
- package/docs/en/surface-manager-release-handoff.md +68 -0
- package/docs/en/surface-manager-remote-policy.md +54 -0
- package/docs/en/surface-manager-rmt-authoring.md +89 -0
- package/docs/en/surface-manager-route-lifecycle.md +59 -0
- package/docs/en/surface-manager-runtime-release-handoff.md +69 -0
- package/docs/en/surface-manager-side-panel-runtime.md +36 -0
- package/docs/en/surface-manager-stack-policy.md +39 -0
- package/docs/en/surface-manager-window-runtime.md +47 -0
- package/docs/en/surface-manager-workbench-fixture.md +43 -0
- package/docs/en/third-party-design-authoring.md +406 -0
- package/docs/en/trusted-dom-boundary-browser-proof.md +32 -0
- package/docs/en/trusted-dom-sanitizing.md +124 -0
- package/docs/en/type-exports.md +61 -0
- package/docs/en/typescript-components.md +63 -0
- package/docs/en/visual-browser-regression.md +83 -0
- package/docs/en/visual-owner-artifacts.md +46 -0
- package/docs/en/visual-snapshot-automation.md +87 -0
- package/docs/en/xtend-api-types.md +55 -0
- package/docs/en/xtend-builder-types.md +55 -0
- package/docs/en/xtend-catalog-types.md +44 -0
- package/docs/en/xtend-fabric-rmt-lane-mapping.md +143 -0
- package/docs/en/xtend-fabric.md +474 -0
- package/docs/en/xtend-loader-types.md +58 -0
- package/docs/en/xtend-loader.md +265 -0
- package/docs/en/xtend-policy-types.md +38 -0
- package/docs/en/xtend-rmt-types.md +40 -0
- package/docs/en/xtend-vendor-types.md +36 -0
- package/docs/en/xtendrmt-app-dsl.md +331 -0
- package/docs/en/xtendrmt-migration-guide.md +256 -0
- package/docs/en/xtendrmt-native-authoring.md +336 -0
- package/docs/en/xtendrmt-overview.md +63 -0
- package/docs/en/xtendrmt-parsedown-scheduling.md +301 -0
- package/docs/en/xtendrmt-runtime-bridge.md +155 -0
- package/docs/enterprise-adoption.md +4 -2
- package/docs/epic18-media-manager-vendor-upstream.md +318 -0
- package/docs/epic18-rmt-app-platform-release-handoff.md +67 -0
- package/docs/epic18-vendor-bugfixes.md +34 -0
- package/docs/index.php +1056 -109
- package/docs/manifest.md +8 -2
- package/docs/menu.json +986 -133
- package/docs/package-export-lock.md +2 -2
- package/docs/public-component-types.md +2 -2
- package/docs/quick-start-guide.md +126 -58
- package/docs/rmt-action-effect-runtime.md +101 -0
- package/docs/rmt-app-platform-authoring.md +54 -0
- package/docs/rmt-app-platform-fixture.md +46 -0
- package/docs/rmt-app-platform-migration-guide.md +88 -0
- package/docs/rmt-app-platform-tooling.md +79 -0
- package/docs/rmt-component-template-primitives.md +57 -0
- package/docs/rmt-dom-descriptor-renderer.md +64 -0
- package/docs/rmt-dsl-authoring-polish.md +67 -44
- package/docs/rmt-event-routing-runtime.md +98 -0
- package/docs/rmt-first-demo-app.md +2 -2
- package/docs/rmt-first-xtend-apps.md +70 -46
- package/docs/rmt-language-server.md +61 -4
- package/docs/rmt-lifecycle-demo.md +1 -2
- package/docs/rmt-node-ssr-adapter.md +144 -0
- package/docs/rmt-php-ssr-adapter.md +158 -0
- package/docs/rmt-state-selector-runtime.md +47 -0
- package/docs/rmt-surface-resource-graph-runtime.md +92 -0
- package/docs/rmt-vnext-authoring.md +128 -18
- package/docs/rmt-vnext-component-primitives.md +188 -0
- package/docs/rmt-vnext-fabric-bridge-evidence.md +81 -0
- package/docs/rmt-vnext-primitive-authoring-tooling.md +247 -0
- package/docs/rmt-vnext-primitive-grammar-design.md +289 -0
- package/docs/rmt-vnext-primitive-lowering.md +108 -0
- package/docs/rmt-vnext-primitive-migration.md +119 -0
- package/docs/rmt-vnext-primitive-parser-ast.md +76 -0
- package/docs/rmt-vnext-primitive-semantic-graph.md +118 -0
- package/docs/rmt-vnext-primitives-compiler-backlog.md +742 -0
- package/docs/rmt-vnext-release-handoff.md +14 -0
- package/docs/rmt-vnext-source-to-sea-gate.md +629 -0
- package/docs/surface-manager-migration-guide.md +34 -6
- package/docs/surface-manager-overlay-bridge.md +9 -4
- package/docs/surface-manager-rmt-authoring.md +50 -34
- package/docs/surface-manager-workbench-fixture.md +1 -2
- package/docs/third-party-design-authoring.md +1 -1
- package/docs/type-exports.md +3 -3
- package/docs/utils/pageloader.js +811 -62
- package/docs/visual-browser-regression.md +1 -1
- package/docs/xtend-rmt-types.md +3 -2
- package/docs/xtendrmt-app-dsl.md +187 -122
- package/docs/xtendrmt-docs-shell-vnext.rmt +165 -0
- package/docs/xtendrmt-migration-guide.md +48 -17
- package/docs/xtendrmt-native-authoring.md +213 -217
- package/docs/xtendrmt-overview.md +81 -61
- package/docs/xtendrmt-parsedown-scheduling.md +23 -8
- package/fabric/package.json +1 -1
- package/package.json +684 -21
- package/tools/package.json +5 -1
- package/tools/rmt-editor/vscode/README.md +72 -5
- package/tools/rmt-editor/vscode/XTend-Logo.png +0 -0
- package/tools/rmt-editor/vscode/extension.d.ts +33 -0
- package/tools/rmt-editor/vscode/extension.js +1816 -7
- package/tools/rmt-editor/vscode/language-configuration.json +2 -1
- package/tools/rmt-editor/vscode/package.json +193 -2
- package/tools/rmt-editor/vscode/snippets/rmt.code-snippets +41 -0
- package/tools/rmt-editor/vscode/syntaxes/rmt.tmLanguage.json +103 -1
- package/tools/rmt-editor/vscode/templates/launch.json +70 -0
- package/tools/rmt-editor/vscode/templates/tasks.json +172 -0
- package/tools/rmt-editor/vscode/xtend-rmt-language-0.0.0-enterprise-readiness.vsix +0 -0
- package/tools/rmt-language/app-platform-tooling.d.ts +128 -0
- package/tools/rmt-language/app-platform-tooling.js +677 -0
- package/tools/rmt-language/completions.d.ts +5 -0
- package/tools/rmt-language/completions.js +185 -3
- package/tools/rmt-language/diagnostics.js +54 -0
- package/tools/rmt-language/hover.js +36 -0
- package/tools/rmt-language/rmt-tooling-public-types.d.ts +7 -0
- package/tools/rmt-language/rules/app-platform-policy.js +39 -0
- package/tools/rmt-language/rules/index.js +5 -1
- package/tools/rmt-language/semantic-graph.d.ts +6 -0
- package/tools/rmt-language/semantic-graph.js +928 -0
- package/tools/rmt-language/snippets/index.js +44 -0
- package/tools/rmt-language/snippets/rmt.code-snippets +41 -0
- package/tools/rmt-language/vnext-compatibility.d.ts +10 -0
- package/tools/rmt-language/vnext-compatibility.js +642 -0
- package/tools/rmt-language/vnext-compiler.d.ts +5 -0
- package/tools/rmt-language/vnext-compiler.js +863 -17
- package/tools/rmt-language/vnext-parser.js +725 -9
- package/tools/rmt-language/vnext-release.d.ts +1 -0
- package/tools/rmt-language/vnext-release.js +20 -0
- package/tools/rmt-language/vnext-source-to-sea.d.ts +33 -0
- package/tools/rmt-language/vnext-source-to-sea.js +2227 -0
- package/tools/rmt-language/vnext-surfaces.js +111 -52
- package/tools/rmt-language/vnext-tooling.d.ts +19 -1
- package/tools/rmt-language/vnext-tooling.js +1247 -5
- package/tools/rmt-language-server/protocol.js +3 -0
- package/tools/rmt-language-server/server.d.ts +2 -0
- package/tools/rmt-language-server/server.js +176 -22
- package/tools/rmt-linter/cli.d.ts +2 -0
- package/tools/rmt-linter/cli.js +62 -0
- package/xtend-builder/generators/registry.js +11 -0
- package/xtend-builder/generators/rmt-app-platform.js +239 -0
- package/xtend-builder/generators/rmt-lifecycle-demo.js +3 -11
- package/xtend-builder/lib/cli.js +38 -0
- package/xtend-builder/package.json +3 -3
- package/xtend-builder/scaffold.config.js +29 -2
- package/xtend.css +49 -2
- package/xtendrmt/package.json +49 -1
- package/xtendrmt/rmt-action-effect-runtime.d.ts +126 -0
- package/xtendrmt/rmt-action-effect-runtime.js +494 -0
- package/xtendrmt/rmt-component-capability-registry.d.ts +180 -0
- package/xtendrmt/rmt-component-capability-registry.js +636 -0
- package/xtendrmt/rmt-core.d.ts +6 -0
- package/xtendrmt/rmt-core.esm.js +32 -6
- package/xtendrmt/rmt-dom-descriptor-renderer.d.ts +107 -0
- package/xtendrmt/rmt-dom-descriptor-renderer.js +1066 -0
- package/xtendrmt/rmt-event-routing-runtime.d.ts +144 -0
- package/xtendrmt/rmt-event-routing-runtime.js +666 -0
- package/xtendrmt/rmt-lifecycle-demo.app.js +2 -2
- package/xtendrmt/rmt-lifecycle-demo.core.json +4 -0
- package/xtendrmt/rmt-lifecycle-demo.rmt-build.app.js +1 -1
- package/xtendrmt/rmt-lifecycle-demo.rmt-build.scaffold.json +2 -2
- package/xtendrmt/rmt-lifecycle-demo.scaffold.json +4 -4
- package/xtendrmt/rmt-native-shell-runtime.d.ts +77 -0
- package/xtendrmt/rmt-native-shell-runtime.js +309 -0
- package/xtendrmt/rmt-node-ssr-adapter.d.ts +197 -0
- package/xtendrmt/rmt-node-ssr-adapter.js +1006 -0
- package/xtendrmt/rmt-php-ssr-adapter.php +976 -0
- package/xtendrmt/rmt-runtime.browser.js +32 -6
- package/xtendrmt/rmt-runtime.esm.js +32 -6
- package/xtendrmt/rmt-state-selector-runtime.d.ts +166 -0
- package/xtendrmt/rmt-state-selector-runtime.js +866 -0
- package/xtendrmt/rmt-surface-resource-graph-runtime.d.ts +224 -0
- package/xtendrmt/rmt-surface-resource-graph-runtime.js +932 -0
- package/xtendrmt/rmt-vnext-enterprise-mfe-demo.core.json +3 -0
- package/xtendrmt/rmt-vnext-reference-demo.core.json +3 -0
- package/xtendrmt/xtendrmt-bestcase-demo.core.json +3420 -372
- package/xtendrmt/xtendrmt-bestcase-demo.js +424 -8
- package/xtendrmt/xtendrmt-bestcase-demo.rmt +214 -6
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
# Third-Party Design Authoring
|
|
2
|
+
|
|
3
|
+
Docs Contract: `xtend.enterprise.third-party-authoring-guide.v1`
|
|
4
|
+
|
|
5
|
+
Workpackage: `ECH-WP-11`
|
|
6
|
+
|
|
7
|
+
Local gate:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node scripts/run_xtend_tests.js enterprise-third-party-authoring-guide --json
|
|
11
|
+
npm run test:enterprise-third-party-authoring-guide
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
This guide is for teams that want to embed XTend components into their own corporate design, white-label product or internal enterprise design system. The target path is: XTend remains visually polished and distinct, but every visible decision flows through XTend.css, XTheme, CSS parts, slots, attributes or icon packs. Component forks are not a regular skinning path.
|
|
15
|
+
|
|
16
|
+
## Principles
|
|
17
|
+
|
|
18
|
+
1. Define corporate tokens first, then derive component tokens.
|
|
19
|
+
2. Keep XTend Signature UI as the quality baseline, but deliberately replace brand color, typography, radius, elevation and density.
|
|
20
|
+
3. Do not select Shadow DOM internals. Skinning happens through CSS Custom Properties and `::part(...)`.
|
|
21
|
+
4. Light, Dark, High Contrast, Forced Colors, Reduced Motion, Comfortable, Compact and Dense are required variants.
|
|
22
|
+
5. Controls use `x-icon`, inline SVG or tokenized CSS graphics, never visible text characters.
|
|
23
|
+
6. Status, active, error, disabled and focus states must not communicate only through color.
|
|
24
|
+
|
|
25
|
+
## XTend.css Override Patterns
|
|
26
|
+
|
|
27
|
+
Corporate overrides belong in their own cascade layer. This keeps host tokens traceable, and product teams can apply XTend updates without copying Shadow DOM rules.
|
|
28
|
+
|
|
29
|
+
```css
|
|
30
|
+
@layer xtend-customer {
|
|
31
|
+
:root {
|
|
32
|
+
--acme-ink: #17231f;
|
|
33
|
+
--acme-muted: #5f6b64;
|
|
34
|
+
--acme-canvas: #f7f4ee;
|
|
35
|
+
--acme-panel: #fffdf8;
|
|
36
|
+
--acme-action: #0e6e8f;
|
|
37
|
+
--acme-action-strong: #173f35;
|
|
38
|
+
--acme-warm: #b56b35;
|
|
39
|
+
--acme-edge: rgba(23, 35, 31, 0.22);
|
|
40
|
+
--acme-radius-control: 0.35rem;
|
|
41
|
+
--acme-radius-panel: 0.55rem;
|
|
42
|
+
--acme-focus: 3px solid var(--acme-warm);
|
|
43
|
+
--acme-font-body: "Aptos", "Segoe UI", system-ui, sans-serif;
|
|
44
|
+
--acme-font-display: "Aptos Display", "Aptos", "Segoe UI", system-ui, sans-serif;
|
|
45
|
+
--acme-font-code: "Cascadia Code", "SFMono-Regular", Consolas, monospace;
|
|
46
|
+
|
|
47
|
+
--xtend-surface: var(--acme-canvas);
|
|
48
|
+
--xtend-surface-muted: var(--acme-panel);
|
|
49
|
+
--xtend-text: var(--acme-ink);
|
|
50
|
+
--xtend-color-primary: var(--acme-action);
|
|
51
|
+
--xtend-border-color: var(--acme-edge);
|
|
52
|
+
--xtend-focus-outline: var(--acme-focus);
|
|
53
|
+
--xtend-radius: var(--acme-radius-panel);
|
|
54
|
+
--xtend-font-family: var(--acme-font-body);
|
|
55
|
+
--xtend-font-family-body: var(--acme-font-body);
|
|
56
|
+
--xtend-font-family-heading: var(--acme-font-display);
|
|
57
|
+
--xtend-font-family-control: var(--acme-font-body);
|
|
58
|
+
--xtend-font-family-code: var(--acme-font-code);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
:root[data-theme="dark"] {
|
|
62
|
+
--acme-ink: #f6f1e8;
|
|
63
|
+
--acme-muted: #d4c9b8;
|
|
64
|
+
--acme-canvas: #121916;
|
|
65
|
+
--acme-panel: #1c2823;
|
|
66
|
+
--acme-action: #8bd4e6;
|
|
67
|
+
--acme-action-strong: #b56b35;
|
|
68
|
+
--acme-edge: rgba(246, 241, 232, 0.2);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
:root[data-theme="high-contrast"] {
|
|
72
|
+
--acme-ink: #ffffff;
|
|
73
|
+
--acme-muted: #ffffff;
|
|
74
|
+
--acme-canvas: #000000;
|
|
75
|
+
--acme-panel: #000000;
|
|
76
|
+
--acme-action: #ffff00;
|
|
77
|
+
--acme-action-strong: #ffffff;
|
|
78
|
+
--acme-edge: #ffffff;
|
|
79
|
+
--acme-focus: 3px solid #ffff00;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
:root[data-theme="forced-colors"] {
|
|
83
|
+
--acme-ink: CanvasText;
|
|
84
|
+
--acme-muted: CanvasText;
|
|
85
|
+
--acme-canvas: Canvas;
|
|
86
|
+
--acme-panel: Canvas;
|
|
87
|
+
--acme-action: Highlight;
|
|
88
|
+
--acme-action-strong: Highlight;
|
|
89
|
+
--acme-edge: CanvasText;
|
|
90
|
+
--acme-focus: 2px solid Highlight;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## XTheme Token Bridge
|
|
96
|
+
|
|
97
|
+
`x-theme` and `window.XTend.theme` are the runtime path for theme changes, density, reduced motion and forced colors. A corporate theme should set the same values as XTend.css so static CSS overrides and runtime changes stay identical.
|
|
98
|
+
|
|
99
|
+
```js
|
|
100
|
+
window.XTend.theme.registerTheme('acme-enterprise', {
|
|
101
|
+
'--xtend-surface-page': '#f7f4ee',
|
|
102
|
+
'--xtend-surface-panel': '#fffdf8',
|
|
103
|
+
'--xtend-surface-raised': '#ffffff',
|
|
104
|
+
'--xtend-text-primary': '#17231f',
|
|
105
|
+
'--xtend-text-muted': '#5f6b64',
|
|
106
|
+
'--xtend-color-action': '#0e6e8f',
|
|
107
|
+
'--xtend-color-action-hover': '#173f35',
|
|
108
|
+
'--xtend-text-on-action': '#fffaf0',
|
|
109
|
+
'--xtend-border-subtle': 'rgba(23, 35, 31, 0.22)',
|
|
110
|
+
'--xtend-radius-control': '0.35rem',
|
|
111
|
+
'--xtend-radius-panel': '0.55rem',
|
|
112
|
+
'--xtend-space-control-gap': '0.55rem',
|
|
113
|
+
'--xtend-elevation-2': '0 14px 34px rgba(23, 35, 31, 0.14)',
|
|
114
|
+
'--xtend-font-family-body': '"Aptos", "Segoe UI", system-ui, sans-serif',
|
|
115
|
+
'--xtend-font-family-heading': '"Aptos Display", "Aptos", "Segoe UI", system-ui, sans-serif',
|
|
116
|
+
'--xtend-header-surface': 'var(--xtend-surface-panel)',
|
|
117
|
+
'--xtend-header-menu-surface': 'var(--xtend-surface-raised)',
|
|
118
|
+
'--xtend-button-primary-surface': 'var(--xtend-color-action)',
|
|
119
|
+
'--xtend-button-primary-text': 'var(--xtend-text-on-action)',
|
|
120
|
+
'--xtend-menu-item-hover-surface': 'rgba(181, 107, 53, 0.14)',
|
|
121
|
+
'--xtend-drawer-overlay-surface': 'rgba(23, 35, 31, 0.45)',
|
|
122
|
+
'--xtend-modal-overlay-surface': 'rgba(23, 35, 31, 0.45)',
|
|
123
|
+
'--xtend-icon-color': 'currentColor'
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
window.XTend.theme.setTheme('acme-enterprise');
|
|
127
|
+
window.XTend.theme.setDensity('compact');
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Required modes:
|
|
131
|
+
|
|
132
|
+
| Mode | Rule |
|
|
133
|
+
|------|------|
|
|
134
|
+
| `light` | text, icons, controls and focus must remain readable on light surfaces |
|
|
135
|
+
| `dark` | no hard-coded light surfaces without dark text fallback |
|
|
136
|
+
| `high-contrast` | active and error states need shape, border or marker |
|
|
137
|
+
| `forced-colors` | use system colors such as `Canvas`, `CanvasText`, `Highlight`, `HighlightText`, `ButtonFace`, `ButtonText` |
|
|
138
|
+
|
|
139
|
+
Density presets:
|
|
140
|
+
|
|
141
|
+
| Density | Use |
|
|
142
|
+
|---------|-----|
|
|
143
|
+
| `comfortable` | default for mixed enterprise shells |
|
|
144
|
+
| `compact` | toolbars, data density, workbench shells |
|
|
145
|
+
| `dense` | navigation, filter bars, table surroundings |
|
|
146
|
+
|
|
147
|
+
## CSS Parts
|
|
148
|
+
|
|
149
|
+
CSS parts are the skinning API. Use them for zones, not private Shadow DOM structures.
|
|
150
|
+
|
|
151
|
+
```css
|
|
152
|
+
@layer xtend-customer {
|
|
153
|
+
x-header::part(root) {
|
|
154
|
+
border-block-end: 1px solid var(--acme-edge);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
x-header::part(menu-surface),
|
|
158
|
+
x-drawer::part(surface),
|
|
159
|
+
x-modal::part(surface),
|
|
160
|
+
x-dialog::part(surface),
|
|
161
|
+
x-popover::part(surface) {
|
|
162
|
+
border: 1px solid var(--acme-edge);
|
|
163
|
+
border-radius: var(--acme-radius-panel);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
x-button::part(control),
|
|
167
|
+
x-menu::part(item) {
|
|
168
|
+
border-radius: var(--acme-radius-control);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
x-icon::part(icon),
|
|
172
|
+
x-header::part(trigger-icon) {
|
|
173
|
+
color: currentColor;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Rule: a `::part(...)` may set corporate styling, but must not remove semantic usability. Focus, disabled, busy, active and error states must remain intact.
|
|
179
|
+
|
|
180
|
+
## Icon Pack Registration
|
|
181
|
+
|
|
182
|
+
Product icons belong in a local icon pack. Remote CDNs are not an XTend default path.
|
|
183
|
+
|
|
184
|
+
```js
|
|
185
|
+
window.XTend.icons.register({
|
|
186
|
+
id: 'acme',
|
|
187
|
+
label: 'Acme Enterprise Icons',
|
|
188
|
+
cdnAllowed: false,
|
|
189
|
+
icons: {
|
|
190
|
+
product: {
|
|
191
|
+
aliases: ['brand-mark'],
|
|
192
|
+
nodes: [
|
|
193
|
+
{ tag: 'path', attrs: { d: 'M12 3 21 8v8l-9 5-9-5V8Z' } }
|
|
194
|
+
]
|
|
195
|
+
},
|
|
196
|
+
command: {
|
|
197
|
+
nodes: [
|
|
198
|
+
{ tag: 'path', attrs: { d: 'M5 7h14M5 12h14M5 17h14' } }
|
|
199
|
+
]
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Controls need a real button element, an accessible name and separate parts for control and icon. Visible characters such as `X`, `+`, `-`, `...` or emoji are not allowed as control graphics.
|
|
206
|
+
|
|
207
|
+
## Layout Modes
|
|
208
|
+
|
|
209
|
+
Layout variants are public API. Host apps should set modes declaratively and fine-tune them through tokens.
|
|
210
|
+
|
|
211
|
+
```html
|
|
212
|
+
<x-header
|
|
213
|
+
menu-mode="side-panel"
|
|
214
|
+
menu-placement="end"
|
|
215
|
+
menu-modal
|
|
216
|
+
menu-width="min(30rem, 92vw)"
|
|
217
|
+
menu-max-height="calc(100dvh - 2rem)"
|
|
218
|
+
menu-align="stretch">
|
|
219
|
+
<span slot="title">Acme Operations</span>
|
|
220
|
+
<x-link slot="nav" href="/overview" aria-current="page">Overview</x-link>
|
|
221
|
+
<x-link slot="nav" href="/control-room">Control Room</x-link>
|
|
222
|
+
</x-header>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
`x-header` supports `drawer`, `side-panel`, `popover`, `fullscreen` and `inline-main`. Modal variants need escape, focus return and, when focus trap is used, a visible backdrop. Non-modal variants must not remove main content from reading flow.
|
|
226
|
+
|
|
227
|
+
Overlay-near components use shared skinning zones:
|
|
228
|
+
|
|
229
|
+
| Component | Modes/Variant | Required Parts |
|
|
230
|
+
|-----------|---------------|----------------|
|
|
231
|
+
| `x-drawer` | Drawer/Overlay | `surface`, `backdrop`, `close`, `content` |
|
|
232
|
+
| `x-side-panel` | docked, pinned, overlay, collapsed | `surface`, `backdrop`, `close`, `content` |
|
|
233
|
+
| `x-modal` | modal overlay | `surface`, `backdrop`, `close`, `content` |
|
|
234
|
+
| `x-dialog` | modal dialog | `surface`, `backdrop`, `close`, `content` |
|
|
235
|
+
| `x-popover` | non-modal or `modal` | `surface`, `backdrop`, `close`, `content` |
|
|
236
|
+
|
|
237
|
+
## A11y Dos and Donts
|
|
238
|
+
|
|
239
|
+
| Do | Dont |
|
|
240
|
+
|----|------|
|
|
241
|
+
| keep a visible `focus-visible` ring through tokens | remove focus through `outline: none` without replacement |
|
|
242
|
+
| respect `prefers-reduced-motion` down into overlay and feedback components | test motion only in light mode |
|
|
243
|
+
| test `forced-colors` with `Canvas`, `CanvasText`, `Highlight` and `HighlightText` | force brand colors in Forced Colors |
|
|
244
|
+
| do not represent active, selected, error and disabled only through color | communicate status only through red/green |
|
|
245
|
+
| protect long labels with `overflow-wrap` and stable control height | clip text in buttons, tabs or menus |
|
|
246
|
+
| author icon controls with `aria-label`, `part="... control"` and `part="... icon"` | use visible text glyphs for close/menu/disclosure |
|
|
247
|
+
|
|
248
|
+
Status and route information must remain readable in every theme and must not communicate only through color. Use border, marker, underline, icon, text or shape as a second signal.
|
|
249
|
+
|
|
250
|
+
## Complete Third-Party Theme Example
|
|
251
|
+
|
|
252
|
+
This example combines XTend.css, XTheme, CSS parts, icon pack, header mode, density and a11y modes. It is deliberately not generic blue: the palette mixes ink, warm panel, cool action blue, deep green and copper accent.
|
|
253
|
+
|
|
254
|
+
```html
|
|
255
|
+
<html data-theme="light" data-xtend-density="compact">
|
|
256
|
+
<head>
|
|
257
|
+
<link rel="stylesheet" href="/xtend.css">
|
|
258
|
+
<meta name="xtend-preload" content="x-theme,x-header,x-link,x-button,x-icon">
|
|
259
|
+
<style>
|
|
260
|
+
@layer xtend-customer {
|
|
261
|
+
:root {
|
|
262
|
+
--acme-ink: #17231f;
|
|
263
|
+
--acme-canvas: #f7f4ee;
|
|
264
|
+
--acme-panel: #fffdf8;
|
|
265
|
+
--acme-action: #0e6e8f;
|
|
266
|
+
--acme-action-strong: #173f35;
|
|
267
|
+
--acme-warm: #b56b35;
|
|
268
|
+
--acme-edge: rgba(23, 35, 31, 0.22);
|
|
269
|
+
--acme-focus: 3px solid var(--acme-warm);
|
|
270
|
+
--acme-font-body: "Aptos", "Segoe UI", system-ui, sans-serif;
|
|
271
|
+
--acme-font-display: "Aptos Display", "Aptos", "Segoe UI", system-ui, sans-serif;
|
|
272
|
+
|
|
273
|
+
--xtend-surface: var(--acme-canvas);
|
|
274
|
+
--xtend-surface-muted: var(--acme-panel);
|
|
275
|
+
--xtend-text: var(--acme-ink);
|
|
276
|
+
--xtend-border-color: var(--acme-edge);
|
|
277
|
+
--xtend-color-primary: var(--acme-action);
|
|
278
|
+
--xtend-focus-outline: var(--acme-focus);
|
|
279
|
+
--xtend-font-family-body: var(--acme-font-body);
|
|
280
|
+
--xtend-font-family-heading: var(--acme-font-display);
|
|
281
|
+
--xtend-header-surface: var(--acme-panel);
|
|
282
|
+
--xtend-header-menu-surface: #ffffff;
|
|
283
|
+
--xtend-header-menu-backdrop: rgba(23, 35, 31, 0.45);
|
|
284
|
+
--xtend-button-primary-surface: var(--acme-action);
|
|
285
|
+
--xtend-button-primary-text: #fffaf0;
|
|
286
|
+
--xtend-menu-item-hover-surface: rgba(181, 107, 53, 0.14);
|
|
287
|
+
--xtend-nav-current-indicator: var(--acme-warm);
|
|
288
|
+
--xtend-overlay-surface: #ffffff;
|
|
289
|
+
--xtend-overlay-text: var(--acme-ink);
|
|
290
|
+
--xtend-overlay-backdrop: rgba(23, 35, 31, 0.45);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
:root[data-theme="dark"] {
|
|
294
|
+
--acme-ink: #f6f1e8;
|
|
295
|
+
--acme-canvas: #121916;
|
|
296
|
+
--acme-panel: #1c2823;
|
|
297
|
+
--acme-action: #8bd4e6;
|
|
298
|
+
--acme-action-strong: #b56b35;
|
|
299
|
+
--acme-edge: rgba(246, 241, 232, 0.2);
|
|
300
|
+
--xtend-button-primary-text: #121916;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
:root[data-theme="forced-colors"] {
|
|
304
|
+
--acme-ink: CanvasText;
|
|
305
|
+
--acme-canvas: Canvas;
|
|
306
|
+
--acme-panel: Canvas;
|
|
307
|
+
--acme-action: Highlight;
|
|
308
|
+
--acme-action-strong: Highlight;
|
|
309
|
+
--acme-warm: Highlight;
|
|
310
|
+
--acme-edge: CanvasText;
|
|
311
|
+
--xtend-button-primary-text: HighlightText;
|
|
312
|
+
--xtend-overlay-backdrop: Canvas;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
@media (prefers-reduced-motion: reduce) {
|
|
316
|
+
:root {
|
|
317
|
+
--xtend-motion-duration-fast: 0ms;
|
|
318
|
+
--xtend-motion-duration-base: 0ms;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
x-header::part(root),
|
|
323
|
+
x-modal::part(surface),
|
|
324
|
+
x-drawer::part(surface) {
|
|
325
|
+
border: 1px solid var(--acme-edge);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
x-header::part(trigger-icon),
|
|
329
|
+
x-button::part(icon),
|
|
330
|
+
x-menu::part(disclosure-icon) {
|
|
331
|
+
color: currentColor;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
</style>
|
|
335
|
+
<script type="module" src="/xtend-loader.js" data-manifest="/components/manifest.json"></script>
|
|
336
|
+
</head>
|
|
337
|
+
<body>
|
|
338
|
+
<x-header menu-mode="side-panel" menu-placement="end" menu-modal>
|
|
339
|
+
<span slot="title">Acme Operations</span>
|
|
340
|
+
<x-link slot="nav" href="/overview" aria-current="page">Overview</x-link>
|
|
341
|
+
<x-link slot="nav" href="/reports">Reports</x-link>
|
|
342
|
+
<x-button slot="actions" variant="primary">
|
|
343
|
+
<x-icon pack="acme" name="command" decorative></x-icon>
|
|
344
|
+
Command
|
|
345
|
+
</x-button>
|
|
346
|
+
</x-header>
|
|
347
|
+
</body>
|
|
348
|
+
</html>
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## P0 Token/Part Reference
|
|
352
|
+
|
|
353
|
+
Every P0 component must have a token/part reference in this guide. The detail tables remain in the component documents so they can be maintained beside attributes, slots, events and a11y rules.
|
|
354
|
+
|
|
355
|
+
| Component | Docs | Alias Prefix | Token/Part Table | Required Parts |
|
|
356
|
+
|-----------|------|--------------|------------------|----------------|
|
|
357
|
+
| `x-theme` | [xtheme](./components/xtheme.md) | `--xtend-theme-` | `Central XTend Tokens` / [Design Tokens](./design-tokens.md) | `root` |
|
|
358
|
+
| `x-header` | [xheader](./components/xheader.md) | `--xtend-header-` | `ECH-WP-07 Token Table and signatureDesign`, `ECH-WP-09 Token Table and Navigation States` | `root`, `brand`, `trigger`, `trigger-icon`, `menu`, `menu-surface`, `backdrop` |
|
|
359
|
+
| `x-icon` | [xicon](./components/xicon.md) | `--xtend-icon-` | `Styling & Theming`, `ECH-WP-04 Control Rule` | `root`, `control`, `icon` |
|
|
360
|
+
| `x-button` | [xbutton](./components/xbutton.md) | `--xtend-button-` | `Styling & Theming` | `root`, `control`, `label`, `icon` |
|
|
361
|
+
| `x-menu` | [xmenu](./components/xmenu.md) | `--xtend-menu-` | `ECH-WP-09 Token Table and Navigation States` | `root`, `nav`, `item`, `disclosure-icon` |
|
|
362
|
+
| `x-drawer` | [xdrawer](./components/xdrawer.md) | `--xtend-drawer-` | `ECH-WP-06 Overlay Parity` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
363
|
+
| `x-side-panel` | [xsidepanel](./components/xsidepanel.md) | `--xtend-side-panel-` | `ECH-WP-06 Overlay Parity` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
364
|
+
| `x-modal` | [xmodal](./components/xmodal.md) | `--xtend-modal-` | `ECH-WP-06 Overlay Parity` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
365
|
+
| `x-dialog` | [xdialog](./components/xdialog.md) | `--xtend-dialog-` | `ECH-WP-06 Overlay Parity` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
366
|
+
| `x-popover` | [xpopover](./components/xpopover.md) | `--xtend-popover-` | `ECH-WP-06 Overlay Parity` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
367
|
+
| `x-toast` | [xtoast](./components/xtoast.md) | `--xtend-toast-` | `Styling & Theming` | `root`, `surface`, `content`, `close`, `icon` |
|
|
368
|
+
|
|
369
|
+
## Migrating Legacy Token Names
|
|
370
|
+
|
|
371
|
+
Legacy tokens remain visible as bridges, but new corporate themes should map them to the normalized alias layer.
|
|
372
|
+
|
|
373
|
+
| Legacy Token | New Alias |
|
|
374
|
+
|--------------|-----------|
|
|
375
|
+
| `--xtend-glass-bg` | `--xtend-surface-overlay` |
|
|
376
|
+
| `--xtend-shadow` | `--xtend-elevation-2` |
|
|
377
|
+
| `--xtend-radius` | `--xtend-radius-md` |
|
|
378
|
+
| `--xtend-font-family` | `--xtend-font-family-body` |
|
|
379
|
+
| `--xtend-overlay-bg` | `--xtend-surface-overlay` |
|
|
380
|
+
| `--xtend-border-color` | `--xtend-border-subtle` |
|
|
381
|
+
| `--header-bg` | `--xtend-header-surface` |
|
|
382
|
+
| `--header-fg` | `--xtend-header-text` |
|
|
383
|
+
| `--drawer-bg` | `--xtend-drawer-surface` |
|
|
384
|
+
| `--drawer-color` | `--xtend-drawer-text` |
|
|
385
|
+
| `--button-text-color` | `--xtend-button-text` |
|
|
386
|
+
|
|
387
|
+
Migration rule: old names may remain as fallback, but new documentation, new themes and new components must lead with the `--xtend-*` alias chain. Removing or renaming public parts and tokens requires migration notes.
|
|
388
|
+
|
|
389
|
+
## Acceptance for Corporate Themes
|
|
390
|
+
|
|
391
|
+
Before handoff to a host design system, these gates should run:
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
node scripts/run_xtend_tests.js enterprise-third-party-authoring-guide --json
|
|
395
|
+
node scripts/run_xtend_tests.js xtheme-token-alias-layer --json
|
|
396
|
+
node scripts/run_xtend_tests.js enterprise-component-style-audit --json
|
|
397
|
+
node scripts/run_xtend_tests.js enterprise-visual-dom-snapshot-matrix --json
|
|
398
|
+
node scripts/run_xtend_tests.js enterprise-component-flex-release-handoff --json
|
|
399
|
+
node scripts/run_xtend_tests.js component-shell-theme-matrix --json
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
Acceptance is only robust when Light, Dark, High Contrast, Forced Colors, Reduced Motion, Comfortable, Compact and Dense have been tested in the same corporate theme.
|
|
403
|
+
|
|
404
|
+
## Release Handoff
|
|
405
|
+
|
|
406
|
+
Starting with `ECH-WP-12`, [Enterprise Component Flex Release Handoff](./enterprise-component-flex-release-handoff.md) carries the contract `xtend.enterprise.component-flex-release-handoff.v1`. It connects SemVer assessment, deprecated aliases, migration notes, release checklist and adoption risks for corporate themes. The local gate `node scripts/run_xtend_tests.js enterprise-component-flex-release-handoff --json` must be green before release-owner review; publishing remains blocked by `private-until-release-owner-acceptance` until then.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Trusted DOM Boundary Browser Proof
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.epic13.trusted-dom-boundary.v1`
|
|
4
|
+
- Fixture: `tests/browser/fixtures/epic13-trusted-dom-boundary-smoke.html`
|
|
5
|
+
- Gate: `node scripts/run_xtend_tests.js epic13-trusted-dom-boundary --json`
|
|
6
|
+
|
|
7
|
+
## Goal
|
|
8
|
+
|
|
9
|
+
This RC1 gate proves that Parsedown HTML and RMT `htmlFragment` do not flow unchecked into the Docs app DOM sinks. The app still renders shell-first through RMT, but the host adapter sanitizes content before writing it into the content slot.
|
|
10
|
+
|
|
11
|
+
## Rules
|
|
12
|
+
|
|
13
|
+
- `parsedownHtml` requires `xtend.security.trusted-dom-sanitizer.v1`.
|
|
14
|
+
- RMT `htmlFragment` requires `xtend.security.sanitizing-boundary.v1`.
|
|
15
|
+
- RMT `dom_descriptor` remains the preferred path for structured templates.
|
|
16
|
+
- The RMT kernel imports no sanitizer, no PHP/Parsedown and no XTend types.
|
|
17
|
+
|
|
18
|
+
Blocked content includes `script`, `iframe`, inline event handlers, `javascript:` URLs and `srcdoc`.
|
|
19
|
+
|
|
20
|
+
## Browser-Close Smoke
|
|
21
|
+
|
|
22
|
+
The fixture intentionally places hostile content in `window.xtendDocsPages` and then loads `docs/utils/pageloader.js`. The smoke verifies that:
|
|
23
|
+
|
|
24
|
+
- the content slot carries `data-rmt-sanitized="true"`
|
|
25
|
+
- `data-rmt-trusted-dom-proof="xtend.epic13.trusted-dom-boundary.v1"` is set
|
|
26
|
+
- script elements, event handlers, JavaScript URLs and `srcdoc` are removed
|
|
27
|
+
- safe Parsedown text remains intact
|
|
28
|
+
- the shell continues to render shell-first
|
|
29
|
+
|
|
30
|
+
## Handoff
|
|
31
|
+
|
|
32
|
+
`WP-E13-11` is complete. `WP-E13-12` is complete with [RC1 Migration Notes](./rc1-migration-notes.md) and `xtend.epic13.rc1-migration-notes-semver.v1`. `WP-E13-13` is complete with [RC1 Gate Matrix and CI Handoff](./rc1-gate-matrix-ci-handoff.md) and `xtend.epic13.rc1-gate-matrix-ci-handoff.v1`.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Trusted DOM and Sanitizing
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.docs.trusted-dom-sanitizing.v1`
|
|
4
|
+
- Security Policy: `xtend.security.trusted-dom-policy.v1`
|
|
5
|
+
- Sanitizing Boundary: `xtend.security.sanitizing-boundary.v1`
|
|
6
|
+
- Sanitizer Contract: `xtend.security.trusted-dom-sanitizer.v1`
|
|
7
|
+
- Machine-readable contract: `security/trusted-dom-policy.js`
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
XTend treats dynamic markup as its own trust boundary. This matters especially
|
|
12
|
+
for RMT `html_fragment`, RMT template authoring, and the Parsedown-based Docs
|
|
13
|
+
App.
|
|
14
|
+
|
|
15
|
+
This page describes the developer rule: markup is classified first and then
|
|
16
|
+
written into an appropriate DOM sink. Raw HTML strings must not casually land in
|
|
17
|
+
`innerHTML`.
|
|
18
|
+
|
|
19
|
+
## Markup Classes
|
|
20
|
+
|
|
21
|
+
| Class | Source | Default |
|
|
22
|
+
|-------|--------|---------|
|
|
23
|
+
| `text` | labels, Markdown text, body copy | `textContent` |
|
|
24
|
+
| `attribute` | `aria-label`, `href`, `slot`, `data-*` | validated `setAttribute` |
|
|
25
|
+
| `structuredTemplate` | RMT `dom_descriptor`, component trees | nodes via `replaceChildren` |
|
|
26
|
+
| `htmlFragment` | RMT `html_fragment` | sanitizing boundary |
|
|
27
|
+
| `parsedownHtml` | HTML from `docs/index.php` / Parsedown | sanitizing boundary |
|
|
28
|
+
|
|
29
|
+
## Allowed and Restricted Sinks
|
|
30
|
+
|
|
31
|
+
Allowed:
|
|
32
|
+
|
|
33
|
+
- `textContent`
|
|
34
|
+
- validated `setAttribute`
|
|
35
|
+
- `classList`
|
|
36
|
+
- `dataset` without secrets and without code values
|
|
37
|
+
- `append` and `replaceChildren` with nodes
|
|
38
|
+
|
|
39
|
+
Restricted:
|
|
40
|
+
|
|
41
|
+
- `innerHTML`
|
|
42
|
+
- `insertAdjacentHTML`
|
|
43
|
+
- `template.innerHTML`
|
|
44
|
+
|
|
45
|
+
These restricted sinks require `xtend.security.sanitizing-boundary.v1`.
|
|
46
|
+
Browser-near docs/RMT sinks must also expose the sanitizer contract
|
|
47
|
+
`xtend.security.trusted-dom-sanitizer.v1`.
|
|
48
|
+
|
|
49
|
+
Forbidden by default:
|
|
50
|
+
|
|
51
|
+
- inline handlers such as `onclick`
|
|
52
|
+
- `eval`
|
|
53
|
+
- `new Function`
|
|
54
|
+
- dynamic script tags from RMT, manifest, event, or docs data
|
|
55
|
+
|
|
56
|
+
## RMT Templates
|
|
57
|
+
|
|
58
|
+
For XTendRMT:
|
|
59
|
+
|
|
60
|
+
- `dom_descriptor` is preferred.
|
|
61
|
+
- `html_fragment` is allowed only with a Trusted DOM boundary.
|
|
62
|
+
- Events use `actionRef`, `commandName`, `routeRef`, or typed payloads.
|
|
63
|
+
- The RMT kernel schedules records and diagnostics but does not sanitize HTML
|
|
64
|
+
itself.
|
|
65
|
+
- Host adapters own the DOM sink.
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"id": "settings.shell",
|
|
70
|
+
"mode": "html_fragment",
|
|
71
|
+
"markup": "<x-card></x-card>",
|
|
72
|
+
"security": {
|
|
73
|
+
"markupClass": "htmlFragment",
|
|
74
|
+
"trustBoundary": "xtend.security.sanitizing-boundary.v1",
|
|
75
|
+
"sink": "trustedDomBoundary"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Parsedown Docs App
|
|
81
|
+
|
|
82
|
+
The Docs App renders Markdown through `docs/index.php` and
|
|
83
|
+
`docs/utils/parsedown.php`. `Parsedown::setSafeMode(true)` remains mandatory,
|
|
84
|
+
but it does not replace a Trusted DOM policy. The app shell is now generated
|
|
85
|
+
shell-first from `docs.app.shell` in the RMT document; Parsedown HTML is then
|
|
86
|
+
inserted only into the `data-rmt-slot="content"` slot.
|
|
87
|
+
|
|
88
|
+
Rules:
|
|
89
|
+
|
|
90
|
+
- Markdown files are content.
|
|
91
|
+
- Parsedown output is `parsedownHtml`.
|
|
92
|
+
- RMT renders shell descriptors and may schedule Parsedown work.
|
|
93
|
+
- `docs.rich-content` and `docs.media.lazy` prepare future rich HTML and
|
|
94
|
+
XPlayer tutorial slots.
|
|
95
|
+
- Sanitizing and DOM sinks remain host responsibilities.
|
|
96
|
+
- `WP-E13-11` checks this boundary in a browser-near way with
|
|
97
|
+
[Trusted DOM Boundary Browser Proof](./trusted-dom-boundary-browser-proof.md),
|
|
98
|
+
`xtend.epic13.trusted-dom-boundary.v1`, and
|
|
99
|
+
`node scripts/run_xtend_tests.js epic13-trusted-dom-boundary --json`.
|
|
100
|
+
|
|
101
|
+
## Diagnostics
|
|
102
|
+
|
|
103
|
+
Future implementations should use these codes:
|
|
104
|
+
|
|
105
|
+
- `xtend.security.trusted_dom.required`
|
|
106
|
+
- `xtend.security.sanitizer.missing`
|
|
107
|
+
- `xtend.security.sink.refused`
|
|
108
|
+
- `xtend.security.attribute.refused`
|
|
109
|
+
- `xtend.security.event.refused`
|
|
110
|
+
|
|
111
|
+
## Gates
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
node --check security/trusted-dom-policy.js
|
|
115
|
+
node scripts/run_xtend_tests.js epic13-trusted-dom-boundary --json
|
|
116
|
+
node scripts/run_xtend_tests.js references --json
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Related Documents
|
|
120
|
+
|
|
121
|
+
- [XTendRMT Native Authoring](./xtendrmt-native-authoring.md)
|
|
122
|
+
- [Trusted DOM Boundary Browser Proof](./trusted-dom-boundary-browser-proof.md)
|
|
123
|
+
- [XTendRMT Parsedown Scheduling Pilot](./xtendrmt-parsedown-scheduling.md)
|
|
124
|
+
- [XTendRMT App DSL Reference](./xtendrmt-app-dsl.md)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# XTend TypeExports
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.type-exports.plan.v1`
|
|
4
|
+
- Release contract: `xtend.type-exports.drift-report.v1`
|
|
5
|
+
- Workpackage: `WP-TypeExports-09`
|
|
6
|
+
- Gate: `node scripts/run_xtend_tests.js type-exports --json`
|
|
7
|
+
- Release gate: `npm run test:type-exports:release`
|
|
8
|
+
- Report: `.xtend-test-results/xtend-type-exports-report.json`
|
|
9
|
+
- Boundary: `types-only-no-runtime-imports`
|
|
10
|
+
- Boundary: `no-rmt-kernel-import-of-xtend-types`
|
|
11
|
+
- Boundary: `declarations-follow-js-runtime-surface`
|
|
12
|
+
|
|
13
|
+
## Purpose
|
|
14
|
+
|
|
15
|
+
TypeExports makes the public `package.json` export surface explicit for TypeScript consumers. The first run classified every public export; `WP-TypeExports-02` through `WP-TypeExports-08` delivered the declaration packs. As of `WP-TypeExports-09`, TypeExports is a productive release gate with drift report.
|
|
16
|
+
|
|
17
|
+
The gate is intentionally strict: if a new public export appears in `package.json` without updating the TypeExports classification, `type-exports` fails locally. The release gate additionally bundles all TypeExports subpackages and writes the handoff report:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm run test:type-exports:release
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Type Condition Matrix
|
|
24
|
+
|
|
25
|
+
| Export area | Examples | Target declaration | Workpackage |
|
|
26
|
+
| --- | --- | --- | --- |
|
|
27
|
+
| Loader | `.`, `./loader` | `./xtend-loader.d.ts` | `WP-TypeExports-02` completed |
|
|
28
|
+
| Legacy Loader | `./legacy-loader` | `./xtend-dev.d.ts` | `WP-TypeExports-02` completed |
|
|
29
|
+
| Core API | `./api` | `./api.d.ts` | `WP-TypeExports-03` completed |
|
|
30
|
+
| Components | `./components/*` | `./components/*.d.ts` | `ER-WP-34` |
|
|
31
|
+
| RMT Runtime | `./rmt`, `./rmt/browser`, `./rmt/dom-descriptor-renderer`, `./rmt/state-selector-runtime`, `./rmt/action-effect-runtime`, `./rmt/event-routing-runtime`, `./rmt/surface-resource-graph-runtime` | `./xtendrmt/rmt-core.d.ts`, `./xtendrmt/rmt-dom-descriptor-renderer.d.ts`, `./xtendrmt/rmt-state-selector-runtime.d.ts`, `./xtendrmt/rmt-action-effect-runtime.d.ts`, `./xtendrmt/rmt-event-routing-runtime.d.ts`, `./xtendrmt/rmt-surface-resource-graph-runtime.d.ts` | `WP-TypeExports-04` completed |
|
|
32
|
+
| RMT Language and Tooling | `./rmt-language/*`, `./rmt-language/app-platform-tooling`, `./rmt-linter/*`, `./rmt-language-server/*` | matching `tools/**/*.d.ts` plus `./tools/rmt-language/rmt-tooling-public-types.d.ts` | `WP-TypeExports-04` completed |
|
|
33
|
+
| Fabric, A11y, Security | `./fabric`, `./a11y/*`, `./security/*` | matching runtime module as `.d.ts` plus `./fabric/xtend-policy-public-types.d.ts` | `WP-TypeExports-05` completed |
|
|
34
|
+
| Builder | `./builder`, `./builder/*` | `./xtend-builder/**/*.d.ts` plus `./xtend-builder/builder-public-types.d.ts` | `WP-TypeExports-06` completed |
|
|
35
|
+
| Catalog | `./catalog/*` | `./catalog/*.d.ts` plus `./catalog/catalog-public-types.d.ts` | `WP-TypeExports-07` completed |
|
|
36
|
+
| Design Tokens and Vendor Facades | `./design-tokens`, `./design-tokens/xtheme-token-alias-layer`, `components/prism.js`, `components/turndown.js` | `./design-tokens/xtend-design-tokens.d.ts`, `./design-tokens/xtheme-token-alias-layer.d.ts`, `./components/prism.d.ts`, `./components/turndown.d.ts` | `WP-TypeExports-08` completed |
|
|
37
|
+
| Assets | `./style.css`, `./manifest`, JSON exports, `./package.json` | `types-not-required` | `WP-TypeExports-01` |
|
|
38
|
+
|
|
39
|
+
## Drift Report
|
|
40
|
+
|
|
41
|
+
The report `xtend.type-exports.drift-report.v1` checks:
|
|
42
|
+
|
|
43
|
+
- package export count and fingerprint against the Package Export Lock
|
|
44
|
+
- unclassified public exports
|
|
45
|
+
- declaration drift for all typed exports
|
|
46
|
+
- package `types` condition drift when an export has an explicit `types` condition
|
|
47
|
+
- wildcard declarations such as `./components/*.d.ts` and `./xtend-builder/*.d.ts`
|
|
48
|
+
- release/candidate gates and artifact checklist for the TypeExports handoff
|
|
49
|
+
|
|
50
|
+
`./components/*` remains an intentionally documented wildcard boundary with adjacent declarations. `./builder/*` has an explicit package `types` condition pointing to `./xtend-builder/*.d.ts`.
|
|
51
|
+
|
|
52
|
+
## Non-Goals
|
|
53
|
+
|
|
54
|
+
- No runtime import of XTend types in the RMT kernel.
|
|
55
|
+
- No porting of JS modules to TypeScript in the first run.
|
|
56
|
+
- No new runtime dependency for consumers.
|
|
57
|
+
- No copied type world from external vendor internals for Prism or Turndown.
|
|
58
|
+
|
|
59
|
+
## Handoff
|
|
60
|
+
|
|
61
|
+
`WP-TypeExports-02` delivered `./xtend-loader.d.ts`, `./xtend-dev.d.ts` and [XTend Loader Types](./xtend-loader-types.md). `WP-TypeExports-03` delivered `./api.d.ts` and [XTend API Types](./xtend-api-types.md) for `window.XTend.*`. `WP-TypeExports-04` delivered `./xtendrmt/rmt-core.d.ts`, `./tools/rmt-language/rmt-tooling-public-types.d.ts`, `./tools/rmt-language/app-platform-tooling.d.ts`, the RMT language facades and [XTend RMT Types](./xtend-rmt-types.md). `WP-TypeExports-05` delivered `./fabric/xtend-policy-public-types.d.ts`, Fabric/a11y/security facades and [XTend Policy Types](./xtend-policy-types.md). `WP-TypeExports-06` delivered `./xtend-builder/builder-public-types.d.ts`, builder/scaffold/Component Lab facades and [XTend Builder Types](./xtend-builder-types.md). `WP-TypeExports-07` delivered `./catalog/catalog-public-types.d.ts`, catalog facades and [XTend Catalog Types](./xtend-catalog-types.md). `WP-TypeExports-08` delivered `./design-tokens/xtend-design-tokens.d.ts`, `./design-tokens/xtheme-token-alias-layer.d.ts`, `./components/prism.d.ts`, `./components/turndown.d.ts` and [XTend Vendor and Utility Types](./xtend-vendor-types.md). `WP-TypeExports-09` productizes the drift report and package handoff for release owners.
|