@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,118 @@
|
|
|
1
|
+
# RMT PHP/Laravel SSR Adapter
|
|
2
|
+
|
|
3
|
+
The PHP SSR adapter is the Laravel-compatible host layer for RMT vNext. It is a
|
|
4
|
+
portable single-file PHP 8.1+ module at `xtendrmt/rmt-php-ssr-adapter.php`.
|
|
5
|
+
This first slice does not require Composer or a Laravel service provider.
|
|
6
|
+
|
|
7
|
+
Schema: `xtend.rmt.php-ssr-adapter.v1`
|
|
8
|
+
|
|
9
|
+
The adapter is wire-compatible with the
|
|
10
|
+
[RMT Node SSR Adapter](./rmt-node-ssr-adapter.md). Both backends emit the same
|
|
11
|
+
client-facing render result, hydration payload, RenderMan chunk, and JSONL
|
|
12
|
+
frame schemas: `xtend.rmt.node-ssr-render-result.v1`,
|
|
13
|
+
`xtend.rmt.node-ssr-hydration-payload.v1`, and
|
|
14
|
+
`xtend.rmt.node-ssr-jsonl-frame.v1`.
|
|
15
|
+
|
|
16
|
+
## Role in the Stack
|
|
17
|
+
|
|
18
|
+
RMT describes the app. XTend Components remain the UI building blocks. The PHP
|
|
19
|
+
adapter serializes server-side Light DOM, capability markers, lazy import
|
|
20
|
+
hints, and hydration payloads without instantiating custom elements on the
|
|
21
|
+
server.
|
|
22
|
+
|
|
23
|
+
It intentionally avoids:
|
|
24
|
+
|
|
25
|
+
- server-side Shadow DOM rendering
|
|
26
|
+
- private component maps
|
|
27
|
+
- docs-app coupling
|
|
28
|
+
- a PHP RMT compiler
|
|
29
|
+
- implicit network access
|
|
30
|
+
- HTML output without a trust boundary
|
|
31
|
+
|
|
32
|
+
## Public API
|
|
33
|
+
|
|
34
|
+
```php
|
|
35
|
+
require __DIR__ . '/xtendrmt/rmt-php-ssr-adapter.php';
|
|
36
|
+
|
|
37
|
+
$adapter = createRmtPhpSsrAdapter([
|
|
38
|
+
'manifest' => $manifest,
|
|
39
|
+
'endpointHandlers' => [
|
|
40
|
+
'ssr.hero' => fn () => [
|
|
41
|
+
'html' => '<x-hero>Hero</x-hero>',
|
|
42
|
+
'trustBoundary' => 'xtend.security.sanitizing-boundary.v1',
|
|
43
|
+
],
|
|
44
|
+
],
|
|
45
|
+
]);
|
|
46
|
+
|
|
47
|
+
$result = $adapter->render(['coreDocument' => $coreDocument]);
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`render(...)` handles Core Documents, Prepared Templates, and DOM Descriptors
|
|
51
|
+
directly. `.rmt` source requires an injected `compileRmtVNextSource` host
|
|
52
|
+
bridge. Without that bridge the adapter reports
|
|
53
|
+
`rmt.php_ssr.compiler_required`.
|
|
54
|
+
|
|
55
|
+
## Laravel Helpers
|
|
56
|
+
|
|
57
|
+
```php
|
|
58
|
+
return $adapter->toLaravelResponse($result);
|
|
59
|
+
|
|
60
|
+
return $adapter->toLaravelStreamedResponse([
|
|
61
|
+
'coreDocument' => $coreDocument,
|
|
62
|
+
]);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
When Laravel or Symfony response classes are available, the adapter uses them.
|
|
66
|
+
Without the framework it degrades to plain arrays, so the same file works in
|
|
67
|
+
Laravel, smaller PHP hosts, and tests.
|
|
68
|
+
|
|
69
|
+
## JSONL Streaming
|
|
70
|
+
|
|
71
|
+
`streamJsonl(...)` returns newline-delimited JSON with
|
|
72
|
+
`xtend.rmt.node-ssr-jsonl-frame.v1`. Supported frame types are `start`,
|
|
73
|
+
`component`, `html`, `hydration`, `diagnostic`, `complete`, and `error`.
|
|
74
|
+
|
|
75
|
+
Each frame carries the same fields as the Node adapter: `requestId`,
|
|
76
|
+
`sequence`, `operationId`, `variant`, `capability`, `lane`, `chunkKey`,
|
|
77
|
+
`payload`, and `diagnostics`. The XTend browser runtime does not need to know
|
|
78
|
+
whether Node or PHP/Laravel produced the stream.
|
|
79
|
+
|
|
80
|
+
## Data Sources and Trust Boundaries
|
|
81
|
+
|
|
82
|
+
Server data must come through explicit host hooks:
|
|
83
|
+
|
|
84
|
+
- `resolveDataSource`
|
|
85
|
+
- `endpointHandlers`
|
|
86
|
+
- `staticDataSources`
|
|
87
|
+
- `fixtures`
|
|
88
|
+
- `fetchAdapter`
|
|
89
|
+
- `laravelContainerResolver`
|
|
90
|
+
|
|
91
|
+
HTML fragments need a boundary such as
|
|
92
|
+
`xtend.security.sanitizing-boundary.v1` or
|
|
93
|
+
`xtend.security.streaming-boundary.v1`. Unsafe URLs, event attributes,
|
|
94
|
+
`srcdoc`, and blocked tags are diagnosed and removed by the fallback sanitizer.
|
|
95
|
+
Production hosts can inject `sanitizeHtmlOutput`.
|
|
96
|
+
|
|
97
|
+
## Docs App Integration
|
|
98
|
+
|
|
99
|
+
The Docs app now uses the adapter directly in `docs/index.php` for shell-first
|
|
100
|
+
prehydration.
|
|
101
|
+
|
|
102
|
+
- Contract: `xtend.docs.php-ssr-prehydration.v1`
|
|
103
|
+
- vNext source: `docs/xtendrmt-docs-shell-vnext.rmt`
|
|
104
|
+
- Compiler bridge: `scripts/compile_rmt_vnext_bridge.js`
|
|
105
|
+
- JSONL endpoint:
|
|
106
|
+
`index.php?xtend-docs-rmt-ssr=shell&format=jsonl&page={slug}&locale={locale}`
|
|
107
|
+
|
|
108
|
+
The host injects `compileRmtVNextSource` through the Node bridge. Parsedown
|
|
109
|
+
stays a host boundary and only fills the content slot, while the shell comes
|
|
110
|
+
from RMT primitives, hydration, and RenderMan chunks.
|
|
111
|
+
|
|
112
|
+
## Gates
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
npm run test:rmt-php-ssr-adapter
|
|
116
|
+
npm run test:docs-php-ssr-prehydration
|
|
117
|
+
node scripts/run_xtend_tests.js rmt-php-ssr-adapter --json
|
|
118
|
+
```
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# RMT Production Readiness
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.epic13.rmt-production-readiness.v1`
|
|
4
|
+
- Report: `xtend.epic13.rmt-production-readiness-report.v1`
|
|
5
|
+
- Workpackage: `WP-E13-09`
|
|
6
|
+
- Local gate: `node scripts/run_xtend_tests.js epic13-rmt-production-readiness --json`
|
|
7
|
+
- Package script: `npm run test:epic13-rmt-production-readiness`
|
|
8
|
+
- Publish boundary: `private-until-release-owner-acceptance`
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
`WP-E13-09` bundles the RMT-first app path for RC1. The package brings the existing RMT gates together into a production-close interface: shell-first app shell, native RMT routes, XTend components through adapters, Fabric/lane ingestion, lifecycle telemetry, diagnostics and XTendRMT artifact parity.
|
|
13
|
+
|
|
14
|
+
The bundle adds no new app features. It makes visible that XTend apps can be templated completely in RMT while the RMT kernel remains framework-agnostic.
|
|
15
|
+
|
|
16
|
+
## Source Gates
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm run test:rmt-compatibility
|
|
20
|
+
npm run test:rmt-first-class-app
|
|
21
|
+
npm run test:rmt-first-demo-app
|
|
22
|
+
npm run test:rmt-artifact-parity
|
|
23
|
+
npm run test:rmt-component-fabric-ingestion
|
|
24
|
+
npm run test:rmt-component-lifecycle-telemetry
|
|
25
|
+
npm run test:epic13-visual-owner-artifact
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The local WP09 gate checks these source gates as a static RC1 bundle. It requires no network access and no external browser.
|
|
29
|
+
|
|
30
|
+
## Readiness Domains
|
|
31
|
+
|
|
32
|
+
| Domain | Evidence |
|
|
33
|
+
| --- | --- |
|
|
34
|
+
| Shell-first app shell | `tests/fixtures/rmt-first-class-xtend-app.rmt`, `xtendrmt/rmt-first-demo-app.rmt` |
|
|
35
|
+
| Routing | `xtend.xrouter` adapter and RMT `routes` records |
|
|
36
|
+
| Components | `xtend.component` adapter and RMT `components` records |
|
|
37
|
+
| Fabric/Lane | `xtend.component.fabric-lane-ingestion.v2` |
|
|
38
|
+
| Lifecycle Telemetry | `xtend.component.lifecycle-telemetry.v1` |
|
|
39
|
+
| Diagnostics | `rmt.state-scheduler-diagnostics` and Fabric snapshots |
|
|
40
|
+
| Artifact Parity | `xtend.rmt.artifact-parity.v1` |
|
|
41
|
+
| Kernel Boundary | `no-rmt-kernel-import-of-xtend-types` |
|
|
42
|
+
|
|
43
|
+
## Boundary
|
|
44
|
+
|
|
45
|
+
RMT owns app records, routes, schedules, templates and metadata. XTend execution remains in host adapters:
|
|
46
|
+
|
|
47
|
+
- XTend components are not imported into the RMT kernel.
|
|
48
|
+
- XRouter is connected through `xtend.xrouter`.
|
|
49
|
+
- Fabric/lane and telemetry signals are ingested, but not modeled as hard kernel dependencies.
|
|
50
|
+
- React, Vue, Vanilla and custom hosts can use their own adapters.
|
|
51
|
+
|
|
52
|
+
## References
|
|
53
|
+
|
|
54
|
+
- [RMT-first XTend Apps](./rmt-first-xtend-apps.md)
|
|
55
|
+
- [RMT-first Demo App](./rmt-first-demo-app.md)
|
|
56
|
+
- [XTendRMT App DSL](./xtendrmt-app-dsl.md)
|
|
57
|
+
- [XTendRMT Native Authoring](./xtendrmt-native-authoring.md)
|
|
58
|
+
- [XTend-Fabric RMT Lane Mapping](./xtend-fabric-rmt-lane-mapping.md)
|
|
59
|
+
- [Visual Owner Artifacts](./visual-owner-artifacts.md)
|
|
60
|
+
|
|
61
|
+
## Handoff
|
|
62
|
+
|
|
63
|
+
`WP-E13-09` is complete. `WP-E13-10` added [Docs RMT Production Hardening](./docs-rmt-production-hardening.md) and hardened the Docs app RMT Parsedown shell for production-close extensions. `WP-E13-11` completed [Trusted DOM Boundary Browser Proof](./trusted-dom-boundary-browser-proof.md) and `xtend.epic13.trusted-dom-boundary.v1`. `WP-E13-12` completed [RC1 Migration Notes](./rc1-migration-notes.md) and `xtend.epic13.rc1-migration-notes-semver.v1`. `WP-E13-13` completed [RC1 Gate Matrix and CI Handoff](./rc1-gate-matrix-ci-handoff.md) and `xtend.epic13.rc1-gate-matrix-ci-handoff.v1`.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# RMT State Selector Runtime
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.epic18.rmt-state-selector-runtime.v1`
|
|
4
|
+
- Fixture: `tests/fixtures/rmt-state-selector-runtime.rmt`
|
|
5
|
+
- Runtime: `xtendrmt/rmt-state-selector-runtime.js`
|
|
6
|
+
- Types: `xtendrmt/rmt-state-selector-runtime.d.ts`
|
|
7
|
+
- Local gate: `node scripts/run_xtend_tests.js rmt-state-selector-runtime --json`
|
|
8
|
+
- Workpackage: `WP-E18-07`
|
|
9
|
+
|
|
10
|
+
The State Selector Runtime makes app state declaratively usable for RMT templates. It defines typed state records, evaluates selectors and derived values, dispatches reducer commands and creates a render-context model for the DOM Descriptor Renderer from `WP-E18-05`/`WP-E18-06`.
|
|
11
|
+
|
|
12
|
+
## Primitives
|
|
13
|
+
|
|
14
|
+
| Primitive | Purpose |
|
|
15
|
+
|-----------|---------|
|
|
16
|
+
| `state` | typed app states such as collection, selection, filter, UI and loading |
|
|
17
|
+
| `selector` | derived, reusable views on state, for example filtered lists |
|
|
18
|
+
| `derive` | individual derived values such as selection count or detail label |
|
|
19
|
+
| `reducer` | command-driven state changes without product-local mini-frameworks |
|
|
20
|
+
| `xstateBridge` | injected host bridge to `xstate`, without runtime import |
|
|
21
|
+
| `preservePatchPlan` | distinguishes structural rerenders from attribute/component-state sync |
|
|
22
|
+
| `stateBindings` | updates attributes, classes and properties of existing DOM nodes |
|
|
23
|
+
|
|
24
|
+
## Preserve Rules
|
|
25
|
+
|
|
26
|
+
States with `preserve: "attribute-sync"` or `preserve: "component-state"` may preserve DOM islands. Selection or UI changes can therefore sync attributes such as `aria-selected`, classes such as `is-selected` or component properties without materializing lists again.
|
|
27
|
+
|
|
28
|
+
Structural selectors, for example `selector.filtered-items`, may request a rerender instead. Filter or collection changes therefore stay correct, while pure selection changes can preserve focus, scroll and component instances.
|
|
29
|
+
|
|
30
|
+
## XState Boundary
|
|
31
|
+
|
|
32
|
+
The runtime does not import `xstate`. Host code can inject a compatible target with `set`, `setState`, `get`, `getState` or `subscribe`. The bridge mirrors state, selector and derived keys into that target, but also remains runnable with an internal snapshot.
|
|
33
|
+
|
|
34
|
+
`WP-E18-08` can build actions, effects, datasources and resource runtime on top of this.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# RMT Surface Resource Graph Runtime
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.epic18.rmt-surface-resource-graph-runtime.v1`
|
|
4
|
+
- Gate: `node scripts/run_xtend_tests.js rmt-surface-resource-graph-runtime --json`
|
|
5
|
+
- Workpackage: `WP-E18-10`
|
|
6
|
+
- Handoff: `WP-E18-11`
|
|
7
|
+
|
|
8
|
+
## Goal
|
|
9
|
+
|
|
10
|
+
The Surface Resource Graph Runtime makes dynamic app layouts modelable in RMT as a generic platform capability. Developers can create their own surface models from arbitrary records, manage bounds and focus, stack overlays through portals and clean up instance-owned resources without writing a product-local registry or shell-specific repaint logic.
|
|
11
|
+
|
|
12
|
+
The Media Manager remains only a proof of need. The runtime knows no product surface list and imports no XTend components.
|
|
13
|
+
|
|
14
|
+
## Keyed Surface Repeater
|
|
15
|
+
|
|
16
|
+
`surface` definitions can declare `source`, `repeat` and `key`. The runtime creates stable surface instances such as `surface.workspace:alpha` from this. When materializing again with the same keys, runtime state, bounds, focus order, resource status and persistence data are preserved.
|
|
17
|
+
|
|
18
|
+
Important operations:
|
|
19
|
+
|
|
20
|
+
- `materialize(recordsBySource)`: creates or reuses surface instances.
|
|
21
|
+
- `openSurface(id)`: opens an instance and acquires its resources.
|
|
22
|
+
- `minimizeSurface(id)`: minimizes without discarding DOM or resource state.
|
|
23
|
+
- `restoreSurface(id)`: restores bounds and open state.
|
|
24
|
+
- `closeSurface(id)`: closes by policy without necessarily destroying.
|
|
25
|
+
- `destroySurface(id)`: releases instance-owned resources and detaches the event owner.
|
|
26
|
+
|
|
27
|
+
## Portal Layer Stack
|
|
28
|
+
|
|
29
|
+
Portals describe layer and policy boundaries for tooltips, toasts, popovers, lightboxes, menus, dialogs and other overlay kinds. `openOverlay` places overlay instances in their portal and assigns a stable stack order through `zIndexStart` and `zStep`. `closeTopOverlay` closes the topmost dismissible overlay entry per portal or globally.
|
|
30
|
+
|
|
31
|
+
The portal policy is generic:
|
|
32
|
+
|
|
33
|
+
- `stacked` for normal app surfaces.
|
|
34
|
+
- `modal` and `nonmodal` for blocking and non-blocking overlays.
|
|
35
|
+
- `toast-region` for feedback layers.
|
|
36
|
+
- `clipping-escape` for viewport-fixed layers such as tooltips.
|
|
37
|
+
|
|
38
|
+
## Resource Ownership
|
|
39
|
+
|
|
40
|
+
Resources are injected through the WP-E18-08 Resource Manager. The surface runtime has no own adapters, but calls `acquireMany` and `releaseOwner` per surface or overlay instance.
|
|
41
|
+
|
|
42
|
+
This creates clear rules:
|
|
43
|
+
|
|
44
|
+
- Minimize preserves resources and component state.
|
|
45
|
+
- Close can optionally release resources.
|
|
46
|
+
- Destroy releases resources of the affected instance.
|
|
47
|
+
- Overlay close releases overlay resources.
|
|
48
|
+
- Destroying a surface additionally calls `eventRuntime.detachOwner(owner)`.
|
|
49
|
+
|
|
50
|
+
## Persistence
|
|
51
|
+
|
|
52
|
+
`persistSnapshot` returns a snapshot with surface state, bounds, focus, open overlays and portal metadata. An optional persistence adapter can store this snapshot. `hydrateSnapshot` later plays it back into already materialized instances.
|
|
53
|
+
|
|
54
|
+
## Boundaries
|
|
55
|
+
|
|
56
|
+
- No product surface taxonomy as framework default.
|
|
57
|
+
- No product-local registry repaint obligation.
|
|
58
|
+
- No XTend component imports in the RMT kernel.
|
|
59
|
+
- Normal UI stays with DOM descriptors and component templates; HTML string renderers remain a separate Trusted DOM boundary.
|
|
60
|
+
|
|
61
|
+
## Gates
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
node scripts/run_xtend_tests.js rmt-surface-resource-graph-runtime --json
|
|
65
|
+
node scripts/run_xtend_tests.js rmt-app-platform-authoring rmt-dom-descriptor-renderer rmt-component-template-primitives rmt-state-selector-runtime rmt-action-effect-runtime rmt-event-routing-runtime rmt-surface-resource-graph-runtime --json
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
`WP-E18-11` builds on this with Scaffold, linter, LSP and diagnostics so surface, overlay, portal and resource graphs become visible and checkable already during authoring.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# RMT Tooling Release Gates
|
|
2
|
+
|
|
3
|
+
- Status: productively prepared as of `WP-E14-15`
|
|
4
|
+
- Contract: `xtend.epic14.rmt-tooling.v1`
|
|
5
|
+
- Gate record contract: `xtend.epic14.rmt-tooling-gate.record.v1`
|
|
6
|
+
- Report contract: `xtend.epic14.rmt-tooling-report.v1`
|
|
7
|
+
- Local gate: `node scripts/run_xtend_tests.js epic14-rmt-tooling --json`
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
The RMT Tooling Gates bundle the native `.rmt` authoring path for pull requests, release candidates and AI agents. They do not check the RMT runtime, but the language layer: source model, parser, semantic graph, linter, CLI, completion, navigation, LSP, code actions, agent report, editor packaging, regression fixtures and documentation.
|
|
12
|
+
|
|
13
|
+
## Commands
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm run test:rmt-linter
|
|
17
|
+
npm run test:rmt-language-server
|
|
18
|
+
npm run test:pr:rmt
|
|
19
|
+
npm run test:pr:rmt:report
|
|
20
|
+
npm run test:rmt-tooling
|
|
21
|
+
npm run test:rmt-tooling:report
|
|
22
|
+
node scripts/run_xtend_tests.js epic14-rmt-tooling --json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`npm run test:pr:rmt` is an optional add-on gate for RMT-close pull requests. The global PR gate stays lean, but can be extended specifically for DSL, linter, LSP or agent-report changes.
|
|
26
|
+
|
|
27
|
+
`npm run test:rmt-tooling` is the release bundle gate for Epic 14. It runs without network access and uses only repo-local fixtures, docs and tooling modules.
|
|
28
|
+
|
|
29
|
+
## Release Bundle
|
|
30
|
+
|
|
31
|
+
The release bundle covers:
|
|
32
|
+
|
|
33
|
+
- `rmt-source-model`
|
|
34
|
+
- `rmt-parser`
|
|
35
|
+
- `rmt-semantic-graph`
|
|
36
|
+
- `rmt-linter-rules`
|
|
37
|
+
- `rmt-linter-cli`
|
|
38
|
+
- `rmt-completions`
|
|
39
|
+
- `rmt-navigation`
|
|
40
|
+
- `rmt-language-server`
|
|
41
|
+
- `rmt-code-actions`
|
|
42
|
+
- `rmt-agent-report`
|
|
43
|
+
- `rmt-editor-packaging`
|
|
44
|
+
- `rmt-language-regression`
|
|
45
|
+
- `rmt-tooling-docs`
|
|
46
|
+
|
|
47
|
+
## Package Surface
|
|
48
|
+
|
|
49
|
+
The package surface for RMT tooling is exported through `package.json`. Especially relevant for tooling consumers are:
|
|
50
|
+
|
|
51
|
+
- `xtend/rmt-language/source-model`
|
|
52
|
+
- `xtend/rmt-language/parser`
|
|
53
|
+
- `xtend/rmt-language/diagnostics`
|
|
54
|
+
- `xtend/rmt-language/completions`
|
|
55
|
+
- `xtend/rmt-language/code-actions`
|
|
56
|
+
- `xtend/rmt-language-server`
|
|
57
|
+
- `xtend/rmt-linter/cli`
|
|
58
|
+
- `xtend/rmt-linter/reporter`
|
|
59
|
+
- `xtend/rmt-language/snippets`
|
|
60
|
+
|
|
61
|
+
The gate `epic14-rmt-tooling` checks that this surface does not drift unnoticed and that `xtend.epic14RmtTooling` contains the active scripts, suites and handoff metadata.
|
|
62
|
+
|
|
63
|
+
## CI Handoff
|
|
64
|
+
|
|
65
|
+
The global full release line remains:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npm run test:release:full:report
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
RMT Tooling is additionally registered as its own release gate in `xtend.releaseGates`:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npm run test:rmt-tooling
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
This lets release owners, CI systems and AI agents prove the RMT language tools separately without coupling the RMT kernel to XTend runtime types.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# RMT vNext Authoring Guide
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.rmt.vnext-release-handoff.v1`
|
|
4
|
+
- Syntax Contract: `xtend.rmt.vnext.grammar.v1`
|
|
5
|
+
- Core Output: `xtend.rmt.core-format.vnext.v1`
|
|
6
|
+
|
|
7
|
+
RMT vNext is the human-friendly syntax for XTend apps. You can write a complete UI shell in RMT: state, selectors, data sources, actions, events, portals, overlays, resources, surfaces, and Fabric lanes live in a single `.rmt` source and compile deterministically into Core and kernel records.
|
|
8
|
+
|
|
9
|
+
## Basic Shape
|
|
10
|
+
|
|
11
|
+
```rmt
|
|
12
|
+
template media.manager {
|
|
13
|
+
state selectedItem type object initial null
|
|
14
|
+
|
|
15
|
+
selector visibleItems from datasource library {
|
|
16
|
+
output card-list
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
datasource library from fixture records.media-items {
|
|
20
|
+
contract "media.item.v1[]"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
action select-item {
|
|
24
|
+
input id string
|
|
25
|
+
reduce state.selectedItem = input.id
|
|
26
|
+
emit media.item.selected with action select-item
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
portal app root "#app-root" layer surface
|
|
30
|
+
|
|
31
|
+
surface library kind workspace component x-cards {
|
|
32
|
+
repeat from selector visibleItems
|
|
33
|
+
key item.id
|
|
34
|
+
portal app
|
|
35
|
+
|
|
36
|
+
lane visible weight 80 {
|
|
37
|
+
hydrate x-cards from selector visibleItems
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
on card-click target item -> action select-item {
|
|
41
|
+
payload id from item.id
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## App Shell Only in RMT
|
|
48
|
+
|
|
49
|
+
A vNext app should not split itself across RMT, App Platform JSON, and host code. RMT is the authoring place for route and shell structure, visible surfaces, overlay portals, state, selectors, actions, event payloads, resource ownership, cleanup, and Fabric lanes.
|
|
50
|
+
|
|
51
|
+
The host provides components, router, browser APIs, and external data. This boundary keeps the kernel framework-neutral while still making the app fully describable.
|
|
52
|
+
|
|
53
|
+
## XTend UI Compatibility
|
|
54
|
+
|
|
55
|
+
RMT vNext Component Primitives target the existing XTend component stack. A
|
|
56
|
+
surface such as `component x-select` lowers to a DOM descriptor and is then
|
|
57
|
+
resolved through the Component Capability Registry, not through a product-
|
|
58
|
+
specific renderer. The registry reads `components/manifest.json`,
|
|
59
|
+
`xtendComponentContract`, `xtendRmtMetadata`, public events,
|
|
60
|
+
`observedAttributes`, slots, parts, form association, accessibility profiles,
|
|
61
|
+
and performance profiles.
|
|
62
|
+
|
|
63
|
+
That gives RMT access to all 44 public manifest entries while keeping 40
|
|
64
|
+
renderable UI components on their normal Web Component lifecycle. Infrastructure
|
|
65
|
+
modules such as `x-theme` and `xstate` remain host services, not normal surface
|
|
66
|
+
elements. Product code should bind through public attributes, properties,
|
|
67
|
+
events, parts, slots, and state bridges instead of patching `shadowRoot` or
|
|
68
|
+
private component maps.
|
|
69
|
+
|
|
70
|
+
See [RMT vNext Component Primitives and XTend UI](./rmt-vnext-component-primitives.md).
|
|
71
|
+
|
|
72
|
+
## Editor DX
|
|
73
|
+
|
|
74
|
+
The Language Server understands vNext primitives directly:
|
|
75
|
+
|
|
76
|
+
- completions for primitive keywords and clause-aware suggestions
|
|
77
|
+
- hover with Core pointer and primitive information
|
|
78
|
+
- document symbols for `states`, `selectors`, `actions`, `surfaces`, `portals`, `overlays`, and `resources`
|
|
79
|
+
- code actions for safe repairs
|
|
80
|
+
- safe fix-all for `source.fixAll.rmt.vnext.primitives`
|
|
81
|
+
- manual handoffs for kernel and host boundaries
|
|
82
|
+
|
|
83
|
+
The `rmt-vnext-primitive-shell` snippet creates a small app shell with state, selector, action, portal, surface, lane, and event payload contract.
|
|
84
|
+
|
|
85
|
+
## Local Checks
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
node scripts/run_xtend_tests.js rmt-vnext-parser rmt-vnext-compiler rmt-vnext-tooling --json
|
|
89
|
+
node scripts/run_xtend_tests.js rmt-vnext-compatibility --json
|
|
90
|
+
node scripts/run_xtend_tests.js rmt-vnext-component-primitives --json
|
|
91
|
+
node scripts/run_xtend_tests.js rmt-vnext-release --json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Boundaries
|
|
95
|
+
|
|
96
|
+
- RMT vNext does not execute host runtime inside the kernel.
|
|
97
|
+
- Conditions are declarative and allow no function calls.
|
|
98
|
+
- Imports are static and stay package-root-bound.
|
|
99
|
+
- Legacy JSON remains compatible, but it is not the preferred authoring path.
|
|
100
|
+
- XTend, XRouter, DOM, and browser details belong in adapters.
|
|
101
|
+
- XTend Component integration goes through public contracts and the Component
|
|
102
|
+
Capability Registry, not direct kernel imports or Shadow-DOM monkeypatching.
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# RMT vNext Component Primitives and XTend UI
|
|
2
|
+
|
|
3
|
+
- Schema: `xtend.rmt.component-capability-registry.v1`
|
|
4
|
+
- Report schema: `xtend.rmt.component-capability-registry-report.v1`
|
|
5
|
+
- Runtime: `xtendrmt/rmt-component-capability-registry.js`
|
|
6
|
+
- Export: `@ccslabs/xtend/rmt/component-capability-registry`
|
|
7
|
+
- Local gate: `node scripts/run_xtend_tests.js rmt-vnext-component-primitives --json`
|
|
8
|
+
- Aggregate gate: `npm run test:rmt-vnext-primitives:report`
|
|
9
|
+
|
|
10
|
+
RMT vNext and XTend UI are not parallel stacks. The Component Primitives connect
|
|
11
|
+
RMT templates, kernel records, the DOM Descriptor Renderer, and the public XTend
|
|
12
|
+
Web Components through one capability registry. RMT describes shell, state,
|
|
13
|
+
surfaces, events, and lifecycle intent; XTend Components provide the concrete UI
|
|
14
|
+
building blocks, accessibility profiles, parts, slots, events, and performance
|
|
15
|
+
profiles.
|
|
16
|
+
|
|
17
|
+
## Source-to-Sea Flow
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
.rmt template
|
|
21
|
+
-> RMT compiler and Core records
|
|
22
|
+
-> Kernel records and Fabric lanes
|
|
23
|
+
-> DOM Descriptor Renderer
|
|
24
|
+
-> Component Capability Registry
|
|
25
|
+
-> XTend Component from components/manifest.json
|
|
26
|
+
-> Browser DOM and component lifecycle
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The RMT kernel does not import XTend components or XTend types. The registry
|
|
30
|
+
reads the manifest, Component Contracts, `xtendRmtMetadata`,
|
|
31
|
+
`observedAttributes`, events, slots, parts, form association, accessibility
|
|
32
|
+
profiles, and performance profiles. It normalizes those signals into one matrix
|
|
33
|
+
for all 44 public entries in `components/manifest.json`.
|
|
34
|
+
|
|
35
|
+
## Matrix
|
|
36
|
+
|
|
37
|
+
| Area | Coverage |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| Manifest entries | 44 |
|
|
40
|
+
| Renderable public UI components | 40 |
|
|
41
|
+
| Non-visual special cases | 4 |
|
|
42
|
+
| RMT metadata | 42 entries |
|
|
43
|
+
| Component Contracts | 40 entries |
|
|
44
|
+
| Form-associated components | 6 |
|
|
45
|
+
|
|
46
|
+
The non-visual special cases are `x-theme`, `xstate`, `x-utils`, and
|
|
47
|
+
`x-rmt-lifecycle-demo-build`. `x-theme` and `xstate` are infrastructure
|
|
48
|
+
modules; hosts and loaders consume them as services, but normal RMT app UI does
|
|
49
|
+
not render them as surface elements. `x-utils` remains a utility module, and
|
|
50
|
+
the lifecycle demo build remains a demo artifact.
|
|
51
|
+
|
|
52
|
+
## Component Families
|
|
53
|
+
|
|
54
|
+
| Family | Tags |
|
|
55
|
+
| --- | --- |
|
|
56
|
+
| Form | `x-calendar`, `x-checkbox`, `x-form`, `x-input`, `x-radio`, `x-select`, `x-textarea` |
|
|
57
|
+
| Navigation | `x-router`, `x-link`, `x-menu`, `x-drawer` |
|
|
58
|
+
| Overlay/Surface | `x-dialog`, `x-lightbox`, `x-modal`, `x-popover`, `x-side-panel`, `x-surface-manager`, `x-surface-window`, `x-toast`, `x-tooltip` |
|
|
59
|
+
| Media/Feedback/Layout | `x-alert`, `x-button`, `x-cards`, `x-code`, `x-icon`, `x-masonry`, `x-player`, `x-progress`, `x-spinner`, `x-status`, `x-summary`, `x-type`, `x-writer` |
|
|
60
|
+
| Theme/Layout | `x-footer`, `x-header`, `x-hero`, `x-section`, `x-tabs` |
|
|
61
|
+
| Infrastructure | `x-theme`, `xstate`, `x-utils`, `x-rmt-lifecycle-demo-build` |
|
|
62
|
+
|
|
63
|
+
The higher-risk families `form`, `navigation`, `overlay-surface`,
|
|
64
|
+
`media-feedback-layout`, and `theme-layout` stay marked for representative
|
|
65
|
+
browser smokes. The default gate verifies the broad matrix in a fake-DOM runtime
|
|
66
|
+
and keeps browser flakiness out of the fast primitive gate.
|
|
67
|
+
|
|
68
|
+
## Runtime API
|
|
69
|
+
|
|
70
|
+
```js
|
|
71
|
+
import {
|
|
72
|
+
createRmtComponentCapabilityRegistry
|
|
73
|
+
} from '@ccslabs/xtend/rmt/component-capability-registry';
|
|
74
|
+
import {
|
|
75
|
+
createRmtDomDescriptorRenderer
|
|
76
|
+
} from '@ccslabs/xtend/rmt/dom-descriptor-renderer';
|
|
77
|
+
|
|
78
|
+
const registry = createRmtComponentCapabilityRegistry({
|
|
79
|
+
manifest,
|
|
80
|
+
sourceTexts,
|
|
81
|
+
importer: async (modulePath) => import(`/components/${modulePath.replace(/^\.\//u, '')}`)
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const descriptor = registry.buildComponentDescriptor({
|
|
85
|
+
tag: 'x-select',
|
|
86
|
+
id: 'plan-select',
|
|
87
|
+
key: 'settings:plan',
|
|
88
|
+
attributes: {
|
|
89
|
+
name: 'plan',
|
|
90
|
+
value: 'pro'
|
|
91
|
+
},
|
|
92
|
+
slots: {
|
|
93
|
+
label: { text: 'Plan' }
|
|
94
|
+
},
|
|
95
|
+
events: {
|
|
96
|
+
'select-changed': 'settings.plan.changed'
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const renderer = createRmtDomDescriptorRenderer({ documentTarget: document });
|
|
101
|
+
|
|
102
|
+
renderer.renderKeyed(root, [descriptor], {
|
|
103
|
+
componentRegistry: registry,
|
|
104
|
+
dispatchEvent(event) {
|
|
105
|
+
actions.dispatch(event.action, event.payload);
|
|
106
|
+
},
|
|
107
|
+
stateBridge: {
|
|
108
|
+
read(key) {
|
|
109
|
+
return state.read(key);
|
|
110
|
+
},
|
|
111
|
+
write(key, value) {
|
|
112
|
+
state.write(key, value);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Key registry functions:
|
|
119
|
+
|
|
120
|
+
| Function | Purpose |
|
|
121
|
+
| --- | --- |
|
|
122
|
+
| `resolveComponentCapability(tag)` | Returns normalized capabilities for a manifest tag. |
|
|
123
|
+
| `listCapabilities(filter)` | Lists capabilities by family or visual kind. |
|
|
124
|
+
| `buildComponentDescriptor(input)` | Builds a DOM descriptor for an XTend component with capability markers. |
|
|
125
|
+
| `bindComponentInstance(element, binding, options)` | Connects events, form state, and the state bridge through public DOM APIs. |
|
|
126
|
+
| `ensureComponentLoaded(tag, options)` | Runs lazy import through an explicit importer. |
|
|
127
|
+
| `createMatrixReport()` | Creates the compatibility report for CI and local diagnosis. |
|
|
128
|
+
|
|
129
|
+
## Event and State Bridge
|
|
130
|
+
|
|
131
|
+
Form controls provide `value`, `checked`, `validity`, `dataset`, and file
|
|
132
|
+
metadata in the safe payload record `xtend.rmt.component-event-payload.v1`.
|
|
133
|
+
For form families, `input` and `change` are inferred when no explicit event
|
|
134
|
+
binding is present.
|
|
135
|
+
|
|
136
|
+
Navigation, overlays, feedback, and layout components are also connected through
|
|
137
|
+
public events and properties. Product code does not need to reach into
|
|
138
|
+
`shadowRoot`, read private component maps, or add component-specific renderers.
|
|
139
|
+
|
|
140
|
+
## Renderer Integration
|
|
141
|
+
|
|
142
|
+
The DOM Descriptor Renderer accepts `componentRegistry` in `render(...)` and
|
|
143
|
+
`renderKeyed(...)`. For `type: "component"`, the registry normalizes tag,
|
|
144
|
+
attributes, properties, slots, parts, and event bindings. Keyed reuse remains
|
|
145
|
+
intact, and unkeyed repeat UI remains diagnosable.
|
|
146
|
+
|
|
147
|
+
Normal RMT app UI does not use HTML sinks. `innerHTML`, `outerHTML`,
|
|
148
|
+
`insertAdjacentHTML`, `document.write`, `createContextualFragment`, unsafe URLs,
|
|
149
|
+
and inline event sinks stay blocked by the No-Manual-HTML gate and the Trusted
|
|
150
|
+
DOM Boundary.
|
|
151
|
+
|
|
152
|
+
## Architecture Rules
|
|
153
|
+
|
|
154
|
+
- Component Contracts remain the source of truth.
|
|
155
|
+
- RMT extends XTend UI through metadata and runtime bridges, not monkeypatching.
|
|
156
|
+
- Lazy import runs only through the manifest and explicit importers.
|
|
157
|
+
- The RMT kernel stays framework-neutral and imports no XTend types.
|
|
158
|
+
- Overlays, surfaces, and portals need resource ownership and cleanup.
|
|
159
|
+
- `x-player` uses the public Player Contract for play/pause, state bridge,
|
|
160
|
+
theme tokens, and parts; product code does not patch Shadow DOM.
|
|
161
|
+
- Infrastructure modules such as `x-theme` and `xstate` are consumed as
|
|
162
|
+
services, not rendered as normal surface elements.
|
|
163
|
+
|
|
164
|
+
## Gates
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
node scripts/run_xtend_tests.js rmt-vnext-component-primitives --json
|
|
168
|
+
npm run test:rmt-vnext-primitives:report
|
|
169
|
+
node scripts/run_xtend_tests.js component-ux-browser-smokes --json
|
|
170
|
+
node scripts/run_xtend_tests.js type-exports-rmt --json
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The fast primitive gate verifies the registry, matrix, renderer binding,
|
|
174
|
+
package exports, type declarations, lazy import, state roundtrip, and negative
|
|
175
|
+
boundaries against Shadow-DOM patches, manual HTML sinks, and direct component
|
|
176
|
+
imports.
|
|
177
|
+
|
|
178
|
+
## Related Docs
|
|
179
|
+
|
|
180
|
+
- [RMT vNext Authoring Guide](./rmt-vnext-authoring.md)
|
|
181
|
+
- [RMT DOM Descriptor Renderer](./rmt-dom-descriptor-renderer.md)
|
|
182
|
+
- [RMT Component Template Primitives](./rmt-component-template-primitives.md)
|
|
183
|
+
- [XTend Components](./components.md)
|
|
184
|
+
- [Component Platform](./component-platform.md)
|
|
185
|
+
- [XTend-Fabric RMT Lane Mapping](./xtend-fabric-rmt-lane-mapping.md)
|