@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.
Files changed (566) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +4 -0
  3. package/catalog/component-catalog-coverage.js +2 -0
  4. package/catalog/epic13-package-export-lock.js +11 -1
  5. package/catalog/epic13-rmt-production-readiness.js +0 -1
  6. package/catalog/epic18-rmt-action-effect-runtime.d.ts +36 -0
  7. package/catalog/epic18-rmt-action-effect-runtime.js +249 -0
  8. package/catalog/epic18-rmt-app-platform-authoring.d.ts +39 -0
  9. package/catalog/epic18-rmt-app-platform-authoring.js +319 -0
  10. package/catalog/epic18-rmt-app-platform-fixture.d.ts +33 -0
  11. package/catalog/epic18-rmt-app-platform-fixture.js +221 -0
  12. package/catalog/epic18-rmt-app-platform-release-handoff.d.ts +30 -0
  13. package/catalog/epic18-rmt-app-platform-release-handoff.js +231 -0
  14. package/catalog/epic18-rmt-app-platform-tooling.d.ts +38 -0
  15. package/catalog/epic18-rmt-app-platform-tooling.js +242 -0
  16. package/catalog/epic18-rmt-component-template-primitives.d.ts +33 -0
  17. package/catalog/epic18-rmt-component-template-primitives.js +240 -0
  18. package/catalog/epic18-rmt-dom-descriptor-renderer.d.ts +35 -0
  19. package/catalog/epic18-rmt-dom-descriptor-renderer.js +232 -0
  20. package/catalog/epic18-rmt-event-routing-runtime.d.ts +35 -0
  21. package/catalog/epic18-rmt-event-routing-runtime.js +234 -0
  22. package/catalog/epic18-rmt-state-selector-runtime.d.ts +34 -0
  23. package/catalog/epic18-rmt-state-selector-runtime.js +216 -0
  24. package/catalog/epic18-rmt-surface-resource-graph-runtime.d.ts +36 -0
  25. package/catalog/epic18-rmt-surface-resource-graph-runtime.js +256 -0
  26. package/catalog/surface-manager-controller.js +5 -1
  27. package/catalog/surface-manager-materialization.js +7 -1
  28. package/catalog/surface-manager-overlay-bridge.js +41 -6
  29. package/catalog/surface-manager-workbench-fixture.js +1 -1
  30. package/catalog/surface-type-capability-matrix.d.ts +61 -0
  31. package/catalog/surface-type-capability-matrix.js +183 -0
  32. package/catalog/type-exports-rmt.js +37 -1
  33. package/catalog/type-exports.js +3 -3
  34. package/components/icon-packs/lucide.js +4 -0
  35. package/components/manifest.json +2 -0
  36. package/components/prism-rmt.d.ts +34 -0
  37. package/components/prism-rmt.js +130 -0
  38. package/components/xcards.js +15 -0
  39. package/components/xcode.d.ts +36 -1
  40. package/components/xcode.js +215 -20
  41. package/components/xfooter.js +17 -0
  42. package/components/xheader.js +14 -0
  43. package/components/xhero.js +16 -1
  44. package/components/xlink.js +97 -14
  45. package/components/xmasonry.js +15 -0
  46. package/components/xplayer.d.ts +44 -2
  47. package/components/xplayer.js +242 -15
  48. package/components/xrouter.js +27 -2
  49. package/components/xsection.js +15 -0
  50. package/components/xsidepanel.js +10 -2
  51. package/components/xsurfacemanager-controller.d.ts +2 -1
  52. package/components/xsurfacemanager-controller.js +27 -3
  53. package/components/xsurfacemanager.d.ts +2 -0
  54. package/components/xsurfacemanager.js +20 -8
  55. package/components/xsurfaceoverlay-bridge.d.ts +20 -5
  56. package/components/xsurfaceoverlay-bridge.js +114 -18
  57. package/components/xsurfaceportal.d.ts +29 -0
  58. package/components/xsurfaceportal.js +122 -0
  59. package/components/xsurfaceregion.d.ts +50 -0
  60. package/components/xsurfaceregion.js +285 -0
  61. package/components/xsurfacewindow.js +2 -1
  62. package/components/xtooltip.js +89 -23
  63. package/docs/README.md +222 -298
  64. package/docs/changelog.md +107 -0
  65. package/docs/component-catalog-coverage.md +9 -9
  66. package/docs/component-platform.md +19 -1
  67. package/docs/component-ux-app-authoring.md +56 -63
  68. package/docs/components/xcode.md +83 -53
  69. package/docs/components/xsurfaceportal.md +32 -0
  70. package/docs/components/xsurfaceregion.md +37 -0
  71. package/docs/components.md +105 -69
  72. package/docs/de/README.md +264 -0
  73. package/docs/de/XTend-ADR.md +221 -0
  74. package/docs/de/a11y-keyboard-smokes.md +62 -0
  75. package/docs/de/about.md +18 -0
  76. package/docs/de/api.md +157 -0
  77. package/docs/de/best-practices.md +76 -0
  78. package/docs/de/changelog.md +107 -0
  79. package/docs/de/component-catalog-coverage.md +58 -0
  80. package/docs/de/component-lab.md +103 -0
  81. package/docs/de/component-long-tail-migration.md +41 -0
  82. package/docs/de/component-platform.md +177 -0
  83. package/docs/de/component-ux-app-authoring.md +123 -0
  84. package/docs/de/component-ux-authoring.md +96 -0
  85. package/docs/de/component-ux-gates.md +45 -0
  86. package/docs/de/components/x-rmt-lifecycle-demo-build.md +60 -0
  87. package/docs/de/components/xalert.md +81 -0
  88. package/docs/de/components/xbutton.md +103 -0
  89. package/docs/de/components/xcalendar.md +82 -0
  90. package/docs/de/components/xcards.md +128 -0
  91. package/docs/de/components/xcheckbox.md +102 -0
  92. package/docs/de/components/xcode.md +156 -0
  93. package/docs/de/components/xdialog.md +92 -0
  94. package/docs/de/components/xdrawer.md +84 -0
  95. package/docs/de/components/xfooter.md +126 -0
  96. package/docs/de/components/xform.md +128 -0
  97. package/docs/de/components/xheader.md +308 -0
  98. package/docs/de/components/xhero.md +142 -0
  99. package/docs/de/components/xicon.md +125 -0
  100. package/docs/de/components/xinput.md +129 -0
  101. package/docs/de/components/xlightbox.md +98 -0
  102. package/docs/de/components/xlink.md +109 -0
  103. package/docs/de/components/xmasonry.md +124 -0
  104. package/docs/de/components/xmenu.md +158 -0
  105. package/docs/de/components/xmodal.md +82 -0
  106. package/docs/de/components/xplayer.md +104 -0
  107. package/docs/de/components/xpopover.md +67 -0
  108. package/docs/de/components/xprogress.md +56 -0
  109. package/docs/de/components/xradio.md +103 -0
  110. package/docs/de/components/xrouter.md +260 -0
  111. package/docs/de/components/xsection.md +125 -0
  112. package/docs/de/components/xselect.md +105 -0
  113. package/docs/de/components/xsidepanel.md +30 -0
  114. package/docs/de/components/xspinner.md +102 -0
  115. package/docs/de/components/xstate.md +148 -0
  116. package/docs/de/components/xstatus.md +55 -0
  117. package/docs/de/components/xsummary.md +78 -0
  118. package/docs/de/components/xsurfacemanager.md +27 -0
  119. package/docs/de/components/xsurfacewindow.md +21 -0
  120. package/docs/de/components/xtabs.md +160 -0
  121. package/docs/de/components/xtextarea.md +98 -0
  122. package/docs/de/components/xtheme.md +167 -0
  123. package/docs/de/components/xtoast.md +62 -0
  124. package/docs/de/components/xtooltip.md +66 -0
  125. package/docs/de/components/xtype.md +82 -0
  126. package/docs/de/components/xutils.md +144 -0
  127. package/docs/de/components/xwriter.md +94 -0
  128. package/docs/de/components.md +153 -0
  129. package/docs/de/conditional-network-evidence-ci.md +38 -0
  130. package/docs/de/conditional-network-evidence.md +50 -0
  131. package/docs/de/core-migration-guide.md +110 -0
  132. package/docs/de/design-tokens.md +116 -0
  133. package/docs/de/docs-rmt-production-hardening.md +31 -0
  134. package/docs/de/enterprise-adoption.md +413 -0
  135. package/docs/de/enterprise-component-flex-release-handoff.md +129 -0
  136. package/docs/de/epic10-platform-gates.md +62 -0
  137. package/docs/de/epic10-release-handoff.md +81 -0
  138. package/docs/de/epic11-enterprise-ux-handoff.md +70 -0
  139. package/docs/de/epic12-rc0-handoff.md +61 -0
  140. package/docs/de/epic18-media-manager-vendor-upstream.md +318 -0
  141. package/docs/de/epic18-rmt-app-platform-release-handoff.md +67 -0
  142. package/docs/de/epic18-vendor-bugfixes.md +34 -0
  143. package/docs/de/existing-component-metadata.md +67 -0
  144. package/docs/de/hydration-performance-closure.md +34 -0
  145. package/docs/de/hydration-policies.md +71 -0
  146. package/docs/de/known-residual-triage.md +22 -0
  147. package/docs/de/manifest-import-policy.md +79 -0
  148. package/docs/de/manifest.md +112 -0
  149. package/docs/de/motion-contrast.md +67 -0
  150. package/docs/de/package-export-lock.md +44 -0
  151. package/docs/de/performance-measurements.md +106 -0
  152. package/docs/de/performance-regression.md +89 -0
  153. package/docs/de/performance.md +94 -0
  154. package/docs/de/previews/README.md +17 -0
  155. package/docs/de/prod-browser-csp-smokes.md +40 -0
  156. package/docs/de/public-component-types.md +79 -0
  157. package/docs/de/quick-start-guide.md +220 -0
  158. package/docs/de/rc0-adoption-guide.md +102 -0
  159. package/docs/de/rc0-gate-matrix.md +58 -0
  160. package/docs/de/rc1-gate-matrix-ci-handoff.md +56 -0
  161. package/docs/de/rc1-migration-notes.md +69 -0
  162. package/docs/de/rc1-readiness.md +46 -0
  163. package/docs/de/release-owner-acceptance.md +56 -0
  164. package/docs/de/release-report-pack-dry-run-evidence.md +39 -0
  165. package/docs/de/rmt-action-effect-runtime.md +81 -0
  166. package/docs/de/rmt-app-platform-authoring.md +54 -0
  167. package/docs/de/rmt-app-platform-fixture.md +46 -0
  168. package/docs/de/rmt-app-platform-migration-guide.md +88 -0
  169. package/docs/de/rmt-app-platform-tooling.md +79 -0
  170. package/docs/de/rmt-component-template-primitives.md +57 -0
  171. package/docs/de/rmt-dom-descriptor-renderer.md +64 -0
  172. package/docs/de/rmt-dsl-authoring-polish.md +145 -0
  173. package/docs/de/rmt-event-routing-runtime.md +81 -0
  174. package/docs/de/rmt-first-demo-app.md +77 -0
  175. package/docs/de/rmt-first-xtend-apps.md +129 -0
  176. package/docs/de/rmt-kernel-panic-recovery-incident-handoff.md +61 -0
  177. package/docs/de/rmt-kernel-security-hardening-migration.md +50 -0
  178. package/docs/de/rmt-kernel-trusted-output-authoring.md +69 -0
  179. package/docs/de/rmt-language-server.md +234 -0
  180. package/docs/de/rmt-lifecycle-demo.md +24 -0
  181. package/docs/de/rmt-linter.md +140 -0
  182. package/docs/de/rmt-node-ssr-adapter.md +100 -0
  183. package/docs/de/rmt-php-ssr-adapter.md +120 -0
  184. package/docs/de/rmt-production-readiness.md +63 -0
  185. package/docs/de/rmt-state-selector-runtime.md +47 -0
  186. package/docs/de/rmt-surface-resource-graph-runtime.md +92 -0
  187. package/docs/de/rmt-tooling-release-gates.md +77 -0
  188. package/docs/de/rmt-vnext-authoring.md +170 -0
  189. package/docs/de/rmt-vnext-component-primitives.md +188 -0
  190. package/docs/de/rmt-vnext-cross-surface-events.md +68 -0
  191. package/docs/de/rmt-vnext-enterprise-mfe-handoff.md +70 -0
  192. package/docs/de/rmt-vnext-fabric-bridge-evidence.md +81 -0
  193. package/docs/de/rmt-vnext-migration-notes.md +62 -0
  194. package/docs/de/rmt-vnext-primitive-authoring-tooling.md +247 -0
  195. package/docs/de/rmt-vnext-primitive-grammar-design.md +289 -0
  196. package/docs/de/rmt-vnext-primitive-lowering.md +108 -0
  197. package/docs/de/rmt-vnext-primitive-migration.md +119 -0
  198. package/docs/de/rmt-vnext-primitive-parser-ast.md +76 -0
  199. package/docs/de/rmt-vnext-primitive-semantic-graph.md +118 -0
  200. package/docs/de/rmt-vnext-primitives-compiler-backlog.md +739 -0
  201. package/docs/de/rmt-vnext-release-handoff.md +83 -0
  202. package/docs/de/rmt-vnext-remote-surfaces.md +90 -0
  203. package/docs/de/rmt-vnext-source-to-sea-gate.md +612 -0
  204. package/docs/de/rmt-vnext-surface-registry-enterprise.md +76 -0
  205. package/docs/de/screenreader-signals.md +56 -0
  206. package/docs/de/supply-chain-gates.md +100 -0
  207. package/docs/de/surface-manager-authoring-guide.md +94 -0
  208. package/docs/de/surface-manager-browser-lab.md +45 -0
  209. package/docs/de/surface-manager-component-lab.md +43 -0
  210. package/docs/de/surface-manager-controller.md +66 -0
  211. package/docs/de/surface-manager-layout-engines.md +32 -0
  212. package/docs/de/surface-manager-lazy-hydration.md +63 -0
  213. package/docs/de/surface-manager-migration-guide.md +122 -0
  214. package/docs/de/surface-manager-native-rmt-surfaces.md +38 -0
  215. package/docs/de/surface-manager-overlay-bridge.md +53 -0
  216. package/docs/de/surface-manager-persistence.md +30 -0
  217. package/docs/de/surface-manager-quality-gates.md +51 -0
  218. package/docs/de/surface-manager-release-handoff.md +68 -0
  219. package/docs/de/surface-manager-remote-policy.md +54 -0
  220. package/docs/de/surface-manager-rmt-authoring.md +102 -0
  221. package/docs/de/surface-manager-route-lifecycle.md +59 -0
  222. package/docs/de/surface-manager-runtime-release-handoff.md +69 -0
  223. package/docs/de/surface-manager-side-panel-runtime.md +36 -0
  224. package/docs/de/surface-manager-stack-policy.md +39 -0
  225. package/docs/de/surface-manager-window-runtime.md +47 -0
  226. package/docs/de/surface-manager-workbench-fixture.md +43 -0
  227. package/docs/de/third-party-design-authoring.md +406 -0
  228. package/docs/de/trusted-dom-boundary-browser-proof.md +32 -0
  229. package/docs/de/trusted-dom-sanitizing.md +110 -0
  230. package/docs/de/type-exports.md +61 -0
  231. package/docs/de/typescript-components.md +63 -0
  232. package/docs/de/visual-browser-regression.md +83 -0
  233. package/docs/de/visual-owner-artifacts.md +46 -0
  234. package/docs/de/visual-snapshot-automation.md +87 -0
  235. package/docs/de/xtend-api-types.md +55 -0
  236. package/docs/de/xtend-builder-types.md +55 -0
  237. package/docs/de/xtend-catalog-types.md +44 -0
  238. package/docs/de/xtend-fabric-rmt-lane-mapping.md +143 -0
  239. package/docs/de/xtend-fabric.md +474 -0
  240. package/docs/de/xtend-loader-types.md +58 -0
  241. package/docs/de/xtend-loader.md +265 -0
  242. package/docs/de/xtend-policy-types.md +38 -0
  243. package/docs/de/xtend-rmt-types.md +40 -0
  244. package/docs/de/xtend-vendor-types.md +36 -0
  245. package/docs/de/xtendrmt-app-dsl.md +334 -0
  246. package/docs/de/xtendrmt-migration-guide.md +266 -0
  247. package/docs/de/xtendrmt-native-authoring.md +333 -0
  248. package/docs/de/xtendrmt-overview.md +109 -0
  249. package/docs/de/xtendrmt-parsedown-scheduling.md +301 -0
  250. package/docs/de/xtendrmt-runtime-bridge.md +155 -0
  251. package/docs/en/README.md +163 -0
  252. package/docs/en/XTend-ADR.md +221 -0
  253. package/docs/en/a11y-keyboard-smokes.md +68 -0
  254. package/docs/en/about.md +25 -0
  255. package/docs/en/api.md +171 -0
  256. package/docs/en/best-practices.md +125 -0
  257. package/docs/en/changelog.md +104 -0
  258. package/docs/en/component-catalog-coverage.md +104 -0
  259. package/docs/en/component-lab.md +103 -0
  260. package/docs/en/component-long-tail-migration.md +41 -0
  261. package/docs/en/component-platform.md +243 -0
  262. package/docs/en/component-ux-app-authoring.md +118 -0
  263. package/docs/en/component-ux-authoring.md +96 -0
  264. package/docs/en/component-ux-gates.md +45 -0
  265. package/docs/en/components/x-rmt-lifecycle-demo-build.md +75 -0
  266. package/docs/en/components/xalert.md +94 -0
  267. package/docs/en/components/xbutton.md +118 -0
  268. package/docs/en/components/xcalendar.md +95 -0
  269. package/docs/en/components/xcards.md +139 -0
  270. package/docs/en/components/xcheckbox.md +118 -0
  271. package/docs/en/components/xcode.md +153 -0
  272. package/docs/en/components/xdialog.md +108 -0
  273. package/docs/en/components/xdrawer.md +110 -0
  274. package/docs/en/components/xfooter.md +138 -0
  275. package/docs/en/components/xform.md +147 -0
  276. package/docs/en/components/xheader.md +308 -0
  277. package/docs/en/components/xhero.md +157 -0
  278. package/docs/en/components/xicon.md +149 -0
  279. package/docs/en/components/xinput.md +147 -0
  280. package/docs/en/components/xlightbox.md +113 -0
  281. package/docs/en/components/xlink.md +130 -0
  282. package/docs/en/components/xmasonry.md +136 -0
  283. package/docs/en/components/xmenu.md +185 -0
  284. package/docs/en/components/xmodal.md +102 -0
  285. package/docs/en/components/xplayer.md +114 -0
  286. package/docs/en/components/xpopover.md +87 -0
  287. package/docs/en/components/xprogress.md +73 -0
  288. package/docs/en/components/xradio.md +119 -0
  289. package/docs/en/components/xrouter.md +260 -0
  290. package/docs/en/components/xsection.md +136 -0
  291. package/docs/en/components/xselect.md +122 -0
  292. package/docs/en/components/xsidepanel.md +48 -0
  293. package/docs/en/components/xspinner.md +118 -0
  294. package/docs/en/components/xstate.md +163 -0
  295. package/docs/en/components/xstatus.md +71 -0
  296. package/docs/en/components/xsummary.md +90 -0
  297. package/docs/en/components/xsurfacemanager.md +42 -0
  298. package/docs/en/components/xsurfacewindow.md +31 -0
  299. package/docs/en/components/xtabs.md +187 -0
  300. package/docs/en/components/xtextarea.md +115 -0
  301. package/docs/en/components/xtheme.md +203 -0
  302. package/docs/en/components/xtoast.md +78 -0
  303. package/docs/en/components/xtooltip.md +85 -0
  304. package/docs/en/components/xtype.md +91 -0
  305. package/docs/en/components/xutils.md +161 -0
  306. package/docs/en/components/xwriter.md +106 -0
  307. package/docs/en/components.md +151 -0
  308. package/docs/en/conditional-network-evidence-ci.md +38 -0
  309. package/docs/en/conditional-network-evidence.md +50 -0
  310. package/docs/en/core-migration-guide.md +110 -0
  311. package/docs/en/design-tokens.md +137 -0
  312. package/docs/en/docs-rmt-production-hardening.md +31 -0
  313. package/docs/en/enterprise-adoption.md +413 -0
  314. package/docs/en/enterprise-component-flex-release-handoff.md +129 -0
  315. package/docs/en/epic10-platform-gates.md +62 -0
  316. package/docs/en/epic10-release-handoff.md +81 -0
  317. package/docs/en/epic11-enterprise-ux-handoff.md +70 -0
  318. package/docs/en/epic12-rc0-handoff.md +61 -0
  319. package/docs/en/epic18-media-manager-vendor-upstream.md +232 -0
  320. package/docs/en/epic18-rmt-app-platform-release-handoff.md +60 -0
  321. package/docs/en/epic18-vendor-bugfixes.md +29 -0
  322. package/docs/en/existing-component-metadata.md +67 -0
  323. package/docs/en/hydration-performance-closure.md +34 -0
  324. package/docs/en/hydration-policies.md +75 -0
  325. package/docs/en/known-residual-triage.md +22 -0
  326. package/docs/en/manifest-import-policy.md +81 -0
  327. package/docs/en/manifest.md +135 -0
  328. package/docs/en/motion-contrast.md +67 -0
  329. package/docs/en/package-export-lock.md +44 -0
  330. package/docs/en/performance-measurements.md +106 -0
  331. package/docs/en/performance-regression.md +89 -0
  332. package/docs/en/performance.md +132 -0
  333. package/docs/en/previews/README.md +17 -0
  334. package/docs/en/prod-browser-csp-smokes.md +40 -0
  335. package/docs/en/public-component-types.md +79 -0
  336. package/docs/en/quick-start-guide.md +189 -0
  337. package/docs/en/rc0-adoption-guide.md +102 -0
  338. package/docs/en/rc0-gate-matrix.md +58 -0
  339. package/docs/en/rc1-gate-matrix-ci-handoff.md +56 -0
  340. package/docs/en/rc1-migration-notes.md +69 -0
  341. package/docs/en/rc1-readiness.md +46 -0
  342. package/docs/en/release-owner-acceptance.md +56 -0
  343. package/docs/en/release-report-pack-dry-run-evidence.md +39 -0
  344. package/docs/en/rmt-action-effect-runtime.md +101 -0
  345. package/docs/en/rmt-app-platform-authoring.md +47 -0
  346. package/docs/en/rmt-app-platform-fixture.md +35 -0
  347. package/docs/en/rmt-app-platform-migration-guide.md +75 -0
  348. package/docs/en/rmt-app-platform-tooling.md +58 -0
  349. package/docs/en/rmt-component-template-primitives.md +49 -0
  350. package/docs/en/rmt-dom-descriptor-renderer.md +54 -0
  351. package/docs/en/rmt-dsl-authoring-polish.md +143 -0
  352. package/docs/en/rmt-event-routing-runtime.md +98 -0
  353. package/docs/en/rmt-first-demo-app.md +87 -0
  354. package/docs/en/rmt-first-xtend-apps.md +127 -0
  355. package/docs/en/rmt-kernel-panic-recovery-incident-handoff.md +60 -0
  356. package/docs/en/rmt-kernel-security-hardening-migration.md +49 -0
  357. package/docs/en/rmt-kernel-trusted-output-authoring.md +68 -0
  358. package/docs/en/rmt-language-server.md +243 -0
  359. package/docs/en/rmt-lifecycle-demo.md +23 -0
  360. package/docs/en/rmt-linter.md +146 -0
  361. package/docs/en/rmt-node-ssr-adapter.md +99 -0
  362. package/docs/en/rmt-php-ssr-adapter.md +118 -0
  363. package/docs/en/rmt-production-readiness.md +63 -0
  364. package/docs/en/rmt-state-selector-runtime.md +34 -0
  365. package/docs/en/rmt-surface-resource-graph-runtime.md +68 -0
  366. package/docs/en/rmt-tooling-release-gates.md +77 -0
  367. package/docs/en/rmt-vnext-authoring.md +102 -0
  368. package/docs/en/rmt-vnext-component-primitives.md +185 -0
  369. package/docs/en/rmt-vnext-cross-surface-events.md +59 -0
  370. package/docs/en/rmt-vnext-enterprise-mfe-handoff.md +62 -0
  371. package/docs/en/rmt-vnext-fabric-bridge-evidence.md +64 -0
  372. package/docs/en/rmt-vnext-migration-notes.md +62 -0
  373. package/docs/en/rmt-vnext-primitive-authoring-tooling.md +174 -0
  374. package/docs/en/rmt-vnext-primitive-grammar-design.md +268 -0
  375. package/docs/en/rmt-vnext-primitive-lowering.md +91 -0
  376. package/docs/en/rmt-vnext-primitive-migration.md +93 -0
  377. package/docs/en/rmt-vnext-primitive-parser-ast.md +59 -0
  378. package/docs/en/rmt-vnext-primitive-semantic-graph.md +103 -0
  379. package/docs/en/rmt-vnext-primitives-compiler-backlog.md +327 -0
  380. package/docs/en/rmt-vnext-release-handoff.md +83 -0
  381. package/docs/en/rmt-vnext-remote-surfaces.md +81 -0
  382. package/docs/en/rmt-vnext-source-to-sea-gate.md +482 -0
  383. package/docs/en/rmt-vnext-surface-registry-enterprise.md +68 -0
  384. package/docs/en/screenreader-signals.md +56 -0
  385. package/docs/en/supply-chain-gates.md +106 -0
  386. package/docs/en/surface-manager-authoring-guide.md +94 -0
  387. package/docs/en/surface-manager-browser-lab.md +45 -0
  388. package/docs/en/surface-manager-component-lab.md +43 -0
  389. package/docs/en/surface-manager-controller.md +66 -0
  390. package/docs/en/surface-manager-layout-engines.md +32 -0
  391. package/docs/en/surface-manager-lazy-hydration.md +63 -0
  392. package/docs/en/surface-manager-migration-guide.md +113 -0
  393. package/docs/en/surface-manager-native-rmt-surfaces.md +38 -0
  394. package/docs/en/surface-manager-overlay-bridge.md +53 -0
  395. package/docs/en/surface-manager-persistence.md +30 -0
  396. package/docs/en/surface-manager-quality-gates.md +51 -0
  397. package/docs/en/surface-manager-release-handoff.md +68 -0
  398. package/docs/en/surface-manager-remote-policy.md +54 -0
  399. package/docs/en/surface-manager-rmt-authoring.md +89 -0
  400. package/docs/en/surface-manager-route-lifecycle.md +59 -0
  401. package/docs/en/surface-manager-runtime-release-handoff.md +69 -0
  402. package/docs/en/surface-manager-side-panel-runtime.md +36 -0
  403. package/docs/en/surface-manager-stack-policy.md +39 -0
  404. package/docs/en/surface-manager-window-runtime.md +47 -0
  405. package/docs/en/surface-manager-workbench-fixture.md +43 -0
  406. package/docs/en/third-party-design-authoring.md +406 -0
  407. package/docs/en/trusted-dom-boundary-browser-proof.md +32 -0
  408. package/docs/en/trusted-dom-sanitizing.md +124 -0
  409. package/docs/en/type-exports.md +61 -0
  410. package/docs/en/typescript-components.md +63 -0
  411. package/docs/en/visual-browser-regression.md +83 -0
  412. package/docs/en/visual-owner-artifacts.md +46 -0
  413. package/docs/en/visual-snapshot-automation.md +87 -0
  414. package/docs/en/xtend-api-types.md +55 -0
  415. package/docs/en/xtend-builder-types.md +55 -0
  416. package/docs/en/xtend-catalog-types.md +44 -0
  417. package/docs/en/xtend-fabric-rmt-lane-mapping.md +143 -0
  418. package/docs/en/xtend-fabric.md +474 -0
  419. package/docs/en/xtend-loader-types.md +58 -0
  420. package/docs/en/xtend-loader.md +265 -0
  421. package/docs/en/xtend-policy-types.md +38 -0
  422. package/docs/en/xtend-rmt-types.md +40 -0
  423. package/docs/en/xtend-vendor-types.md +36 -0
  424. package/docs/en/xtendrmt-app-dsl.md +331 -0
  425. package/docs/en/xtendrmt-migration-guide.md +256 -0
  426. package/docs/en/xtendrmt-native-authoring.md +336 -0
  427. package/docs/en/xtendrmt-overview.md +63 -0
  428. package/docs/en/xtendrmt-parsedown-scheduling.md +301 -0
  429. package/docs/en/xtendrmt-runtime-bridge.md +155 -0
  430. package/docs/enterprise-adoption.md +4 -2
  431. package/docs/epic18-media-manager-vendor-upstream.md +318 -0
  432. package/docs/epic18-rmt-app-platform-release-handoff.md +67 -0
  433. package/docs/epic18-vendor-bugfixes.md +34 -0
  434. package/docs/index.php +1056 -109
  435. package/docs/manifest.md +8 -2
  436. package/docs/menu.json +986 -133
  437. package/docs/package-export-lock.md +2 -2
  438. package/docs/public-component-types.md +2 -2
  439. package/docs/quick-start-guide.md +126 -58
  440. package/docs/rmt-action-effect-runtime.md +101 -0
  441. package/docs/rmt-app-platform-authoring.md +54 -0
  442. package/docs/rmt-app-platform-fixture.md +46 -0
  443. package/docs/rmt-app-platform-migration-guide.md +88 -0
  444. package/docs/rmt-app-platform-tooling.md +79 -0
  445. package/docs/rmt-component-template-primitives.md +57 -0
  446. package/docs/rmt-dom-descriptor-renderer.md +64 -0
  447. package/docs/rmt-dsl-authoring-polish.md +67 -44
  448. package/docs/rmt-event-routing-runtime.md +98 -0
  449. package/docs/rmt-first-demo-app.md +2 -2
  450. package/docs/rmt-first-xtend-apps.md +70 -46
  451. package/docs/rmt-language-server.md +61 -4
  452. package/docs/rmt-lifecycle-demo.md +1 -2
  453. package/docs/rmt-node-ssr-adapter.md +144 -0
  454. package/docs/rmt-php-ssr-adapter.md +158 -0
  455. package/docs/rmt-state-selector-runtime.md +47 -0
  456. package/docs/rmt-surface-resource-graph-runtime.md +92 -0
  457. package/docs/rmt-vnext-authoring.md +128 -18
  458. package/docs/rmt-vnext-component-primitives.md +188 -0
  459. package/docs/rmt-vnext-fabric-bridge-evidence.md +81 -0
  460. package/docs/rmt-vnext-primitive-authoring-tooling.md +247 -0
  461. package/docs/rmt-vnext-primitive-grammar-design.md +289 -0
  462. package/docs/rmt-vnext-primitive-lowering.md +108 -0
  463. package/docs/rmt-vnext-primitive-migration.md +119 -0
  464. package/docs/rmt-vnext-primitive-parser-ast.md +76 -0
  465. package/docs/rmt-vnext-primitive-semantic-graph.md +118 -0
  466. package/docs/rmt-vnext-primitives-compiler-backlog.md +742 -0
  467. package/docs/rmt-vnext-release-handoff.md +14 -0
  468. package/docs/rmt-vnext-source-to-sea-gate.md +629 -0
  469. package/docs/surface-manager-migration-guide.md +34 -6
  470. package/docs/surface-manager-overlay-bridge.md +9 -4
  471. package/docs/surface-manager-rmt-authoring.md +50 -34
  472. package/docs/surface-manager-workbench-fixture.md +1 -2
  473. package/docs/third-party-design-authoring.md +1 -1
  474. package/docs/type-exports.md +3 -3
  475. package/docs/utils/pageloader.js +811 -62
  476. package/docs/visual-browser-regression.md +1 -1
  477. package/docs/xtend-rmt-types.md +3 -2
  478. package/docs/xtendrmt-app-dsl.md +187 -122
  479. package/docs/xtendrmt-docs-shell-vnext.rmt +165 -0
  480. package/docs/xtendrmt-migration-guide.md +48 -17
  481. package/docs/xtendrmt-native-authoring.md +213 -217
  482. package/docs/xtendrmt-overview.md +81 -61
  483. package/docs/xtendrmt-parsedown-scheduling.md +23 -8
  484. package/fabric/package.json +1 -1
  485. package/package.json +684 -21
  486. package/tools/package.json +5 -1
  487. package/tools/rmt-editor/vscode/README.md +72 -5
  488. package/tools/rmt-editor/vscode/XTend-Logo.png +0 -0
  489. package/tools/rmt-editor/vscode/extension.d.ts +33 -0
  490. package/tools/rmt-editor/vscode/extension.js +1816 -7
  491. package/tools/rmt-editor/vscode/language-configuration.json +2 -1
  492. package/tools/rmt-editor/vscode/package.json +193 -2
  493. package/tools/rmt-editor/vscode/snippets/rmt.code-snippets +41 -0
  494. package/tools/rmt-editor/vscode/syntaxes/rmt.tmLanguage.json +103 -1
  495. package/tools/rmt-editor/vscode/templates/launch.json +70 -0
  496. package/tools/rmt-editor/vscode/templates/tasks.json +172 -0
  497. package/tools/rmt-editor/vscode/xtend-rmt-language-0.0.0-enterprise-readiness.vsix +0 -0
  498. package/tools/rmt-language/app-platform-tooling.d.ts +128 -0
  499. package/tools/rmt-language/app-platform-tooling.js +677 -0
  500. package/tools/rmt-language/completions.d.ts +5 -0
  501. package/tools/rmt-language/completions.js +185 -3
  502. package/tools/rmt-language/diagnostics.js +54 -0
  503. package/tools/rmt-language/hover.js +36 -0
  504. package/tools/rmt-language/rmt-tooling-public-types.d.ts +7 -0
  505. package/tools/rmt-language/rules/app-platform-policy.js +39 -0
  506. package/tools/rmt-language/rules/index.js +5 -1
  507. package/tools/rmt-language/semantic-graph.d.ts +6 -0
  508. package/tools/rmt-language/semantic-graph.js +928 -0
  509. package/tools/rmt-language/snippets/index.js +44 -0
  510. package/tools/rmt-language/snippets/rmt.code-snippets +41 -0
  511. package/tools/rmt-language/vnext-compatibility.d.ts +10 -0
  512. package/tools/rmt-language/vnext-compatibility.js +642 -0
  513. package/tools/rmt-language/vnext-compiler.d.ts +5 -0
  514. package/tools/rmt-language/vnext-compiler.js +863 -17
  515. package/tools/rmt-language/vnext-parser.js +725 -9
  516. package/tools/rmt-language/vnext-release.d.ts +1 -0
  517. package/tools/rmt-language/vnext-release.js +20 -0
  518. package/tools/rmt-language/vnext-source-to-sea.d.ts +33 -0
  519. package/tools/rmt-language/vnext-source-to-sea.js +2227 -0
  520. package/tools/rmt-language/vnext-surfaces.js +111 -52
  521. package/tools/rmt-language/vnext-tooling.d.ts +19 -1
  522. package/tools/rmt-language/vnext-tooling.js +1247 -5
  523. package/tools/rmt-language-server/protocol.js +3 -0
  524. package/tools/rmt-language-server/server.d.ts +2 -0
  525. package/tools/rmt-language-server/server.js +176 -22
  526. package/tools/rmt-linter/cli.d.ts +2 -0
  527. package/tools/rmt-linter/cli.js +62 -0
  528. package/xtend-builder/generators/registry.js +11 -0
  529. package/xtend-builder/generators/rmt-app-platform.js +239 -0
  530. package/xtend-builder/generators/rmt-lifecycle-demo.js +3 -11
  531. package/xtend-builder/lib/cli.js +38 -0
  532. package/xtend-builder/package.json +3 -3
  533. package/xtend-builder/scaffold.config.js +29 -2
  534. package/xtend.css +49 -2
  535. package/xtendrmt/package.json +49 -1
  536. package/xtendrmt/rmt-action-effect-runtime.d.ts +126 -0
  537. package/xtendrmt/rmt-action-effect-runtime.js +494 -0
  538. package/xtendrmt/rmt-component-capability-registry.d.ts +180 -0
  539. package/xtendrmt/rmt-component-capability-registry.js +636 -0
  540. package/xtendrmt/rmt-core.d.ts +6 -0
  541. package/xtendrmt/rmt-core.esm.js +32 -6
  542. package/xtendrmt/rmt-dom-descriptor-renderer.d.ts +107 -0
  543. package/xtendrmt/rmt-dom-descriptor-renderer.js +1066 -0
  544. package/xtendrmt/rmt-event-routing-runtime.d.ts +144 -0
  545. package/xtendrmt/rmt-event-routing-runtime.js +666 -0
  546. package/xtendrmt/rmt-lifecycle-demo.app.js +2 -2
  547. package/xtendrmt/rmt-lifecycle-demo.core.json +4 -0
  548. package/xtendrmt/rmt-lifecycle-demo.rmt-build.app.js +1 -1
  549. package/xtendrmt/rmt-lifecycle-demo.rmt-build.scaffold.json +2 -2
  550. package/xtendrmt/rmt-lifecycle-demo.scaffold.json +4 -4
  551. package/xtendrmt/rmt-native-shell-runtime.d.ts +77 -0
  552. package/xtendrmt/rmt-native-shell-runtime.js +309 -0
  553. package/xtendrmt/rmt-node-ssr-adapter.d.ts +197 -0
  554. package/xtendrmt/rmt-node-ssr-adapter.js +1006 -0
  555. package/xtendrmt/rmt-php-ssr-adapter.php +976 -0
  556. package/xtendrmt/rmt-runtime.browser.js +32 -6
  557. package/xtendrmt/rmt-runtime.esm.js +32 -6
  558. package/xtendrmt/rmt-state-selector-runtime.d.ts +166 -0
  559. package/xtendrmt/rmt-state-selector-runtime.js +866 -0
  560. package/xtendrmt/rmt-surface-resource-graph-runtime.d.ts +224 -0
  561. package/xtendrmt/rmt-surface-resource-graph-runtime.js +932 -0
  562. package/xtendrmt/rmt-vnext-enterprise-mfe-demo.core.json +3 -0
  563. package/xtendrmt/rmt-vnext-reference-demo.core.json +3 -0
  564. package/xtendrmt/xtendrmt-bestcase-demo.core.json +3420 -372
  565. package/xtendrmt/xtendrmt-bestcase-demo.js +424 -8
  566. package/xtendrmt/xtendrmt-bestcase-demo.rmt +214 -6
@@ -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
 
@@ -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: none;
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: unset;
144
- max-width: unset;
195
+ min-width: 0;
196
+ max-width: 100%;
145
197
  width: auto;
146
198
  gap: 0.5em;
147
- flex: none;
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
- flex-shrink: 0;
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.define("x-player", XPlayer);
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
- });
@@ -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)
@@ -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
 
@@ -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 ? 'chevron-right' : 'chevron-left');
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;