@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,59 @@
|
|
|
1
|
+
# RMT vNext Cross Surface Events
|
|
2
|
+
|
|
3
|
+
Cross-surface events connect areas of the app shell without introducing an implicit global event bus. Every direction, target and payload schema is described explicitly and secured through governance diagnostics. Boundary: no implicit global event bus.
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
schema: "xtend.rmt.vnext-cross-surface-event-protocol.v1"
|
|
9
|
+
reportSchema: "xtend.rmt.vnext-cross-surface-event-report.v1"
|
|
10
|
+
governanceSchema: "xtend.rmt.vnext-event-governance-policy.v1"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
An event must define:
|
|
14
|
+
|
|
15
|
+
- `event` as a versioned name, for example `checkout.cart.updated.v1`.
|
|
16
|
+
- `owner` as the team responsible for event and version maintenance.
|
|
17
|
+
- `payload.schema` as stable payload ID.
|
|
18
|
+
- `direction` as `outbound` or `inbound`.
|
|
19
|
+
- `scope` as lane, surface or shell target binding.
|
|
20
|
+
- `delivery` with TTL, correlation and idempotency when required.
|
|
21
|
+
|
|
22
|
+
## Direction
|
|
23
|
+
|
|
24
|
+
`emits` describes outbound events from a surface. `consumes` describes inbound events. The shell may forward these bindings, but not interpret them freely. This keeps it visible whether a user action affects several areas of the shell.
|
|
25
|
+
|
|
26
|
+
## Scope
|
|
27
|
+
|
|
28
|
+
Events are constrained to lanes and shell targets:
|
|
29
|
+
|
|
30
|
+
```rmt
|
|
31
|
+
emits checkout.cart.updated.v1 {
|
|
32
|
+
owner: "checkout-platform"
|
|
33
|
+
payload: "xtend.schemas.cartUpdated.v1"
|
|
34
|
+
direction: outbound
|
|
35
|
+
scope: lane critical -> shell.slot:sidebar.cart
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
An event without clear scope is blocked or diagnosed in the E16 gate. This prevents the same implicit coupling pressure that makes micro-frontend systems hard to maintain without discipline.
|
|
40
|
+
|
|
41
|
+
## Governance
|
|
42
|
+
|
|
43
|
+
The governance model checks:
|
|
44
|
+
|
|
45
|
+
- event owner and payload owner.
|
|
46
|
+
- cross-team events.
|
|
47
|
+
- delivery mode, TTL, `correlationId` and `idempotencyKey`.
|
|
48
|
+
- sensitivity and review obligations.
|
|
49
|
+
- degradation behavior for events from a blocked or degraded surface.
|
|
50
|
+
|
|
51
|
+
## Gates
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
node scripts/run_xtend_tests.js rmt-vnext-cross-surface-events --json
|
|
55
|
+
node scripts/run_xtend_tests.js rmt-vnext-event-governance --json
|
|
56
|
+
node scripts/run_xtend_tests.js rmt-vnext-enterprise-release --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The enterprise demo covers `checkout.cart.updated.v1` and `user.session.changed.v1` as typed, directed cross-surface events.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# RMT vNext Enterprise MFE Handoff
|
|
2
|
+
|
|
3
|
+
Epic 16 closes RMT vNext for enterprise MFE authoring with remote surfaces, surface discoverability, cross-surface events, security policies, versioning and graceful degradation.
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
schema: "xtend.rmt.vnext-enterprise-release-handoff.v1"
|
|
9
|
+
reportSchema: "xtend.rmt.vnext-enterprise-release-handoff-report.v1"
|
|
10
|
+
gateMatrixSchema: "xtend.rmt.vnext-enterprise-release-gate-matrix.v1"
|
|
11
|
+
targetReadiness: "rmt-vnext-enterprise-mfe-ready"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Release Assets
|
|
15
|
+
|
|
16
|
+
- Authoring guide: `docs/rmt-vnext-remote-surfaces.md`
|
|
17
|
+
- Registry reference: `docs/rmt-vnext-surface-registry-enterprise.md`
|
|
18
|
+
- Event protocol reference: `docs/rmt-vnext-cross-surface-events.md`
|
|
19
|
+
- Operational handoff: `docs/rmt-vnext-enterprise-mfe-handoff.md`
|
|
20
|
+
- Demo source: `xtendrmt/rmt-vnext-enterprise-mfe-demo.rmt`
|
|
21
|
+
- Core output: `xtendrmt/rmt-vnext-enterprise-mfe-demo.core.json`
|
|
22
|
+
- Browser smoke: `tests/browser/fixtures/rmt-vnext-enterprise-mfe-smoke.html`
|
|
23
|
+
- Fixture matrix: `tests/rmt-language/fixtures/vnext-enterprise-mfe-fixture-matrix.json`
|
|
24
|
+
|
|
25
|
+
## Release Gate Matrix
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
node scripts/run_xtend_tests.js rmt-vnext-remote-manifest --json
|
|
29
|
+
node scripts/run_xtend_tests.js rmt-vnext-enterprise-registry --json
|
|
30
|
+
node scripts/run_xtend_tests.js rmt-vnext-degradation --json
|
|
31
|
+
node scripts/run_xtend_tests.js rmt-vnext-remote-security --json
|
|
32
|
+
node scripts/run_xtend_tests.js rmt-vnext-cross-surface-events --json
|
|
33
|
+
node scripts/run_xtend_tests.js rmt-vnext-event-governance --json
|
|
34
|
+
node scripts/run_xtend_tests.js rmt-vnext-remote-compiler --json
|
|
35
|
+
node scripts/run_xtend_tests.js rmt-vnext-remote-tooling --json
|
|
36
|
+
node scripts/run_xtend_tests.js rmt-vnext-remote-compatibility --json
|
|
37
|
+
node scripts/run_xtend_tests.js rmt-vnext-enterprise-fixtures --json
|
|
38
|
+
node scripts/run_xtend_tests.js rmt-vnext-enterprise-release --json
|
|
39
|
+
node scripts/run_xtend_tests.js references --json
|
|
40
|
+
node scripts/run_xtend_tests.js browser --json
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Operational Notes
|
|
44
|
+
|
|
45
|
+
- Remote surfaces remain contract artifacts. A productive runtime loader is follow-up work in the host or runtime adapter path.
|
|
46
|
+
- `surface.registry` makes ownership, active versions and shell bindings visible, but replaces no SurfaceManager.
|
|
47
|
+
- Cross-surface events need typed payloads, clear owners and explicit direction.
|
|
48
|
+
- Graceful degradation is mandatory. Systems without fallback or blocking model are not considered enterprise-ready.
|
|
49
|
+
- Migration from legacy surface facts remains `report-only` by default; preview is opt-in and described through `xtend.rmt.vnext-remote-surface-migration.v1`.
|
|
50
|
+
|
|
51
|
+
## Accepted Residuals
|
|
52
|
+
|
|
53
|
+
- No productive remote runtime loader in the RMT kernel.
|
|
54
|
+
- No real network integration in local language-layer gates.
|
|
55
|
+
- No implicit global event-bus semantics.
|
|
56
|
+
- No public runtime claim for hosts that do not implement the contract yet.
|
|
57
|
+
|
|
58
|
+
The local closure gate is:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
node scripts/run_xtend_tests.js rmt-vnext-enterprise-release --json
|
|
62
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# RMT vNext Fabric Bridge Evidence
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.rmt.vnext.fabric-bridge-evidence.v1`
|
|
4
|
+
- Workpackage: `RMT-VNEXT-PRIM-05`
|
|
5
|
+
- Status: `completed`
|
|
6
|
+
- Source: Media Manager downstream transfer, `2026-05-19`
|
|
7
|
+
|
|
8
|
+
## Goal
|
|
9
|
+
|
|
10
|
+
`RMT-VNEXT-PRIM-05` proves that vNext-authored primitives reach the Fabric runtime space without pulling Fabric or XTend host imports into the RMT kernel.
|
|
11
|
+
|
|
12
|
+
The gate is intentionally available as its own slice beside the source-to-sea gate. Source-to-sea checks the full object lifecycle into the browser; this gate checks the Fabric bridge itself:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
vNext source
|
|
16
|
+
-> PRIM-04 kernel schedule/fiber
|
|
17
|
+
-> Fabric/RMT lane mapping
|
|
18
|
+
-> xtend.fabric.fiber.v1
|
|
19
|
+
-> xtend.fabric.telemetry-snapshot.v1
|
|
20
|
+
-> host adapter telemetry
|
|
21
|
+
-> route/component fiber instrumentation
|
|
22
|
+
-> browser-visible Fabric markers
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Evidence
|
|
26
|
+
|
|
27
|
+
The evidence is created by `createRmtVNextFabricBridgeEvidence(...)` and embedded into the fullstack report through `createRmtVNextSourceToSeaEvidence(...)`.
|
|
28
|
+
|
|
29
|
+
The PRIM-05 contract includes:
|
|
30
|
+
|
|
31
|
+
- `xtend.fabric.rmt-lane-mapping.v1` for translating RMT lanes into Fabric schedules;
|
|
32
|
+
- a primary `xtend.fabric.fiber.v1` from the PRIM-04 kernel fiber;
|
|
33
|
+
- a lane matrix for `user-blocking`, `transition`, `idle`, `background` and `diagnostics`;
|
|
34
|
+
- `xtend.component.lifecycle-telemetry.v1` from the XTend component host adapter;
|
|
35
|
+
- `component.mount`, `component.hydrate`, `route.navigate` and `route.render` from the productive Fabric fiber instrumentations;
|
|
36
|
+
- an `xtend.fabric.telemetry-snapshot.v1` that contains all expected schedule refs;
|
|
37
|
+
- browser markers for Fabric lane, Fabric fiber, Fabric schedule and host-adapter telemetry.
|
|
38
|
+
|
|
39
|
+
## Gate Rules
|
|
40
|
+
|
|
41
|
+
The gate fails when:
|
|
42
|
+
|
|
43
|
+
- the Fabric/RMT lane resolution provides no mapping;
|
|
44
|
+
- the primary Fabric fiber is not completed;
|
|
45
|
+
- kernel schedule, kernel fiber and source pointer are not preserved in fiber metadata;
|
|
46
|
+
- one of the matrix lanes is missing or writes no telemetry schedule;
|
|
47
|
+
- host-adapter telemetry does not appear in the Fabric snapshot;
|
|
48
|
+
- route or component fiber does not come from the productive instrumentations;
|
|
49
|
+
- browser markers for lane, fiber, schedule or host telemetry are missing;
|
|
50
|
+
- the RMT kernel contains host or Fabric imports.
|
|
51
|
+
|
|
52
|
+
## Local Gates
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
node --check tools/rmt-language/vnext-source-to-sea.js
|
|
56
|
+
node --check tests/rmt-language/rmt_vnext_fabric_bridge_suite.js
|
|
57
|
+
node scripts/run_xtend_tests.js rmt-vnext-fabric-bridge --json
|
|
58
|
+
node scripts/run_xtend_tests.js rmt-vnext-source-to-sea --json
|
|
59
|
+
npm run test:rmt-vnext-primitives:report
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Handoff
|
|
63
|
+
|
|
64
|
+
`RMT-VNEXT-PRIM-05` is complete once this gate is green. `RMT-VNEXT-PRIM-06` keeps source-to-sea as optional browser evidence: browser execution can run locally or through manual CI dispatch and write the browser execution evidence as a release artifact.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# RMT vNext Migration Notes
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.rmt.vnext-release-handoff.v1`
|
|
4
|
+
- Compatibility contract: `xtend.rmt.vnext-compatibility-matrix.v1`
|
|
5
|
+
- Migration report: `xtend.rmt.vnext-migration-report.v1`
|
|
6
|
+
- Gate: `node scripts/run_xtend_tests.js rmt-vnext-compatibility --json`
|
|
7
|
+
|
|
8
|
+
RMT vNext is additive. Existing JSON-close `.rmt` and `.rmt.json` documents remain parseable and normalizable. New authoring files should use the vNext syntax and compile to `xtend.rmt.core-format.vnext.v1`.
|
|
9
|
+
|
|
10
|
+
## Migration Mode
|
|
11
|
+
|
|
12
|
+
The default mode is `report-only`. It creates a migration report, checks the legacy roundtrip and shows boundary warnings, but does not automatically rewrite a file.
|
|
13
|
+
|
|
14
|
+
`preview` is opt-in and additionally creates a vNext authoring draft.
|
|
15
|
+
|
|
16
|
+
```js
|
|
17
|
+
const {
|
|
18
|
+
createMigrationReport
|
|
19
|
+
} = require('./tools/rmt-language/vnext-compatibility');
|
|
20
|
+
|
|
21
|
+
const report = createMigrationReport({
|
|
22
|
+
text: source,
|
|
23
|
+
filePath: 'app.rmt'
|
|
24
|
+
}, {
|
|
25
|
+
migrationMode: 'preview'
|
|
26
|
+
});
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Compatible Warnings
|
|
30
|
+
|
|
31
|
+
These warnings do not block migration:
|
|
32
|
+
|
|
33
|
+
- `rmt.document.extension.fallback-used`
|
|
34
|
+
- `rmt.vnext.migration.opt_in_required`
|
|
35
|
+
- `rmt.vnext.migration.lossy_domain`
|
|
36
|
+
|
|
37
|
+
`lossy_domain` means: the legacy domain is semantically compatible, but cannot automatically be translated into source-stable vNext authoring. Examples include adapter contracts, complex templates or router metadata.
|
|
38
|
+
|
|
39
|
+
## Hard Errors
|
|
40
|
+
|
|
41
|
+
These cases block the affected entry:
|
|
42
|
+
|
|
43
|
+
- Legacy JSON cannot be parsed.
|
|
44
|
+
- Legacy JSON cannot be normalized.
|
|
45
|
+
- vNext source does not compile.
|
|
46
|
+
- The semantic legacy roundtrip is not stable.
|
|
47
|
+
|
|
48
|
+
## Recommended Migration
|
|
49
|
+
|
|
50
|
+
1. Run `rmt-vnext-compatibility` against existing fixtures.
|
|
51
|
+
2. Read reports with `migrationMode: "report-only"` and triage boundary warnings.
|
|
52
|
+
3. Create `preview` for individual files.
|
|
53
|
+
4. Manually review the preview draft and bring it to vNext authoring conventions.
|
|
54
|
+
5. Run parser, compiler, regression and release gate.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
node scripts/run_xtend_tests.js rmt-vnext-compatibility rmt-vnext-regression rmt-vnext-release --json
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Handoff
|
|
61
|
+
|
|
62
|
+
This epic delivers syntax, compiler, tooling, compatibility, regression and release handoff. Productive runtime adapters for vNext Core and a formatter/writer belong in follow-up epics.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# RMT vNext Primitive Authoring Tooling
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.rmt.vnext.primitive-authoring-tooling.v1`
|
|
4
|
+
- Workpackage: `RMT-VNEXT-PRIM-07`
|
|
5
|
+
- Status: `completed`
|
|
6
|
+
- Source: Media Manager downstream transfer, `2026-05-19`
|
|
7
|
+
|
|
8
|
+
## Goal
|
|
9
|
+
|
|
10
|
+
`RMT-VNEXT-PRIM-07` makes the new primitive syntax visible in the developer experience. App authors should not have to search legacy JSON for state, selectors, actions, events, surfaces, portals, overlays and resources: completions, hover, document symbols and snippets lead directly through RMT vNext.
|
|
11
|
+
|
|
12
|
+
## Tooling Surface
|
|
13
|
+
|
|
14
|
+
The first PRIM-07 slice extends `tools/rmt-language/vnext-tooling.js`. The module now also indexes primitive domains from PRIM-04:
|
|
15
|
+
|
|
16
|
+
- `states`
|
|
17
|
+
- `selectors`
|
|
18
|
+
- `actions`
|
|
19
|
+
- `effects`
|
|
20
|
+
- `portals`
|
|
21
|
+
- `overlays`
|
|
22
|
+
- `resources`
|
|
23
|
+
|
|
24
|
+
Existing domains such as `surfaces`, `events` and `dataSources` remain available and are enriched for primitive records.
|
|
25
|
+
|
|
26
|
+
## Completions
|
|
27
|
+
|
|
28
|
+
New completion contexts:
|
|
29
|
+
|
|
30
|
+
| Context | Purpose |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| `vnext-primitive-keywords` | top-level primitive keywords such as `state`, `selector`, `action`, `surface`, `resource` |
|
|
33
|
+
| `vnext-primitive-state-clauses` | `type`, `preserve`, `initial` |
|
|
34
|
+
| `vnext-primitive-selector-clauses` | `from state`, `where`, `find`, `sort by`, `output` |
|
|
35
|
+
| `vnext-primitive-action-clauses` | `input`, `reduce`, `effect fetch datasource`, `on success`, `on error`, `emit` |
|
|
36
|
+
| `vnext-primitive-surface-clauses` | `source selector`, `repeat from selector`, `key`, `portal`, `bounds`, `lane visible`, event and lifecycle clauses |
|
|
37
|
+
| `vnext-primitive-resource-kinds` | `object-url`, `stream`, `observer`, `timer`, `lazy-import` |
|
|
38
|
+
| `vnext-primitive-overlay-kinds` | `tooltip`, `toast`, `popover`, `lightbox`, `menu`, `dialog` |
|
|
39
|
+
|
|
40
|
+
When a pointer is inside a primitive domain, the tooling automatically chooses the matching context.
|
|
41
|
+
|
|
42
|
+
### Cursor-Near Completion
|
|
43
|
+
|
|
44
|
+
The second PRIM-07 slice makes completion usable without an explicit `xtend.context`. `getRmtVNextToolingCompletions(...)` now accepts an LSP position, resolves the source-map pointer from it when possible, and evaluates the current line plus the partial word before the cursor.
|
|
45
|
+
|
|
46
|
+
Covered authoring cases:
|
|
47
|
+
|
|
48
|
+
- `state ... {` directly returns state clauses such as `initial`.
|
|
49
|
+
- `resource ... kind ` returns resource kinds such as `lazy-import`.
|
|
50
|
+
- Partial words in action blocks, for example `red`, prioritize action clauses such as `reduce`.
|
|
51
|
+
|
|
52
|
+
The language server forwards `textDocument/completion.position` to the vNext tooling. This gives editors primitive completions even when they do not set XTend-specific additional parameters.
|
|
53
|
+
|
|
54
|
+
## Hover
|
|
55
|
+
|
|
56
|
+
Hover uses the PRIM-04 Core records and source maps. Examples:
|
|
57
|
+
|
|
58
|
+
- `State: media.records`
|
|
59
|
+
- `Action: media.select`
|
|
60
|
+
- `Resource: lightbox.import`
|
|
61
|
+
|
|
62
|
+
The hover output still contains Core pointers so editor, compiler and runtime evidence can trace the same primitive ID.
|
|
63
|
+
|
|
64
|
+
## Document Symbols
|
|
65
|
+
|
|
66
|
+
Document symbols now contain primitive namespaces:
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
states
|
|
70
|
+
selectors
|
|
71
|
+
actions
|
|
72
|
+
portals
|
|
73
|
+
overlays
|
|
74
|
+
resources
|
|
75
|
+
surfaces
|
|
76
|
+
events
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This lets an editor navigate a granular app shell from the outline without opening legacy records.
|
|
80
|
+
|
|
81
|
+
## Code Actions
|
|
82
|
+
|
|
83
|
+
The third PRIM-07 slice provides safe quick fixes for primitive diagnostics from `getRmtVNextToolingCodeActions(...)` and through `textDocument/codeAction` in the language server.
|
|
84
|
+
|
|
85
|
+
Supported first repairs:
|
|
86
|
+
|
|
87
|
+
- `rmt.vnext.primitive.owner-missing`: adds `owner surface.<id>` to a resource declaration when a surface exists in the document.
|
|
88
|
+
- `rmt.vnext.primitive.unkeyed-repeat`: adds `key instance.id` after a `repeat from selector` clause.
|
|
89
|
+
- `rmt.vnext.primitive.payload-contract-missing`: adds a payload contract for event bindings or `emit` statements.
|
|
90
|
+
|
|
91
|
+
The next slice extends these repairs for the most common authoring gaps:
|
|
92
|
+
|
|
93
|
+
- `rmt.vnext.primitive.initial-missing`: adds a safe initial value or a small `initial {}` block.
|
|
94
|
+
- `rmt.vnext.primitive.resource-kind-missing`: adds `kind object-url` as a conservative resource default.
|
|
95
|
+
- `rmt.vnext.primitive.unknown-reference` for selector references: creates a source-preserving selector stub from the first available state.
|
|
96
|
+
- `rmt.vnext.primitive.unknown-reference` for portal references: creates a portal stub with stable `root` and `layer surface`.
|
|
97
|
+
|
|
98
|
+
The action-authoring slice also adds:
|
|
99
|
+
|
|
100
|
+
- `rmt.vnext.primitive.action-reducer-missing`: adds a `reduce state.<id> = input.<name>` target before the action end.
|
|
101
|
+
- `rmt.vnext.primitive.effect-source-missing`: adds `datasource <id>` to an `effect fetch`.
|
|
102
|
+
- `rmt.vnext.primitive.kernel-boundary`: deliberately creates no text edit, but a command-action handoff so Kernel/Fabric imports are moved into a host adapter.
|
|
103
|
+
|
|
104
|
+
The actions are intentionally source-preserving text edits. They fix the obvious authoring gap and leave further semantic problems visible instead of synthetically rewriting whole primitive blocks.
|
|
105
|
+
|
|
106
|
+
### Code-Action Previews and Fix-All
|
|
107
|
+
|
|
108
|
+
The next PRIM-07 slice makes the quick fixes more editor-friendly:
|
|
109
|
+
|
|
110
|
+
- Every code action carries an `xtend.rmt.vnext.primitive-code-action-preview.v1` preview with affected URIs, edit count, first changed source-line excerpt and before/after lines.
|
|
111
|
+
- Safe text-edit actions are additionally grouped into `source.fixAll.rmt.vnext.primitives`.
|
|
112
|
+
- Fix-All remains limited to actions with `safe: true` and `edit`.
|
|
113
|
+
Manual command handoffs such as `kernel-boundary` are not applied automatically.
|
|
114
|
+
- The language server forwards the preview in the `CodeAction.data.preview` field so editors can show a repair before applying the WorkspaceEdit.
|
|
115
|
+
|
|
116
|
+
### Command Handoff
|
|
117
|
+
|
|
118
|
+
Manual boundary cases now also get a stable editor experience:
|
|
119
|
+
|
|
120
|
+
- The language server reports `executeCommandProvider.commands` with `xtend.rmt.vnext.extractKernelImport`.
|
|
121
|
+
- `workspace/executeCommand` creates an `xtend.rmt.vnext.primitive-command-handoff.v1` result for this command.
|
|
122
|
+
- The result remains `safe: false`, `edit: null` and `status: "manual_handoff"` because Kernel/Fabric imports must not be written automatically into RMT vNext source.
|
|
123
|
+
- The handoff names the boundary `no-kernel-fabric-imports-in-vnext-source` and lists the target location `xtend-rmt-host-adapter` so editors can show a clear manual apply path.
|
|
124
|
+
|
|
125
|
+
### VS Code Bridge Apply Experience
|
|
126
|
+
|
|
127
|
+
The VS Code bridge now offers the first visible authoring experience for the three apply paths:
|
|
128
|
+
|
|
129
|
+
- `XTendRMT: Show vNext Primitive Apply Experience` renders an `xtend.rmt.editor.vscode-primitive-authoring-experience.v1` report in the Output Channel.
|
|
130
|
+
- `XTendRMT: Show vNext Primitive Code Action Preview` shows the preview excerpt of a single code action.
|
|
131
|
+
- `XTendRMT: Show vNext Primitive Command Handoff` shows manual boundary handoffs without WorkspaceEdit.
|
|
132
|
+
|
|
133
|
+
The bridge deliberately stays thin: it classifies actions already provided by the language server into `workspace-edit`, `fix-all` and `manual-command`, and makes these paths visible. The LSP remains the source of truth for diagnostics, preview and command handoff.
|
|
134
|
+
|
|
135
|
+
### Active VS Code Document Integration
|
|
136
|
+
|
|
137
|
+
The final PRIM-07 slice connects the bridge to the active `.rmt` document:
|
|
138
|
+
|
|
139
|
+
- `createActiveDocumentPrimitiveAuthoringExperience(...)` reads the active document, starts the local RMT Language Server in-process and calls `textDocument/codeAction` against real LSP diagnostics.
|
|
140
|
+
- `XTendRMT: Show vNext Primitive Apply Experience` can build a QuickPick selection for preview, Fix-All and manual handoffs directly from the active document when no report is passed in.
|
|
141
|
+
- `applyPrimitiveAuthoringWorkspaceEdit(...)` applies only safe WorkspaceEdits. `kernel-boundary` actions remain blocked because they carry `edit: null` and must be moved into a host adapter.
|
|
142
|
+
- `XTendRMT: Apply Safe vNext Primitive Fix-All` applies only `source.fixAll.rmt.vnext.primitives`. If no safe Fix-All is available, the bridge renders the current apply report instead of blindly applying individual edits.
|
|
143
|
+
|
|
144
|
+
PRIM-07 is therefore no longer only an LSP/docs package: the editor bridge can select, preview and safely apply vNext primitive repairs from real source context, while boundary handoffs remain visible and manual.
|
|
145
|
+
|
|
146
|
+
## Snippet
|
|
147
|
+
|
|
148
|
+
New snippet:
|
|
149
|
+
|
|
150
|
+
```text
|
|
151
|
+
RMT vNext Primitive Shell
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Prefix:
|
|
155
|
+
|
|
156
|
+
```text
|
|
157
|
+
rmt-vnext-primitive-shell
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The snippet creates a small app shell with state, selector, action, portal, surface, visible lane and event payload contract.
|
|
161
|
+
|
|
162
|
+
## Local Gates
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
node --check tools/rmt-language/vnext-tooling.js
|
|
166
|
+
node --check tests/rmt-language/rmt_vnext_tooling_suite.js
|
|
167
|
+
node -e "const suite=require('./tests/rmt-language/rmt_vnext_tooling_suite'); const result=suite.runRmtVNextToolingSuite({rootDir:process.cwd()}); process.exit(result.ok ? 0 : 1);"
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
The global runner executes `rmt-vnext-tooling` and `rmt-editor-packaging` as release gates. The VS Code bridge is checked through `node scripts/run_xtend_tests.js rmt-editor-packaging --json` against active-document CodeActions, Safe Fix-All and blocked Kernel Boundary handoffs.
|
|
171
|
+
|
|
172
|
+
## Next Handoff
|
|
173
|
+
|
|
174
|
+
`RMT-VNEXT-PRIM-07` is complete. Further editor work can build on this bridge, for example real LanguageClient packaging or UI-specific preview panels; the vNext primitive authoring path itself is release-gated.
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# RMT vNext Primitive Grammar Design
|
|
2
|
+
|
|
3
|
+
- Contract: `xtend.rmt.vnext-primitive-grammar-design.v1`
|
|
4
|
+
- Workpackage: `RMT-VNEXT-PRIM-01`
|
|
5
|
+
- Status: `completed`
|
|
6
|
+
- Parent backlog: [RMT vNext Primitive Compiler Backlog](./rmt-vnext-primitives-compiler-backlog.md)
|
|
7
|
+
- Design fixture: `tests/rmt-language/fixtures/vnext-primitives-grammar-design.rmt`
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
This slice defines the vNext syntax used to author App Platform primitives directly in RMT. It is deliberately a grammar-design contract. Parser/AST implementation is complete in `RMT-VNEXT-PRIM-02`; the first semantic-graph layer started in `RMT-VNEXT-PRIM-03`. Compiler lowering follows in `RMT-VNEXT-PRIM-04`.
|
|
12
|
+
|
|
13
|
+
The syntax must move app authors out of legacy/JSON authoring. A normal app-shell developer should be able to declare state, selectors, actions, events, data sources, surfaces, overlays, portals and resources in a readable RMT vNext file.
|
|
14
|
+
|
|
15
|
+
## Design Principles
|
|
16
|
+
|
|
17
|
+
- **vNext first:** The human-friendly DSL is the primary authoring surface. JSON remains compiler output or migration input.
|
|
18
|
+
- **Kernel-neutral:** Syntax can reference XTend components, but the RMT kernel imports no XTend, Fabric or browser modules.
|
|
19
|
+
- **App graph before runtime:** References, ownership, payload contracts and trust boundaries must be verifiable from the source graph.
|
|
20
|
+
- **Source-map capable:** Every primitive declaration needs a stable source range and a primitive ID.
|
|
21
|
+
- **Composable:** App shell, UI templates, state, events and resources may be declared separately, but must connect into one app graph.
|
|
22
|
+
- **Legacy in the background:** Classic Core/scaffold artifacts may still be targets, but developers should not have to edit them.
|
|
23
|
+
|
|
24
|
+
## Top-Level Grammar
|
|
25
|
+
|
|
26
|
+
A vNext file can still use `import`, `template`, `surface` and `remote`. Primitive declarations are new. They are preferred inside a `template` block, but may also be authored at top level for reusable libraries.
|
|
27
|
+
|
|
28
|
+
```rmt
|
|
29
|
+
template media.manager {
|
|
30
|
+
state media.records type MediaRecord[] initial []
|
|
31
|
+
|
|
32
|
+
selector media.filtered from state media.records {
|
|
33
|
+
where record.kind == state.media.filters.kind || state.media.filters.kind == "all"
|
|
34
|
+
sort by record.name asc
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
datasource media.index from endpoint "/api/media?pageSize=200" {
|
|
38
|
+
method GET
|
|
39
|
+
contract MediaIndex
|
|
40
|
+
result records
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
action media.select {
|
|
44
|
+
input mediaId string
|
|
45
|
+
reduce state.media.selection.activeId = input.mediaId
|
|
46
|
+
emit media.selected with mediaId input.mediaId
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
portal surface.root root "#media-manager-root" layer surface
|
|
50
|
+
overlay feedback.toast kind toast portal surface.root
|
|
51
|
+
resource player.stream kind stream owner surface.player source state.media.selection.activeId
|
|
52
|
+
|
|
53
|
+
surface media.explorer kind window component x-surface-window {
|
|
54
|
+
source selector media.filtered
|
|
55
|
+
key record.id
|
|
56
|
+
portal surface.root
|
|
57
|
+
|
|
58
|
+
lane visible weight 80 {
|
|
59
|
+
hydrate explorer-list from selector media.filtered
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
on click "[data-media-id]" -> action media.select {
|
|
63
|
+
payload mediaId from target.dataset.mediaId
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Primitive Forms
|
|
70
|
+
|
|
71
|
+
### State
|
|
72
|
+
|
|
73
|
+
```rmt
|
|
74
|
+
state media.filters type object preserve {
|
|
75
|
+
initial {
|
|
76
|
+
query ""
|
|
77
|
+
kind "all"
|
|
78
|
+
collection "all"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Lowering target:
|
|
84
|
+
|
|
85
|
+
- `core.state[]`
|
|
86
|
+
- source-map entry with `primitiveType: "state"`
|
|
87
|
+
- optional XState bridge hint for host adapters
|
|
88
|
+
|
|
89
|
+
### Selector
|
|
90
|
+
|
|
91
|
+
```rmt
|
|
92
|
+
selector media.filtered from state media.records {
|
|
93
|
+
where record.kind == state.media.filters.kind || state.media.filters.kind == "all"
|
|
94
|
+
where contains(record.name, state.media.filters.query)
|
|
95
|
+
sort by record.name asc
|
|
96
|
+
output MediaRecord[]
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Restriction for PRIM-01: functions such as `contains()` are allowed as declarative selector operators, but not as arbitrary JS calls. PRIM-02 must model them as dedicated AST nodes.
|
|
101
|
+
|
|
102
|
+
Lowering target:
|
|
103
|
+
|
|
104
|
+
- `core.selectors[]`
|
|
105
|
+
- references to `core.state[]`
|
|
106
|
+
- diagnostic for unknown state or record paths
|
|
107
|
+
|
|
108
|
+
### DataSource
|
|
109
|
+
|
|
110
|
+
```rmt
|
|
111
|
+
datasource media.index from endpoint "/api/media?pageSize=200" {
|
|
112
|
+
method GET
|
|
113
|
+
contract MediaIndex
|
|
114
|
+
result records
|
|
115
|
+
fallback fixture media.fixture
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Lowering target:
|
|
120
|
+
|
|
121
|
+
- `core.dataSources[]`
|
|
122
|
+
- App Platform report domain `dataSources`
|
|
123
|
+
- optional SSR/fixture fallback
|
|
124
|
+
|
|
125
|
+
### Action and Effect
|
|
126
|
+
|
|
127
|
+
```rmt
|
|
128
|
+
action media.reindex {
|
|
129
|
+
status state.actionStatus.reindex
|
|
130
|
+
effect fetch datasource media.reindex
|
|
131
|
+
on success -> reduce state.media.records = result.records
|
|
132
|
+
on success -> emit media.index.loaded with count result.records.length
|
|
133
|
+
on error -> overlay feedback.toast message error.message tone "danger"
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Lowering target:
|
|
138
|
+
|
|
139
|
+
- `core.actions[]`
|
|
140
|
+
- `core.effects[]` or action-scoped `effects`
|
|
141
|
+
- event/feedback result routing
|
|
142
|
+
- resource ownership for async handles
|
|
143
|
+
|
|
144
|
+
### Event Binding
|
|
145
|
+
|
|
146
|
+
```rmt
|
|
147
|
+
on click "[data-command='scan']" -> action media.reindex {
|
|
148
|
+
preventDefault true
|
|
149
|
+
payload source from target.dataset.command
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
on xplayer-play target player.surface -> action media.playback.started {
|
|
153
|
+
payload mediaId from detail.mediaId
|
|
154
|
+
payload surfaceId from surface.id
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Lowering target:
|
|
159
|
+
|
|
160
|
+
- `core.events[]`
|
|
161
|
+
- payload contract
|
|
162
|
+
- DOM/custom event routing metadata
|
|
163
|
+
- source pointer for every payload mapping
|
|
164
|
+
|
|
165
|
+
### Surface
|
|
166
|
+
|
|
167
|
+
```rmt
|
|
168
|
+
surface media.player kind window component x-surface-window {
|
|
169
|
+
repeat from selector player.instances
|
|
170
|
+
key instance.surfaceId
|
|
171
|
+
portal surface.root
|
|
172
|
+
bounds x 920 y 96 width 760 height 500
|
|
173
|
+
preserve on minimize
|
|
174
|
+
destroy releases resource player.stream
|
|
175
|
+
|
|
176
|
+
lane visible weight 90 {
|
|
177
|
+
hydrate player-view from selector media.activeRecord
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Lowering target:
|
|
183
|
+
|
|
184
|
+
- `core.surfaces[]`
|
|
185
|
+
- `core.lanes[]`
|
|
186
|
+
- `core.operations[]`
|
|
187
|
+
- Surface Graph Runtime records
|
|
188
|
+
- keyed repeater diagnostics
|
|
189
|
+
|
|
190
|
+
### Portal and Overlay
|
|
191
|
+
|
|
192
|
+
```rmt
|
|
193
|
+
portal overlay.root root "body" layer overlay z 1000 {
|
|
194
|
+
focus policy restore
|
|
195
|
+
pointer policy passthrough
|
|
196
|
+
scroll policy lock-when-modal
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
overlay media.lightbox kind lightbox portal overlay.root {
|
|
200
|
+
escape close topmost
|
|
201
|
+
focus trap
|
|
202
|
+
resource lightbox.import
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Lowering target:
|
|
207
|
+
|
|
208
|
+
- `core.portals[]`
|
|
209
|
+
- `core.overlays[]`
|
|
210
|
+
- portal reference diagnostics
|
|
211
|
+
- overlay stack policy
|
|
212
|
+
|
|
213
|
+
### Resource
|
|
214
|
+
|
|
215
|
+
```rmt
|
|
216
|
+
resource lightbox.import kind lazy-import owner overlay.media.lightbox {
|
|
217
|
+
import "@ccslabs/xtend/components/xlightbox"
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
resource preview.objectUrl kind object-url owner surface.media.player {
|
|
221
|
+
source selector media.activeRecord
|
|
222
|
+
dispose on surface.destroy
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Lowering target:
|
|
227
|
+
|
|
228
|
+
- `core.resources[]`
|
|
229
|
+
- owner-scoped lifecycle records
|
|
230
|
+
- teardown diagnostics for ownerless resources
|
|
231
|
+
|
|
232
|
+
## AST Node Names
|
|
233
|
+
|
|
234
|
+
PRIM-02 should produce at least these node types:
|
|
235
|
+
|
|
236
|
+
| Syntax | AST Node |
|
|
237
|
+
|--------|----------|
|
|
238
|
+
| `state` | `RmtStateDeclaration` |
|
|
239
|
+
| `selector` | `RmtSelectorDeclaration` |
|
|
240
|
+
| `datasource` | `RmtDataSourceDeclaration` |
|
|
241
|
+
| `action` | `RmtActionDeclaration` |
|
|
242
|
+
| `effect` | `RmtEffectStatement` |
|
|
243
|
+
| `on ... -> action ...` | `RmtEventBinding` with payload block |
|
|
244
|
+
| `surface ... kind ... component ...` | `RmtSurfaceDeclaration` with primitive metadata |
|
|
245
|
+
| `portal` | `RmtPortalDeclaration` |
|
|
246
|
+
| `overlay` | `RmtOverlayDeclaration` |
|
|
247
|
+
| `resource` | `RmtResourceDeclaration` |
|
|
248
|
+
| `template` primitive block | `RmtTemplateDeclaration.body[]` |
|
|
249
|
+
|
|
250
|
+
## Minimum Diagnostic Scope
|
|
251
|
+
|
|
252
|
+
The grammar slice defines these error classes for PRIM-02/03:
|
|
253
|
+
|
|
254
|
+
| Code | Meaning |
|
|
255
|
+
|------|---------|
|
|
256
|
+
| `rmt.vnext.primitive.unknown-reference` | Primitive references an unknown state, selector, action, portal, resource or surface. |
|
|
257
|
+
| `rmt.vnext.primitive.owner-missing` | Resource or overlay has no stable owner. |
|
|
258
|
+
| `rmt.vnext.primitive.unkeyed-repeat` | Surface or template repeats records without `key`. |
|
|
259
|
+
| `rmt.vnext.primitive.payload-contract-missing` | Event binds an action without payload contract or mapping. |
|
|
260
|
+
| `rmt.vnext.primitive.unsafe-html` | Template uses HTML without Trusted DOM boundary. |
|
|
261
|
+
| `rmt.vnext.primitive.kernel-boundary` | Primitive requires a kernel import from XTend, Fabric or browser runtime. |
|
|
262
|
+
|
|
263
|
+
## Acceptance for PRIM-01
|
|
264
|
+
|
|
265
|
+
- This document defines a coherent vNext syntax for all P0 primitive families.
|
|
266
|
+
- The fixture `tests/rmt-language/fixtures/vnext-primitives-grammar-design.rmt` shows the same syntax scope in a compact app shell.
|
|
267
|
+
- The backlog marks `RMT-VNEXT-PRIM-01` as `in_progress`.
|
|
268
|
+
- PRIM-02 can start directly with parser/AST work without reopening the syntax question.
|