@ccslabs/xtend 0.1.0-rc.1
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 +65 -0
- package/LICENSE +201 -0
- package/README.md +184 -0
- package/a11y/motion-contrast-policy.d.ts +32 -0
- package/a11y/motion-contrast-policy.js +261 -0
- package/a11y/runtime-a11y-contract.d.ts +44 -0
- package/a11y/runtime-a11y-contract.js +385 -0
- package/a11y/screenreader-signals.d.ts +32 -0
- package/a11y/screenreader-signals.js +372 -0
- package/api.d.ts +168 -0
- package/api.js +864 -0
- package/catalog/catalog-public-types.d.ts +66 -0
- package/catalog/component-catalog-coverage.d.ts +20 -0
- package/catalog/component-catalog-coverage.js +377 -0
- package/catalog/component-long-tail-migration.d.ts +18 -0
- package/catalog/component-long-tail-migration.js +305 -0
- package/catalog/component-regression-priority.d.ts +20 -0
- package/catalog/component-regression-priority.js +305 -0
- package/catalog/enterprise-component-flex-release-handoff.d.ts +32 -0
- package/catalog/enterprise-component-flex-release-handoff.js +437 -0
- package/catalog/enterprise-component-style-audit.d.ts +22 -0
- package/catalog/enterprise-component-style-audit.js +353 -0
- package/catalog/enterprise-form-control-theme-a11y.d.ts +19 -0
- package/catalog/enterprise-form-control-theme-a11y.js +220 -0
- package/catalog/enterprise-icon-control-audit.d.ts +21 -0
- package/catalog/enterprise-icon-control-audit.js +258 -0
- package/catalog/enterprise-layout-display-media-tokenization.d.ts +20 -0
- package/catalog/enterprise-layout-display-media-tokenization.js +237 -0
- package/catalog/enterprise-navigation-routing-state-hardening.d.ts +20 -0
- package/catalog/enterprise-navigation-routing-state-hardening.js +255 -0
- package/catalog/enterprise-overlay-mode-token-parity.d.ts +15 -0
- package/catalog/enterprise-overlay-mode-token-parity.js +178 -0
- package/catalog/enterprise-third-party-authoring-guide.d.ts +23 -0
- package/catalog/enterprise-third-party-authoring-guide.js +310 -0
- package/catalog/enterprise-visual-dom-snapshot-matrix.d.ts +31 -0
- package/catalog/enterprise-visual-dom-snapshot-matrix.js +357 -0
- package/catalog/epic10-existing-component-metadata.d.ts +25 -0
- package/catalog/epic10-existing-component-metadata.js +534 -0
- package/catalog/epic10-p0-component-wave.d.ts +28 -0
- package/catalog/epic10-p0-component-wave.js +688 -0
- package/catalog/epic10-platform-gates.d.ts +31 -0
- package/catalog/epic10-platform-gates.js +425 -0
- package/catalog/epic10-release-handoff.d.ts +30 -0
- package/catalog/epic10-release-handoff.js +195 -0
- package/catalog/epic11-enterprise-ux-handoff.d.ts +29 -0
- package/catalog/epic11-enterprise-ux-handoff.js +403 -0
- package/catalog/epic12-docs-adoption.d.ts +29 -0
- package/catalog/epic12-docs-adoption.js +183 -0
- package/catalog/epic12-rc0-gate-matrix.d.ts +36 -0
- package/catalog/epic12-rc0-gate-matrix.js +439 -0
- package/catalog/epic12-rc0-handoff.d.ts +30 -0
- package/catalog/epic12-rc0-handoff.js +385 -0
- package/catalog/epic13-conditional-network-evidence-ci.d.ts +35 -0
- package/catalog/epic13-conditional-network-evidence-ci.js +278 -0
- package/catalog/epic13-conditional-network-evidence.d.ts +34 -0
- package/catalog/epic13-conditional-network-evidence.js +280 -0
- package/catalog/epic13-docs-rmt-production-hardening.d.ts +39 -0
- package/catalog/epic13-docs-rmt-production-hardening.js +286 -0
- package/catalog/epic13-hydration-performance-closure.d.ts +33 -0
- package/catalog/epic13-hydration-performance-closure.js +234 -0
- package/catalog/epic13-known-residual-triage.d.ts +32 -0
- package/catalog/epic13-known-residual-triage.js +339 -0
- package/catalog/epic13-package-export-lock.d.ts +41 -0
- package/catalog/epic13-package-export-lock.js +604 -0
- package/catalog/epic13-prod-browser-csp-smoke.d.ts +35 -0
- package/catalog/epic13-prod-browser-csp-smoke.js +218 -0
- package/catalog/epic13-rc1-gate-matrix-ci-handoff.d.ts +36 -0
- package/catalog/epic13-rc1-gate-matrix-ci-handoff.js +418 -0
- package/catalog/epic13-rc1-migration-notes.d.ts +36 -0
- package/catalog/epic13-rc1-migration-notes.js +271 -0
- package/catalog/epic13-rc1-readiness.d.ts +33 -0
- package/catalog/epic13-rc1-readiness.js +487 -0
- package/catalog/epic13-release-owner-acceptance.d.ts +33 -0
- package/catalog/epic13-release-owner-acceptance.js +354 -0
- package/catalog/epic13-release-report-pack-dry-run-evidence.d.ts +36 -0
- package/catalog/epic13-release-report-pack-dry-run-evidence.js +253 -0
- package/catalog/epic13-rmt-production-readiness.d.ts +35 -0
- package/catalog/epic13-rmt-production-readiness.js +314 -0
- package/catalog/epic13-trusted-dom-boundary.d.ts +36 -0
- package/catalog/epic13-trusted-dom-boundary.js +230 -0
- package/catalog/epic13-visual-owner-artifact.d.ts +35 -0
- package/catalog/epic13-visual-owner-artifact.js +233 -0
- package/catalog/epic14-lsp-handoff.d.ts +28 -0
- package/catalog/epic14-lsp-handoff.js +312 -0
- package/catalog/epic14-rmt-tooling.d.ts +33 -0
- package/catalog/epic14-rmt-tooling.js +282 -0
- package/catalog/surface-manager-adapter-runtime.d.ts +37 -0
- package/catalog/surface-manager-adapter-runtime.js +203 -0
- package/catalog/surface-manager-browser-lab.d.ts +39 -0
- package/catalog/surface-manager-browser-lab.js +225 -0
- package/catalog/surface-manager-controller.d.ts +43 -0
- package/catalog/surface-manager-controller.js +290 -0
- package/catalog/surface-manager-layout-engines.d.ts +32 -0
- package/catalog/surface-manager-layout-engines.js +161 -0
- package/catalog/surface-manager-lazy-loading.d.ts +35 -0
- package/catalog/surface-manager-lazy-loading.js +173 -0
- package/catalog/surface-manager-materialization.d.ts +37 -0
- package/catalog/surface-manager-materialization.js +202 -0
- package/catalog/surface-manager-native-rmt-surfaces.d.ts +48 -0
- package/catalog/surface-manager-native-rmt-surfaces.js +325 -0
- package/catalog/surface-manager-overlay-bridge.d.ts +42 -0
- package/catalog/surface-manager-overlay-bridge.js +247 -0
- package/catalog/surface-manager-persistence.d.ts +37 -0
- package/catalog/surface-manager-persistence.js +178 -0
- package/catalog/surface-manager-quality-gates.d.ts +48 -0
- package/catalog/surface-manager-quality-gates.js +324 -0
- package/catalog/surface-manager-release-handoff.d.ts +47 -0
- package/catalog/surface-manager-release-handoff.js +274 -0
- package/catalog/surface-manager-remote-policy.d.ts +34 -0
- package/catalog/surface-manager-remote-policy.js +199 -0
- package/catalog/surface-manager-rmt-authoring.d.ts +44 -0
- package/catalog/surface-manager-rmt-authoring.js +368 -0
- package/catalog/surface-manager-route-lifecycle.d.ts +32 -0
- package/catalog/surface-manager-route-lifecycle.js +162 -0
- package/catalog/surface-manager-runtime-release-handoff.d.ts +36 -0
- package/catalog/surface-manager-runtime-release-handoff.js +245 -0
- package/catalog/surface-manager-side-panel-runtime.d.ts +46 -0
- package/catalog/surface-manager-side-panel-runtime.js +307 -0
- package/catalog/surface-manager-stack-policy.d.ts +32 -0
- package/catalog/surface-manager-stack-policy.js +169 -0
- package/catalog/surface-manager-window-runtime.d.ts +45 -0
- package/catalog/surface-manager-window-runtime.js +285 -0
- package/catalog/surface-manager-workbench-fixture.d.ts +50 -0
- package/catalog/surface-manager-workbench-fixture.js +315 -0
- package/catalog/type-exports-api.js +236 -0
- package/catalog/type-exports-builder.js +405 -0
- package/catalog/type-exports-catalog.js +394 -0
- package/catalog/type-exports-loader.js +266 -0
- package/catalog/type-exports-policy.js +461 -0
- package/catalog/type-exports-rmt.js +407 -0
- package/catalog/type-exports-vendor.js +365 -0
- package/catalog/type-exports.js +574 -0
- package/components/icon-packs/core.js +154 -0
- package/components/icon-packs/lucide.js +136 -0
- package/components/manifest.json +44 -0
- package/components/prism.d.ts +73 -0
- package/components/prism.js +300 -0
- package/components/turndown.d.ts +34 -0
- package/components/turndown.js +107 -0
- package/components/x-rmt-lifecycle-demo-build.d.ts +78 -0
- package/components/x-rmt-lifecycle-demo-build.js +1175 -0
- package/components/x-rmt-lifecycle-demo.d.ts +83 -0
- package/components/x-rmt-lifecycle-demo.js +1175 -0
- package/components/xalert.d.ts +42 -0
- package/components/xalert.js +538 -0
- package/components/xbutton.d.ts +127 -0
- package/components/xbutton.js +612 -0
- package/components/xcalendar.d.ts +39 -0
- package/components/xcalendar.js +338 -0
- package/components/xcards.d.ts +34 -0
- package/components/xcards.js +253 -0
- package/components/xcheckbox.d.ts +48 -0
- package/components/xcheckbox.js +448 -0
- package/components/xcode.d.ts +35 -0
- package/components/xcode.js +370 -0
- package/components/xdialog.d.ts +48 -0
- package/components/xdialog.js +763 -0
- package/components/xdrawer.d.ts +61 -0
- package/components/xdrawer.js +654 -0
- package/components/xfooter.d.ts +41 -0
- package/components/xfooter.js +351 -0
- package/components/xform.d.ts +43 -0
- package/components/xform.js +456 -0
- package/components/xheader.d.ts +68 -0
- package/components/xheader.js +1253 -0
- package/components/xhero.d.ts +42 -0
- package/components/xhero.js +475 -0
- package/components/xicon.d.ts +146 -0
- package/components/xicon.js +688 -0
- package/components/xinput.d.ts +37 -0
- package/components/xinput.js +444 -0
- package/components/xlightbox.d.ts +48 -0
- package/components/xlightbox.js +571 -0
- package/components/xlink.d.ts +63 -0
- package/components/xlink.js +565 -0
- package/components/xmasonry.d.ts +35 -0
- package/components/xmasonry.js +666 -0
- package/components/xmenu.d.ts +118 -0
- package/components/xmenu.js +1005 -0
- package/components/xmodal.d.ts +64 -0
- package/components/xmodal.js +831 -0
- package/components/xplayer.d.ts +57 -0
- package/components/xplayer.js +1748 -0
- package/components/xpopover.d.ts +54 -0
- package/components/xpopover.js +466 -0
- package/components/xprogress.d.ts +40 -0
- package/components/xprogress.js +345 -0
- package/components/xradio.d.ts +50 -0
- package/components/xradio.js +474 -0
- package/components/xrouter.d.ts +244 -0
- package/components/xrouter.js +1841 -0
- package/components/xsection.d.ts +34 -0
- package/components/xsection.js +253 -0
- package/components/xselect.d.ts +46 -0
- package/components/xselect.js +463 -0
- package/components/xsidepanel.d.ts +56 -0
- package/components/xsidepanel.js +728 -0
- package/components/xspinner.d.ts +38 -0
- package/components/xspinner.js +388 -0
- package/components/xstate.d.ts +137 -0
- package/components/xstate.js +493 -0
- package/components/xstatus.d.ts +41 -0
- package/components/xstatus.js +381 -0
- package/components/xsummary.d.ts +43 -0
- package/components/xsummary.js +293 -0
- package/components/xsurfacemanager-controller.d.ts +130 -0
- package/components/xsurfacemanager-controller.js +699 -0
- package/components/xsurfacemanager.d.ts +452 -0
- package/components/xsurfacemanager.js +3775 -0
- package/components/xsurfaceoverlay-bridge.d.ts +43 -0
- package/components/xsurfaceoverlay-bridge.js +238 -0
- package/components/xsurfacewindow.d.ts +50 -0
- package/components/xsurfacewindow.js +576 -0
- package/components/xtabs.d.ts +73 -0
- package/components/xtabs.js +611 -0
- package/components/xtend-public-types.d.ts +208 -0
- package/components/xtextarea.d.ts +46 -0
- package/components/xtextarea.js +451 -0
- package/components/xtheme.d.ts +253 -0
- package/components/xtheme.js +1438 -0
- package/components/xtoast.d.ts +39 -0
- package/components/xtoast.js +389 -0
- package/components/xtooltip.d.ts +53 -0
- package/components/xtooltip.js +432 -0
- package/components/xtype.d.ts +42 -0
- package/components/xtype.js +244 -0
- package/components/xutils.d.ts +164 -0
- package/components/xutils.js +496 -0
- package/components/xwriter.d.ts +67 -0
- package/components/xwriter.js +854 -0
- package/design-tokens/themes/enterprise-light.json +40 -0
- package/design-tokens/themes/xtend-signature.json +126 -0
- package/design-tokens/xtend-design-tokens.d.ts +95 -0
- package/design-tokens/xtend-design-tokens.js +395 -0
- package/design-tokens/xtheme-token-alias-layer.d.ts +84 -0
- package/design-tokens/xtheme-token-alias-layer.js +423 -0
- package/docs/.htaccess +51 -0
- package/docs/README.md +340 -0
- package/docs/XTend-ADR.md +221 -0
- package/docs/a11y-keyboard-smokes.md +62 -0
- package/docs/about.md +18 -0
- package/docs/api.md +157 -0
- package/docs/best-practices.md +76 -0
- package/docs/component-catalog-coverage.md +58 -0
- package/docs/component-lab.md +103 -0
- package/docs/component-long-tail-migration.md +41 -0
- package/docs/component-platform.md +159 -0
- package/docs/component-ux-app-authoring.md +130 -0
- package/docs/component-ux-authoring.md +96 -0
- package/docs/component-ux-gates.md +45 -0
- package/docs/components/x-rmt-lifecycle-demo-build.md +60 -0
- package/docs/components/xalert.md +81 -0
- package/docs/components/xbutton.md +103 -0
- package/docs/components/xcalendar.md +82 -0
- package/docs/components/xcards.md +128 -0
- package/docs/components/xcheckbox.md +102 -0
- package/docs/components/xcode.md +126 -0
- package/docs/components/xdialog.md +92 -0
- package/docs/components/xdrawer.md +84 -0
- package/docs/components/xfooter.md +126 -0
- package/docs/components/xform.md +128 -0
- package/docs/components/xheader.md +308 -0
- package/docs/components/xhero.md +142 -0
- package/docs/components/xicon.md +125 -0
- package/docs/components/xinput.md +129 -0
- package/docs/components/xlightbox.md +98 -0
- package/docs/components/xlink.md +109 -0
- package/docs/components/xmasonry.md +124 -0
- package/docs/components/xmenu.md +158 -0
- package/docs/components/xmodal.md +82 -0
- package/docs/components/xplayer.md +104 -0
- package/docs/components/xpopover.md +67 -0
- package/docs/components/xprogress.md +56 -0
- package/docs/components/xradio.md +103 -0
- package/docs/components/xrouter.md +260 -0
- package/docs/components/xsection.md +125 -0
- package/docs/components/xselect.md +105 -0
- package/docs/components/xsidepanel.md +30 -0
- package/docs/components/xspinner.md +102 -0
- package/docs/components/xstate.md +148 -0
- package/docs/components/xstatus.md +55 -0
- package/docs/components/xsummary.md +78 -0
- package/docs/components/xsurfacemanager.md +27 -0
- package/docs/components/xsurfacewindow.md +21 -0
- package/docs/components/xtabs.md +160 -0
- package/docs/components/xtextarea.md +98 -0
- package/docs/components/xtheme.md +167 -0
- package/docs/components/xtoast.md +62 -0
- package/docs/components/xtooltip.md +66 -0
- package/docs/components/xtype.md +82 -0
- package/docs/components/xutils.md +144 -0
- package/docs/components/xwriter.md +94 -0
- package/docs/components.md +117 -0
- package/docs/conditional-network-evidence-ci.md +38 -0
- package/docs/conditional-network-evidence.md +50 -0
- package/docs/core-migration-guide.md +110 -0
- package/docs/design-tokens.md +116 -0
- package/docs/docs-rmt-production-hardening.md +31 -0
- package/docs/enterprise-adoption.md +411 -0
- package/docs/enterprise-component-flex-release-handoff.md +129 -0
- package/docs/epic10-platform-gates.md +62 -0
- package/docs/epic10-release-handoff.md +81 -0
- package/docs/epic11-enterprise-ux-handoff.md +70 -0
- package/docs/epic12-rc0-handoff.md +61 -0
- package/docs/existing-component-metadata.md +67 -0
- package/docs/hydration-performance-closure.md +34 -0
- package/docs/hydration-policies.md +71 -0
- package/docs/index.php +1625 -0
- package/docs/known-residual-triage.md +22 -0
- package/docs/manifest-import-policy.md +79 -0
- package/docs/manifest.md +106 -0
- package/docs/menu.json +1190 -0
- package/docs/motion-contrast.md +67 -0
- package/docs/package-export-lock.md +44 -0
- package/docs/performance-measurements.md +106 -0
- package/docs/performance-regression.md +89 -0
- package/docs/performance.md +94 -0
- package/docs/previews/README.md +17 -0
- package/docs/prod-browser-csp-smokes.md +40 -0
- package/docs/public-component-types.md +79 -0
- package/docs/quick-start-guide.md +152 -0
- package/docs/rc0-adoption-guide.md +102 -0
- package/docs/rc0-gate-matrix.md +58 -0
- package/docs/rc1-gate-matrix-ci-handoff.md +56 -0
- package/docs/rc1-migration-notes.md +69 -0
- package/docs/rc1-readiness.md +46 -0
- package/docs/release-owner-acceptance.md +56 -0
- package/docs/release-report-pack-dry-run-evidence.md +39 -0
- package/docs/rmt-dsl-authoring-polish.md +122 -0
- package/docs/rmt-first-demo-app.md +77 -0
- package/docs/rmt-first-xtend-apps.md +105 -0
- package/docs/rmt-kernel-panic-recovery-incident-handoff.md +61 -0
- package/docs/rmt-kernel-security-hardening-migration.md +50 -0
- package/docs/rmt-kernel-trusted-output-authoring.md +69 -0
- package/docs/rmt-language-server.md +177 -0
- package/docs/rmt-lifecycle-demo.md +25 -0
- package/docs/rmt-linter.md +140 -0
- package/docs/rmt-production-readiness.md +63 -0
- package/docs/rmt-tooling-release-gates.md +77 -0
- package/docs/rmt-vnext-authoring.md +60 -0
- package/docs/rmt-vnext-cross-surface-events.md +68 -0
- package/docs/rmt-vnext-enterprise-mfe-handoff.md +70 -0
- package/docs/rmt-vnext-migration-notes.md +62 -0
- package/docs/rmt-vnext-release-handoff.md +69 -0
- package/docs/rmt-vnext-remote-surfaces.md +90 -0
- package/docs/rmt-vnext-surface-registry-enterprise.md +76 -0
- package/docs/screenreader-signals.md +56 -0
- package/docs/supply-chain-gates.md +100 -0
- package/docs/surface-manager-authoring-guide.md +94 -0
- package/docs/surface-manager-browser-lab.md +45 -0
- package/docs/surface-manager-component-lab.md +43 -0
- package/docs/surface-manager-controller.md +66 -0
- package/docs/surface-manager-layout-engines.md +32 -0
- package/docs/surface-manager-lazy-hydration.md +63 -0
- package/docs/surface-manager-migration-guide.md +94 -0
- package/docs/surface-manager-native-rmt-surfaces.md +38 -0
- package/docs/surface-manager-overlay-bridge.md +53 -0
- package/docs/surface-manager-persistence.md +30 -0
- package/docs/surface-manager-quality-gates.md +51 -0
- package/docs/surface-manager-release-handoff.md +68 -0
- package/docs/surface-manager-remote-policy.md +54 -0
- package/docs/surface-manager-rmt-authoring.md +86 -0
- package/docs/surface-manager-route-lifecycle.md +59 -0
- package/docs/surface-manager-runtime-release-handoff.md +69 -0
- package/docs/surface-manager-side-panel-runtime.md +36 -0
- package/docs/surface-manager-stack-policy.md +39 -0
- package/docs/surface-manager-window-runtime.md +47 -0
- package/docs/surface-manager-workbench-fixture.md +43 -0
- package/docs/third-party-design-authoring.md +406 -0
- package/docs/trusted-dom-boundary-browser-proof.md +32 -0
- package/docs/trusted-dom-sanitizing.md +110 -0
- package/docs/type-exports.md +61 -0
- package/docs/typescript-components.md +63 -0
- package/docs/utils/fabric-runtime.js +650 -0
- package/docs/utils/pageloader.js +2823 -0
- package/docs/utils/parsedown.php +298 -0
- package/docs/visual-browser-regression.md +83 -0
- package/docs/visual-owner-artifacts.md +46 -0
- package/docs/visual-snapshot-automation.md +87 -0
- package/docs/xtend-api-types.md +55 -0
- package/docs/xtend-builder-types.md +55 -0
- package/docs/xtend-catalog-types.md +44 -0
- package/docs/xtend-fabric-rmt-lane-mapping.md +143 -0
- package/docs/xtend-fabric.md +474 -0
- package/docs/xtend-loader-types.md +58 -0
- package/docs/xtend-loader.md +265 -0
- package/docs/xtend-policy-types.md +38 -0
- package/docs/xtend-rmt-types.md +39 -0
- package/docs/xtend-vendor-types.md +36 -0
- package/docs/xtendrmt-app-dsl.md +269 -0
- package/docs/xtendrmt-migration-guide.md +235 -0
- package/docs/xtendrmt-native-authoring.md +337 -0
- package/docs/xtendrmt-overview.md +89 -0
- package/docs/xtendrmt-parsedown-docs.rmt +956 -0
- package/docs/xtendrmt-parsedown-scheduling.md +301 -0
- package/docs/xtendrmt-runtime-bridge.md +155 -0
- package/fabric/hydration-policy.d.ts +27 -0
- package/fabric/hydration-policy.js +306 -0
- package/fabric/package.json +58 -0
- package/fabric/rmt-lane-mapping.d.ts +47 -0
- package/fabric/rmt-lane-mapping.js +504 -0
- package/fabric/xtend-fabric.d.ts +81 -0
- package/fabric/xtend-fabric.js +2669 -0
- package/fabric/xtend-policy-public-types.d.ts +135 -0
- package/package.json +8225 -0
- package/security/README.md +54 -0
- package/security/manifest-import-policy.d.ts +43 -0
- package/security/manifest-import-policy.js +260 -0
- package/security/supply-chain-gate-policy.d.ts +45 -0
- package/security/supply-chain-gate-policy.js +249 -0
- package/security/trusted-dom-policy.d.ts +36 -0
- package/security/trusted-dom-policy.js +316 -0
- package/tools/package.json +77 -0
- package/tools/rmt-editor/vscode/README.md +33 -0
- package/tools/rmt-editor/vscode/extension.d.ts +9 -0
- package/tools/rmt-editor/vscode/extension.js +55 -0
- package/tools/rmt-editor/vscode/language-configuration.json +28 -0
- package/tools/rmt-editor/vscode/package.json +83 -0
- package/tools/rmt-editor/vscode/snippets/rmt.code-snippets +243 -0
- package/tools/rmt-editor/vscode/syntaxes/rmt.tmLanguage.json +13 -0
- package/tools/rmt-editor/vscode/xtend-rmt-language-0.0.0-enterprise-readiness.vsix +0 -0
- package/tools/rmt-language/code-actions.d.ts +15 -0
- package/tools/rmt-language/code-actions.js +566 -0
- package/tools/rmt-language/completions.d.ts +22 -0
- package/tools/rmt-language/completions.js +475 -0
- package/tools/rmt-language/definitions.d.ts +13 -0
- package/tools/rmt-language/definitions.js +212 -0
- package/tools/rmt-language/diagnostics.d.ts +23 -0
- package/tools/rmt-language/diagnostics.js +486 -0
- package/tools/rmt-language/format-adapter.d.ts +16 -0
- package/tools/rmt-language/format-adapter.js +270 -0
- package/tools/rmt-language/hover.d.ts +12 -0
- package/tools/rmt-language/hover.js +326 -0
- package/tools/rmt-language/kernel-escalation.d.ts +122 -0
- package/tools/rmt-language/kernel-escalation.js +427 -0
- package/tools/rmt-language/kernel-panic-monitor.d.ts +176 -0
- package/tools/rmt-language/kernel-panic-monitor.js +674 -0
- package/tools/rmt-language/kernel-policy-parity.d.ts +142 -0
- package/tools/rmt-language/kernel-policy-parity.js +629 -0
- package/tools/rmt-language/kernel-recovery.d.ts +173 -0
- package/tools/rmt-language/kernel-recovery.js +666 -0
- package/tools/rmt-language/kernel-scheduler-failure.d.ts +136 -0
- package/tools/rmt-language/kernel-scheduler-failure.js +486 -0
- package/tools/rmt-language/kernel-security-regression.d.ts +154 -0
- package/tools/rmt-language/kernel-security-regression.js +465 -0
- package/tools/rmt-language/kernel-trust-authority.d.ts +120 -0
- package/tools/rmt-language/kernel-trust-authority.js +549 -0
- package/tools/rmt-language/parser.d.ts +14 -0
- package/tools/rmt-language/parser.js +111 -0
- package/tools/rmt-language/rmt-tooling-public-types.d.ts +179 -0
- package/tools/rmt-language/rules/boundary-policy.js +81 -0
- package/tools/rmt-language/rules/document-policy.js +65 -0
- package/tools/rmt-language/rules/index.js +29 -0
- package/tools/rmt-language/rules/route-policy.js +81 -0
- package/tools/rmt-language/rules/scheduler-policy.js +66 -0
- package/tools/rmt-language/rules/template-policy.js +130 -0
- package/tools/rmt-language/semantic-graph.d.ts +18 -0
- package/tools/rmt-language/semantic-graph.js +827 -0
- package/tools/rmt-language/snippets/README.md +17 -0
- package/tools/rmt-language/snippets/index.d.ts +17 -0
- package/tools/rmt-language/snippets/index.js +417 -0
- package/tools/rmt-language/snippets/rmt.code-snippets +243 -0
- package/tools/rmt-language/source-model.d.ts +14 -0
- package/tools/rmt-language/source-model.js +731 -0
- package/tools/rmt-language/symbols.d.ts +13 -0
- package/tools/rmt-language/symbols.js +183 -0
- package/tools/rmt-language/vnext-compatibility.d.ts +28 -0
- package/tools/rmt-language/vnext-compatibility.js +675 -0
- package/tools/rmt-language/vnext-compiler.d.ts +17 -0
- package/tools/rmt-language/vnext-compiler.js +716 -0
- package/tools/rmt-language/vnext-composition.d.ts +30 -0
- package/tools/rmt-language/vnext-composition.js +595 -0
- package/tools/rmt-language/vnext-conditions.d.ts +25 -0
- package/tools/rmt-language/vnext-conditions.js +474 -0
- package/tools/rmt-language/vnext-cross-surface-events.d.ts +30 -0
- package/tools/rmt-language/vnext-cross-surface-events.js +607 -0
- package/tools/rmt-language/vnext-degradation.d.ts +23 -0
- package/tools/rmt-language/vnext-degradation.js +428 -0
- package/tools/rmt-language/vnext-enterprise-fixtures.d.ts +28 -0
- package/tools/rmt-language/vnext-enterprise-fixtures.js +487 -0
- package/tools/rmt-language/vnext-enterprise-registry.d.ts +21 -0
- package/tools/rmt-language/vnext-enterprise-registry.js +495 -0
- package/tools/rmt-language/vnext-enterprise-release.d.ts +44 -0
- package/tools/rmt-language/vnext-enterprise-release.js +472 -0
- package/tools/rmt-language/vnext-event-governance.d.ts +29 -0
- package/tools/rmt-language/vnext-event-governance.js +488 -0
- package/tools/rmt-language/vnext-events.d.ts +44 -0
- package/tools/rmt-language/vnext-events.js +680 -0
- package/tools/rmt-language/vnext-import-resolver.d.ts +28 -0
- package/tools/rmt-language/vnext-import-resolver.js +642 -0
- package/tools/rmt-language/vnext-lifecycle.d.ts +22 -0
- package/tools/rmt-language/vnext-lifecycle.js +404 -0
- package/tools/rmt-language/vnext-parser.d.ts +21 -0
- package/tools/rmt-language/vnext-parser.js +1391 -0
- package/tools/rmt-language/vnext-regression.d.ts +25 -0
- package/tools/rmt-language/vnext-regression.js +394 -0
- package/tools/rmt-language/vnext-release.d.ts +29 -0
- package/tools/rmt-language/vnext-release.js +293 -0
- package/tools/rmt-language/vnext-remote-compatibility.d.ts +33 -0
- package/tools/rmt-language/vnext-remote-compatibility.js +892 -0
- package/tools/rmt-language/vnext-remote-compiler.d.ts +14 -0
- package/tools/rmt-language/vnext-remote-compiler.js +520 -0
- package/tools/rmt-language/vnext-remote-manifest.d.ts +33 -0
- package/tools/rmt-language/vnext-remote-manifest.js +538 -0
- package/tools/rmt-language/vnext-remote-security.d.ts +27 -0
- package/tools/rmt-language/vnext-remote-security.js +380 -0
- package/tools/rmt-language/vnext-remote-tooling.d.ts +25 -0
- package/tools/rmt-language/vnext-remote-tooling.js +805 -0
- package/tools/rmt-language/vnext-scheduler.d.ts +24 -0
- package/tools/rmt-language/vnext-scheduler.js +469 -0
- package/tools/rmt-language/vnext-security.d.ts +28 -0
- package/tools/rmt-language/vnext-security.js +597 -0
- package/tools/rmt-language/vnext-streaming.d.ts +28 -0
- package/tools/rmt-language/vnext-streaming.js +593 -0
- package/tools/rmt-language/vnext-surfaces.d.ts +24 -0
- package/tools/rmt-language/vnext-surfaces.js +406 -0
- package/tools/rmt-language/vnext-tooling.d.ts +25 -0
- package/tools/rmt-language/vnext-tooling.js +728 -0
- package/tools/rmt-language-server/protocol.d.ts +22 -0
- package/tools/rmt-language-server/protocol.js +352 -0
- package/tools/rmt-language-server/server.d.ts +15 -0
- package/tools/rmt-language-server/server.js +622 -0
- package/tools/rmt-linter/cli.d.ts +14 -0
- package/tools/rmt-linter/cli.js +450 -0
- package/tools/rmt-linter/reporter.d.ts +16 -0
- package/tools/rmt-linter/reporter.js +472 -0
- package/xtend-builder/README.md +83 -0
- package/xtend-builder/a11y/README.md +42 -0
- package/xtend-builder/a11y/component-a11y-profile.d.ts +14 -0
- package/xtend-builder/a11y/component-a11y-profile.js +314 -0
- package/xtend-builder/blueprints/README.md +105 -0
- package/xtend-builder/blueprints/component-blueprint.contract.d.ts +16 -0
- package/xtend-builder/blueprints/component-blueprint.contract.js +343 -0
- package/xtend-builder/builder-public-types.d.ts +234 -0
- package/xtend-builder/extensions/README.md +26 -0
- package/xtend-builder/extensions/component-extension-points.d.ts +11 -0
- package/xtend-builder/extensions/component-extension-points.js +277 -0
- package/xtend-builder/generators/README.md +149 -0
- package/xtend-builder/generators/component-files.d.ts +5 -0
- package/xtend-builder/generators/component-files.js +769 -0
- package/xtend-builder/generators/component-plan.d.ts +4 -0
- package/xtend-builder/generators/component-plan.js +104 -0
- package/xtend-builder/generators/registry.d.ts +6 -0
- package/xtend-builder/generators/registry.js +118 -0
- package/xtend-builder/generators/rmt-build.js +738 -0
- package/xtend-builder/generators/rmt-lifecycle-demo.js +922 -0
- package/xtend-builder/lib/cli.d.ts +9 -0
- package/xtend-builder/lib/cli.js +543 -0
- package/xtend-builder/lib/layout.d.ts +6 -0
- package/xtend-builder/lib/layout.js +153 -0
- package/xtend-builder/lib/package-resolver.js +25 -0
- package/xtend-builder/package.json +90 -0
- package/xtend-builder/performance/README.md +31 -0
- package/xtend-builder/performance/component-performance-profile.d.ts +11 -0
- package/xtend-builder/performance/component-performance-profile.js +347 -0
- package/xtend-builder/performance/component-ux-performance-contract.d.ts +27 -0
- package/xtend-builder/performance/component-ux-performance-contract.js +424 -0
- package/xtend-builder/preview/README.md +61 -0
- package/xtend-builder/preview/component-lab-ux-inspector.d.ts +20 -0
- package/xtend-builder/preview/component-lab-ux-inspector.js +448 -0
- package/xtend-builder/preview/component-lab.d.ts +14 -0
- package/xtend-builder/preview/component-lab.js +278 -0
- package/xtend-builder/preview/component-preview.d.ts +5 -0
- package/xtend-builder/preview/component-preview.js +160 -0
- package/xtend-builder/scaffold.config.d.ts +4 -0
- package/xtend-builder/scaffold.config.js +2056 -0
- package/xtend-builder/scaffold.d.ts +3 -0
- package/xtend-builder/scaffold.js +11 -0
- package/xtend-builder/templates/README.md +33 -0
- package/xtend-builder/templates/component/a11y.template.ts +11 -0
- package/xtend-builder/templates/component/component-suite.template.d.ts +2 -0
- package/xtend-builder/templates/component/component-suite.template.js +108 -0
- package/xtend-builder/templates/component/contract.template.ts +10 -0
- package/xtend-builder/templates/component/demo-plan.template.md +73 -0
- package/xtend-builder/templates/component/docs.template.md +301 -0
- package/xtend-builder/templates/component/fixture-data.template.ts +28 -0
- package/xtend-builder/templates/component/fixture.template.html +37 -0
- package/xtend-builder/templates/component/manifest-plan.template.json +22 -0
- package/xtend-builder/templates/component/performance.template.ts +13 -0
- package/xtend-builder/templates/component/rmt.template.ts +12 -0
- package/xtend-builder/templates/component/source.template.d.ts +2 -0
- package/xtend-builder/templates/component/source.template.js +137 -0
- package/xtend-builder/templates/component/source.template.ts +110 -0
- package/xtend-builder/templates/component/types.template.d.ts +423 -0
- package/xtend-builder/templates/loader.d.ts +4 -0
- package/xtend-builder/templates/loader.js +51 -0
- package/xtend-builder/templates/registry.d.ts +6 -0
- package/xtend-builder/templates/registry.js +119 -0
- package/xtend-builder/typing/README.md +130 -0
- package/xtend-builder/typing/component-contract-v2.d.ts +15 -0
- package/xtend-builder/typing/component-contract-v2.js +248 -0
- package/xtend-builder/typing/component-network-contract.d.ts +22 -0
- package/xtend-builder/typing/component-network-contract.js +478 -0
- package/xtend-builder/typing/component-shell-contract.d.ts +21 -0
- package/xtend-builder/typing/component-shell-contract.js +312 -0
- package/xtend-builder/typing/component-styling-contract.d.ts +22 -0
- package/xtend-builder/typing/component-styling-contract.js +301 -0
- package/xtend-builder/typing/component-types.d.ts +10 -0
- package/xtend-builder/typing/component-types.js +551 -0
- package/xtend-builder/typing/enterprise-component-flex-hardening-contract.d.ts +20 -0
- package/xtend-builder/typing/enterprise-component-flex-hardening-contract.js +332 -0
- package/xtend-builder/typing/feedback-status-ux-contract.d.ts +25 -0
- package/xtend-builder/typing/feedback-status-ux-contract.js +347 -0
- package/xtend-builder/typing/form-controls-ux-contract.d.ts +25 -0
- package/xtend-builder/typing/form-controls-ux-contract.js +357 -0
- package/xtend-builder/typing/layout-display-media-ux-contract.d.ts +25 -0
- package/xtend-builder/typing/layout-display-media-ux-contract.js +420 -0
- package/xtend-builder/typing/navigation-routing-ux-contract.d.ts +17 -0
- package/xtend-builder/typing/navigation-routing-ux-contract.js +297 -0
- package/xtend-builder/typing/overlay-interaction-ux-contract.d.ts +25 -0
- package/xtend-builder/typing/overlay-interaction-ux-contract.js +383 -0
- package/xtend-builder/typing/rmt-dsl-authoring-polish.d.ts +27 -0
- package/xtend-builder/typing/rmt-dsl-authoring-polish.js +419 -0
- package/xtend-builder/typing/rmt-shell-authoring-contract.d.ts +26 -0
- package/xtend-builder/typing/rmt-shell-authoring-contract.js +315 -0
- package/xtend-builder/utils/README.md +8 -0
- package/xtend-builder/utils/naming.d.ts +7 -0
- package/xtend-builder/utils/naming.js +36 -0
- package/xtend-builder/utils/validation.d.ts +5 -0
- package/xtend-builder/utils/validation.js +95 -0
- package/xtend-builder/wiring/README.md +46 -0
- package/xtend-builder/wiring/features.d.ts +5 -0
- package/xtend-builder/wiring/features.js +165 -0
- package/xtend-builder/wiring/hydration.d.ts +4 -0
- package/xtend-builder/wiring/hydration.js +44 -0
- package/xtend-builder/wiring/manifest.d.ts +5 -0
- package/xtend-builder/wiring/manifest.js +48 -0
- package/xtend-builder/workflows/README.md +47 -0
- package/xtend-builder/workflows/developer-workflow.d.ts +6 -0
- package/xtend-builder/workflows/developer-workflow.js +125 -0
- package/xtend-builder/writing/manifest-patcher.d.ts +49 -0
- package/xtend-builder/writing/manifest-patcher.js +391 -0
- package/xtend-builder/writing/write-plan.d.ts +148 -0
- package/xtend-builder/writing/write-plan.js +646 -0
- package/xtend-dev.d.ts +23 -0
- package/xtend-dev.js +4 -0
- package/xtend-loader.d.ts +201 -0
- package/xtend-loader.js +1704 -0
- package/xtend.css +402 -0
- package/xtendrmt/package.json +64 -0
- package/xtendrmt/rmt-core.d.ts +4452 -0
- package/xtendrmt/rmt-core.esm.js +25793 -0
- package/xtendrmt/rmt-first-demo-app.js +265 -0
- package/xtendrmt/rmt-first-demo-app.rmt +737 -0
- package/xtendrmt/rmt-lifecycle-demo.app.js +493 -0
- package/xtendrmt/rmt-lifecycle-demo.core.json +810 -0
- package/xtendrmt/rmt-lifecycle-demo.rmt +35 -0
- package/xtendrmt/rmt-lifecycle-demo.rmt-build.app.js +153 -0
- package/xtendrmt/rmt-lifecycle-demo.rmt-build.core.json +810 -0
- package/xtendrmt/rmt-lifecycle-demo.rmt-build.scaffold.json +202 -0
- package/xtendrmt/rmt-lifecycle-demo.scaffold.json +187 -0
- package/xtendrmt/rmt-manifest.json +548 -0
- package/xtendrmt/rmt-runtime.browser.js +26183 -0
- package/xtendrmt/rmt-runtime.esm.js +26214 -0
- package/xtendrmt/rmt-vnext-enterprise-mfe-demo.core.json +849 -0
- package/xtendrmt/rmt-vnext-enterprise-mfe-demo.rmt +50 -0
- package/xtendrmt/rmt-vnext-reference-demo.core.json +1069 -0
- package/xtendrmt/rmt-vnext-reference-demo.rmt +50 -0
- package/xtendrmt/rmt.schema.json +3145 -0
- package/xtendrmt/surface-workbench.js +316 -0
- package/xtendrmt/surface-workbench.rmt +762 -0
- package/xtendrmt/xtendrmt-bestcase-demo.core.json +1187 -0
- package/xtendrmt/xtendrmt-bestcase-demo.js +1728 -0
- package/xtendrmt/xtendrmt-bestcase-demo.rmt +57 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# SurfaceManager Stack Policy
|
|
2
|
+
|
|
3
|
+
Ab `WP-SM-15` besitzt `x-surface-manager` den Contract `xtend.surface.stack-policy.v1` fuer gemischte Surface-Stacks aus Windows, SidePanels, Dialogen, Modals und Drawern.
|
|
4
|
+
|
|
5
|
+
## Ziel
|
|
6
|
+
|
|
7
|
+
`modal-policy` wird produktiv auf Manager-Ebene ausgewertet. Der SurfaceController bleibt die Registry-Quelle, waehrend der Manager die UI-nahe Stack-Policy auf vorhandene XTend-Komponenten anwendet:
|
|
8
|
+
|
|
9
|
+
- `snapshotStackPolicy()` liefert den aktuellen Report `xtend.surface.stack-policy-report.v1`.
|
|
10
|
+
- `applyStackPolicy()` wendet Layer Tokens, aktive Modalitaet, Inert, `aria-hidden`, `aria-modal`, Focus Trap, Focus Restore, Escape-Prioritaet und Scroll Lock an.
|
|
11
|
+
- bestehende Overlay-Komponenten behalten ihre lokalen APIs und Focus-/Escape-Implementierungen.
|
|
12
|
+
|
|
13
|
+
## Modal Policies
|
|
14
|
+
|
|
15
|
+
| Policy | Wirkung |
|
|
16
|
+
|--------|---------|
|
|
17
|
+
| `topmost` | die oberste modale Surface erhaelt aktive Modalitaet |
|
|
18
|
+
| `none` | keine Manager-Modalitaet, keine Inert- oder Scroll-Lock-Regel |
|
|
19
|
+
| `all-modal` | jede offene Surface kann als modal behandelt werden, aktiv ist die oberste |
|
|
20
|
+
| `surface-modal` | alle als modal deklarierten Surfaces werden erkannt, aktiv ist die oberste modale Surface |
|
|
21
|
+
|
|
22
|
+
## Laufzeitregeln
|
|
23
|
+
|
|
24
|
+
- Focus Restore: Beim Aktivieren einer modalen Surface merkt sich der Manager das vorherige Fokusziel und stellt es nach Close wieder her.
|
|
25
|
+
- Inert: Hintergrund-Surfaces erhalten `data-surface-inert="manager"`, `inert` und `aria-hidden`, solange eine aktive modale Surface existiert.
|
|
26
|
+
- Escape: Ein dokumentweiter Capture-Handler schliesst die aktive modale Surface oder sonst die oberste schliessbare Surface.
|
|
27
|
+
- Scroll Lock: Aktive Modalitaet setzt `data-xtend-surface-scroll-lock` auf `html` und `body`.
|
|
28
|
+
- Layer Tokens: Jede Surface erhaelt `data-surface-layer-token`, `--surface-layer-z` und kompatible Komponenten-Z-Variablen.
|
|
29
|
+
- Diagnostics: fehlende Labels, fehlende Fokusziele und Modalitaet unterhalb nicht-modaler Surfaces werden im Stack-Policy-Report sichtbar.
|
|
30
|
+
|
|
31
|
+
## Boundary
|
|
32
|
+
|
|
33
|
+
Die Stack Policy ist eine unterstuetzende XTend-UI-Schicht. Sie erzeugt keine zweite Registry, ersetzt weder Fabric noch den RMT Kernel und veraendert nicht die SurfaceController-Wahrheit. RMT kann `modal-policy` deklarieren, aber die Laufzeitentscheidung bleibt beim `x-surface-manager`.
|
|
34
|
+
|
|
35
|
+
Lokaler Gate:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
node scripts/run_xtend_tests.js surface-stack-policy --json
|
|
39
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# SurfaceManager Window Runtime
|
|
2
|
+
|
|
3
|
+
`WP-SM-03` macht den SurfaceManager erstmals sichtbar: `x-surface-manager` verwaltet den Controller und `x-surface-window` ist die erste WindowManager-Surface.
|
|
4
|
+
|
|
5
|
+
- Contract: `xtend.surface.window-runtime.v1`
|
|
6
|
+
- Manager: `components/xsurfacemanager.js`
|
|
7
|
+
- Window: `components/xsurfacewindow.js`
|
|
8
|
+
- Controller: `components/xsurfacemanager-controller.js`
|
|
9
|
+
- Gate: `node scripts/run_xtend_tests.js surface-manager --json`
|
|
10
|
+
|
|
11
|
+
## Beispiel
|
|
12
|
+
|
|
13
|
+
```html
|
|
14
|
+
<x-surface-manager id="workbench" manager-id="workbench.manager">
|
|
15
|
+
<x-surface-window
|
|
16
|
+
slot="windows"
|
|
17
|
+
surface-id="workbench.inspector"
|
|
18
|
+
label="Inspector"
|
|
19
|
+
open
|
|
20
|
+
draggable
|
|
21
|
+
resizable
|
|
22
|
+
initial-x="96"
|
|
23
|
+
initial-y="88"
|
|
24
|
+
initial-width="520"
|
|
25
|
+
initial-height="360">
|
|
26
|
+
<section>Inspector content</section>
|
|
27
|
+
</x-surface-window>
|
|
28
|
+
</x-surface-manager>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Manager
|
|
32
|
+
|
|
33
|
+
`x-surface-manager` bietet `registerSurface`, `openSurface`, `closeSurface`, `focusSurface`, `updateSurface`, `moveSurface`, `resizeSurface`, `minimizeSurface`, `maximizeSurface`, `restoreSurface` und `snapshot`.
|
|
34
|
+
|
|
35
|
+
Slots: `windows`, `panels`, `overlays`, `default`.
|
|
36
|
+
|
|
37
|
+
Events: `surface-manager-ready`, `surface-registered`, `surface-opened`, `surface-closed`, `surface-focused`, `surface-updated`, `surface-layout-changed`.
|
|
38
|
+
|
|
39
|
+
## Window
|
|
40
|
+
|
|
41
|
+
`x-surface-window` bietet `toSurfaceRecord`, `applySurfaceSnapshot`, `openWindow`, `closeWindow`, `focusWindow`, `minimizeWindow`, `maximizeWindow` und `restoreWindow`.
|
|
42
|
+
|
|
43
|
+
Das Element sendet `surface-window-command`. Der Manager fuehrt daraus die Controller-Operation aus und spiegelt den Snapshot zurueck.
|
|
44
|
+
|
|
45
|
+
## Handoff
|
|
46
|
+
|
|
47
|
+
`WP-SM-04` erweitert diese Runtime um `x-side-panel` und responsive Surface Modes. Die Window-Runtime bleibt der erste Multi Window Beweis und darf keine zweite Registry neben dem Controller einfuehren.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# SurfaceManager Workbench Fixture
|
|
2
|
+
|
|
3
|
+
Docs Contract: `xtend.docs.surface-manager-workbench-fixture.v1`
|
|
4
|
+
|
|
5
|
+
Runtime Contract: `xtend.surface.workbench-fixture.v1`
|
|
6
|
+
|
|
7
|
+
`WP-SM-05` fuehrt die erste RMT-first Workbench fuer den SurfaceManager ein. Sie rendert eine App Shell aus RMT, bindet den SurfaceManager an eine Route und zeigt zwei Windows plus SidePanel mit gemeinsamem Snapshot.
|
|
8
|
+
|
|
9
|
+
## Artefakte
|
|
10
|
+
|
|
11
|
+
| Pfad | Zweck |
|
|
12
|
+
|------|-------|
|
|
13
|
+
| `xtendrmt/surface-workbench.rmt` | RMT-Dokument mit App Shell, Route, SurfaceManager, zwei Windows, SidePanel und Content |
|
|
14
|
+
| `xtendrmt-surface-workbench.html` | Host-Datei ohne manuelle Surface-Komponenten |
|
|
15
|
+
| `xtendrmt/surface-workbench.js` | Workbench Renderer fuer `dom_descriptor`, Slots, Routes und Snapshot |
|
|
16
|
+
| `tests/browser/fixtures/rmt-surface-workbench-smoke.html` | vorbereiteter Browser-Smoke fuer spaetere Surface-Gates |
|
|
17
|
+
|
|
18
|
+
## Modell
|
|
19
|
+
|
|
20
|
+
Die Workbench nutzt weiter den MVP-Pfad aus `xtend.rmt.surface-authoring.v1`: Surfaces sind normale `components` Records mit `metadata.surface`. Die native RMT `surfaces` Domain bleibt reserviert.
|
|
21
|
+
|
|
22
|
+
Enthalten sind:
|
|
23
|
+
|
|
24
|
+
- `workbench.manager` als `x-surface-manager`
|
|
25
|
+
- `workbench.inspector` und `workbench.editor` als zwei Windows
|
|
26
|
+
- `workbench.properties` als `x-side-panel`
|
|
27
|
+
- `app.router` als route-bound Outlet
|
|
28
|
+
- `workbench` als Route fuer Surface Content
|
|
29
|
+
- `xtend.surface.snapshot` als shared Surface Snapshot Key
|
|
30
|
+
|
|
31
|
+
## Runtime
|
|
32
|
+
|
|
33
|
+
`xtendrmt/surface-workbench.js` rendert nur strukturierte DOM Nodes. Der Renderer verwendet kein `innerHTML`, sondern `renderDomDescriptor`, `renderSurfaceWorkbenchFromDocument` und `root.replaceChildren(shellFragment)`.
|
|
34
|
+
|
|
35
|
+
Der Snapshot wird ueber `collectSurfaceSnapshot(root)` gelesen. Wenn `x-surface-manager.snapshot()` verfuegbar ist, kommt der Snapshot direkt vom Manager; andernfalls liefert das Fixture einen DOM-Fallback fuer statische Gates.
|
|
36
|
+
|
|
37
|
+
## Gate
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
node scripts/run_xtend_tests.js surface-workbench-fixture --json
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Der Gate prueft Contract, RMT-Normalisierung, Host-Boundary, Runtime-Boundary, route-bound Content, zwei Windows, SidePanel, shared Surface Snapshot, Package-/Scaffold-Metadaten, Docs und Runner-Registrierung.
|
|
@@ -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
|
+
<style>
|
|
259
|
+
@layer xtend-customer {
|
|
260
|
+
:root {
|
|
261
|
+
--acme-ink: #17231f;
|
|
262
|
+
--acme-canvas: #f7f4ee;
|
|
263
|
+
--acme-panel: #fffdf8;
|
|
264
|
+
--acme-action: #0e6e8f;
|
|
265
|
+
--acme-action-strong: #173f35;
|
|
266
|
+
--acme-warm: #b56b35;
|
|
267
|
+
--acme-edge: rgba(23, 35, 31, 0.22);
|
|
268
|
+
--acme-focus: 3px solid var(--acme-warm);
|
|
269
|
+
--acme-font-body: "Aptos", "Segoe UI", system-ui, sans-serif;
|
|
270
|
+
--acme-font-display: "Aptos Display", "Aptos", "Segoe UI", system-ui, sans-serif;
|
|
271
|
+
|
|
272
|
+
--xtend-surface: var(--acme-canvas);
|
|
273
|
+
--xtend-surface-muted: var(--acme-panel);
|
|
274
|
+
--xtend-text: var(--acme-ink);
|
|
275
|
+
--xtend-border-color: var(--acme-edge);
|
|
276
|
+
--xtend-color-primary: var(--acme-action);
|
|
277
|
+
--xtend-focus-outline: var(--acme-focus);
|
|
278
|
+
--xtend-font-family-body: var(--acme-font-body);
|
|
279
|
+
--xtend-font-family-heading: var(--acme-font-display);
|
|
280
|
+
--xtend-header-surface: var(--acme-panel);
|
|
281
|
+
--xtend-header-menu-surface: #ffffff;
|
|
282
|
+
--xtend-header-menu-backdrop: rgba(23, 35, 31, 0.45);
|
|
283
|
+
--xtend-button-primary-surface: var(--acme-action);
|
|
284
|
+
--xtend-button-primary-text: #fffaf0;
|
|
285
|
+
--xtend-menu-item-hover-surface: rgba(181, 107, 53, 0.14);
|
|
286
|
+
--xtend-nav-current-indicator: var(--acme-warm);
|
|
287
|
+
--xtend-overlay-surface: #ffffff;
|
|
288
|
+
--xtend-overlay-text: var(--acme-ink);
|
|
289
|
+
--xtend-overlay-backdrop: rgba(23, 35, 31, 0.45);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
:root[data-theme="dark"] {
|
|
293
|
+
--acme-ink: #f6f1e8;
|
|
294
|
+
--acme-canvas: #121916;
|
|
295
|
+
--acme-panel: #1c2823;
|
|
296
|
+
--acme-action: #8bd4e6;
|
|
297
|
+
--acme-action-strong: #b56b35;
|
|
298
|
+
--acme-edge: rgba(246, 241, 232, 0.2);
|
|
299
|
+
--xtend-button-primary-text: #121916;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
:root[data-theme="forced-colors"] {
|
|
303
|
+
--acme-ink: CanvasText;
|
|
304
|
+
--acme-canvas: Canvas;
|
|
305
|
+
--acme-panel: Canvas;
|
|
306
|
+
--acme-action: Highlight;
|
|
307
|
+
--acme-action-strong: Highlight;
|
|
308
|
+
--acme-warm: Highlight;
|
|
309
|
+
--acme-edge: CanvasText;
|
|
310
|
+
--xtend-button-primary-text: HighlightText;
|
|
311
|
+
--xtend-overlay-backdrop: Canvas;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
@media (prefers-reduced-motion: reduce) {
|
|
315
|
+
:root {
|
|
316
|
+
--xtend-motion-duration-fast: 0ms;
|
|
317
|
+
--xtend-motion-duration-base: 0ms;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
x-header::part(root),
|
|
322
|
+
x-modal::part(surface),
|
|
323
|
+
x-drawer::part(surface) {
|
|
324
|
+
border: 1px solid var(--acme-edge);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
x-header::part(trigger-icon),
|
|
328
|
+
x-button::part(icon),
|
|
329
|
+
x-menu::part(disclosure-icon) {
|
|
330
|
+
color: currentColor;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
</style>
|
|
334
|
+
<script type="module" src="/xtend-loader.js" data-manifest="/components/manifest.json"></script>
|
|
335
|
+
</head>
|
|
336
|
+
<body>
|
|
337
|
+
<x-theme></x-theme>
|
|
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)
|