@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
|
+
# Drittanbieter Design Authoring
|
|
2
|
+
|
|
3
|
+
Docs Contract: `xtend.enterprise.third-party-authoring-guide.v1`
|
|
4
|
+
|
|
5
|
+
Workpackage: `ECH-WP-11`
|
|
6
|
+
|
|
7
|
+
Lokaler 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
|
+
Dieser Guide richtet sich an Teams, die XTend-Komponenten in ein eigenes Corporate Design, White-Label-Produkt oder internes Enterprise Designsystem einbinden wollen. Der Zielpfad ist: XTend bleibt optisch hochwertig und eigenstaendig, aber alle sichtbaren Entscheidungen laufen ueber XTend.css, XTheme, CSS Parts, Slots, Attribute oder Icon Packs. Forks von Komponenten sind kein regulaerer Skinning-Pfad.
|
|
15
|
+
|
|
16
|
+
## Prinzipien
|
|
17
|
+
|
|
18
|
+
1. Corporate Tokens zuerst definieren, dann Komponententokens ableiten.
|
|
19
|
+
2. XTend Signature UI als Qualitaetsbasis behalten, aber Markenfarbe, Typografie, Radius, Elevation und Dichte bewusst ersetzen.
|
|
20
|
+
3. Shadow-DOM-Interna nicht selektieren. Skinning passiert ueber CSS Custom Properties und `::part(...)`.
|
|
21
|
+
4. Light, Dark, High Contrast, Forced Colors, Reduced Motion, Comfortable, Compact und Dense sind Pflichtvarianten.
|
|
22
|
+
5. Controls verwenden `x-icon`, Inline-SVG oder tokenisierte CSS-Grafik, nie sichtbare Textzeichen.
|
|
23
|
+
6. Status, Active, Error, Disabled und Focus duerfen nicht nur ueber Farbe kommunizieren.
|
|
24
|
+
|
|
25
|
+
## XTend.css Override Patterns
|
|
26
|
+
|
|
27
|
+
Corporate Overrides gehoeren in eine eigene Cascade Layer. Dadurch bleiben Host-Tokens nachvollziehbar, und Produktteams koennen XTend-Updates einspielen, ohne Shadow-DOM-Regeln zu kopieren.
|
|
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` und `window.XTend.theme` sind der Runtime-Pfad fuer Theme-Wechsel, Density, Reduced Motion und Forced Colors. Ein Corporate Theme sollte dieselben Werte setzen wie XTend.css, damit statische CSS-Overrides und Runtime-Wechsel identisch bleiben.
|
|
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
|
+
Pflichtmodi:
|
|
131
|
+
|
|
132
|
+
| Modus | Regel |
|
|
133
|
+
|-------|-------|
|
|
134
|
+
| `light` | Text, Icons, Controls und Focus muessen auf hellen Flaechen lesbar bleiben |
|
|
135
|
+
| `dark` | keine hart gesetzten Light-Flaechen ohne dunklen Text-Fallback |
|
|
136
|
+
| `high-contrast` | aktive und fehlerhafte Zustaende brauchen Form, Border oder Marker |
|
|
137
|
+
| `forced-colors` | Systemfarben wie `Canvas`, `CanvasText`, `Highlight`, `HighlightText`, `ButtonFace`, `ButtonText` verwenden |
|
|
138
|
+
|
|
139
|
+
Density-Presets:
|
|
140
|
+
|
|
141
|
+
| Density | Einsatz |
|
|
142
|
+
|---------|---------|
|
|
143
|
+
| `comfortable` | Default fuer gemischte Enterprise-Shells |
|
|
144
|
+
| `compact` | Toolbars, Datendichte, Workbench-Shells |
|
|
145
|
+
| `dense` | Navigation, Filterleisten, Tabellenumfelder |
|
|
146
|
+
|
|
147
|
+
## CSS Parts
|
|
148
|
+
|
|
149
|
+
CSS Parts sind Skinning API. Verwende sie fuer Zonen, nicht fuer private Shadow-DOM-Strukturen.
|
|
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
|
+
Regel: Ein `::part(...)` darf Corporate-Optik setzen, aber keine semantische Bedienbarkeit entfernen. Focus, Disabled, Busy, Active und Error muessen erhalten bleiben.
|
|
179
|
+
|
|
180
|
+
## Icon Pack Registrierung
|
|
181
|
+
|
|
182
|
+
Produkticons gehoeren in ein lokales Icon Pack. Remote-CDNs sind kein XTend-Default-Pfad.
|
|
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 brauchen ein echtes Button-Element, einen zugaenglichen Namen und getrennte Parts fuer Control und Icon. Sichtbare Zeichen wie `X`, `+`, `-`, `...` oder Emoji sind als Control-Grafik nicht erlaubt.
|
|
206
|
+
|
|
207
|
+
## Layout Modes
|
|
208
|
+
|
|
209
|
+
Layoutvarianten sind Public API. Host-Apps sollen Modi deklarativ setzen und per Token feinjustieren.
|
|
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` unterstuetzt `drawer`, `side-panel`, `popover`, `fullscreen` und `inline-main`. Modale Varianten brauchen Escape, Focus Return und bei Focus Trap einen sichtbaren Backdrop. Nicht-modale Varianten duerfen den Hauptinhalt nicht aus dem Lesefluss nehmen.
|
|
226
|
+
|
|
227
|
+
Overlay-nahe Komponenten nutzen gemeinsame Skinning-Zonen:
|
|
228
|
+
|
|
229
|
+
| Komponente | Modi/Variante | Pflichtparts |
|
|
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 oder `modal` | `surface`, `backdrop`, `close`, `content` |
|
|
236
|
+
|
|
237
|
+
## A11y-Dos and Donts
|
|
238
|
+
|
|
239
|
+
| Do | Dont |
|
|
240
|
+
|----|------|
|
|
241
|
+
| sichtbaren `focus-visible` Ring ueber Token erhalten | Fokus durch `outline: none` ohne Ersatz entfernen |
|
|
242
|
+
| `prefers-reduced-motion` bis in Overlay- und Feedback-Komponenten respektieren | Motion nur in Light Mode testen |
|
|
243
|
+
| `forced-colors` mit `Canvas`, `CanvasText`, `Highlight` und `HighlightText` pruefen | Markenfarben in Forced Colors erzwingen |
|
|
244
|
+
| Active, Selected, Error und Disabled nicht nur ueber Farbe darstellen | Status nur durch Rot/Gruen kommunizieren |
|
|
245
|
+
| Long Labels mit `overflow-wrap` und stabiler Control-Hoehe absichern | Text in Buttons, Tabs oder Menues clippen |
|
|
246
|
+
| Icon Controls mit `aria-label`, `part="... control"` und `part="... icon"` authoren | sichtbare Textglyphen als Close/Menu/Disclosure verwenden |
|
|
247
|
+
|
|
248
|
+
Status- und Routeninformationen muessen in jedem Theme lesbar bleiben und nicht nur ueber Farbe kommunizieren. Nutze Border, Marker, Unterstreichung, Icon, Text oder Form als zweites Signal.
|
|
249
|
+
|
|
250
|
+
## Vollstaendiges Fremdtheme-Beispiel
|
|
251
|
+
|
|
252
|
+
Dieses Beispiel kombiniert XTend.css, XTheme, CSS Parts, Icon Pack, Header Mode, Density und A11y-Modi. Es ist bewusst nicht blau-generisch: die Palette mischt Tinte, warmes Panel, kuehles Action-Blau, tiefes Gruen und Kupfer-Akzent.
|
|
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-Referenz
|
|
352
|
+
|
|
353
|
+
Jede P0-Komponente muss in diesem Guide eine Token-/Part-Referenz haben. Die Detailtabellen bleiben in den Komponentendokumenten, damit sie neben Attributen, Slots, Events und A11y-Regeln gepflegt werden.
|
|
354
|
+
|
|
355
|
+
| Komponente | Doku | Alias Prefix | Token-/Part-Tabelle | Pflichtparts |
|
|
356
|
+
|------------|------|--------------|---------------------|--------------|
|
|
357
|
+
| `x-theme` | [xtheme](./components/xtheme.md) | `--xtend-theme-` | `Zentrale XTend-Tokens` / [Design Tokens](./design-tokens.md) | `root` |
|
|
358
|
+
| `x-header` | [xheader](./components/xheader.md) | `--xtend-header-` | `ECH-WP-07 Token-Tabelle und signatureDesign`, `ECH-WP-09 Token-Tabelle und 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-Regel` | `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-Tabelle und Navigation States` | `root`, `nav`, `item`, `disclosure-icon` |
|
|
362
|
+
| `x-drawer` | [xdrawer](./components/xdrawer.md) | `--xtend-drawer-` | `ECH-WP-06 Overlay-Paritaet` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
363
|
+
| `x-side-panel` | [xsidepanel](./components/xsidepanel.md) | `--xtend-side-panel-` | `ECH-WP-06 Overlay-Paritaet` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
364
|
+
| `x-modal` | [xmodal](./components/xmodal.md) | `--xtend-modal-` | `ECH-WP-06 Overlay-Paritaet` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
365
|
+
| `x-dialog` | [xdialog](./components/xdialog.md) | `--xtend-dialog-` | `ECH-WP-06 Overlay-Paritaet` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
366
|
+
| `x-popover` | [xpopover](./components/xpopover.md) | `--xtend-popover-` | `ECH-WP-06 Overlay-Paritaet` | `root`, `surface`, `backdrop`, `close`, `content` |
|
|
367
|
+
| `x-toast` | [xtoast](./components/xtoast.md) | `--xtend-toast-` | `Styling & Theming` | `root`, `surface`, `content`, `close`, `icon` |
|
|
368
|
+
|
|
369
|
+
## Migration von Legacy Token-Namen
|
|
370
|
+
|
|
371
|
+
Legacy Tokens bleiben als Bridge sichtbar, sollen in neuen Corporate Themes aber auf die normalisierte Alias-Schicht gemappt werden.
|
|
372
|
+
|
|
373
|
+
| Legacy Token | Neuer 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
|
+
Migrationsregel: Alte Namen duerfen als Fallback bleiben, aber neue Dokumentation, neue Themes und neue Komponenten muessen die `--xtend-*` Alias-Kette fuehren. Entfernen oder Umbenennen von Public Parts und Tokens braucht Migration Notes.
|
|
388
|
+
|
|
389
|
+
## Abnahme fuer Corporate Themes
|
|
390
|
+
|
|
391
|
+
Vor der Uebergabe an ein Host-Designsystem sollten diese Gates laufen:
|
|
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
|
+
Die Abnahme ist erst belastbar, wenn Light, Dark, High Contrast, Forced Colors, Reduced Motion, Comfortable, Compact und Dense im selben Corporate Theme geprueft wurden.
|
|
403
|
+
|
|
404
|
+
## Release Handoff
|
|
405
|
+
|
|
406
|
+
Ab `ECH-WP-12` fuehrt [Enterprise Component Flex Release Handoff](./enterprise-component-flex-release-handoff.md) den Contract `xtend.enterprise.component-flex-release-handoff.v1`. Er verbindet SemVer-Bewertung, Deprecated Aliases, Migration Notes, Release Checklist und Adoption Risiken fuer Corporate Themes. Der lokale Gate `node scripts/run_xtend_tests.js enterprise-component-flex-release-handoff --json` muss vor Release Owner Review gruen sein; Publishing bleibt bis dahin durch `private-until-release-owner-acceptance` blockiert.
|
|
@@ -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
|
+
## Ziel
|
|
8
|
+
|
|
9
|
+
Dieser RC1-Gate beweist, dass Parsedown HTML und RMT `htmlFragment` nicht ungeprueft in die DOM-Sinks der Docs-App laufen. Die App rendert weiter Shell-first ueber RMT, aber der Host Adapter sanitized Content, bevor er in den Content-Slot geschrieben wird.
|
|
10
|
+
|
|
11
|
+
## Regeln
|
|
12
|
+
|
|
13
|
+
- `parsedownHtml` braucht `xtend.security.trusted-dom-sanitizer.v1`.
|
|
14
|
+
- RMT `htmlFragment` braucht `xtend.security.sanitizing-boundary.v1`.
|
|
15
|
+
- RMT `dom_descriptor` bleibt der bevorzugte Pfad fuer strukturierte Templates.
|
|
16
|
+
- Der RMT Kernel importiert keinen Sanitizer, kein PHP/Parsedown und keine XTend-Typen.
|
|
17
|
+
|
|
18
|
+
Geblockt werden `script`, `iframe`, Inline-Event-Handler, `javascript:` URLs und `srcdoc`.
|
|
19
|
+
|
|
20
|
+
## Browsernaher Smoke
|
|
21
|
+
|
|
22
|
+
Die Fixture legt absichtlich feindliche Inhalte in `window.xtendDocsPages` ab und laedt danach `docs/utils/pageloader.js`. Der Smoke prueft, dass:
|
|
23
|
+
|
|
24
|
+
- der Content-Slot `data-rmt-sanitized="true"` traegt
|
|
25
|
+
- `data-rmt-trusted-dom-proof="xtend.epic13.trusted-dom-boundary.v1"` gesetzt ist
|
|
26
|
+
- Script-Elemente, Event-Handler, JavaScript-URLs und `srcdoc` entfernt sind
|
|
27
|
+
- sicherer Parsedown-Text erhalten bleibt
|
|
28
|
+
- die Shell weiterhin Shell-first gerendert wird
|
|
29
|
+
|
|
30
|
+
## Handoff
|
|
31
|
+
|
|
32
|
+
`WP-E13-11` ist abgeschlossen. `WP-E13-12` ist mit [RC1 Migration Notes](./rc1-migration-notes.md) und `xtend.epic13.rc1-migration-notes-semver.v1` abgeschlossen. `WP-E13-13` ist mit [RC1 Gate Matrix und CI-Handoff](./rc1-gate-matrix-ci-handoff.md) und `xtend.epic13.rc1-gate-matrix-ci-handoff.v1` abgeschlossen.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Trusted DOM und 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
|
+
- Maschinenlesbarer Contract: `security/trusted-dom-policy.js`
|
|
8
|
+
|
|
9
|
+
## Ziel
|
|
10
|
+
|
|
11
|
+
XTend behandelt dynamisches Markup als eigene Trust Boundary. Das betrifft besonders RMT `html_fragment`, RMT Template Authoring und die Parsedown-basierte Docs-App.
|
|
12
|
+
|
|
13
|
+
Diese Seite beschreibt die Entwicklerregel: Markup wird zuerst klassifiziert, dann in einen passenden DOM-Sink geschrieben. Rohe HTML-Strings duerfen nicht nebenbei ueber `innerHTML` landen.
|
|
14
|
+
|
|
15
|
+
## Markup-Klassen
|
|
16
|
+
|
|
17
|
+
| Klasse | Quelle | Default |
|
|
18
|
+
|--------|--------|---------|
|
|
19
|
+
| `text` | Labels, Markdown-Text, Body Copy | `textContent` |
|
|
20
|
+
| `attribute` | `aria-label`, `href`, `slot`, `data-*` | validierter `setAttribute` |
|
|
21
|
+
| `structuredTemplate` | RMT `dom_descriptor`, Component Trees | Nodes via `replaceChildren` |
|
|
22
|
+
| `htmlFragment` | RMT `html_fragment` | Sanitizing Boundary |
|
|
23
|
+
| `parsedownHtml` | HTML aus `docs/index.php` / Parsedown | Sanitizing Boundary |
|
|
24
|
+
|
|
25
|
+
## Erlaubte und eingeschraenkte Sinks
|
|
26
|
+
|
|
27
|
+
Erlaubt:
|
|
28
|
+
|
|
29
|
+
- `textContent`
|
|
30
|
+
- validierter `setAttribute`
|
|
31
|
+
- `classList`
|
|
32
|
+
- `dataset` ohne Secrets und ohne Codewerte
|
|
33
|
+
- `append` und `replaceChildren` mit Nodes
|
|
34
|
+
|
|
35
|
+
Eingeschraenkt:
|
|
36
|
+
|
|
37
|
+
- `innerHTML`
|
|
38
|
+
- `insertAdjacentHTML`
|
|
39
|
+
- `template.innerHTML`
|
|
40
|
+
|
|
41
|
+
Diese eingeschraenkten Sinks brauchen `xtend.security.sanitizing-boundary.v1`.
|
|
42
|
+
Browsernahe Docs-/RMT-Sinks muessen zusaetzlich den Sanitizer Contract `xtend.security.trusted-dom-sanitizer.v1` ausweisen.
|
|
43
|
+
|
|
44
|
+
Verboten im Default:
|
|
45
|
+
|
|
46
|
+
- Inline-Handler wie `onclick`
|
|
47
|
+
- `eval`
|
|
48
|
+
- `new Function`
|
|
49
|
+
- dynamische Script-Tags aus RMT-, Manifest-, Event- oder Docs-Daten
|
|
50
|
+
|
|
51
|
+
## RMT Templates
|
|
52
|
+
|
|
53
|
+
Fuer XTendRMT gilt:
|
|
54
|
+
|
|
55
|
+
- `dom_descriptor` ist bevorzugt.
|
|
56
|
+
- `html_fragment` ist erlaubt, aber nur mit Trusted-DOM-Boundary.
|
|
57
|
+
- Events nutzen `actionRef`, `commandName`, `routeRef` oder typed Payloads.
|
|
58
|
+
- Der RMT Kernel plant Records und Diagnostics, aber sanitized kein HTML selbst.
|
|
59
|
+
- Host Adapter besitzen den DOM-Sink.
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"id": "settings.shell",
|
|
64
|
+
"mode": "html_fragment",
|
|
65
|
+
"markup": "<x-card></x-card>",
|
|
66
|
+
"security": {
|
|
67
|
+
"markupClass": "htmlFragment",
|
|
68
|
+
"trustBoundary": "xtend.security.sanitizing-boundary.v1",
|
|
69
|
+
"sink": "trustedDomBoundary"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Parsedown Docs-App
|
|
75
|
+
|
|
76
|
+
Die Docs-App rendert Markdown ueber `docs/index.php` und `docs/utils/parsedown.php`. `Parsedown::setSafeMode(true)` bleibt Pflicht, ersetzt aber keine Trusted-DOM-Policy. Die App Shell selbst wird inzwischen Shell-first aus `docs.app.shell` im RMT-Dokument erzeugt; Parsedown HTML wird danach nur in den `data-rmt-slot="content"` Slot eingesetzt.
|
|
77
|
+
|
|
78
|
+
Regel:
|
|
79
|
+
|
|
80
|
+
- Markdown-Dateien sind Content.
|
|
81
|
+
- Parsedown-Ausgabe ist `parsedownHtml`.
|
|
82
|
+
- RMT rendert Shell-Descriptoren und darf Parsedown-Arbeit schedulen.
|
|
83
|
+
- `docs.rich-content` und `docs.media.lazy` bereiten spaetere Rich-HTML- und XPlayer-Tutorial-Slots vor.
|
|
84
|
+
- Sanitizing und DOM-Sinks bleiben Host-Verantwortung.
|
|
85
|
+
- `WP-E13-11` prueft diese Boundary browsernah mit [Trusted DOM Boundary Browser Proof](./trusted-dom-boundary-browser-proof.md), `xtend.epic13.trusted-dom-boundary.v1` und `node scripts/run_xtend_tests.js epic13-trusted-dom-boundary --json`.
|
|
86
|
+
|
|
87
|
+
## Diagnostics
|
|
88
|
+
|
|
89
|
+
Spaetere Implementierungen sollen diese Codes nutzen:
|
|
90
|
+
|
|
91
|
+
- `xtend.security.trusted_dom.required`
|
|
92
|
+
- `xtend.security.sanitizer.missing`
|
|
93
|
+
- `xtend.security.sink.refused`
|
|
94
|
+
- `xtend.security.attribute.refused`
|
|
95
|
+
- `xtend.security.event.refused`
|
|
96
|
+
|
|
97
|
+
## Gates
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
node --check security/trusted-dom-policy.js
|
|
101
|
+
node scripts/run_xtend_tests.js epic13-trusted-dom-boundary --json
|
|
102
|
+
node scripts/run_xtend_tests.js references --json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Weiterfuehrende Dokumente
|
|
106
|
+
|
|
107
|
+
- [XTendRMT Native Authoring](./xtendrmt-native-authoring.md)
|
|
108
|
+
- [Trusted DOM Boundary Browser Proof](./trusted-dom-boundary-browser-proof.md)
|
|
109
|
+
- [XTendRMT Parsedown Scheduling Pilot](./xtendrmt-parsedown-scheduling.md)
|
|
110
|
+
- [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
|
+
## Zweck
|
|
14
|
+
|
|
15
|
+
TypeExports macht die oeffentliche `package.json` Export-Surface fuer TypeScript-Consumer explizit. Der erste Run hat jeden Public Export klassifiziert; `WP-TypeExports-02` bis `WP-TypeExports-08` haben die Declaration Packs geliefert. Ab `WP-TypeExports-09` ist TypeExports ein produktiver Release-Gate mit Drift-Report.
|
|
16
|
+
|
|
17
|
+
Der Gate ist absichtlich strikt: Wenn ein neuer Public Export in `package.json` auftaucht, ohne dass die TypeExports-Klassifikation aktualisiert wurde, schlaegt `type-exports` lokal fehl. Der Release-Gate buendelt zusaetzlich alle TypeExports-Teilpakete und schreibt den Handoff-Report:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm run test:type-exports:release
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Type Condition Matrix
|
|
24
|
+
|
|
25
|
+
| Export-Bereich | Beispiele | Ziel-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 und Tooling | `./rmt-language/*`, `./rmt-language/app-platform-tooling`, `./rmt-linter/*`, `./rmt-language-server/*` | jeweiliges `tools/**/*.d.ts` plus `./tools/rmt-language/rmt-tooling-public-types.d.ts` | `WP-TypeExports-04` completed |
|
|
33
|
+
| Fabric, A11y, Security | `./fabric`, `./a11y/*`, `./security/*` | jeweiliges Runtime-Modul als `.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 und 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
|
+
Der Report `xtend.type-exports.drift-report.v1` prueft:
|
|
42
|
+
|
|
43
|
+
- Package Export Count und Fingerprint gegen den Package Export Lock
|
|
44
|
+
- unklassifizierte Public Exports
|
|
45
|
+
- Declaration Drift fuer alle typisierten Exports
|
|
46
|
+
- Package `types`-Condition Drift, wenn ein Export eine explizite `types`-Condition besitzt
|
|
47
|
+
- Wildcard-Declarations wie `./components/*.d.ts` und `./xtend-builder/*.d.ts`
|
|
48
|
+
- Release-/Candidate-Gates und Artifact-Checklist fuer das TypeExports-Handoff
|
|
49
|
+
|
|
50
|
+
`./components/*` bleibt eine bewusst dokumentierte Wildcard-Grenze mit adjacent Declarations. `./builder/*` besitzt eine explizite Package `types`-Condition auf `./xtend-builder/*.d.ts`.
|
|
51
|
+
|
|
52
|
+
## Nicht-Ziele
|
|
53
|
+
|
|
54
|
+
- Kein Runtime-Import von XTend-Typen im RMT-Kernel.
|
|
55
|
+
- Keine Portierung von JS-Modulen nach TypeScript im ersten Run.
|
|
56
|
+
- Keine neue Runtime-Abhaengigkeit fuer Consumer.
|
|
57
|
+
- Keine Typkopie fremder Vendor-Interna fuer Prism oder Turndown.
|
|
58
|
+
|
|
59
|
+
## Handoff
|
|
60
|
+
|
|
61
|
+
`WP-TypeExports-02` hat `./xtend-loader.d.ts`, `./xtend-dev.d.ts` und [XTend Loader Types](./xtend-loader-types.md) geliefert. `WP-TypeExports-03` hat `./api.d.ts` und [XTend API Types](./xtend-api-types.md) fuer `window.XTend.*` geliefert. `WP-TypeExports-04` hat `./xtendrmt/rmt-core.d.ts`, `./tools/rmt-language/rmt-tooling-public-types.d.ts`, `./tools/rmt-language/app-platform-tooling.d.ts`, die RMT-Language-Facades und [XTend RMT Types](./xtend-rmt-types.md) geliefert. `WP-TypeExports-05` hat `./fabric/xtend-policy-public-types.d.ts`, Fabric/A11y/Security-Facades und [XTend Policy Types](./xtend-policy-types.md) geliefert. `WP-TypeExports-06` hat `./xtend-builder/builder-public-types.d.ts`, Builder-/Scaffold-/Component-Lab-Facades und [XTend Builder Types](./xtend-builder-types.md) geliefert. `WP-TypeExports-07` hat `./catalog/catalog-public-types.d.ts`, Catalog-Facades und [XTend Catalog Types](./xtend-catalog-types.md) geliefert. `WP-TypeExports-08` hat `./design-tokens/xtend-design-tokens.d.ts`, `./design-tokens/xtheme-token-alias-layer.d.ts`, `./components/prism.d.ts`, `./components/turndown.d.ts` und [XTend Vendor and Utility Types](./xtend-vendor-types.md) geliefert. `WP-TypeExports-09` produktisiert den Drift-Report und das Package-Handoff fuer Release Owner.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# TypeScript Components
|
|
2
|
+
|
|
3
|
+
XTend fuehrt neue Komponenten TypeScript-first ein. Runtime-Artefakte bleiben weiter lokale ES Modules unter `components/`, waehrend die Source-of-Truth unter `src/components/<tag>/` liegt.
|
|
4
|
+
|
|
5
|
+
Contract: `xtend.scaffold.typescript-component-blueprint.v1`
|
|
6
|
+
|
|
7
|
+
Seit `WP-E10-16` ist dieser Guide Teil des Epic-10-Release-Handoffs `xtend.epic10.release-handoff.v1`. Neue Komponenten muessen nicht nur TypeScript Source besitzen, sondern auch RMT Metadata, Fabric Boundary, A11y, Performance, Fixture, Docs und lokale Gates nachweisen.
|
|
8
|
+
|
|
9
|
+
## Source Layout
|
|
10
|
+
|
|
11
|
+
| Datei | Zweck |
|
|
12
|
+
|-------|-------|
|
|
13
|
+
| `<tag>.ts` | Custom Element Source mit statischen RMT-, Fabric-, A11y- und Performance-Metadaten |
|
|
14
|
+
| `<tag>.contract.ts` | Component Contract v2 |
|
|
15
|
+
| `<tag>.rmt.ts` | RMT Component Metadata fuer `xtend.component` |
|
|
16
|
+
| `<tag>.a11y.ts` | A11y Profil |
|
|
17
|
+
| `<tag>.performance.ts` | Performance Profil |
|
|
18
|
+
| `<tag>.fixture.ts` | typed Fixture Data |
|
|
19
|
+
|
|
20
|
+
## Builder
|
|
21
|
+
|
|
22
|
+
Der Builder rendert die neue Artefaktgruppe im Dry-Run:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node xtend-builder/scaffold.js component-files --tag x-example --profile display --feature state --json
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Der lokale Gate ist:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
node scripts/run_xtend_tests.js builder-typescript-blueprint --json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Pflicht-Gates ab WP-E10-16
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
node scripts/run_xtend_tests.js component-contract-v2 --json
|
|
38
|
+
node scripts/run_xtend_tests.js epic10-platform-gates --json
|
|
39
|
+
node scripts/run_xtend_tests.js epic10-release-handoff --json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Neue Komponenten durchlaufen zusaetzlich ihre Component-Level-Suite, Catalog Coverage, A11y-, Performance- und Visual-Regression-Gates.
|
|
43
|
+
|
|
44
|
+
Ab `WP-TypeExports-09` gehoert auch der produktive TypeExports-Handoff zur Release-Sicht:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm run test:type-exports:release
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Neue TypeScript-first Komponenten duerfen deshalb nicht nur Runtime- und Component-Contract-Artefakte liefern, sondern muessen ihre Public Package Surface entweder ueber `components/*.d.ts`, eine explizite Package `types`-Condition oder eine dokumentierte `types-not-required` Boundary abdecken.
|
|
51
|
+
|
|
52
|
+
## RMT und Fabric
|
|
53
|
+
|
|
54
|
+
Jede neue Komponente braucht einen `xtend.component` RMT Record und eine Fabric Boundary. Die kanonische Laufzeitgrenze fuer Fabric-Kontext ist `adapter-injection-via-xtend-component-resolveFabricContext`; `window.XTendFabric` ist Host-Komfortflaeche und nicht der Component-Contract.
|
|
55
|
+
|
|
56
|
+
## Boundaries
|
|
57
|
+
|
|
58
|
+
- keine CDN-Imports
|
|
59
|
+
- keine neuen Runtime Dependencies fuer Core-Komponenten
|
|
60
|
+
- kein produktiver TypeScript Compiler im Blueprint-Paket
|
|
61
|
+
- keine automatische Datei-Ausgabe ohne Review
|
|
62
|
+
- RMT Kernel Boundary: `no-rmt-kernel-import-of-xtend-types`
|
|
63
|
+
- TypeExports Boundary: `declarations-follow-js-runtime-surface`
|