@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,92 @@
1
1
  import { xstate } from './xstate.js';
2
2
 
3
+ const XCODE_LANGUAGE_ALIASES = Object.freeze({
4
+ js: 'javascript',
5
+ jsx: 'jsx',
6
+ ts: 'typescript',
7
+ tsx: 'tsx',
8
+ html: 'markup',
9
+ xml: 'markup',
10
+ svg: 'markup',
11
+ md: 'markdown',
12
+ plaintext: 'text',
13
+ plain: 'text',
14
+ txt: 'text',
15
+ 'rmt-vnext': 'rmt',
16
+ xtendrmt: 'rmt'
17
+ });
18
+
19
+ function getGlobalTarget() {
20
+ if (typeof window !== 'undefined') return window;
21
+ if (typeof globalThis !== 'undefined') return globalThis;
22
+ return {};
23
+ }
24
+
25
+ function escapeHtml(str) {
26
+ return String(str == null ? '' : str)
27
+ .replace(/&/g, '&')
28
+ .replace(/</g, '&lt;')
29
+ .replace(/>/g, '&gt;')
30
+ .replace(/"/g, '&quot;')
31
+ .replace(/'/g, '&#39;')
32
+ .replace(/`/g, '&#96;');
33
+ }
34
+
35
+ function escapeAttribute(str) {
36
+ return escapeHtml(str).replace(/\s+/g, '-');
37
+ }
38
+
39
+ function normalizeLanguage(value) {
40
+ const raw = String(value || 'text').trim().toLowerCase();
41
+ return XCODE_LANGUAGE_ALIASES[raw] || raw || 'text';
42
+ }
43
+
44
+ function safeHighlightResult(result, fallbackCode, fallbackLanguage) {
45
+ if (!result || typeof result.html !== 'string') {
46
+ return {
47
+ html: escapeHtml(fallbackCode),
48
+ highlighted: false,
49
+ engine: 'plain-text',
50
+ language: fallbackLanguage
51
+ };
52
+ }
53
+ return {
54
+ html: result.html,
55
+ highlighted: result.highlighted === true,
56
+ engine: result.engine || (result.highlighted ? 'prism' : 'plain-text'),
57
+ language: result.language || fallbackLanguage
58
+ };
59
+ }
60
+
61
+ function callHighlighter(provider, input) {
62
+ if (!provider) return null;
63
+ try {
64
+ if (typeof provider === 'function') return provider(input);
65
+ if (typeof provider.highlight === 'function') return provider.highlight(input);
66
+ } catch (error) {
67
+ return {
68
+ html: escapeHtml(input.code),
69
+ highlighted: false,
70
+ engine: 'plain-text',
71
+ language: input.language,
72
+ error: error && error.message ? error.message : String(error)
73
+ };
74
+ }
75
+ return null;
76
+ }
77
+
3
78
  class XCode extends HTMLElement {
4
79
  static get observedAttributes() {
5
- return ['lang'];
80
+ return ['lang', 'language'];
81
+ }
82
+
83
+ static registerHighlighter(provider) {
84
+ this._highlighter = provider || null;
85
+ return this._highlighter;
86
+ }
87
+
88
+ static getHighlighter() {
89
+ return this._highlighter || null;
6
90
  }
7
91
 
8
92
  static get xtendComponentContract() {
@@ -76,6 +160,12 @@ class XCode extends HTMLElement {
76
160
  this._lightDomObserver = null;
77
161
  this._pendingHydration = false;
78
162
  this._suppressLightDomObserver = false;
163
+ this._lastHighlightSnapshot = {
164
+ highlighted: false,
165
+ highlightEngine: 'plain-text',
166
+ highlightLanguage: 'text',
167
+ languageAlias: 'default'
168
+ };
79
169
  }
80
170
 
81
171
  connectedCallback() {
@@ -87,9 +177,12 @@ class XCode extends HTMLElement {
87
177
  // State-Änderungen abonnieren (z.B. externes Setzen von Code oder Sprache)
88
178
  this._unsubscribeState = xstate.subscribe((key, value) => {
89
179
  if (key === `xcode-state-${this.id}` && typeof value === "object") {
90
- if (typeof value.lang === "string" && value.lang !== this.getAttribute('lang')) {
180
+ if (typeof value.lang === "string" && value.lang !== this._getLanguageMeta().language) {
91
181
  this.setAttribute('lang', value.lang);
92
182
  }
183
+ if (typeof value.language === "string" && !this.hasAttribute('lang') && value.language !== this.getAttribute('language')) {
184
+ this.setAttribute('language', value.language);
185
+ }
93
186
  if (typeof value.code === "string" && value.code !== this._getRawCode()) {
94
187
  this._setRawCode(value.code);
95
188
  this._render();
@@ -107,13 +200,16 @@ class XCode extends HTMLElement {
107
200
  }
108
201
 
109
202
  attributeChangedCallback(name, oldValue, newValue) {
110
- if (name === 'lang' && oldValue !== newValue) {
203
+ if ((name === 'lang' || name === 'language') && oldValue !== newValue) {
111
204
  if (!this.isConnected) return;
112
205
  this._render();
113
206
  // State aktualisieren
114
207
  if (this.id) {
208
+ const languageMeta = this._getLanguageMeta();
115
209
  xstate.set(`xcode-state-${this.id}`, {
116
- lang: newValue,
210
+ lang: languageMeta.language,
211
+ language: languageMeta.language,
212
+ languageAlias: languageMeta.alias,
117
213
  code: this._getRawCode()
118
214
  });
119
215
  }
@@ -162,8 +258,11 @@ class XCode extends HTMLElement {
162
258
  hydrate() {
163
259
  this._render();
164
260
  if (this.id) {
261
+ const languageMeta = this._getLanguageMeta();
165
262
  xstate.set(`xcode-state-${this.id}`, {
166
- lang: this.getAttribute('lang') || 'text',
263
+ lang: languageMeta.language,
264
+ language: languageMeta.language,
265
+ languageAlias: languageMeta.alias,
167
266
  code: this._getRawCode(),
168
267
  hydrated: true
169
268
  });
@@ -192,6 +291,60 @@ class XCode extends HTMLElement {
192
291
  tpl.innerHTML = code;
193
292
  }
194
293
 
294
+ _getLanguageMeta() {
295
+ const langAttribute = this.getAttribute('lang');
296
+ const languageAttribute = this.getAttribute('language');
297
+ const raw = langAttribute || languageAttribute || 'text';
298
+ return {
299
+ language: normalizeLanguage(raw),
300
+ rawLanguage: raw,
301
+ alias: langAttribute ? 'lang' : (languageAttribute ? 'language' : 'default')
302
+ };
303
+ }
304
+
305
+ _highlightCode(rawCode, languageMeta) {
306
+ const globalTarget = getGlobalTarget();
307
+ const language = languageMeta.language || 'text';
308
+ const input = {
309
+ code: rawCode,
310
+ language,
311
+ rawLanguage: languageMeta.rawLanguage,
312
+ languageAlias: languageMeta.alias,
313
+ element: this
314
+ };
315
+ const registeredResult = callHighlighter(this.constructor.getHighlighter(), input)
316
+ || callHighlighter(globalTarget.XTendXCodeHighlighter, input);
317
+ if (registeredResult) return safeHighlightResult(registeredResult, rawCode, language);
318
+
319
+ const prism = globalTarget.Prism;
320
+ if (!prism || !prism.languages || typeof prism.highlight !== 'function') {
321
+ return safeHighlightResult(null, rawCode, language);
322
+ }
323
+
324
+ if (globalTarget.XTendRmtPrism && typeof globalTarget.XTendRmtPrism.register === 'function') {
325
+ globalTarget.XTendRmtPrism.register(prism);
326
+ }
327
+ const prismHighlighter = globalTarget.XTendRmtPrism && typeof globalTarget.XTendRmtPrism.createHighlighter === 'function'
328
+ ? globalTarget.XTendRmtPrism.createHighlighter(prism)
329
+ : null;
330
+ const prismResult = callHighlighter(prismHighlighter, input);
331
+ if (prismResult) return safeHighlightResult(prismResult, rawCode, language);
332
+
333
+ const grammar = prism.languages[language] || prism.languages[languageMeta.rawLanguage] || null;
334
+ if (!grammar) return safeHighlightResult(null, rawCode, language);
335
+
336
+ try {
337
+ return safeHighlightResult({
338
+ html: prism.highlight(rawCode, grammar, language),
339
+ highlighted: true,
340
+ engine: 'prism',
341
+ language
342
+ }, rawCode, language);
343
+ } catch (error) {
344
+ return safeHighlightResult(null, rawCode, language);
345
+ }
346
+ }
347
+
195
348
  _render() {
196
349
  this._suppressLightDomObserver = true;
197
350
  // Always wrap content in a <template> (virtual, not rendered)
@@ -209,17 +362,15 @@ class XCode extends HTMLElement {
209
362
  if (template !== tpl) template.remove();
210
363
  });
211
364
  const rawCode = this._readTemplateCode(tpl);
212
- const lang = this.getAttribute('lang') || 'text';
213
- function escapeHtml(str) {
214
- return str
215
- .replace(/&/g, '&amp;')
216
- .replace(/</g, '&lt;')
217
- .replace(/>/g, '&gt;')
218
- .replace(/"/g, '&quot;')
219
- .replace(/'/g, '&#39;')
220
- .replace(/`/g, '&#96;');
221
- }
222
- const escapedCode = escapeHtml(rawCode);
365
+ const languageMeta = this._getLanguageMeta();
366
+ const highlightedCode = this._highlightCode(rawCode, languageMeta);
367
+ this._lastHighlightSnapshot = {
368
+ highlighted: highlightedCode.highlighted,
369
+ highlightEngine: highlightedCode.engine,
370
+ highlightLanguage: highlightedCode.language,
371
+ languageAlias: languageMeta.alias
372
+ };
373
+ const lang = escapeAttribute(highlightedCode.language || languageMeta.language || 'text');
223
374
  this.shadowRoot.innerHTML = `
224
375
  <style>
225
376
  :host {
@@ -265,6 +416,41 @@ class XCode extends HTMLElement {
265
416
  font-family: inherit;
266
417
  font-size: inherit;
267
418
  }
419
+ .token.comment {
420
+ color: var(--x-code-token-comment, #8b949e);
421
+ font-style: italic;
422
+ }
423
+ .token.string {
424
+ color: var(--x-code-token-string, #a5d6ff);
425
+ }
426
+ .token.number,
427
+ .token.boolean {
428
+ color: var(--x-code-token-number, #79c0ff);
429
+ }
430
+ .token.keyword,
431
+ .token.rmt-primitive,
432
+ .token.rmt-lifecycle,
433
+ .token.rmt-boundary {
434
+ color: var(--x-code-token-keyword, #ff7b72);
435
+ }
436
+ .token.function,
437
+ .token.rmt-action {
438
+ color: var(--x-code-token-function, #d2a8ff);
439
+ }
440
+ .token.property,
441
+ .token.variable,
442
+ .token.rmt-identifier,
443
+ .token.rmt-reference {
444
+ color: var(--x-code-token-property, #ffa657);
445
+ }
446
+ .token.class-name,
447
+ .token.rmt-component {
448
+ color: var(--x-code-token-class, #7ee787);
449
+ }
450
+ .token.operator,
451
+ .token.punctuation {
452
+ color: var(--x-code-token-punctuation, #c9d1d9);
453
+ }
268
454
  .copy-btn {
269
455
  position: absolute;
270
456
  top: 1.1em;
@@ -318,7 +504,7 @@ class XCode extends HTMLElement {
318
504
  <button class="copy-btn" part="copy control" aria-label="Code kopieren" title="Code kopieren">
319
505
  <svg part="copy-icon control icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2.5"/><rect x="2" y="2" width="13" height="13" rx="2.5"/></svg>
320
506
  </button>
321
- <pre part="root pre"><code part="code" class="language-${lang}">${escapedCode}</code></pre>
507
+ <pre part="root pre"><code part="code" class="language-${lang}" data-x-code-highlight-engine="${escapeAttribute(highlightedCode.engine)}">${highlightedCode.html}</code></pre>
322
508
  `;
323
509
  const copyBtn = this.shadowRoot.querySelector('.copy-btn');
324
510
  copyBtn.addEventListener('click', async () => {
@@ -332,8 +518,11 @@ class XCode extends HTMLElement {
332
518
  }, 1500);
333
519
  // State aktualisieren (optional: z.B. für Kopier-Status)
334
520
  if (this.id) {
521
+ const nextLanguageMeta = this._getLanguageMeta();
335
522
  xstate.set(`xcode-state-${this.id}`, {
336
- lang: this.getAttribute('lang') || 'text',
523
+ lang: nextLanguageMeta.language,
524
+ language: nextLanguageMeta.language,
525
+ languageAlias: nextLanguageMeta.alias,
337
526
  code: rawCode,
338
527
  copied: true
339
528
  });
@@ -356,13 +545,19 @@ class XCode extends HTMLElement {
356
545
  }
357
546
 
358
547
  snapshot() {
548
+ const languageMeta = this._getLanguageMeta();
359
549
  return {
360
550
  schema: "xtend.component.layout-display-media-snapshot.v1",
361
551
  componentRef: "x-code",
362
552
  stateKey: `xcode-state-${this.id}`,
363
553
  schedule: "component.idle.hydrate",
364
- lang: this.getAttribute('lang') || 'text',
365
- codeLength: this._getRawCode().length
554
+ lang: languageMeta.language,
555
+ language: languageMeta.language,
556
+ codeLength: this._getRawCode().length,
557
+ highlighted: this._lastHighlightSnapshot.highlighted === true,
558
+ highlightEngine: this._lastHighlightSnapshot.highlightEngine || 'plain-text',
559
+ highlightLanguage: this._lastHighlightSnapshot.highlightLanguage || languageMeta.language,
560
+ languageAlias: this._lastHighlightSnapshot.languageAlias || languageMeta.alias
366
561
  };
367
562
  }
368
563
  }
@@ -52,6 +52,19 @@ class XFooter extends HTMLElement {
52
52
  };
53
53
  }
54
54
 
55
+ static get xtendLayoutStabilityProfile() {
56
+ return {
57
+ schema: "xtend.layout-stability.v1",
58
+ componentRef: "x-footer",
59
+ minBlockSize: "var(--footer-reserved-block-size, calc(var(--footer-logo-size, 40px) + 2rem + 2px))",
60
+ intrinsicSize: "auto var(--footer-reserved-block-size, 4.75rem)",
61
+ slotReserve: ["title", "nav", "extra"],
62
+ hydrationShiftPolicy: "no-geometry-shift",
63
+ shellFirstCompatible: true,
64
+ lazyLoadingCompatible: true
65
+ };
66
+ }
67
+
55
68
  static get xtendLayoutDisplayMediaUxProfile() {
56
69
  return {
57
70
  schema: "xtend.component.layout-display-media-ux-profile.v1",
@@ -149,10 +162,13 @@ class XFooter extends HTMLElement {
149
162
  color: var(--footer-fg, var(--xtend-layout-text, var(--xtend-text, #172033)));
150
163
  font-family: var(--footer-font-family, var(--xtend-layout-font-family, var(--xtend-font-family-body, 'Inter', 'Segoe UI', Arial, sans-serif)));
151
164
  font-size: var(--footer-font-size, var(--xtend-layout-font-size, 1rem));
165
+ --footer-reserved-block-size: calc(var(--footer-logo-size, 40px) + 2rem + 2px);
152
166
  --footer-grid-min: var(--xtend-layout-grid-min, minmax(10rem, 1fr));
153
167
  --footer-content-max: var(--xtend-layout-content-max, 100%);
154
168
  max-width: 100%;
155
169
  min-width: 0;
170
+ min-block-size: var(--footer-reserved-block-size);
171
+ contain-intrinsic-size: auto var(--footer-reserved-block-size);
156
172
  box-sizing: border-box;
157
173
  }
158
174
 
@@ -177,6 +193,7 @@ class XFooter extends HTMLElement {
177
193
  overflow-wrap: anywhere;
178
194
  max-width: var(--footer-content-max);
179
195
  min-width: 0;
196
+ min-height: var(--footer-reserved-block-size);
180
197
  box-sizing: border-box;
181
198
  transition: background 0.3s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
182
199
  }
@@ -84,6 +84,18 @@ class XHeader extends HTMLElement {
84
84
  idleOrBackgroundAllowed: false
85
85
  };
86
86
  }
87
+ static get xtendLayoutStabilityProfile() {
88
+ return {
89
+ schema: "xtend.layout-stability.v1",
90
+ componentRef: "x-header",
91
+ minBlockSize: "var(--header-reserved-block-size, var(--xtend-layout-reserved-block-size, 4.75rem))",
92
+ intrinsicSize: "auto var(--header-reserved-block-size, 4.75rem)",
93
+ slotReserve: ["title", "nav", "actions"],
94
+ hydrationShiftPolicy: "no-geometry-shift",
95
+ shellFirstCompatible: true,
96
+ lazyLoadingCompatible: true
97
+ };
98
+ }
87
99
  static get xtendLayoutDisplayMediaUxProfile() {
88
100
  return {
89
101
  schema: "xtend.component.layout-display-media-ux-profile.v1",
@@ -366,6 +378,8 @@ class XHeader extends HTMLElement {
366
378
  display: block;
367
379
  font-family: var(--xtend-header-font-family);
368
380
  color: var(--header-fg);
381
+ min-block-size: var(--header-reserved-block-size, var(--xtend-layout-reserved-block-size, auto));
382
+ contain-intrinsic-size: auto var(--header-reserved-block-size, var(--xtend-layout-reserved-block-size, 4.75rem));
369
383
  }
370
384
  header {
371
385
  display: grid;
@@ -42,6 +42,19 @@ class XHero extends HTMLElement {
42
42
  };
43
43
  }
44
44
 
45
+ static get xtendLayoutStabilityProfile() {
46
+ return {
47
+ schema: "xtend.layout-stability.v1",
48
+ componentRef: "x-hero",
49
+ minBlockSize: "var(--hero-reserved-block-size, var(--xtend-layout-reserved-block-size, clamp(12rem, 30vw, 22rem)))",
50
+ intrinsicSize: "auto var(--hero-reserved-block-size, 18rem)",
51
+ slotReserve: ["default", "title", "subtitle", "actions"],
52
+ hydrationShiftPolicy: "no-geometry-shift",
53
+ shellFirstCompatible: true,
54
+ lazyLoadingCompatible: true
55
+ };
56
+ }
57
+
45
58
  static get xtendLayoutDisplayMediaUxProfile() {
46
59
  return {
47
60
  schema: "xtend.component.layout-display-media-ux-profile.v1",
@@ -259,6 +272,8 @@ class XHero extends HTMLElement {
259
272
  font-family: var(--hero-font-family, var(--xtend-layout-font-family, inherit));
260
273
  max-width: 100%;
261
274
  min-width: 0;
275
+ min-block-size: var(--hero-reserved-block-size, var(--xtend-layout-reserved-block-size, auto));
276
+ contain-intrinsic-size: auto var(--hero-reserved-block-size, var(--xtend-layout-reserved-block-size, 18rem));
262
277
  box-sizing: border-box;
263
278
  }
264
279
  :host([data-theme-dark]) {
@@ -271,7 +286,7 @@ class XHero extends HTMLElement {
271
286
  position: relative;
272
287
  background-color: ${bg};
273
288
  ${bgImg ? `background-image: url('${bgImg}'); background-size: cover; background-position: center;` : ""}
274
- min-height: ${fullHeight ? "100vh" : "auto"};
289
+ min-height: ${fullHeight ? "100vh" : "var(--hero-reserved-block-size, var(--xtend-layout-reserved-block-size, auto))"};
275
290
  display: flex;
276
291
  justify-content: ${justify};
277
292
  align-items: ${alignItems};
@@ -177,10 +177,10 @@ class XLink extends HTMLElement {
177
177
  };
178
178
  }
179
179
 
180
- constructor() {
181
- super();
182
- this.attachShadow({ mode: 'open' });
183
- this.shadowRoot.innerHTML = `
180
+ static _getShadowTemplate() {
181
+ if (XLink.__shadowTemplate) return XLink.__shadowTemplate;
182
+ const template = document.createElement('template');
183
+ template.innerHTML = `
184
184
  <style>
185
185
  :host {
186
186
  display: var(--xtend-link-display, inline-block);
@@ -293,6 +293,88 @@ class XLink extends HTMLElement {
293
293
  <a part="root link" role="link" tabindex="0"><slot></slot></a>
294
294
  <span class="link-status" part="announcer" role="status" aria-live="polite" aria-atomic="true"></span>
295
295
  `;
296
+ XLink.__shadowTemplate = template;
297
+ return XLink.__shadowTemplate;
298
+ }
299
+
300
+ static _getNavigationRegistry() {
301
+ if (XLink.__navigationRegistry) return XLink.__navigationRegistry;
302
+ const registry = {
303
+ links: new Set(),
304
+ scheduled: false,
305
+ attached: false,
306
+ body: null,
307
+ sync() {
308
+ registry.scheduled = false;
309
+ registry.links.forEach((link) => {
310
+ if (link && typeof link._updateActive === 'function' && link.isConnected) {
311
+ link._updateActive();
312
+ }
313
+ });
314
+ },
315
+ schedule() {
316
+ if (registry.scheduled) return;
317
+ registry.scheduled = true;
318
+ const run = () => registry.sync();
319
+ if (typeof window !== 'undefined' && typeof window.requestAnimationFrame === 'function') {
320
+ window.requestAnimationFrame(run);
321
+ return;
322
+ }
323
+ if (typeof queueMicrotask === 'function') {
324
+ queueMicrotask(run);
325
+ return;
326
+ }
327
+ setTimeout(run, 0);
328
+ },
329
+ onNavigation() {
330
+ registry.schedule();
331
+ }
332
+ };
333
+ XLink.__navigationRegistry = registry;
334
+ return registry;
335
+ }
336
+
337
+ static _attachNavigationListeners(registry = XLink._getNavigationRegistry()) {
338
+ if (registry.attached || typeof window === 'undefined') return;
339
+ window.addEventListener('popstate', registry.onNavigation);
340
+ window.addEventListener('hashchange', registry.onNavigation);
341
+ window.addEventListener('xrouter-after-navigate', registry.onNavigation);
342
+ if (typeof document !== 'undefined' && document.body) {
343
+ document.body.addEventListener('x-navigate', registry.onNavigation);
344
+ registry.body = document.body;
345
+ }
346
+ registry.attached = true;
347
+ }
348
+
349
+ static _detachNavigationListeners(registry = XLink._getNavigationRegistry()) {
350
+ if (!registry.attached || registry.links.size > 0 || typeof window === 'undefined') return;
351
+ window.removeEventListener('popstate', registry.onNavigation);
352
+ window.removeEventListener('hashchange', registry.onNavigation);
353
+ window.removeEventListener('xrouter-after-navigate', registry.onNavigation);
354
+ if (registry.body) {
355
+ registry.body.removeEventListener('x-navigate', registry.onNavigation);
356
+ registry.body = null;
357
+ }
358
+ registry.attached = false;
359
+ registry.scheduled = false;
360
+ }
361
+
362
+ static _registerNavigationLink(link) {
363
+ const registry = XLink._getNavigationRegistry();
364
+ registry.links.add(link);
365
+ XLink._attachNavigationListeners(registry);
366
+ }
367
+
368
+ static _unregisterNavigationLink(link) {
369
+ const registry = XLink._getNavigationRegistry();
370
+ registry.links.delete(link);
371
+ XLink._detachNavigationListeners(registry);
372
+ }
373
+
374
+ constructor() {
375
+ super();
376
+ const shadow = this.attachShadow({ mode: 'open' });
377
+ shadow.appendChild(XLink._getShadowTemplate().content.cloneNode(true));
296
378
  this._anchor = this.shadowRoot.querySelector('a');
297
379
  this._status = this.shadowRoot.querySelector('.link-status');
298
380
  this._onClick = this._onClick.bind(this);
@@ -308,20 +390,14 @@ class XLink extends HTMLElement {
308
390
  this._anchor.addEventListener('click', this._onClick);
309
391
  this._anchor.addEventListener('keydown', this._onKeyDown);
310
392
  this._syncAnchorState();
311
- window.addEventListener('popstate', this._updateActive);
312
- window.addEventListener('hashchange', this._updateActive);
313
- window.addEventListener('xrouter-after-navigate', this._onNavigationChange);
314
- document.body.addEventListener('x-navigate', this._onNavigationChange);
393
+ XLink._registerNavigationLink(this);
315
394
  this._updateActive();
316
395
  }
317
396
 
318
397
  disconnectedCallback() {
319
398
  this._anchor.removeEventListener('click', this._onClick);
320
399
  this._anchor.removeEventListener('keydown', this._onKeyDown);
321
- window.removeEventListener('popstate', this._updateActive);
322
- window.removeEventListener('hashchange', this._updateActive);
323
- window.removeEventListener('xrouter-after-navigate', this._onNavigationChange);
324
- document.body.removeEventListener('x-navigate', this._onNavigationChange);
400
+ XLink._unregisterNavigationLink(this);
325
401
  }
326
402
 
327
403
  attributeChangedCallback(name, oldVal, newVal) {
@@ -428,15 +504,22 @@ class XLink extends HTMLElement {
428
504
 
429
505
  _syncActiveState(active) {
430
506
  const href = this.getAttribute('href') || '';
507
+ const normalizedHref = this._normalizePath(href.replace(/^#/, ''));
508
+ const previousActive = this._lastActiveState;
509
+ if (previousActive === active && this._lastActiveHref === normalizedHref) {
510
+ return;
511
+ }
512
+ this._lastActiveState = active;
513
+ this._lastActiveHref = normalizedHref;
431
514
  const detail = {
432
- href: this._normalizePath(href.replace(/^#/, '')),
515
+ href: normalizedHref,
433
516
  active,
434
517
  source: 'x-link',
435
518
  stateKey: `xlink-active-${this.id}`,
436
519
  scheduleRef: 'route.visible.render'
437
520
  };
438
521
  const stateApi = globalThis.xstate;
439
- if (stateApi && typeof stateApi.set === 'function') {
522
+ if (stateApi && typeof stateApi.set === 'function' && (active || previousActive !== undefined)) {
440
523
  stateApi.set(`xlink-active-${this.id}`, detail);
441
524
  }
442
525
  if (this._status) {
@@ -44,6 +44,19 @@ class XMasonry extends HTMLElement {
44
44
  };
45
45
  }
46
46
 
47
+ static get xtendLayoutStabilityProfile() {
48
+ return {
49
+ schema: "xtend.layout-stability.v1",
50
+ componentRef: "x-masonry",
51
+ minBlockSize: "var(--masonry-reserved-block-size, var(--xtend-layout-reserved-block-size, 18rem))",
52
+ intrinsicSize: "auto var(--masonry-reserved-block-size, 18rem)",
53
+ slotReserve: ["default"],
54
+ hydrationShiftPolicy: "no-geometry-shift",
55
+ shellFirstCompatible: true,
56
+ lazyLoadingCompatible: true
57
+ };
58
+ }
59
+
47
60
  static get xtendLayoutDisplayMediaUxProfile() {
48
61
  return {
49
62
  schema: "xtend.component.layout-display-media-ux-profile.v1",
@@ -95,6 +108,8 @@ class XMasonry extends HTMLElement {
95
108
  font-family: var(--masonry-font-family, var(--xtend-layout-font-family, inherit));
96
109
  max-width: 100%;
97
110
  min-width: 0;
111
+ min-block-size: var(--masonry-reserved-block-size, var(--xtend-layout-reserved-block-size, auto));
112
+ contain-intrinsic-size: auto var(--masonry-reserved-block-size, var(--xtend-layout-reserved-block-size, 18rem));
98
113
  }
99
114
 
100
115
  :host([data-theme="dark"]) {