@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
|
+
# Component UX App Authoring
|
|
2
|
+
|
|
3
|
+
Docs Contract: `xtend.docs.component-ux-app-authoring.v1`
|
|
4
|
+
|
|
5
|
+
This guide is for app authors who use XTend components in RMT-first apps. The app can be written completely in RMT vNext; XTend provides local Web Components and XTendRMT orchestrates shell, routes, templates, schedules and diagnostics.
|
|
6
|
+
|
|
7
|
+
## Ground Rules
|
|
8
|
+
|
|
9
|
+
- The app shell renders `shell-first`.
|
|
10
|
+
- XTend components are described in vNext as `surface ... component x-*` and compiled into `xtend.component` records.
|
|
11
|
+
- XRouter is connected through the router adapter.
|
|
12
|
+
- Templates preferably use `dom_descriptor` as generated output.
|
|
13
|
+
- Events are bound with `on ... -> action ...`.
|
|
14
|
+
- Hydration, Fabric lane, fiber and diagnostics remain schedulable metadata.
|
|
15
|
+
- The RMT kernel imports no XTend classes or XTend types.
|
|
16
|
+
|
|
17
|
+
Boundary:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
no-rmt-kernel-import-of-xtend-types
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Minimal Component Surface
|
|
24
|
+
|
|
25
|
+
```rmt
|
|
26
|
+
template settings.feedback {
|
|
27
|
+
state settings.feedback.status type string initial "ready"
|
|
28
|
+
|
|
29
|
+
selector settings.feedback.view from state settings.feedback.status {
|
|
30
|
+
output StatusView
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
portal surface.root root "#settings-root" layer surface
|
|
34
|
+
|
|
35
|
+
surface settings.feedback.status kind card component x-status {
|
|
36
|
+
source selector settings.feedback.view
|
|
37
|
+
portal surface.root
|
|
38
|
+
|
|
39
|
+
lane visible weight 80 {
|
|
40
|
+
mount x-status
|
|
41
|
+
hydrate feedback-status from selector settings.feedback.view
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The output still contains `xtend.component`, accessibility, style, schedule and Fabric metadata. The source you write is the vNext source.
|
|
48
|
+
|
|
49
|
+
## App Shell Pattern
|
|
50
|
+
|
|
51
|
+
```rmt
|
|
52
|
+
template dashboard.app {
|
|
53
|
+
state dashboard.theme type string initial "dark"
|
|
54
|
+
state dashboard.density type string initial "compact"
|
|
55
|
+
state dashboard.motion type string initial "reduced-motion"
|
|
56
|
+
|
|
57
|
+
action dashboard.refresh {
|
|
58
|
+
emit dashboard.refresh.requested with action dashboard.refresh
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
portal surface.root root "#app-root" layer surface
|
|
62
|
+
|
|
63
|
+
surface dashboard.page kind page component x-section {
|
|
64
|
+
source state dashboard.theme
|
|
65
|
+
portal surface.root
|
|
66
|
+
|
|
67
|
+
lane visible weight 80 {
|
|
68
|
+
hydrate dashboard-shell from endpoint xtendrmt.route.render
|
|
69
|
+
hydrate settings-feedback-status from endpoint xtendrmt.component.mount
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
on click target refresh-button -> action dashboard.refresh {
|
|
73
|
+
payload theme from state.dashboard.theme
|
|
74
|
+
payload density from state.dashboard.density
|
|
75
|
+
payload motion from state.dashboard.motion
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## UX Rules for Apps
|
|
82
|
+
|
|
83
|
+
| Dimension | App Rule |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
| Shell | Host page provides only the root, loader, manifest and RMT runtime |
|
|
86
|
+
| Routing | Routes come from RMT and are activated through XRouter |
|
|
87
|
+
| Theme | `light`, `dark`, `high-contrast` and `forced-colors` remain app states |
|
|
88
|
+
| Motion | `reduced-motion` must be visible all the way into overlays, feedback and media |
|
|
89
|
+
| Density | `comfortable`, `compact` and `dense` must not break layout |
|
|
90
|
+
| A11y | Route announcements, live regions, error regions and focus restore are part of the app |
|
|
91
|
+
| Performance | Hydration policies and Fabric lanes are schedule data, not host-specific logic |
|
|
92
|
+
|
|
93
|
+
## Gates for App Authors
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
node scripts/run_xtend_tests.js rmt-first-class-app --json
|
|
97
|
+
node scripts/run_xtend_tests.js rmt-shell-authoring-ux --json
|
|
98
|
+
node scripts/run_xtend_tests.js component-ux-browser-smokes --json
|
|
99
|
+
node scripts/run_xtend_tests.js component-shell-theme-matrix --json
|
|
100
|
+
node scripts/run_xtend_tests.js browser --json
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
For PRs, the shared fast path is:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npm run test:pr
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## When an App Path Is Ready
|
|
110
|
+
|
|
111
|
+
An RMT-first XTend app path is considered ready when:
|
|
112
|
+
|
|
113
|
+
- the shell is not assembled manually from static XTend markup,
|
|
114
|
+
- components come through `xtend.component` records,
|
|
115
|
+
- route, theme, motion, density and hydration are visible in RMT,
|
|
116
|
+
- browser smokes cover the core journeys,
|
|
117
|
+
- the Component Shell Theme Matrix does not break,
|
|
118
|
+
- no external CDN or import-map dependencies are introduced.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Component UX Authoring
|
|
2
|
+
|
|
3
|
+
Docs contract: `xtend.docs.component-ux-authoring.v1`
|
|
4
|
+
|
|
5
|
+
This guide is the canonical working guide for XTend component authors after `WP-E11-16`. It turns the Epic 11 contracts into concrete rules for new and modernized web components.
|
|
6
|
+
|
|
7
|
+
## Principle
|
|
8
|
+
|
|
9
|
+
An XTend component is UX-ready only when its visible shell, styling, a11y, performance, component network, RMT authorability and browser-close smokes fit together. Individual components may stay small, but their contracts must be complete.
|
|
10
|
+
|
|
11
|
+
The technical boundary remains:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
no-rmt-kernel-import-of-xtend-types
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
RMT may schedule, render and configure XTend components. The RMT kernel, however, imports no XTend classes or XTend types.
|
|
18
|
+
|
|
19
|
+
## Required Contracts
|
|
20
|
+
|
|
21
|
+
| Contract | Purpose | Gate |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| `xtend.component.shell.v1` | root, DOM mode, states, slots, parts, focus and lifecycle | `component-shell-contract` |
|
|
24
|
+
| `xtend.component.styling.v1` | tokens, CSS parts, variants, size, density and theme bridges | `component-styling-contract` |
|
|
25
|
+
| `xtend.component.runtime-a11y.v1` | keyboard, focus, ARIA, screenreader and high contrast | `runtime-a11y-contract` |
|
|
26
|
+
| `xtend.component.ux-performance.v1` | shell, hydration, render, event and interaction budgets | `component-ux-performance` |
|
|
27
|
+
| `xtend.component.network.v1` | events, commands, form association, router context and feedback | `component-network-contract` |
|
|
28
|
+
| `xtend.rmt.shell-authoring.v1` | shell, style, a11y, variants, commands and events in RMT | `rmt-shell-authoring-ux` |
|
|
29
|
+
| `xtend.epic11.component-lab-ux-inspector.v1` | preview, RMT inspector, state, a11y, performance and source links | `component-lab-ux-inspector` |
|
|
30
|
+
| `xtend.epic11.component-ux-browser-smokes.v1` | real UX journeys for prioritized families | `component-ux-browser-smokes` |
|
|
31
|
+
| `xtend.epic11.component-shell-theme-matrix.v1` | theme, motion, density, viewport and visual states | `component-shell-theme-matrix` |
|
|
32
|
+
|
|
33
|
+
## Authoring Order
|
|
34
|
+
|
|
35
|
+
1. Choose a family: `form-controls`, `feedback-status`, `navigation-routing`, `overlay-interaction` or `layout-display-media`.
|
|
36
|
+
2. Define the shell contract: root, slots, states, parts, focus and lifecycle.
|
|
37
|
+
3. Treat styling as API: document tokens, parts, variants, size and density.
|
|
38
|
+
4. Model a11y first: define keyboard, labels, ARIA, live regions, focus restore and screenreader signals.
|
|
39
|
+
5. Set the performance profile: lane, hydration policy, critical measurement points and budget class.
|
|
40
|
+
6. Describe the component network: define events, commands, form association, router context or feedback channels.
|
|
41
|
+
7. Add RMT authoring: maintain `xtend.component` record, `dom_descriptor`, schedules, commands and events.
|
|
42
|
+
8. Accept Fabric context: ingest lane, fiber and telemetry through adapter data.
|
|
43
|
+
9. Make Component Lab visible: link preview, docs, types, fixture, state, a11y and performance.
|
|
44
|
+
10. Check browser and theme matrix: run local smokes and shell matrix.
|
|
45
|
+
|
|
46
|
+
## Family Rules
|
|
47
|
+
|
|
48
|
+
| Family | Minimum |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| Form controls | label, help text, error region, required/invalid, form association, value event, keyboard entry |
|
|
51
|
+
| Feedback/status | live region, role, tone, dismiss/timeout, non-color status, reduced motion |
|
|
52
|
+
| Navigation/routing | active state, `aria-current`, keyboard activation, route announcement, focus restore, tablist ARIA and roving `tabindex` |
|
|
53
|
+
| Overlay/interaction | initial focus, focus trap, Escape, focus restore, scroll lock, reduced motion |
|
|
54
|
+
| Layout/display/media | responsive slots, stable layout, lazy/visible hydration, media shell, code/display semantics |
|
|
55
|
+
|
|
56
|
+
## Theme Matrix
|
|
57
|
+
|
|
58
|
+
Every prioritized shell must remain representable in the Component Shell Theme Matrix:
|
|
59
|
+
|
|
60
|
+
- Themes: `light`, `dark`, `high-contrast`, `forced-colors`
|
|
61
|
+
- Motion: `default-motion`, `reduced-motion`
|
|
62
|
+
- Density: `comfortable`, `compact`, `dense`
|
|
63
|
+
- Viewports: `desktop-1280`, `tablet-768`, `mobile-390`
|
|
64
|
+
|
|
65
|
+
The gate currently checks `360` shell combinations:
|
|
66
|
+
|
|
67
|
+
Since `WP-E12-03`, `x-tabs` is part of the navigation/routing matrix and must preserve arrow key, `Home`, `End`, `aria-controls`, `role=tabpanel`, `aria-selected` and visible focus in browser smokes and theme matrix.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
node scripts/run_xtend_tests.js component-shell-theme-matrix --json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Local Gates
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
node scripts/run_xtend_tests.js component-shell-contract --json
|
|
77
|
+
node scripts/run_xtend_tests.js component-styling-contract --json
|
|
78
|
+
node scripts/run_xtend_tests.js runtime-a11y-contract --json
|
|
79
|
+
node scripts/run_xtend_tests.js component-ux-performance --json
|
|
80
|
+
node scripts/run_xtend_tests.js component-network-contract --json
|
|
81
|
+
node scripts/run_xtend_tests.js rmt-shell-authoring-ux --json
|
|
82
|
+
node scripts/run_xtend_tests.js component-lab-ux-inspector --json
|
|
83
|
+
node scripts/run_xtend_tests.js component-ux-browser-smokes --json
|
|
84
|
+
node scripts/run_xtend_tests.js component-shell-theme-matrix --json
|
|
85
|
+
node scripts/run_xtend_tests.js references --json
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Definition of Done
|
|
89
|
+
|
|
90
|
+
- Docs, `.d.ts`, fixture, component suite and RMT metadata exist.
|
|
91
|
+
- Shell, styling, a11y, performance and network contracts are visible.
|
|
92
|
+
- Events are `bubbles: true` and `composed: true` when hosts or RMT should consume them.
|
|
93
|
+
- Commands are declarable and not only private methods.
|
|
94
|
+
- Theme, density and motion are not hard-hidden in Shadow DOM.
|
|
95
|
+
- Browser smoke or theme matrix covers the relevant visible path.
|
|
96
|
+
- No new path introduces a hard XTend dependency into the RMT kernel.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Component UX Gates
|
|
2
|
+
|
|
3
|
+
Docs contract: `xtend.docs.component-ux-gates.v1`
|
|
4
|
+
|
|
5
|
+
This page describes the local gate chain for Epic 11. It connects authoring guides, browser smokes, theme matrix, RMT shell authoring, Component Lab and reference gates.
|
|
6
|
+
|
|
7
|
+
## Gate Groups
|
|
8
|
+
|
|
9
|
+
| Group | Gate | Purpose |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Foundation | `component-shell-contract` | Component Shell Contract `xtend.component.shell.v1` |
|
|
12
|
+
| Foundation | `component-styling-contract` | Styling Contract `xtend.component.styling.v1` |
|
|
13
|
+
| Foundation | `runtime-a11y-contract` | Runtime A11y `xtend.component.runtime-a11y.v1` |
|
|
14
|
+
| Foundation | `component-ux-performance` | Performance Profile `xtend.component.ux-performance.v1` |
|
|
15
|
+
| Foundation | `component-network-contract` | Component Network `xtend.component.network.v1` |
|
|
16
|
+
| RMT | `rmt-shell-authoring-ux` | RMT Shell Authoring `xtend.rmt.shell-authoring.v1` |
|
|
17
|
+
| Lab | `component-lab-ux-inspector` | Component Lab UX Inspector `xtend.epic11.component-lab-ux-inspector.v1` |
|
|
18
|
+
| Browser | `component-ux-browser-smokes` | Browser UX Smokes `xtend.epic11.component-ux-browser-smokes.v1` |
|
|
19
|
+
| Visual | `component-shell-theme-matrix` | Component Shell Theme Matrix `xtend.epic11.component-shell-theme-matrix.v1` |
|
|
20
|
+
| Docs | `component-ux-authoring-docs` | Component UX Authoring Docs `xtend.epic11.component-ux-authoring-docs.v1` |
|
|
21
|
+
| Migration | `component-long-tail-migration` | Legacy Long-Tail Migration `xtend.epic11.legacy-long-tail-migration.v1` |
|
|
22
|
+
| Handoff | `epic11-enterprise-ux-handoff` | Epic 11 Enterprise UX Handoff `xtend.epic11.enterprise-ux-handoff.v1` |
|
|
23
|
+
| References | `references` | Documentation and demo reference paths |
|
|
24
|
+
|
|
25
|
+
## Quick Epic 11 Check
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
node scripts/run_xtend_tests.js component-network-contract rmt-shell-authoring-ux form-controls-ux feedback-status-ux navigation-routing-ux overlay-interaction-ux layout-display-media-ux component-lab-ux-inspector component-ux-browser-smokes component-shell-theme-matrix component-ux-authoring-docs component-long-tail-migration epic11-enterprise-ux-handoff references --json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## PR Gate
|
|
32
|
+
|
|
33
|
+
The PR gate includes the Component UX docs so new guides do not drift away from the productive gate chain:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm run test:pr
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Release Note
|
|
40
|
+
|
|
41
|
+
`component-shell-theme-matrix` is not a screenshot diff runner yet. It is the deterministic local contract for later visual snapshot automation. Until real snapshots are connected, this matrix remains the binding source for theme, motion, density and viewport obligations.
|
|
42
|
+
|
|
43
|
+
## Handoff
|
|
44
|
+
|
|
45
|
+
After `WP-E11-18`, Epic 11 is complete in `completed-with-accepted-long-tail-handoff` mode. The legacy long-tail migration is gateable as a plan; open implementations intentionally remain prioritized in waves.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# x-rmt-lifecycle-demo-build - XTend Component
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
`<x-rmt-lifecycle-demo-build>` is the RC1 test-build component generated from
|
|
6
|
+
`xtendrmt/rmt-lifecycle-demo.rmt`. It serves as local, manifested evidence for
|
|
7
|
+
the RMT vNext app build path and combines root lifecycle, template extension,
|
|
8
|
+
scheduler handshake, a11y profile, and performance profile in one Custom
|
|
9
|
+
Element.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```html
|
|
14
|
+
<x-rmt-lifecycle-demo-build
|
|
15
|
+
variant="rc1"
|
|
16
|
+
aria-label="RMT Lifecycle Demo Build">
|
|
17
|
+
Lifecycle Demo
|
|
18
|
+
</x-rmt-lifecycle-demo-build>
|
|
19
|
+
<script type="module" src="/components/x-rmt-lifecycle-demo-build.js"></script>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Attributes
|
|
23
|
+
|
|
24
|
+
| Attribute | Type | Description |
|
|
25
|
+
|-----------|------|-------------|
|
|
26
|
+
| `variant` | String | marks the local demo variant for fixtures and browser smokes |
|
|
27
|
+
| `aria-label` | String | required name for the semantic `region` in Shadow DOM |
|
|
28
|
+
|
|
29
|
+
## Scaffold Contracts
|
|
30
|
+
|
|
31
|
+
The generated component exposes these static contracts:
|
|
32
|
+
|
|
33
|
+
- `xtendScaffoldWiring` with `xtend.scaffold.feature-wiring.v1`
|
|
34
|
+
- `xtendScaffoldExtensionPoints` with
|
|
35
|
+
`xtend.scaffold.component-extension-points.v1`
|
|
36
|
+
- `xtendScaffoldA11yProfile` with `xtend.a11y.profile.v1`
|
|
37
|
+
- `xtendScaffoldPerformanceProfile` with
|
|
38
|
+
`xtend.performance.component-profile.v1`
|
|
39
|
+
|
|
40
|
+
The root lifecycle uses `xtend.rmt.root-handshake.v1` and stays connected to
|
|
41
|
+
the XTend host adapter through scheduler endpoint hints. The RMT kernel does
|
|
42
|
+
not read the XTend component directly; it treats component refs, templates, and
|
|
43
|
+
events as data.
|
|
44
|
+
|
|
45
|
+
## Events
|
|
46
|
+
|
|
47
|
+
| Event | Description |
|
|
48
|
+
|-------|-------------|
|
|
49
|
+
| `rmt-lifecycle-demo-build-ready` | ready channel declared in scaffold wiring for host adapters |
|
|
50
|
+
| `rmt-lifecycle-demo-build-changed` | state-change channel declared in scaffold wiring for host adapters |
|
|
51
|
+
|
|
52
|
+
## A11y Profile
|
|
53
|
+
|
|
54
|
+
The a11y profile sets `role="region"`, requires an `aria-label`, describes
|
|
55
|
+
screen reader signals for semantic region and status changes, and carries
|
|
56
|
+
reduced-motion/forced-colors rules in Shadow DOM.
|
|
57
|
+
|
|
58
|
+
## Performance Profile
|
|
59
|
+
|
|
60
|
+
The performance profile uses `xtend.performance.component-profile.v1`,
|
|
61
|
+
`budgetClass: critical`, `lane: user-blocking`, and
|
|
62
|
+
`hydrationPolicy: visible`. Critical measurement points are loader, mount,
|
|
63
|
+
hydration, render, update, state sync, and event action.
|
|
64
|
+
|
|
65
|
+
## RC1 Build Boundary
|
|
66
|
+
|
|
67
|
+
The component is intentionally a build artifact from the RMT vNext path:
|
|
68
|
+
|
|
69
|
+
- Source: `xtendrmt/rmt-lifecycle-demo.rmt`
|
|
70
|
+
- Generator: `xtend-builder/generators/rmt-build.js`
|
|
71
|
+
- Build component: `components/x-rmt-lifecycle-demo-build.js`
|
|
72
|
+
- Browser smoke: `tests/browser/fixtures/rmt-lifecycle-demo-rmt-build-smoke.html`
|
|
73
|
+
|
|
74
|
+
It is therefore part of RC1 test-build recovery: manifest, docs, suite,
|
|
75
|
+
fixture, and public types remain visible in the Component Catalog.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# xalert - XTend Component
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
`<x-alert>` is the prominent feedback component for longer-lived notices,
|
|
6
|
+
warnings, and errors. Unlike toasts, an alert can be blocking or explicitly
|
|
7
|
+
closable.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<x-alert type="error" closable overlay aria-label="Error notice">
|
|
13
|
+
An error occurred
|
|
14
|
+
</x-alert>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Attributes
|
|
18
|
+
|
|
19
|
+
| Attribute | Type | Description |
|
|
20
|
+
|-----------|------|-------------|
|
|
21
|
+
| `type` | string | `info`, `success`, `warning`, `error` |
|
|
22
|
+
| `closable` | boolean | shows a close button |
|
|
23
|
+
| `duration` | number | optional auto-close duration |
|
|
24
|
+
| `overlay` | boolean | shows the alert as a centered overlay |
|
|
25
|
+
| `aria-label` | string | screen reader label |
|
|
26
|
+
|
|
27
|
+
## Events
|
|
28
|
+
|
|
29
|
+
| Event | Description |
|
|
30
|
+
|-------|-------------|
|
|
31
|
+
| `alert-shown` | after the alert is shown |
|
|
32
|
+
| `alert-dismissed` | after the alert is closed |
|
|
33
|
+
|
|
34
|
+
## State Contract
|
|
35
|
+
|
|
36
|
+
The instance mirrors its state compatibly into `xstate`:
|
|
37
|
+
|
|
38
|
+
- `xtend.component.x-alert.<id>`
|
|
39
|
+
- `xalert-state-<id>`
|
|
40
|
+
|
|
41
|
+
The event detail includes:
|
|
42
|
+
|
|
43
|
+
```js
|
|
44
|
+
{
|
|
45
|
+
id: 'alert-abc123',
|
|
46
|
+
type: 'error',
|
|
47
|
+
closable: true,
|
|
48
|
+
overlay: true,
|
|
49
|
+
dismissed: false,
|
|
50
|
+
reason: 'connected'
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Runtime Contract
|
|
55
|
+
|
|
56
|
+
- API-managed alerts are aggregated in `xstate.get('ui').alerts`.
|
|
57
|
+
- The instance itself exposes its lifecycle through `alert-shown` and
|
|
58
|
+
`alert-dismissed`.
|
|
59
|
+
- API and component no longer maintain separate close paths.
|
|
60
|
+
|
|
61
|
+
## Feedback Status UX from WP-E11-09
|
|
62
|
+
|
|
63
|
+
`<x-alert>` exposes `xtendFeedbackStatusUxProfile` with
|
|
64
|
+
`xtend.component.feedback-status-ux-profile.v1`. The profile describes
|
|
65
|
+
`x-alert` as a longer-lived feedback shell with `alert-shown`,
|
|
66
|
+
`alert-dismissed`, `xalert-state-<id>`, `a11y.announce`, Fabric lane `a11y`,
|
|
67
|
+
and RMT shell authoring.
|
|
68
|
+
|
|
69
|
+
Errors and warnings use assertive live regions; neutral and success notices
|
|
70
|
+
remain polite. Event details include `source: 'x-alert'` and `stateKey`, so
|
|
71
|
+
form, router, or RMT adapters can schedule and diagnose alerts consistently.
|
|
72
|
+
|
|
73
|
+
## Contrast Colors
|
|
74
|
+
|
|
75
|
+
`<x-alert>` uses solid contrast colors without gradients. The variants `info`,
|
|
76
|
+
`success`, `warning`, and `error` each set dedicated tokens for background,
|
|
77
|
+
text, border, and accent so alerts remain readable in light and dark mode while
|
|
78
|
+
preserving their signal value.
|
|
79
|
+
|
|
80
|
+
The most important theme tokens are:
|
|
81
|
+
|
|
82
|
+
- `--xtend-alert-info-bg`, `--xtend-alert-info-fg`, `--xtend-alert-info-border`, `--xtend-alert-info-accent`
|
|
83
|
+
- `--xtend-alert-success-bg`, `--xtend-alert-success-fg`, `--xtend-alert-success-border`, `--xtend-alert-success-accent`
|
|
84
|
+
- `--xtend-alert-warning-bg`, `--xtend-alert-warning-fg`, `--xtend-alert-warning-border`, `--xtend-alert-warning-accent`
|
|
85
|
+
- `--xtend-alert-error-bg`, `--xtend-alert-error-fg`, `--xtend-alert-error-border`, `--xtend-alert-error-accent`
|
|
86
|
+
|
|
87
|
+
For dark mode, the same tokens can be overridden with the `-dark` suffix, for
|
|
88
|
+
example `--xtend-alert-error-bg-dark`.
|
|
89
|
+
|
|
90
|
+
## Notes
|
|
91
|
+
|
|
92
|
+
- Alerts are intended for more important, longer-lived, or blocking feedback.
|
|
93
|
+
- `window.XAlert.show()` is the preferred entry point for API-managed alerts.
|
|
94
|
+
- For short, non-blocking notices, `x-toast` is the better component.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# xbutton - XTend Component
|
|
2
|
+
|
|
3
|
+
> **See also:** [xalert](./xalert.md), [xstate](./xstate.md), [xtheme](./xtheme.md)
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
`<x-button>` is the interactive base button for XTend apps. The component
|
|
8
|
+
provides variants, sizes, loading state, decorative icons, focus-visible
|
|
9
|
+
styles, reduced-motion/forced-colors paths, and, since `WP-E12-06`, an explicit
|
|
10
|
+
performance and interaction budget.
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- Variants: `primary`, `secondary`, `danger`
|
|
15
|
+
- Sizes: `small`, normal, `large`
|
|
16
|
+
- Loading state through `loading` and `aria-busy`
|
|
17
|
+
- Disabled/busy guards for click and keyboard activation
|
|
18
|
+
- Touch target token `--xtend-button-min-touch-target`
|
|
19
|
+
- State integration through `xbutton-state-<id>`
|
|
20
|
+
- Fabric-compatible events `button-interaction` and
|
|
21
|
+
`button-performance-measured`
|
|
22
|
+
- Slot fallback remains intact so late content such as `x-icon` hydrates cleanly
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
```html
|
|
27
|
+
<x-button variant="primary" size="large" icon="/icons/save.svg">Save</x-button>
|
|
28
|
+
<x-button loading aria-label="Saving">Please wait...</x-button>
|
|
29
|
+
<x-button aria-label="Switch theme"><x-icon name="sun" decorative></x-icon></x-button>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Attributes
|
|
33
|
+
|
|
34
|
+
| Attribute | Type | Description |
|
|
35
|
+
|-----------|------|-------------|
|
|
36
|
+
| `disabled` | Boolean | disables interaction and sets `aria-disabled` |
|
|
37
|
+
| `label` | String | fallback text when no slot content exists |
|
|
38
|
+
| `variant` | String | `primary`, `secondary`, `danger`, or custom class |
|
|
39
|
+
| `size` | String | `small`, normal, or `large` |
|
|
40
|
+
| `icon` | String | SVG string or icon URL |
|
|
41
|
+
| `loading` | Boolean | shows spinner, blocks interaction, and sets busy state |
|
|
42
|
+
| `aria-label` | String | accessible name for screen readers |
|
|
43
|
+
| `aria-busy` | Boolean | explicit busy state without requiring a loading spinner |
|
|
44
|
+
|
|
45
|
+
## Events
|
|
46
|
+
|
|
47
|
+
| Event | Description |
|
|
48
|
+
|-------|-------------|
|
|
49
|
+
| `click` | forwarded click from the internal button shell |
|
|
50
|
+
| `focus` / `blur` | forwarded focus events |
|
|
51
|
+
| `loading-start` | `loading` was activated |
|
|
52
|
+
| `loading-end` | `loading` was deactivated |
|
|
53
|
+
| `button-interaction` | Fabric-compatible interaction measurement for click/keyboard |
|
|
54
|
+
| `button-performance-measured` | performance measurement after hydration, update, or interaction |
|
|
55
|
+
|
|
56
|
+
## API
|
|
57
|
+
|
|
58
|
+
| Method | Purpose |
|
|
59
|
+
|--------|---------|
|
|
60
|
+
| `setLoading(loading, options?)` | toggles loading state programmatically |
|
|
61
|
+
| `getPerformanceBudget()` | returns the millisecond budgets of the performance profile |
|
|
62
|
+
| `getInteractionBudget()` | returns click, keyboard, busy, and touch-target budgets |
|
|
63
|
+
| `snapshotPerformance()` | returns the current `xtend.component.performance-snapshot.v1` snapshot |
|
|
64
|
+
|
|
65
|
+
## Performance Profile
|
|
66
|
+
|
|
67
|
+
`x-button` has the runtime profile `xtend.performance.component-profile.v1`:
|
|
68
|
+
|
|
69
|
+
- `budgetClass`: `interactive-small`
|
|
70
|
+
- `lane`: `user-blocking`
|
|
71
|
+
- `hydrationPolicy`: `visible`
|
|
72
|
+
- `criticalMeasurements`: `xtend.component.hydrate`, `xtend.component.render`,
|
|
73
|
+
`xtend.component.update`, `xtend.event.handler`,
|
|
74
|
+
`xtend.interaction.click`, `xtend.interaction.keyboard`
|
|
75
|
+
- `budgetsMs`: `hydrate`, `renderUpdate`, `eventAction`, `keyboardAction`,
|
|
76
|
+
`busyToggle`, `stateSync`
|
|
77
|
+
|
|
78
|
+
Fabric, regression gates, and later RMT shells can therefore schedule the
|
|
79
|
+
button as a small user-blocking interaction.
|
|
80
|
+
|
|
81
|
+
## RMT and Fabric
|
|
82
|
+
|
|
83
|
+
The component declares `xtendRmtMetadata` with `adapter: 'xtend.component'`,
|
|
84
|
+
`templateMode: 'dom_descriptor'`, `eventBindingMode:
|
|
85
|
+
'dom-event-to-rmt-command'`, and the boundary
|
|
86
|
+
`no-rmt-kernel-import-of-xtend-types`. RMT can author and schedule the button
|
|
87
|
+
without importing XTend types into the kernel.
|
|
88
|
+
|
|
89
|
+
Fabric consumes:
|
|
90
|
+
|
|
91
|
+
- `button-interaction`
|
|
92
|
+
- `button-performance-measured`
|
|
93
|
+
- `snapshotPerformance()`
|
|
94
|
+
- State key `xbutton-state-<id>`
|
|
95
|
+
|
|
96
|
+
## Styling and Theming
|
|
97
|
+
|
|
98
|
+
```css
|
|
99
|
+
x-button {
|
|
100
|
+
--primary-color: #007bff;
|
|
101
|
+
--focus-color: #80bfff;
|
|
102
|
+
--xtend-button-min-touch-target: 44px;
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The button respects `prefers-reduced-motion` and `forced-colors`. In
|
|
107
|
+
forced-colors mode it uses system colors, visible focus, and a textual busy
|
|
108
|
+
signal.
|
|
109
|
+
|
|
110
|
+
## Accessibility
|
|
111
|
+
|
|
112
|
+
- native button in Shadow DOM with `role="button"`
|
|
113
|
+
- visible `:focus-visible` state
|
|
114
|
+
- `aria-disabled` and `aria-busy`
|
|
115
|
+
- decorative icons with empty `alt`
|
|
116
|
+
- minimum touch target through token
|
|
117
|
+
- keyboard activation through native button semantics plus measurement point
|
|
118
|
+
for `Enter` and `Space`
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# xcalendar - XTend Component
|
|
2
|
+
|
|
3
|
+
> **See also:** [xcards](./xcards.md), [xform](./xform.md), [xstate](./xstate.md)
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
`<x-calendar>` is a modern, accessible calendar with form integration, state
|
|
8
|
+
management, and theming. It is suitable for date selection and appointment
|
|
9
|
+
management.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Features
|
|
14
|
+
|
|
15
|
+
- Form-associated (HTML5 Form API)
|
|
16
|
+
- State integration through xstate
|
|
17
|
+
- Theming through CSS custom properties
|
|
18
|
+
- Responsive design
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
```html
|
|
25
|
+
<x-calendar></x-calendar>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Attributes
|
|
31
|
+
|
|
32
|
+
| Attribute | Type | Description |
|
|
33
|
+
|-----------|------|-------------|
|
|
34
|
+
| `value` | String | selected date in ISO format |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Events
|
|
39
|
+
|
|
40
|
+
| Event | Description |
|
|
41
|
+
|-------|-------------|
|
|
42
|
+
| `change` | emitted when a date is selected |
|
|
43
|
+
| `date-select` | current XTend contract for date selection, detail: `{ value, date }` |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## API
|
|
48
|
+
|
|
49
|
+
- **Set/read value:** `element.value = '2025-07-16'`
|
|
50
|
+
- **State integration:** automatic through xstate
|
|
51
|
+
|
|
52
|
+
## Component-Level Contract from ER-WP-33
|
|
53
|
+
|
|
54
|
+
`<x-calendar>` is form-associated, writes selection and view date to
|
|
55
|
+
`xcalendar-state-<id>`, and renders the month view as an ARIA grid. Day cells
|
|
56
|
+
use `role="gridcell"` and `aria-selected`; month navigation is exposed through
|
|
57
|
+
labeled buttons.
|
|
58
|
+
|
|
59
|
+
## Form Controls UX from WP-E11-08
|
|
60
|
+
|
|
61
|
+
`<x-calendar>` exposes `xtendFormControlUxProfile` with
|
|
62
|
+
`xtend.component.form-control-ux-profile.v1`. The profile connects date
|
|
63
|
+
selection, `date-select`, `xcalendar-state-<id>`, `ui.user-blocking.input`,
|
|
64
|
+
grid a11y, Fabric lane `user-blocking`, and RMT shell authoring.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Example: Dynamic JS
|
|
69
|
+
|
|
70
|
+
```js
|
|
71
|
+
const cal = document.createElement('x-calendar');
|
|
72
|
+
cal.value = '2025-07-16';
|
|
73
|
+
document.body.appendChild(cal);
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Styling and Theming
|
|
79
|
+
|
|
80
|
+
```css
|
|
81
|
+
x-calendar {
|
|
82
|
+
--border-color: #ccc;
|
|
83
|
+
--background-color: #fff;
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Accessibility
|
|
90
|
+
|
|
91
|
+
- ARIA roles, keyboard navigation
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
*Last updated: July 16, 2025*
|