@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
package/components/xplayer.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { XtendCustomEventMap, XtendLayoutDisplayMediaUxProfile, XtendPublicEventContract } from './xtend-public-types';
|
|
2
2
|
|
|
3
3
|
export type XPlayerAttributeName = 'src' | 'poster' | 'type' | 'media-chooser' | 'downloadable' | 'autoplay' | 'title' | 'height' | 'width';
|
|
4
|
-
export type XPlayerEventName = 'xplayer-play' | 'xplayer-pause' | 'xplayer-fullscreen' | 'xplayer-pip' | 'xplayer-caption' | 'xplayer-mute';
|
|
4
|
+
export type XPlayerEventName = 'xplayer-play' | 'xplayer-pause' | 'xplayer-state' | 'xplayer-fullscreen' | 'xplayer-pip' | 'xplayer-caption' | 'xplayer-mute';
|
|
5
5
|
export type XPlayerLayoutDisplayMediaUxProfile = XtendLayoutDisplayMediaUxProfile<'x-player'>;
|
|
6
|
+
export type XPlayerRmtCommandName = 'play-media' | 'pause-media' | 'set-source' | 'set-state' | 'apply-theme' | 'play' | 'pause';
|
|
6
7
|
|
|
7
8
|
export interface XPlayerPlaybackEventDetail {
|
|
8
9
|
currentTime: number;
|
|
@@ -16,6 +17,16 @@ export interface XPlayerMuteEventDetail {
|
|
|
16
17
|
muted: boolean;
|
|
17
18
|
}
|
|
18
19
|
|
|
20
|
+
export interface XPlayerStateEventDetail {
|
|
21
|
+
src?: string | null;
|
|
22
|
+
type?: string;
|
|
23
|
+
playing: boolean;
|
|
24
|
+
currentTime: number;
|
|
25
|
+
volume: number;
|
|
26
|
+
muted: boolean;
|
|
27
|
+
fullscreen?: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
19
30
|
export interface XPlayerEmptyEventDetail {
|
|
20
31
|
[key: string]: never;
|
|
21
32
|
}
|
|
@@ -34,6 +45,7 @@ export interface XPlayerSnapshot {
|
|
|
34
45
|
export interface XPlayerEventDetailMap {
|
|
35
46
|
'xplayer-play': XPlayerPlaybackEventDetail;
|
|
36
47
|
'xplayer-pause': XPlayerPlaybackEventDetail;
|
|
48
|
+
'xplayer-state': XPlayerStateEventDetail;
|
|
37
49
|
'xplayer-fullscreen': XPlayerFullscreenEventDetail;
|
|
38
50
|
'xplayer-pip': XPlayerEmptyEventDetail;
|
|
39
51
|
'xplayer-caption': XPlayerEmptyEventDetail;
|
|
@@ -41,10 +53,40 @@ export interface XPlayerEventDetailMap {
|
|
|
41
53
|
}
|
|
42
54
|
|
|
43
55
|
export type XPlayerEventMap = XtendCustomEventMap<XPlayerEventDetailMap>;
|
|
44
|
-
export type XPlayerPublicEventContract = XtendPublicEventContract<XPlayerEventName, XPlayerPlaybackEventDetail | XPlayerFullscreenEventDetail | XPlayerMuteEventDetail | XPlayerEmptyEventDetail>;
|
|
56
|
+
export type XPlayerPublicEventContract = XtendPublicEventContract<XPlayerEventName, XPlayerPlaybackEventDetail | XPlayerStateEventDetail | XPlayerFullscreenEventDetail | XPlayerMuteEventDetail | XPlayerEmptyEventDetail>;
|
|
57
|
+
|
|
58
|
+
export interface XPlayerRmtPlayerContract {
|
|
59
|
+
schema: 'xtend.mm-rmt.player-contract.v1';
|
|
60
|
+
tag: 'x-player';
|
|
61
|
+
commands: XPlayerRmtCommandName[];
|
|
62
|
+
events: XPlayerEventName[];
|
|
63
|
+
stateKey: 'xplayer-state-<id>';
|
|
64
|
+
stateBridge: 'xstate-host-bridge';
|
|
65
|
+
themeTokens: string[];
|
|
66
|
+
parts: string[];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface XPlayerRmtCommand {
|
|
70
|
+
kind?: XPlayerRmtCommandName;
|
|
71
|
+
type?: XPlayerRmtCommandName;
|
|
72
|
+
command?: XPlayerRmtCommandName;
|
|
73
|
+
src?: string;
|
|
74
|
+
source?: string;
|
|
75
|
+
typeHint?: string;
|
|
76
|
+
poster?: string;
|
|
77
|
+
state?: Partial<XPlayerStateEventDetail>;
|
|
78
|
+
tokens?: Record<string, string | number>;
|
|
79
|
+
theme?: Record<string, string | number>;
|
|
80
|
+
}
|
|
45
81
|
|
|
46
82
|
export interface XPlayerElement extends HTMLElement {
|
|
47
83
|
snapshot(): XPlayerSnapshot;
|
|
84
|
+
getRmtPlayerContract(): XPlayerRmtPlayerContract;
|
|
85
|
+
applyRmtPlayerCommand(command: XPlayerRmtCommandName | XPlayerRmtCommand, payload?: Record<string, unknown>): Promise<XPlayerSnapshot> | XPlayerStateEventDetail | { schema: 'xtend.mm-rmt.player-theme-report.v1'; tokenCount: number };
|
|
86
|
+
playMedia(): Promise<XPlayerSnapshot>;
|
|
87
|
+
pauseMedia(): XPlayerStateEventDetail;
|
|
88
|
+
setMediaState(patch?: Partial<XPlayerStateEventDetail>): XPlayerStateEventDetail;
|
|
89
|
+
applyRmtThemeTokens(tokens?: Record<string, string | number>): { schema: 'xtend.mm-rmt.player-theme-report.v1'; tokenCount: number };
|
|
48
90
|
addEventListener<K extends keyof XPlayerEventMap>(type: K, listener: (event: XPlayerEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
|
|
49
91
|
}
|
|
50
92
|
|
package/components/xplayer.js
CHANGED
|
@@ -23,6 +23,19 @@ class XPlayer extends HTMLElement {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
static get xtendRmtPlayerContract() {
|
|
27
|
+
return {
|
|
28
|
+
schema: "xtend.mm-rmt.player-contract.v1",
|
|
29
|
+
tag: "x-player",
|
|
30
|
+
commands: ["play-media", "pause-media", "set-source", "set-state", "apply-theme"],
|
|
31
|
+
events: ["xplayer-play", "xplayer-pause", "xplayer-state", "xplayer-fullscreen", "xplayer-pip", "xplayer-caption", "xplayer-mute"],
|
|
32
|
+
stateKey: "xplayer-state-<id>",
|
|
33
|
+
stateBridge: "xstate-host-bridge",
|
|
34
|
+
themeTokens: ["--x-player-primary", "--x-player-accent", "--x-player-background", "--x-player-radius"],
|
|
35
|
+
parts: ["root", "media", "title", "overlay", "spinner-overlay", "spinner", "big-controls", "controls", "progress"]
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
26
39
|
static get xtendScaffoldA11yProfile() {
|
|
27
40
|
return {
|
|
28
41
|
schema: "xtend.a11y.screenreader-signals.v1",
|
|
@@ -44,6 +57,20 @@ class XPlayer extends HTMLElement {
|
|
|
44
57
|
};
|
|
45
58
|
}
|
|
46
59
|
|
|
60
|
+
static get xtendLayoutStabilityProfile() {
|
|
61
|
+
return {
|
|
62
|
+
schema: "xtend.layout-stability.v1",
|
|
63
|
+
componentRef: "x-player",
|
|
64
|
+
minBlockSize: "var(--x-player-reserved-block-size, var(--xtend-layout-reserved-block-size, 18rem))",
|
|
65
|
+
intrinsicSize: "auto var(--x-player-reserved-block-size, 18rem)",
|
|
66
|
+
aspectRatio: "var(--x-player-aspect-ratio, 16 / 9)",
|
|
67
|
+
slotReserve: ["media", "controls", "poster"],
|
|
68
|
+
hydrationShiftPolicy: "no-geometry-shift",
|
|
69
|
+
shellFirstCompatible: true,
|
|
70
|
+
lazyLoadingCompatible: true
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
47
74
|
static get xtendLayoutDisplayMediaUxProfile() {
|
|
48
75
|
return {
|
|
49
76
|
schema: "xtend.component.layout-display-media-ux-profile.v1",
|
|
@@ -69,10 +96,23 @@ class XPlayer extends HTMLElement {
|
|
|
69
96
|
this.attachShadow({ mode: "open" });
|
|
70
97
|
this._autoplayUnmuted = false;
|
|
71
98
|
this._dialogOpen = false; // <--- NEU: Globales Dialog-Flag für Endlosschutz
|
|
99
|
+
this._resizeObserver = null;
|
|
100
|
+
this._resizeFrame = null;
|
|
72
101
|
this.shadowRoot.innerHTML = `
|
|
73
102
|
<style>
|
|
74
103
|
:host {
|
|
75
104
|
display: block;
|
|
105
|
+
width: 100%;
|
|
106
|
+
height: 100%;
|
|
107
|
+
min-width: 0;
|
|
108
|
+
min-height: var(--x-player-reserved-block-size, var(--xtend-layout-reserved-block-size, 0));
|
|
109
|
+
max-width: 100%;
|
|
110
|
+
max-height: 100%;
|
|
111
|
+
aspect-ratio: var(--x-player-aspect-ratio, 16 / 9);
|
|
112
|
+
contain-intrinsic-size: auto var(--x-player-reserved-block-size, var(--xtend-layout-reserved-block-size, 18rem));
|
|
113
|
+
overflow: hidden;
|
|
114
|
+
box-sizing: border-box;
|
|
115
|
+
container-type: inline-size;
|
|
76
116
|
font-family: 'Inter', 'Segoe UI', Arial, sans-serif;
|
|
77
117
|
--glass-bg: rgba(30, 34, 44, 0.55);
|
|
78
118
|
--glass-blur: 18px;
|
|
@@ -85,6 +125,13 @@ class XPlayer extends HTMLElement {
|
|
|
85
125
|
--focus-outline: 2px solid var(--primary);
|
|
86
126
|
}
|
|
87
127
|
.player {
|
|
128
|
+
width: 100%;
|
|
129
|
+
height: 100%;
|
|
130
|
+
min-width: 0;
|
|
131
|
+
min-height: 0;
|
|
132
|
+
max-width: 100%;
|
|
133
|
+
max-height: 100%;
|
|
134
|
+
box-sizing: border-box;
|
|
88
135
|
background: var(--glass-bg);
|
|
89
136
|
border-radius: var(--border-radius);
|
|
90
137
|
box-shadow: var(--shadow);
|
|
@@ -110,6 +157,10 @@ class XPlayer extends HTMLElement {
|
|
|
110
157
|
left: 1.2em;
|
|
111
158
|
right: 1.2em;
|
|
112
159
|
z-index: 10;
|
|
160
|
+
box-sizing: border-box;
|
|
161
|
+
min-width: 0;
|
|
162
|
+
max-width: calc(100% - 2.4em);
|
|
163
|
+
overflow: visible;
|
|
113
164
|
opacity: 0;
|
|
114
165
|
pointer-events: none;
|
|
115
166
|
transition: opacity 0.3s, box-shadow 0.3s;
|
|
@@ -122,7 +173,8 @@ class XPlayer extends HTMLElement {
|
|
|
122
173
|
display: flex;
|
|
123
174
|
align-items: center;
|
|
124
175
|
gap: 0.5em;
|
|
125
|
-
flex:
|
|
176
|
+
flex: 0 1 auto;
|
|
177
|
+
min-width: 0;
|
|
126
178
|
}
|
|
127
179
|
.progress {
|
|
128
180
|
flex: 1 1 0%;
|
|
@@ -140,11 +192,12 @@ class XPlayer extends HTMLElement {
|
|
|
140
192
|
display: flex;
|
|
141
193
|
align-items: center;
|
|
142
194
|
justify-content: flex-end;
|
|
143
|
-
min-width:
|
|
144
|
-
max-width:
|
|
195
|
+
min-width: 0;
|
|
196
|
+
max-width: 100%;
|
|
145
197
|
width: auto;
|
|
146
198
|
gap: 0.5em;
|
|
147
|
-
flex:
|
|
199
|
+
flex: 0 1 auto;
|
|
200
|
+
overflow: visible;
|
|
148
201
|
}
|
|
149
202
|
.volume-container {
|
|
150
203
|
display: flex;
|
|
@@ -181,6 +234,8 @@ class XPlayer extends HTMLElement {
|
|
|
181
234
|
justify-content: center;
|
|
182
235
|
padding: 0.7em 0;
|
|
183
236
|
}
|
|
237
|
+
.volume-container:hover .volume-slider,
|
|
238
|
+
.volume-container:focus-within .volume-slider,
|
|
184
239
|
.volume-container.expanded .volume-slider {
|
|
185
240
|
opacity: 1;
|
|
186
241
|
transform: translateX(-50%) scaleY(1);
|
|
@@ -201,9 +256,19 @@ class XPlayer extends HTMLElement {
|
|
|
201
256
|
display: flex;
|
|
202
257
|
align-items: center;
|
|
203
258
|
gap: 0.5em;
|
|
204
|
-
|
|
259
|
+
min-width: 0;
|
|
260
|
+
max-width: 100%;
|
|
261
|
+
overflow: hidden;
|
|
262
|
+
flex: 0 1 auto;
|
|
205
263
|
transition: none;
|
|
206
264
|
}
|
|
265
|
+
.time,
|
|
266
|
+
.branding {
|
|
267
|
+
min-width: 0;
|
|
268
|
+
overflow: hidden;
|
|
269
|
+
text-overflow: ellipsis;
|
|
270
|
+
white-space: nowrap;
|
|
271
|
+
}
|
|
207
272
|
button, .icon-btn {
|
|
208
273
|
background: rgba(255,255,255,0.08);
|
|
209
274
|
border: none;
|
|
@@ -340,6 +405,13 @@ class XPlayer extends HTMLElement {
|
|
|
340
405
|
position: absolute;
|
|
341
406
|
top: 1.2em;
|
|
342
407
|
left: 1.2em;
|
|
408
|
+
box-sizing: border-box;
|
|
409
|
+
max-width: calc(100% - 2.4em);
|
|
410
|
+
min-width: 0;
|
|
411
|
+
overflow: hidden;
|
|
412
|
+
text-overflow: ellipsis;
|
|
413
|
+
white-space: nowrap;
|
|
414
|
+
overflow-wrap: normal;
|
|
343
415
|
color: var(--accent);
|
|
344
416
|
background: rgba(30,34,44,0.38);
|
|
345
417
|
padding: 0.4em 1.2em;
|
|
@@ -548,6 +620,8 @@ class XPlayer extends HTMLElement {
|
|
|
548
620
|
justify-content: center;
|
|
549
621
|
padding: 0.7em 0;
|
|
550
622
|
}
|
|
623
|
+
.volume-container:hover .volume-slider,
|
|
624
|
+
.volume-container:focus-within .volume-slider,
|
|
551
625
|
.volume-container.expanded .volume-slider {
|
|
552
626
|
opacity: 1;
|
|
553
627
|
transform: translateX(-50%) scaleY(1);
|
|
@@ -567,6 +641,12 @@ class XPlayer extends HTMLElement {
|
|
|
567
641
|
.media-container {
|
|
568
642
|
width: 100%;
|
|
569
643
|
height: 100%;
|
|
644
|
+
min-width: 0;
|
|
645
|
+
min-height: 0;
|
|
646
|
+
max-width: 100%;
|
|
647
|
+
max-height: 100%;
|
|
648
|
+
box-sizing: border-box;
|
|
649
|
+
overflow: hidden;
|
|
570
650
|
display: flex;
|
|
571
651
|
align-items: center;
|
|
572
652
|
justify-content: center;
|
|
@@ -575,6 +655,11 @@ class XPlayer extends HTMLElement {
|
|
|
575
655
|
video, audio {
|
|
576
656
|
width: 100%;
|
|
577
657
|
height: 100%;
|
|
658
|
+
min-width: 0;
|
|
659
|
+
min-height: 0;
|
|
660
|
+
max-width: 100%;
|
|
661
|
+
max-height: 100%;
|
|
662
|
+
box-sizing: border-box;
|
|
578
663
|
object-fit: cover;
|
|
579
664
|
display: block;
|
|
580
665
|
border-radius: var(--border-radius);
|
|
@@ -589,6 +674,23 @@ class XPlayer extends HTMLElement {
|
|
|
589
674
|
transition: none !important;
|
|
590
675
|
}
|
|
591
676
|
}
|
|
677
|
+
@container (max-width: 520px) {
|
|
678
|
+
.controls {
|
|
679
|
+
left: 0;
|
|
680
|
+
right: 0;
|
|
681
|
+
bottom: 0;
|
|
682
|
+
max-width: 100%;
|
|
683
|
+
gap: 0.35em;
|
|
684
|
+
padding: 0.5em;
|
|
685
|
+
}
|
|
686
|
+
.progress {
|
|
687
|
+
min-width: 28px;
|
|
688
|
+
margin: 0 0.35em;
|
|
689
|
+
}
|
|
690
|
+
.branding {
|
|
691
|
+
display: none;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
592
694
|
@media (forced-colors: active) {
|
|
593
695
|
.player, .controls, button, .icon-btn, .progress {
|
|
594
696
|
border: 1px solid CanvasText;
|
|
@@ -650,6 +752,13 @@ class XPlayer extends HTMLElement {
|
|
|
650
752
|
`;
|
|
651
753
|
}
|
|
652
754
|
|
|
755
|
+
_removeNativeTitles() {
|
|
756
|
+
if (!this.shadowRoot) return;
|
|
757
|
+
Array.from(this.shadowRoot.querySelectorAll('[title]')).forEach((element) => {
|
|
758
|
+
element.removeAttribute('title');
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
|
|
653
762
|
connectedCallback() {
|
|
654
763
|
this._loadMedia();
|
|
655
764
|
this._initControls();
|
|
@@ -661,6 +770,8 @@ class XPlayer extends HTMLElement {
|
|
|
661
770
|
this._setupBigControls();
|
|
662
771
|
this._setupCursorHiding();
|
|
663
772
|
this._updateDimensions();
|
|
773
|
+
this._observePlayerResize();
|
|
774
|
+
this._removeNativeTitles();
|
|
664
775
|
|
|
665
776
|
// Add the loaded class to trigger branding animation
|
|
666
777
|
this.classList.add("loaded");
|
|
@@ -906,6 +1017,18 @@ class XPlayer extends HTMLElement {
|
|
|
906
1017
|
|
|
907
1018
|
disconnectedCallback() {
|
|
908
1019
|
if (this._unsubscribeState) this._unsubscribeState();
|
|
1020
|
+
if (this._removeTitleInterval) {
|
|
1021
|
+
clearInterval(this._removeTitleInterval);
|
|
1022
|
+
this._removeTitleInterval = null;
|
|
1023
|
+
}
|
|
1024
|
+
if (this._resizeObserver) {
|
|
1025
|
+
this._resizeObserver.disconnect();
|
|
1026
|
+
this._resizeObserver = null;
|
|
1027
|
+
}
|
|
1028
|
+
if (this._resizeFrame) {
|
|
1029
|
+
cancelAnimationFrame(this._resizeFrame);
|
|
1030
|
+
this._resizeFrame = null;
|
|
1031
|
+
}
|
|
909
1032
|
}
|
|
910
1033
|
|
|
911
1034
|
snapshot() {
|
|
@@ -921,6 +1044,89 @@ class XPlayer extends HTMLElement {
|
|
|
921
1044
|
};
|
|
922
1045
|
}
|
|
923
1046
|
|
|
1047
|
+
getRmtPlayerContract() {
|
|
1048
|
+
return XPlayer.xtendRmtPlayerContract;
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
setMediaState(patch = {}) {
|
|
1052
|
+
const stateKey = `xplayer-state-${this.id || "unmounted"}`;
|
|
1053
|
+
const currentState = typeof xstate.get === "function" ? (xstate.get(stateKey) || {}) : {};
|
|
1054
|
+
if (patch.src && patch.src !== this.getAttribute("src")) {
|
|
1055
|
+
this.setAttribute("src", patch.src);
|
|
1056
|
+
}
|
|
1057
|
+
if (this._media) {
|
|
1058
|
+
if (typeof patch.currentTime === "number") this._media.currentTime = patch.currentTime;
|
|
1059
|
+
if (typeof patch.volume === "number") this._media.volume = Math.max(0, Math.min(1, patch.volume));
|
|
1060
|
+
if (typeof patch.muted === "boolean") this._media.muted = patch.muted;
|
|
1061
|
+
}
|
|
1062
|
+
const nextState = {
|
|
1063
|
+
...currentState,
|
|
1064
|
+
...patch,
|
|
1065
|
+
src: patch.src || this.getAttribute("src"),
|
|
1066
|
+
playing: typeof patch.playing === "boolean" ? patch.playing : (this._media ? !this._media.paused : Boolean(currentState.playing)),
|
|
1067
|
+
currentTime: this._media ? this._media.currentTime : (patch.currentTime || currentState.currentTime || 0),
|
|
1068
|
+
volume: this._media ? this._media.volume : (typeof patch.volume === "number" ? patch.volume : currentState.volume || 1),
|
|
1069
|
+
muted: this._media ? this._media.muted : (typeof patch.muted === "boolean" ? patch.muted : Boolean(currentState.muted))
|
|
1070
|
+
};
|
|
1071
|
+
if (typeof xstate.set === "function") xstate.set(stateKey, nextState);
|
|
1072
|
+
if (typeof CustomEvent === "function") {
|
|
1073
|
+
this.dispatchEvent(new CustomEvent("xplayer-state", { detail: nextState }));
|
|
1074
|
+
}
|
|
1075
|
+
return nextState;
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
playMedia() {
|
|
1079
|
+
if (!this._media || typeof this._media.play !== "function") {
|
|
1080
|
+
return Promise.resolve(this.setMediaState({ playing: false }));
|
|
1081
|
+
}
|
|
1082
|
+
const playRequest = this._media.play();
|
|
1083
|
+
this.setMediaState({ playing: true });
|
|
1084
|
+
return playRequest && typeof playRequest.then === "function"
|
|
1085
|
+
? playRequest.then(() => this.snapshot()).catch((error) => {
|
|
1086
|
+
this.setMediaState({ playing: this._media ? !this._media.paused : false });
|
|
1087
|
+
throw error;
|
|
1088
|
+
})
|
|
1089
|
+
: Promise.resolve(this.snapshot());
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
pauseMedia() {
|
|
1093
|
+
if (this._media && typeof this._media.pause === "function") {
|
|
1094
|
+
this._media.pause();
|
|
1095
|
+
}
|
|
1096
|
+
return this.setMediaState({ playing: false });
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
applyRmtThemeTokens(tokens = {}) {
|
|
1100
|
+
Object.entries(tokens || {}).forEach(([name, value]) => {
|
|
1101
|
+
if (value === null || typeof value === "undefined") return;
|
|
1102
|
+
const tokenName = String(name).startsWith("--") ? String(name) : `--x-player-${String(name).replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`)}`;
|
|
1103
|
+
this.style.setProperty(tokenName, String(value));
|
|
1104
|
+
});
|
|
1105
|
+
return {
|
|
1106
|
+
schema: "xtend.mm-rmt.player-theme-report.v1",
|
|
1107
|
+
tokenCount: Object.keys(tokens || {}).length
|
|
1108
|
+
};
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
applyRmtPlayerCommand(command, payload = {}) {
|
|
1112
|
+
const kind = typeof command === "string" ? command : command && (command.kind || command.type || command.command);
|
|
1113
|
+
const data = typeof command === "object" && command && !Array.isArray(command)
|
|
1114
|
+
? { ...command, ...payload }
|
|
1115
|
+
: payload;
|
|
1116
|
+
if (kind === "play-media" || kind === "play") return this.playMedia(data);
|
|
1117
|
+
if (kind === "pause-media" || kind === "pause") return this.pauseMedia(data);
|
|
1118
|
+
if (kind === "set-source") {
|
|
1119
|
+
const src = data.src || data.source || "";
|
|
1120
|
+
if (src) this.setAttribute("src", src);
|
|
1121
|
+
if (data.type) this.setAttribute("type", data.type);
|
|
1122
|
+
if (data.poster) this.setAttribute("poster", data.poster);
|
|
1123
|
+
return this.setMediaState({ src, type: data.type || this.getAttribute("type") || "video", playing: false });
|
|
1124
|
+
}
|
|
1125
|
+
if (kind === "set-state") return this.setMediaState(data.state || data);
|
|
1126
|
+
if (kind === "apply-theme") return this.applyRmtThemeTokens(data.tokens || data.theme || data);
|
|
1127
|
+
throw new Error(`Unsupported x-player RMT command: ${kind || "unknown"}`);
|
|
1128
|
+
}
|
|
1129
|
+
|
|
924
1130
|
attributeChangedCallback(name, oldValue, newValue) {
|
|
925
1131
|
if (["src", "poster", "type", "media-chooser", "downloadable", "title"].includes(name)) {
|
|
926
1132
|
this._loadMedia();
|
|
@@ -1074,6 +1280,13 @@ class XPlayer extends HTMLElement {
|
|
|
1074
1280
|
hasPlayed = true; // <-- Mark as played
|
|
1075
1281
|
this.updatePlayPauseIcon();
|
|
1076
1282
|
this._hideOverlay();
|
|
1283
|
+
this.dispatchEvent(new CustomEvent("xplayer-play", {
|
|
1284
|
+
detail: {
|
|
1285
|
+
currentTime: media.currentTime,
|
|
1286
|
+
src: media.currentSrc || media.src,
|
|
1287
|
+
source: "media-event"
|
|
1288
|
+
}
|
|
1289
|
+
}));
|
|
1077
1290
|
|
|
1078
1291
|
this._internalStateUpdate = true;
|
|
1079
1292
|
const prev = xstate.get(`xplayer-state-${this.id}`) || {};
|
|
@@ -1089,6 +1302,15 @@ class XPlayer extends HTMLElement {
|
|
|
1089
1302
|
|
|
1090
1303
|
media.addEventListener("pause", () => {
|
|
1091
1304
|
if (hasPlayed) this._showOverlay();
|
|
1305
|
+
if (hasPlayed) {
|
|
1306
|
+
this.dispatchEvent(new CustomEvent("xplayer-pause", {
|
|
1307
|
+
detail: {
|
|
1308
|
+
currentTime: media.currentTime,
|
|
1309
|
+
src: media.currentSrc || media.src,
|
|
1310
|
+
source: "media-event"
|
|
1311
|
+
}
|
|
1312
|
+
}));
|
|
1313
|
+
}
|
|
1092
1314
|
|
|
1093
1315
|
this._internalStateUpdate = true;
|
|
1094
1316
|
const prev = xstate.get(`xplayer-state-${this.id}`) || {};
|
|
@@ -1254,10 +1476,8 @@ class XPlayer extends HTMLElement {
|
|
|
1254
1476
|
e.preventDefault();
|
|
1255
1477
|
if (media.paused) {
|
|
1256
1478
|
media.play();
|
|
1257
|
-
this.dispatchEvent(new CustomEvent("xplayer-play", { detail: { currentTime: media.currentTime } }));
|
|
1258
1479
|
} else {
|
|
1259
1480
|
media.pause();
|
|
1260
|
-
this.dispatchEvent(new CustomEvent("xplayer-pause", { detail: { currentTime: media.currentTime } }));
|
|
1261
1481
|
}
|
|
1262
1482
|
this.updatePlayPauseIcon();
|
|
1263
1483
|
};
|
|
@@ -1493,10 +1713,8 @@ class XPlayer extends HTMLElement {
|
|
|
1493
1713
|
e.preventDefault();
|
|
1494
1714
|
if (this._media.paused) {
|
|
1495
1715
|
this._media.play();
|
|
1496
|
-
this.dispatchEvent(new CustomEvent("xplayer-play", { detail: { currentTime: this._media.currentTime } }));
|
|
1497
1716
|
} else {
|
|
1498
1717
|
this._media.pause();
|
|
1499
|
-
this.dispatchEvent(new CustomEvent("xplayer-pause", { detail: { currentTime: this._media.currentTime } }));
|
|
1500
1718
|
}
|
|
1501
1719
|
this.updatePlayPauseIcon();
|
|
1502
1720
|
});
|
|
@@ -1681,6 +1899,18 @@ class XPlayer extends HTMLElement {
|
|
|
1681
1899
|
return `${m}:${s}`;
|
|
1682
1900
|
}
|
|
1683
1901
|
|
|
1902
|
+
_observePlayerResize() {
|
|
1903
|
+
if (typeof ResizeObserver !== "function" || this._resizeObserver) return;
|
|
1904
|
+
this._resizeObserver = new ResizeObserver(() => {
|
|
1905
|
+
if (this._resizeFrame) cancelAnimationFrame(this._resizeFrame);
|
|
1906
|
+
this._resizeFrame = requestAnimationFrame(() => {
|
|
1907
|
+
this._resizeFrame = null;
|
|
1908
|
+
this._updateDimensions();
|
|
1909
|
+
});
|
|
1910
|
+
});
|
|
1911
|
+
this._resizeObserver.observe(this);
|
|
1912
|
+
}
|
|
1913
|
+
|
|
1684
1914
|
_updateDimensions() {
|
|
1685
1915
|
const container = this.shadowRoot.querySelector("#media-container");
|
|
1686
1916
|
const player = this.shadowRoot.querySelector(".player");
|
|
@@ -1724,7 +1954,9 @@ class XPlayer extends HTMLElement {
|
|
|
1724
1954
|
}
|
|
1725
1955
|
}
|
|
1726
1956
|
|
|
1727
|
-
customElements.
|
|
1957
|
+
if (!customElements.get("x-player")) {
|
|
1958
|
+
customElements.define("x-player", XPlayer);
|
|
1959
|
+
}
|
|
1728
1960
|
|
|
1729
1961
|
// SVG-Icon Helper (direkt im File, keine Abhängigkeit)
|
|
1730
1962
|
function svgIcon(name) {
|
|
@@ -1741,8 +1973,3 @@ function svgIcon(name) {
|
|
|
1741
1973
|
default: return '';
|
|
1742
1974
|
}
|
|
1743
1975
|
}
|
|
1744
|
-
|
|
1745
|
-
// Entferne alle title-Attribute von Steuerelementen im Shadow DOM
|
|
1746
|
-
Array.from(this.shadowRoot.querySelectorAll('[title]')).forEach(el => {
|
|
1747
|
-
el.removeAttribute('title');
|
|
1748
|
-
});
|
package/components/xrouter.js
CHANGED
|
@@ -106,6 +106,20 @@ class XRouter extends HTMLElement {
|
|
|
106
106
|
};
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
+
static get xtendLayoutStabilityProfile() {
|
|
110
|
+
return {
|
|
111
|
+
schema: 'xtend.layout-stability.v1',
|
|
112
|
+
componentRef: 'x-router',
|
|
113
|
+
minBlockSize: 'var(--xtend-router-reserved-block-size, var(--xtend-layout-reserved-block-size, 12rem))',
|
|
114
|
+
intrinsicSize: 'auto var(--xtend-router-reserved-block-size, 12rem)',
|
|
115
|
+
slotReserve: ['outlet'],
|
|
116
|
+
hydrationShiftPolicy: 'no-geometry-shift',
|
|
117
|
+
skeletonParity: true,
|
|
118
|
+
shellFirstCompatible: true,
|
|
119
|
+
lazyLoadingCompatible: true
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
109
123
|
static get xtendNavigationRoutingUxProfile() {
|
|
110
124
|
return {
|
|
111
125
|
schema: 'xtend.component.navigation-routing-ux-profile.v1',
|
|
@@ -465,6 +479,8 @@ class XRouter extends HTMLElement {
|
|
|
465
479
|
<style>
|
|
466
480
|
:host {
|
|
467
481
|
display: block;
|
|
482
|
+
min-block-size: var(--xtend-router-reserved-block-size, var(--xtend-layout-reserved-block-size, 1px));
|
|
483
|
+
contain-intrinsic-size: auto var(--xtend-router-reserved-block-size, var(--xtend-layout-reserved-block-size, 12rem));
|
|
468
484
|
--xtend-nav-surface: transparent;
|
|
469
485
|
--xtend-nav-text: var(--xtend-text-primary, var(--xtend-text, CanvasText));
|
|
470
486
|
--xtend-nav-border-color: transparent;
|
|
@@ -483,11 +499,12 @@ class XRouter extends HTMLElement {
|
|
|
483
499
|
--xtend-router-text: var(--xtend-nav-text);
|
|
484
500
|
}
|
|
485
501
|
#outlet {
|
|
486
|
-
min-height: 1px;
|
|
502
|
+
min-height: var(--xtend-router-reserved-block-size, var(--xtend-layout-reserved-block-size, 1px));
|
|
487
503
|
outline: none;
|
|
488
504
|
color: var(--xtend-router-text);
|
|
489
505
|
background: var(--xtend-router-surface);
|
|
490
506
|
overflow-wrap: anywhere;
|
|
507
|
+
box-sizing: border-box;
|
|
491
508
|
}
|
|
492
509
|
#outlet[data-xtend-skeleton-active="true"] {
|
|
493
510
|
display: block;
|
|
@@ -500,7 +517,7 @@ class XRouter extends HTMLElement {
|
|
|
500
517
|
margin-inline: var(--xtend-skeleton-margin-inline, 0);
|
|
501
518
|
min-width: 0;
|
|
502
519
|
box-sizing: border-box;
|
|
503
|
-
min-height: var(--xtend-router-skeleton-min-height, 12rem);
|
|
520
|
+
min-height: var(--xtend-router-reserved-block-size, var(--xtend-layout-reserved-block-size, var(--xtend-router-skeleton-min-height, 12rem)));
|
|
504
521
|
padding: var(--xtend-skeleton-padding, 1rem);
|
|
505
522
|
border-radius: var(--xtend-skeleton-radius, 8px);
|
|
506
523
|
background: var(--xtend-skeleton-surface, rgba(148, 163, 184, 0.12));
|
|
@@ -1094,6 +1111,14 @@ class XRouter extends HTMLElement {
|
|
|
1094
1111
|
_showRouteSkeleton(route, context = {}) {
|
|
1095
1112
|
if (!this._outlet || !this._routeSkeletonEnabled(route)) return null;
|
|
1096
1113
|
const options = this._getRouteSkeletonOptions(route, context);
|
|
1114
|
+
if (options.minHeight) {
|
|
1115
|
+
this.style.setProperty('--xtend-router-skeleton-min-height', options.minHeight);
|
|
1116
|
+
if (!this.style.getPropertyValue('--xtend-router-reserved-block-size')) {
|
|
1117
|
+
this.style.setProperty('--xtend-router-reserved-block-size', options.minHeight);
|
|
1118
|
+
}
|
|
1119
|
+
this._outlet.style.setProperty('--xtend-router-skeleton-min-height', options.minHeight);
|
|
1120
|
+
this._outlet.style.setProperty('--xtend-router-reserved-block-size', this.style.getPropertyValue('--xtend-router-reserved-block-size') || options.minHeight);
|
|
1121
|
+
}
|
|
1097
1122
|
const loader = typeof window !== 'undefined' && window.XTendLoader;
|
|
1098
1123
|
const skeleton = loader && typeof loader.showSkeleton === 'function'
|
|
1099
1124
|
? loader.showSkeleton(this._outlet, options)
|
package/components/xsection.js
CHANGED
|
@@ -45,6 +45,19 @@ class XSection extends HTMLElement {
|
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
static get xtendLayoutStabilityProfile() {
|
|
49
|
+
return {
|
|
50
|
+
schema: "xtend.layout-stability.v1",
|
|
51
|
+
componentRef: "x-section",
|
|
52
|
+
minBlockSize: "var(--section-reserved-block-size, var(--xtend-layout-reserved-block-size, auto))",
|
|
53
|
+
intrinsicSize: "auto var(--section-reserved-block-size, 12rem)",
|
|
54
|
+
slotReserve: ["default"],
|
|
55
|
+
hydrationShiftPolicy: "no-geometry-shift",
|
|
56
|
+
shellFirstCompatible: true,
|
|
57
|
+
lazyLoadingCompatible: true
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
48
61
|
static get xtendLayoutDisplayMediaUxProfile() {
|
|
49
62
|
return {
|
|
50
63
|
schema: "xtend.component.layout-display-media-ux-profile.v1",
|
|
@@ -90,6 +103,8 @@ class XSection extends HTMLElement {
|
|
|
90
103
|
border: none;
|
|
91
104
|
max-width: var(--section-content-max, var(--xtend-layout-content-max, 100%));
|
|
92
105
|
min-width: 0;
|
|
106
|
+
min-block-size: var(--section-reserved-block-size, var(--xtend-layout-reserved-block-size, auto));
|
|
107
|
+
contain-intrinsic-size: auto var(--section-reserved-block-size, var(--xtend-layout-reserved-block-size, 12rem));
|
|
93
108
|
overflow-wrap: anywhere;
|
|
94
109
|
}
|
|
95
110
|
|
package/components/xsidepanel.js
CHANGED
|
@@ -322,7 +322,8 @@ class XSidePanel extends HTMLElement {
|
|
|
322
322
|
.content {
|
|
323
323
|
flex: 1;
|
|
324
324
|
min-height: 0;
|
|
325
|
-
overflow: auto;
|
|
325
|
+
overflow-y: auto;
|
|
326
|
+
overflow-x: hidden;
|
|
326
327
|
padding: var(--side-panel-content-padding, 1rem);
|
|
327
328
|
}
|
|
328
329
|
:host([collapsed]) .content {
|
|
@@ -609,6 +610,7 @@ class XSidePanel extends HTMLElement {
|
|
|
609
610
|
_syncA11y(record) {
|
|
610
611
|
if (!this._panel) return;
|
|
611
612
|
const mode = record && record.mode || this._mode();
|
|
613
|
+
const placement = record && record.placement || this._placement();
|
|
612
614
|
const collapsed = Boolean(record && record.collapsed) || this.hasAttribute('collapsed') || mode === 'collapsed';
|
|
613
615
|
const modal = Boolean(record && record.modal) || this.hasAttribute('modal') || mode === 'overlay';
|
|
614
616
|
this._panel.setAttribute('role', modal ? 'dialog' : 'complementary');
|
|
@@ -616,10 +618,16 @@ class XSidePanel extends HTMLElement {
|
|
|
616
618
|
this._panel.setAttribute('aria-hidden', this.hasAttribute('open') ? 'false' : 'true');
|
|
617
619
|
this._panel.setAttribute('aria-expanded', collapsed ? 'false' : 'true');
|
|
618
620
|
if (this._collapseButton) this._collapseButton.setAttribute('aria-label', collapsed ? 'Expand panel' : 'Collapse panel');
|
|
619
|
-
if (this._collapseIcon) this._collapseIcon.setAttribute('name', collapsed
|
|
621
|
+
if (this._collapseIcon) this._collapseIcon.setAttribute('name', this._collapseIconName(collapsed, placement));
|
|
620
622
|
if (this._pinButton) this._pinButton.setAttribute('aria-pressed', this.hasAttribute('pinned') ? 'true' : 'false');
|
|
621
623
|
}
|
|
622
624
|
|
|
625
|
+
_collapseIconName(collapsed, placement) {
|
|
626
|
+
if (placement === 'right' || placement === 'inline') return collapsed ? 'chevron-left' : 'chevron-right';
|
|
627
|
+
if (placement === 'bottom') return collapsed ? 'chevron-up' : 'chevron-down';
|
|
628
|
+
return collapsed ? 'chevron-right' : 'chevron-left';
|
|
629
|
+
}
|
|
630
|
+
|
|
623
631
|
_handleActionClick(event) {
|
|
624
632
|
const control = event.target && event.target.closest && event.target.closest('button[data-action]');
|
|
625
633
|
const action = control && control.getAttribute('data-action');
|
|
@@ -4,7 +4,7 @@ export declare const SURFACE_SNAPSHOT_SCHEMA: 'xtend.surface.snapshot.v1';
|
|
|
4
4
|
export declare const SURFACE_DIAGNOSTIC_SCHEMA: 'xtend.surface.diagnostic.v1';
|
|
5
5
|
export declare const SURFACE_OPERATION_RESULT_SCHEMA: 'xtend.surface.operation-result.v1';
|
|
6
6
|
|
|
7
|
-
export type XtendSurfaceType = 'window' | 'side-panel' | 'modal' | 'dialog' | 'drawer' | 'popover' | 'tooltip';
|
|
7
|
+
export type XtendSurfaceType = 'window' | 'side-panel' | 'modal' | 'dialog' | 'drawer' | 'popover' | 'tooltip' | 'region' | 'toast' | 'lightbox' | 'menu';
|
|
8
8
|
export type XtendSurfaceStatus = 'closed' | 'open' | 'minimized';
|
|
9
9
|
|
|
10
10
|
export interface XtendSurfaceBounds {
|
|
@@ -21,6 +21,7 @@ export interface XtendSurfaceRecord {
|
|
|
21
21
|
id: string;
|
|
22
22
|
manager: string;
|
|
23
23
|
type: XtendSurfaceType;
|
|
24
|
+
kind?: string | null;
|
|
24
25
|
label: string;
|
|
25
26
|
stateKey: string;
|
|
26
27
|
status: XtendSurfaceStatus;
|