@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,30 @@
|
|
|
1
|
+
# SurfaceManager Persistence
|
|
2
|
+
|
|
3
|
+
`x-surface-manager` can save surface layouts under a `restore-key` and restore them through the SurfaceController on the next start.
|
|
4
|
+
|
|
5
|
+
## Attributes
|
|
6
|
+
|
|
7
|
+
| Attribute | Values | Purpose |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `restore-key` | string | Stable key for the app-shell layout |
|
|
10
|
+
| `persistence-mode` | `none`, `memory`, `session`, `local` | Storage backend for snapshots |
|
|
11
|
+
| `restore-policy` | `auto`, `manual`, `reset` | Auto-restore on connect or manual control |
|
|
12
|
+
|
|
13
|
+
Without `restore-key`, persistence stays disabled. With `restore-key` and no explicit `persistence-mode`, the runtime uses `session`.
|
|
14
|
+
|
|
15
|
+
## API
|
|
16
|
+
|
|
17
|
+
- `snapshotPersistence()` returns the active persistence contract.
|
|
18
|
+
- `persistSnapshot(snapshot, options)` stores a layout-only snapshot.
|
|
19
|
+
- `restorePersistedSnapshot(options)` reads and hydrates a stored snapshot.
|
|
20
|
+
- `clearPersistedSnapshot(options)` removes the stored snapshot.
|
|
21
|
+
- `resetSurfaceLayout(options)` clears persistence and registers the declared surface elements again.
|
|
22
|
+
|
|
23
|
+
The stored format is `xtend.surface.persisted-snapshot.v1`. Content payloads are not persisted; surface IDs, bounds, stack, active surface, panel modes, status and content refs are preserved.
|
|
24
|
+
|
|
25
|
+
## Boundaries
|
|
26
|
+
|
|
27
|
+
- The SurfaceController remains the only source of registry truth.
|
|
28
|
+
- Restore runs through controller operations, not by directly mutating a second registry.
|
|
29
|
+
- Invalid or incompatible snapshots lead to a controlled skip with diagnostics.
|
|
30
|
+
- The RMT kernel imports no XTend components.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# SurfaceManager Quality Gates
|
|
2
|
+
|
|
3
|
+
`WP-SM-07` introduces `xtend.surface.quality-gates.v1`. The gate checks the SurfaceManager across four domains: browser, a11y, performance and visual.
|
|
4
|
+
|
|
5
|
+
## Local Gates
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
node scripts/run_xtend_tests.js surface-manager-quality --json
|
|
9
|
+
node scripts/run_xtend_tests.js surface-manager-browser --json
|
|
10
|
+
node scripts/run_xtend_tests.js surface-manager-a11y --json
|
|
11
|
+
node scripts/run_xtend_tests.js surface-manager-performance --json
|
|
12
|
+
node scripts/run_xtend_tests.js surface-manager-visual --json
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The domain gates run through the same contract and can be referenced specifically in local checks or CI matrices.
|
|
16
|
+
|
|
17
|
+
## Browser
|
|
18
|
+
|
|
19
|
+
The fixture `tests/browser/fixtures/surface-manager-quality-smoke.html` builds a mixed surface UI:
|
|
20
|
+
|
|
21
|
+
- two `x-surface-window`
|
|
22
|
+
- one `x-side-panel`
|
|
23
|
+
- one `x-modal`
|
|
24
|
+
- one `x-dialog`
|
|
25
|
+
- one `x-drawer`
|
|
26
|
+
|
|
27
|
+
Overlays are opened through `surface-overlay-command` and added to the same surface stack.
|
|
28
|
+
|
|
29
|
+
## A11y
|
|
30
|
+
|
|
31
|
+
The gate checks contract and fixture signals for:
|
|
32
|
+
|
|
33
|
+
- roles: `application`, `dialog`, `complementary`
|
|
34
|
+
- `aria-live` status
|
|
35
|
+
- focus restore
|
|
36
|
+
- Escape topmost behavior
|
|
37
|
+
- Tab focus trap
|
|
38
|
+
- reduced motion
|
|
39
|
+
- forced colors and visible focus
|
|
40
|
+
|
|
41
|
+
## Performance
|
|
42
|
+
|
|
43
|
+
The contract defines budgets for open/close, focus, layout transition, snapshot and registration. The browser fixture additionally sets the performance measurement `surface-quality-open-close`.
|
|
44
|
+
|
|
45
|
+
## Visual
|
|
46
|
+
|
|
47
|
+
The DOM baseline `tests/browser/visual-baselines/surface-manager-quality.dom-baseline.json` covers desktop, mobile, topmost overlay and forced colors. It intentionally remains JSON-only so the local gate can run stably without browser pixel diff.
|
|
48
|
+
|
|
49
|
+
## Handoff
|
|
50
|
+
|
|
51
|
+
`WP-SM-08` can build on the quality gates and validate the native RMT `surfaces` domain against the same visible stack states.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# SurfaceManager Release Handoff
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.surface.release-handoff.v1`
|
|
4
|
+
- Report: `xtend.surface.release-handoff-report.v1`
|
|
5
|
+
- Workpackage: `WP-SM-09`
|
|
6
|
+
- Local gate: `node scripts/run_xtend_tests.js surface-release-handoff --json`
|
|
7
|
+
- Package script: `npm run test:surface-release-handoff`
|
|
8
|
+
|
|
9
|
+
## Status
|
|
10
|
+
|
|
11
|
+
The first SurfaceManager line is authoring-ready and gate-ready with `WP-SM-09`. XTend can describe app shells with multi-window, side panels, overlay compatibility, quality gates and native RMT surface records.
|
|
12
|
+
|
|
13
|
+
Historical `WP-SM-09` release boundary:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
no-public-runtime-claim-for-xtend.surface-adapter-yet
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
In the `WP-SM-09` authoring handoff, this meant: `surfaces[*]` and `xtend.surface.adapter.v1` were a stable handoff for tooling and the next runtime work. Since `WP-SM-19`, this runtime work has been closed through [SurfaceManager Runtime Release Handoff](./surface-manager-runtime-release-handoff.md), and the productive `xtend.surface` adapter claim is gateable.
|
|
20
|
+
|
|
21
|
+
## Gate Chain
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
node scripts/run_xtend_tests.js rmt-surface-authoring --json
|
|
25
|
+
node scripts/run_xtend_tests.js surface-controller --json
|
|
26
|
+
node scripts/run_xtend_tests.js surface-manager --json
|
|
27
|
+
node scripts/run_xtend_tests.js surface-side-panel --json
|
|
28
|
+
node scripts/run_xtend_tests.js surface-workbench-fixture --json
|
|
29
|
+
node scripts/run_xtend_tests.js surface-overlay-bridge --json
|
|
30
|
+
node scripts/run_xtend_tests.js surface-manager-quality --json
|
|
31
|
+
node scripts/run_xtend_tests.js surface-native-rmt --json
|
|
32
|
+
node scripts/run_xtend_tests.js surface-release-handoff --json
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Handoff
|
|
36
|
+
|
|
37
|
+
Ready:
|
|
38
|
+
|
|
39
|
+
- app-shell authoring through component records and surface metadata
|
|
40
|
+
- native `surfaces[*]` records for complex workbench UIs
|
|
41
|
+
- Component Lab fixture for surface preview, native RMT inspector, migration diff, quality gates and source links
|
|
42
|
+
- migration guide from `components[*].metadata.surface` to `surfaces[*]`
|
|
43
|
+
- local static gates for RMT normalization, semantic graph, docs and reference paths
|
|
44
|
+
|
|
45
|
+
Historical follow-up work from `WP-SM-09`:
|
|
46
|
+
|
|
47
|
+
- productive `xtend.surface` adapter runtime, closed by `WP-SM-19`
|
|
48
|
+
- optional browser-lab server or visual pixel baselines
|
|
49
|
+
- additional surface types such as docked workspaces, command palettes and split panes
|
|
50
|
+
- release hardening against real app-shell projects
|
|
51
|
+
|
|
52
|
+
## WP-SM-19 Runtime Handoff
|
|
53
|
+
|
|
54
|
+
`WP-SM-19` closes this follow-up work for the productive runtime line. The new contract `xtend.surface.runtime-release-handoff.v1` documents the productive runtime line made of adapter runtime, native materialization, persistence, lazy hydration, route lifecycle, stack policy, layout engines, remote policy and browser lab.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
node scripts/run_xtend_tests.js surface-runtime-release-handoff --json
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`WP-SM-09` therefore remains the historical authoring handoff, while `WP-SM-19` makes the productive runtime claim gateable. Open scopes such as project-specific pixel artifacts, release-owner signoff before npm publish and optional additional surface types remain explicitly named in the runtime handoff.
|
|
61
|
+
|
|
62
|
+
## References
|
|
63
|
+
|
|
64
|
+
- [SurfaceManager Authoring Guide](./surface-manager-authoring-guide.md)
|
|
65
|
+
- [SurfaceManager Component Lab](./surface-manager-component-lab.md)
|
|
66
|
+
- [SurfaceManager Migration Guide](./surface-manager-migration-guide.md)
|
|
67
|
+
- [SurfaceManager Native RMT Surfaces](./surface-manager-native-rmt-surfaces.md)
|
|
68
|
+
- [SurfaceManager Runtime Release Handoff](./surface-manager-runtime-release-handoff.md)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# SurfaceManager Remote Policy Bridge
|
|
2
|
+
|
|
3
|
+
`WP-SM-17` connects E16 remote-surface records to the XTend UI surface runtime. The contract `xtend.surface.remote-policy-bridge.v1` belongs to `x-surface-manager`; the RMT kernel remains declarative and executes no remote runtime.
|
|
4
|
+
|
|
5
|
+
## Decisions
|
|
6
|
+
|
|
7
|
+
Remote surfaces are converted host-side into exactly one decision. The accepted trust boundary is `xtend.security.remote-surface.v1`.
|
|
8
|
+
|
|
9
|
+
- `mounted`: owner, version, origin, integrity, trust boundary, capabilities, sandbox/CSP and event governance match.
|
|
10
|
+
- `degraded`: a policy violation exists, but an explicit fallback is available.
|
|
11
|
+
- `refused`: the surface may not be registered because a hard policy violation exists without fallback.
|
|
12
|
+
|
|
13
|
+
The SurfaceController remains the only registry. The policy bridge creates no second registry; it only manages host decisions, diagnostics and fallback mapping.
|
|
14
|
+
|
|
15
|
+
## Manager API
|
|
16
|
+
|
|
17
|
+
- `evaluateRemoteSurfacePolicy(record, options)` checks a remote surface record without commit.
|
|
18
|
+
- `applyRemoteSurfacePolicy(record, options)` checks and registers a mounted or degraded surface with `commit: true`.
|
|
19
|
+
- `registerRemoteSurface(record, options)` is the productive mount path for `xtend.surface`.
|
|
20
|
+
- `snapshotRemoteSurfacePolicy()` returns `xtend.surface.remote-policy-report.v1`.
|
|
21
|
+
- `governRemoteSurfaceEvent(event, payload, options)` checks cross-surface events without an implicit global event bus.
|
|
22
|
+
|
|
23
|
+
Important host attributes:
|
|
24
|
+
|
|
25
|
+
- `remote-surface-policy="strict|audit|off"`
|
|
26
|
+
- `remote-origin-allowlist="https://cdn.example"`
|
|
27
|
+
- `remote-capabilities="surface.mount,event.emit,event.consume"`
|
|
28
|
+
|
|
29
|
+
## Adapter Boundary
|
|
30
|
+
|
|
31
|
+
The `xtend.surface` adapter consumes E16 remote-surface records, normalizes them as surface intent and forwards them to the SurfaceManager. It materializes at most a local shell or fallback. It loads no remote bundles, starts no `import()` and executes no remote runtime loading in the RMT kernel.
|
|
32
|
+
|
|
33
|
+
## Diagnostics
|
|
34
|
+
|
|
35
|
+
Policy violations are diagnosable, including:
|
|
36
|
+
|
|
37
|
+
- `xtend.surface.remote-policy.owner-missing`
|
|
38
|
+
- `xtend.surface.remote-policy.version-missing`
|
|
39
|
+
- `xtend.surface.remote-policy.origin-not-allowed`
|
|
40
|
+
- `xtend.surface.remote-policy.integrity-missing`
|
|
41
|
+
- `xtend.surface.remote-policy.trust-boundary-refused`
|
|
42
|
+
- `xtend.surface.remote-policy.capability-refused`
|
|
43
|
+
- `xtend.surface.remote-policy.event-payload-missing`
|
|
44
|
+
- `xtend.surface.remote-policy.event-scope-refused`
|
|
45
|
+
- `xtend.surface.remote-policy.degradation-blocked`
|
|
46
|
+
- `xtend.surface.remote-policy.fallback-missing`
|
|
47
|
+
|
|
48
|
+
## Gate
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
node scripts/run_xtend_tests.js surface-remote-policy --json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The gate checks runtime methods, public types, RMT adapter connection, enterprise MFE fixture, degradation/fallback, event governance, package metadata and the boundaries `no second registry` and `no remote runtime loading in the RMT kernel`.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# SurfaceManager RMT Authoring
|
|
2
|
+
|
|
3
|
+
Docs contract: `xtend.docs.surface-manager-rmt-authoring.v1`
|
|
4
|
+
|
|
5
|
+
The SurfaceManager is the XTend app-shell building block for multi-window UIs, side panels and later surface types in an SPA. `WP-SM-01` first defines the RMT authoring model; runtime components follow in the next packages.
|
|
6
|
+
|
|
7
|
+
## Decision
|
|
8
|
+
|
|
9
|
+
SurfaceManager is built as an RMT-native component family:
|
|
10
|
+
|
|
11
|
+
- `x-surface-manager`
|
|
12
|
+
- `x-surface-window`
|
|
13
|
+
- `x-side-panel`
|
|
14
|
+
|
|
15
|
+
Fabric remains underneath for lanes, fibers, diagnostics and telemetry. SurfaceManager does not replace Fabric.
|
|
16
|
+
|
|
17
|
+
## MVP Authoring
|
|
18
|
+
|
|
19
|
+
New SurfaceManager examples are written vNext-first. The compiler can still generate existing RMT `components` records with `metadata.surfaceManager` and `metadata.surface` from them:
|
|
20
|
+
|
|
21
|
+
```rmt
|
|
22
|
+
template workbench.surfaces {
|
|
23
|
+
state workbench.selection type object initial null
|
|
24
|
+
|
|
25
|
+
portal surface.root root "#workbench-root" layer surface
|
|
26
|
+
|
|
27
|
+
surface workbench.manager kind workspace component x-surface-manager {
|
|
28
|
+
portal surface.root
|
|
29
|
+
|
|
30
|
+
lane visible weight 90 {
|
|
31
|
+
mount x-surface-manager
|
|
32
|
+
hydrate surface-manager from endpoint surface.visible.render
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
surface workbench.inspector kind window component x-surface-window {
|
|
37
|
+
source state workbench.selection
|
|
38
|
+
portal surface.root
|
|
39
|
+
|
|
40
|
+
lane user-blocking weight 95 {
|
|
41
|
+
hydrate inspector-window from endpoint surface.user-blocking.open
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
lane transition weight 55 {
|
|
45
|
+
hydrate inspector-layout from endpoint surface.transition.layout
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
surface workbench.details kind panel component x-side-panel {
|
|
50
|
+
portal surface.root
|
|
51
|
+
|
|
52
|
+
lane visible weight 70 {
|
|
53
|
+
hydrate details-panel from state workbench.selection
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`xtend.surface` and a native RMT `surfaces` domain remain the runtime projection of this vNext path. Legacy `components[*].metadata.surface` is migration source and mirror, but no longer the preferred authoring form.
|
|
60
|
+
|
|
61
|
+
## Schedules
|
|
62
|
+
|
|
63
|
+
| Schedule | Lane | Purpose |
|
|
64
|
+
|----------|------|---------|
|
|
65
|
+
| `surface.visible.render` | `visible` | render manager and visible surface shell |
|
|
66
|
+
| `surface.user-blocking.open` | `user-blocking` | open surface and set focus |
|
|
67
|
+
| `surface.user-blocking.close` | `user-blocking` | close surface and restore focus |
|
|
68
|
+
| `surface.transition.layout` | `transition` | commit move, resize, docking and snap |
|
|
69
|
+
| `surface.background.persist` | `background` | persist layout snapshot |
|
|
70
|
+
| `surface.diagnostics.snapshot` | `diagnostics` | snapshot registry, stack and telemetry |
|
|
71
|
+
| `a11y.user-blocking.announce` | `user-blocking` | announce surface status for screenreaders |
|
|
72
|
+
|
|
73
|
+
## Fixture
|
|
74
|
+
|
|
75
|
+
The reference document is located at:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
tests/fixtures/rmt-surface-manager-workbench.rmt
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
It describes a shell-first workbench with two `x-surface-window` records and one `x-side-panel` record. The next documentation line should show the same workbench as an RMT vNext draft and keep the records only as compiler/compatibility output.
|
|
82
|
+
|
|
83
|
+
## Gate
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
node scripts/run_xtend_tests.js rmt-surface-authoring --json
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The gate checks `xtend.rmt.surface-authoring.v1`, the fixture, package/scaffold hooks, runner registration, docs and RMT core normalization without browser or network requirements.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# SurfaceManager Route Lifecycle
|
|
2
|
+
|
|
3
|
+
Docs contract: `xtend.docs.surface-manager-route-lifecycle.v1`
|
|
4
|
+
|
|
5
|
+
`WP-SM-14` binds surfaces to XRouter routes without introducing a second routing or surface registry. XRouter remains the route-state source. SurfaceManager remains the lifecycle source for surfaces.
|
|
6
|
+
|
|
7
|
+
## Contract
|
|
8
|
+
|
|
9
|
+
- Route lifecycle: `xtend.surface.route-lifecycle.v1`
|
|
10
|
+
- Report: `xtend.surface.route-lifecycle-report.v1`
|
|
11
|
+
- XRouter relation: `xtend.rmt.xrouter-adapter.v1`
|
|
12
|
+
- Gate: `node scripts/run_xtend_tests.js surface-route-lifecycle --json`
|
|
13
|
+
|
|
14
|
+
## Manager
|
|
15
|
+
|
|
16
|
+
Route lifecycles are explicit. A manager reacts only when `route-aware` is set:
|
|
17
|
+
|
|
18
|
+
```html
|
|
19
|
+
<x-surface-manager
|
|
20
|
+
manager-id="app.manager"
|
|
21
|
+
route-aware="true"
|
|
22
|
+
route-lifecycle-policy="open-close">
|
|
23
|
+
...
|
|
24
|
+
</x-surface-manager>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`snapshotRouteLifecycle()` returns a report with route state, surface policy, match status and the boundaries `controllerRemainsRegistryTruth`, `xrouterOwnsRouteState` and `createsSecondRegistry: false`.
|
|
28
|
+
|
|
29
|
+
`applyRouteLifecycle(routeInput, options)` can be used by tests, host adapters or XRouter events. The normal runtime path reacts to `route-changed`, `routechange`, `xrouter-after-navigate`, `xtend-route-changed`, `popstate` and `hashchange`.
|
|
30
|
+
|
|
31
|
+
## Surface Policies
|
|
32
|
+
|
|
33
|
+
Surfaces are bound through `data-surface-route` and `data-surface-route-policy`:
|
|
34
|
+
|
|
35
|
+
| Policy | Match | No match |
|
|
36
|
+
|--------|-------|----------|
|
|
37
|
+
| `global` | remains unchanged | remains unchanged |
|
|
38
|
+
| `open-close` | open/restore and route-hydrate | close |
|
|
39
|
+
| `open-collapse` | open/restore/expand and route-hydrate | side panels collapse, windows minimize |
|
|
40
|
+
| `open-minimize` | open/restore and route-hydrate | minimize, with collapse fallback |
|
|
41
|
+
| `open-keep` | open/restore and route-hydrate | remains open |
|
|
42
|
+
| `hydrate-only` | route-hydrate | no lifecycle change |
|
|
43
|
+
| `manual` | no automatic change | no automatic change |
|
|
44
|
+
|
|
45
|
+
Global surfaces, command palettes or persistence surfaces can remain stable across route changes with `data-surface-route-policy="global"` or `data-surface-route-persistent="true"`.
|
|
46
|
+
|
|
47
|
+
## RMT
|
|
48
|
+
|
|
49
|
+
RMT-materialized surfaces carry route information as DOM attributes:
|
|
50
|
+
|
|
51
|
+
- `data-surface-route`
|
|
52
|
+
- `data-surface-route-policy`
|
|
53
|
+
- `data-surface-hydration-policy="route"` as default when a surface has a route and no explicit hydration policy is set
|
|
54
|
+
|
|
55
|
+
The RMT kernel imports no XTend types. The adapter materializes only attributes; the runtime decision remains in the SurfaceManager.
|
|
56
|
+
|
|
57
|
+
## No Competing Lifecycle Sources
|
|
58
|
+
|
|
59
|
+
Standalone `x-side-panel route-aware` keeps its old fallback. However, as soon as a panel is managed by `x-surface-manager`, it delegates route changes to the manager. Managed surfaces therefore have no competing lifecycle sources.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# SurfaceManager Runtime Release Handoff
|
|
2
|
+
|
|
3
|
+
`WP-SM-19` finalizes the surface runtime as a productive XTend UI layer for app shells. The contract `xtend.surface.runtime-release-handoff.v1` bundles the work from `WP-SM-10` through `WP-SM-18` and makes the runtime claim locally gateable.
|
|
4
|
+
|
|
5
|
+
## Productive Runtime Claims
|
|
6
|
+
|
|
7
|
+
| Claim | Gate |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `productive-xtend-surface-adapter-runtime` | `surface-adapter-runtime` |
|
|
10
|
+
| `native-surfaces-materialize-xtend-ui-components` | `surface-native-materialization` |
|
|
11
|
+
| `restore-key-snapshot-hydration` | `surface-persistence` |
|
|
12
|
+
| `shell-first-skeleton-hydration` | `surface-lazy-hydration` |
|
|
13
|
+
| `xrouter-bound-surface-lifecycle` | `surface-route-lifecycle` |
|
|
14
|
+
| `modal-focus-inert-stack-policy` | `surface-stack-policy` |
|
|
15
|
+
| `layout-engines-docking-split-tile-stacked` | `surface-layout-engines` |
|
|
16
|
+
| `remote-surface-trust-policy` | `surface-remote-policy` |
|
|
17
|
+
| `browser-lab-visual-stability` | `surface-browser-lab` |
|
|
18
|
+
|
|
19
|
+
The final gate is:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
node scripts/run_xtend_tests.js surface-runtime-release-handoff --json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Authoring
|
|
26
|
+
|
|
27
|
+
New complex app shells should use native `surfaces[*]`. `components[*].metadata.surface` remains as a compatibility path, especially for existing fixtures and additive migrations.
|
|
28
|
+
|
|
29
|
+
The productive path is:
|
|
30
|
+
|
|
31
|
+
1. Model surface records in `surfaces[*]`.
|
|
32
|
+
2. Reference component records as manager and content bindings.
|
|
33
|
+
3. Keep route, schedule, state key and restore key stable.
|
|
34
|
+
4. Check `surface-adapter-runtime` and `surface-native-materialization`.
|
|
35
|
+
5. Check app-shell stability through `surface-browser-lab`.
|
|
36
|
+
|
|
37
|
+
## Release Gate Matrix
|
|
38
|
+
|
|
39
|
+
The runtime handoff expects the existing baseline plus the hardened runtime line:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
node scripts/run_xtend_tests.js rmt-surface-authoring surface-controller surface-manager surface-side-panel surface-workbench-fixture surface-overlay-bridge surface-manager-quality surface-native-rmt surface-release-handoff --json
|
|
43
|
+
node scripts/run_xtend_tests.js surface-adapter-runtime surface-native-materialization surface-persistence surface-lazy-hydration surface-route-lifecycle surface-stack-policy surface-layout-engines surface-remote-policy surface-browser-lab surface-runtime-release-handoff --json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Compatibility Notes
|
|
47
|
+
|
|
48
|
+
`xtend.surface.runtime-compatibility-notes.v1` records:
|
|
49
|
+
|
|
50
|
+
- existing component-metadata surfaces remain runnable
|
|
51
|
+
- workbench and browser-lab fixtures remain in the gate
|
|
52
|
+
- Docs app Parsedown remains a host boundary and is not moved into SurfaceManager
|
|
53
|
+
- remote runtime loading remains outside the RMT kernel
|
|
54
|
+
- SurfaceManager replaces neither Fabric nor the RMT kernel
|
|
55
|
+
- SurfaceController remains the only registry
|
|
56
|
+
|
|
57
|
+
## Open Scopes
|
|
58
|
+
|
|
59
|
+
These points are intentionally not part of the runtime claim:
|
|
60
|
+
|
|
61
|
+
- `project-specific-pixel-artifact-storage`
|
|
62
|
+
- `release-owner-signoff-before-public-npm-publish`
|
|
63
|
+
- `optional-command-palette-and-workspace-surface-types`
|
|
64
|
+
- `remote-runtime-loading-remains-out-of-scope`
|
|
65
|
+
- `docs-app-php-parsedown-host-boundary-remains`
|
|
66
|
+
|
|
67
|
+
## SemVer
|
|
68
|
+
|
|
69
|
+
The classification for the current state is `0.x-minor-with-migration-notes`. Before external publish, release-owner signoff, changelog and the general release checklist remain required.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# SurfaceManager SidePanel Runtime
|
|
2
|
+
|
|
3
|
+
`WP-SM-04` introduces `x-side-panel` as a native surface component. The contract `xtend.surface.side-panel-runtime.v1` extends the window runtime with app-shell-close side panels for docking, pinning, collapse, overlay and responsive fullscreen behavior.
|
|
4
|
+
|
|
5
|
+
## Components
|
|
6
|
+
|
|
7
|
+
- `x-surface-manager`: detects `x-side-panel` in the `panels` slot and processes `surface-panel-command`.
|
|
8
|
+
- `x-side-panel`: creates `xtend.surface.record.v1` with `type: "side-panel"`.
|
|
9
|
+
- `components/xsurfacemanager-controller.js`: remains the only registry and snapshot truth.
|
|
10
|
+
|
|
11
|
+
## Modes
|
|
12
|
+
|
|
13
|
+
| Mode | Use |
|
|
14
|
+
|------|-----|
|
|
15
|
+
| Docked | persistent app-shell sidebar |
|
|
16
|
+
| Pinned | open, persistent panel |
|
|
17
|
+
| Overlay | temporary panel above the workspace |
|
|
18
|
+
| Collapsed | compact panel rail |
|
|
19
|
+
| Fullscreen | responsive fallback for small viewports |
|
|
20
|
+
|
|
21
|
+
Placements: `left`, `right`, `bottom`, `inline`.
|
|
22
|
+
|
|
23
|
+
## Commands
|
|
24
|
+
|
|
25
|
+
`x-side-panel` sends `surface-panel-command` with `open`, `close`, `focus`, `resize`, `pin`, `unpin`, `collapse`, `expand`, `dock`, `restore` or `update`.
|
|
26
|
+
|
|
27
|
+
The manager maps these commands to `openSurface`, `closeSurface`, `focusSurface`, `resizeSurface`, `updateSurface`, `pinSurface`, `collapseSurface`, `expandSurface`, `dockSurface` and `restoreSurface`.
|
|
28
|
+
|
|
29
|
+
## Gates
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
node scripts/run_xtend_tests.js surface-side-panel --json
|
|
33
|
+
npm run test:surface-side-panel -- --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`WP-SM-05` builds on this with the RMT-first workbench fixture containing two windows, a side panel, route-bound content and a shared surface snapshot.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# SurfaceManager Stack Policy
|
|
2
|
+
|
|
3
|
+
As of `WP-SM-15`, `x-surface-manager` owns the `xtend.surface.stack-policy.v1` contract for mixed surface stacks made of windows, side panels, dialogs, modals and drawers.
|
|
4
|
+
|
|
5
|
+
## Goal
|
|
6
|
+
|
|
7
|
+
`modal-policy` is evaluated productively at manager level. The SurfaceController remains the registry source while the manager applies the UI-close stack policy to existing XTend components:
|
|
8
|
+
|
|
9
|
+
- `snapshotStackPolicy()` returns the current report `xtend.surface.stack-policy-report.v1`.
|
|
10
|
+
- `applyStackPolicy()` applies layer tokens, active modality, inert, `aria-hidden`, `aria-modal`, focus trap, focus restore, Escape priority and scroll lock.
|
|
11
|
+
- existing overlay components keep their local APIs and focus/Escape implementations.
|
|
12
|
+
|
|
13
|
+
## Modal Policies
|
|
14
|
+
|
|
15
|
+
| Policy | Effect |
|
|
16
|
+
|--------|--------|
|
|
17
|
+
| `topmost` | the topmost modal surface receives active modality |
|
|
18
|
+
| `none` | no manager modality, no inert or scroll-lock rule |
|
|
19
|
+
| `all-modal` | every open surface can be treated as modal; the topmost one is active |
|
|
20
|
+
| `surface-modal` | all surfaces declared as modal are recognized; the topmost modal surface is active |
|
|
21
|
+
|
|
22
|
+
## Runtime Rules
|
|
23
|
+
|
|
24
|
+
- Focus restore: when a modal surface is activated, the manager remembers the previous focus target and restores it after close.
|
|
25
|
+
- Inert: background surfaces receive `data-surface-inert="manager"`, `inert` and `aria-hidden` while an active modal surface exists.
|
|
26
|
+
- Escape: a document-wide capture handler closes the active modal surface or otherwise the topmost closable surface.
|
|
27
|
+
- Scroll lock: active modality sets `data-xtend-surface-scroll-lock` on `html` and `body`.
|
|
28
|
+
- Layer tokens: every surface receives `data-surface-layer-token`, `--surface-layer-z` and compatible component z variables.
|
|
29
|
+
- Diagnostics: missing labels, missing focus targets and modality below non-modal surfaces become visible in the stack-policy report.
|
|
30
|
+
|
|
31
|
+
## Boundary
|
|
32
|
+
|
|
33
|
+
The stack policy is a supporting XTend UI layer. It creates no second registry, replaces neither Fabric nor the RMT kernel, and does not change SurfaceController truth. RMT can declare `modal-policy`, but the runtime decision remains with `x-surface-manager`.
|
|
34
|
+
|
|
35
|
+
Local 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` makes the SurfaceManager visible for the first time: `x-surface-manager` manages the controller, and `x-surface-window` is the first 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
|
+
## Example
|
|
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` provides `registerSurface`, `openSurface`, `closeSurface`, `focusSurface`, `updateSurface`, `moveSurface`, `resizeSurface`, `minimizeSurface`, `maximizeSurface`, `restoreSurface` and `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` provides `toSurfaceRecord`, `applySurfaceSnapshot`, `openWindow`, `closeWindow`, `focusWindow`, `minimizeWindow`, `maximizeWindow` and `restoreWindow`.
|
|
42
|
+
|
|
43
|
+
The element sends `surface-window-command`. The manager turns it into the controller operation and mirrors the snapshot back.
|
|
44
|
+
|
|
45
|
+
## Handoff
|
|
46
|
+
|
|
47
|
+
`WP-SM-04` extends this runtime with `x-side-panel` and responsive surface modes. The window runtime remains the first multi-window proof and must not introduce a second registry beside the controller.
|
|
@@ -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` introduces the first RMT-first workbench for the SurfaceManager. It renders an app shell from RMT, binds the SurfaceManager to a route and shows two windows plus a side panel with a shared snapshot.
|
|
8
|
+
|
|
9
|
+
## Artifacts
|
|
10
|
+
|
|
11
|
+
| Path | Purpose |
|
|
12
|
+
|------|---------|
|
|
13
|
+
| `xtendrmt/surface-workbench.rmt` | RMT document with app shell, route, SurfaceManager, two windows, side panel and content |
|
|
14
|
+
| `tests/browser/fixtures/rmt-surface-workbench-smoke.html` | host/smoke fixture without manual surface components |
|
|
15
|
+
| `xtendrmt/surface-workbench.js` | workbench renderer for `dom_descriptor`, slots, routes and snapshot |
|
|
16
|
+
| `tests/browser/fixtures/rmt-surface-workbench-smoke.html` | prepared browser smoke for later surface gates |
|
|
17
|
+
|
|
18
|
+
## Model
|
|
19
|
+
|
|
20
|
+
The workbench continues to use the MVP path from `xtend.rmt.surface-authoring.v1`: surfaces are normal `components` records with `metadata.surface`. The native RMT `surfaces` domain remains reserved.
|
|
21
|
+
|
|
22
|
+
Included:
|
|
23
|
+
|
|
24
|
+
- `workbench.manager` as `x-surface-manager`
|
|
25
|
+
- `workbench.inspector` and `workbench.editor` as two windows
|
|
26
|
+
- `workbench.properties` as `x-side-panel`
|
|
27
|
+
- `app.router` as route-bound outlet
|
|
28
|
+
- `workbench` as route for surface content
|
|
29
|
+
- `xtend.surface.snapshot` as shared surface snapshot key
|
|
30
|
+
|
|
31
|
+
## Runtime
|
|
32
|
+
|
|
33
|
+
`xtendrmt/surface-workbench.js` renders only structured DOM nodes. The renderer does not use `innerHTML`; it uses `renderDomDescriptor`, `renderSurfaceWorkbenchFromDocument` and `root.replaceChildren(shellFragment)`.
|
|
34
|
+
|
|
35
|
+
The snapshot is read via `collectSurfaceSnapshot(root)`. If `x-surface-manager.snapshot()` is available, the snapshot comes directly from the manager; otherwise the fixture provides a DOM fallback for static gates.
|
|
36
|
+
|
|
37
|
+
## Gate
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
node scripts/run_xtend_tests.js surface-workbench-fixture --json
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The gate checks contract, RMT normalization, host boundary, runtime boundary, route-bound content, two windows, side panel, shared surface snapshot, package/scaffold metadata, docs and runner registration.
|