@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
@@ -48,7 +48,11 @@
48
48
  'dialog',
49
49
  'drawer',
50
50
  'popover',
51
- 'tooltip'
51
+ 'tooltip',
52
+ 'region',
53
+ 'toast',
54
+ 'lightbox',
55
+ 'menu'
52
56
  ]);
53
57
 
54
58
  const DEFAULT_CAPABILITIES = Object.freeze({
@@ -58,7 +62,11 @@
58
62
  dialog: Object.freeze(['open', 'focus', 'close', 'snapshot']),
59
63
  drawer: Object.freeze(['open', 'focus', 'close', 'resize', 'restore', 'snapshot']),
60
64
  popover: Object.freeze(['open', 'focus', 'close', 'snapshot']),
61
- tooltip: Object.freeze(['open', 'close', 'snapshot'])
65
+ tooltip: Object.freeze(['open', 'close', 'snapshot']),
66
+ region: Object.freeze(['open', 'focus', 'close', 'update', 'restore', 'snapshot']),
67
+ toast: Object.freeze(['open', 'close', 'dismiss', 'snapshot']),
68
+ lightbox: Object.freeze(['open', 'focus', 'close', 'snapshot']),
69
+ menu: Object.freeze(['open', 'focus', 'close', 'update', 'snapshot'])
62
70
  });
63
71
 
64
72
  const DEFAULT_BOUNDS = Object.freeze({
@@ -68,7 +76,11 @@
68
76
  dialog: Object.freeze({ x: 0, y: 0, width: 480, height: 320, minWidth: 280, minHeight: 160 }),
69
77
  drawer: Object.freeze({ x: 0, y: 0, width: 360, height: 720, minWidth: 240, minHeight: 180 }),
70
78
  popover: Object.freeze({ x: 0, y: 0, width: 280, height: 160, minWidth: 160, minHeight: 96 }),
71
- tooltip: Object.freeze({ x: 0, y: 0, width: 220, height: 80, minWidth: 120, minHeight: 48 })
79
+ tooltip: Object.freeze({ x: 0, y: 0, width: 220, height: 80, minWidth: 120, minHeight: 48 }),
80
+ region: Object.freeze({ x: 0, y: 0, width: 640, height: 360, minWidth: 160, minHeight: 96 }),
81
+ toast: Object.freeze({ x: 0, y: 0, width: 360, height: 96, minWidth: 220, minHeight: 48 }),
82
+ lightbox: Object.freeze({ x: 0, y: 0, width: 720, height: 520, minWidth: 320, minHeight: 220 }),
83
+ menu: Object.freeze({ x: 0, y: 0, width: 280, height: 240, minWidth: 160, minHeight: 96 })
72
84
  });
73
85
 
74
86
  const DIAGNOSTIC_CODES = Object.freeze([
@@ -200,6 +212,7 @@
200
212
  id,
201
213
  manager: managerId,
202
214
  type,
215
+ kind: clampString(source.kind || record.kind, type),
203
216
  label,
204
217
  stateKey,
205
218
  status: defaultOpen ? 'open' : 'closed',
@@ -233,6 +246,7 @@
233
246
  id: record.id,
234
247
  manager: record.manager,
235
248
  type: record.type,
249
+ kind: record.kind || record.type,
236
250
  label: record.label,
237
251
  status: record.status,
238
252
  active: record.active,
@@ -496,9 +510,19 @@
496
510
 
497
511
  const previous = registry.get(record.id);
498
512
  if (previous) {
513
+ record.bounds = normalizeSurfaceBounds(previous.bounds, record.type);
514
+ record.previousBounds = previous.previousBounds
515
+ ? normalizeSurfaceBounds(previous.previousBounds, record.type)
516
+ : null;
499
517
  record.zIndex = previous.zIndex;
500
518
  record.active = previous.active;
501
519
  record.status = previous.status;
520
+ record.minimized = previous.minimized;
521
+ record.maximized = previous.maximized;
522
+ record.pinned = previous.pinned;
523
+ record.collapsed = previous.collapsed;
524
+ record.placement = previous.placement;
525
+ record.mode = previous.mode;
502
526
  }
503
527
  registry.set(record.id, record);
504
528
  if (record.status === 'open') {
@@ -55,6 +55,8 @@ export type XSurfaceManagerEventName =
55
55
  | 'surface-stack-policy-focus-restored'
56
56
  | 'surface-stack-policy-error'
57
57
  | 'surface-layout-engine-applied'
58
+ | 'surface-region-command'
59
+ | 'surface-portal-policy'
58
60
  | 'remote-surface-mounted'
59
61
  | 'remote-surface-degraded'
60
62
  | 'remote-surface-refused'
@@ -10,7 +10,7 @@ import {
10
10
  toOverlaySurfaceRecord
11
11
  } from './xsurfaceoverlay-bridge.js';
12
12
 
13
- const SURFACE_MANAGED_ELEMENT_SELECTOR = `x-surface-window, x-side-panel, ${SURFACE_OVERLAY_SELECTOR}`;
13
+ const SURFACE_MANAGED_ELEMENT_SELECTOR = `x-surface-window, x-side-panel, x-surface-region, ${SURFACE_OVERLAY_SELECTOR}`;
14
14
  const SURFACE_MANAGER_PERSISTENCE_SCHEMA = 'xtend.surface.manager-persistence.v1';
15
15
  const SURFACE_PERSISTED_SNAPSHOT_SCHEMA = 'xtend.surface.persisted-snapshot.v1';
16
16
  const SURFACE_PERSISTENCE_DIAGNOSTIC_SCHEMA = 'xtend.surface.persistence-diagnostic.v1';
@@ -31,7 +31,7 @@ const SURFACE_LAYOUT_ENGINE_SCHEMA = 'xtend.surface.layout-engine.v1';
31
31
  const SURFACE_LAYOUT_ENGINE_REPORT_SCHEMA = 'xtend.surface.layout-engine-report.v1';
32
32
  const SURFACE_LAYOUT_ENGINE_DIAGNOSTIC_SCHEMA = 'xtend.surface.layout-engine-diagnostic.v1';
33
33
  const SURFACE_LAYOUT_ENGINES = Object.freeze(['freeform', 'docked', 'split', 'tile', 'stacked']);
34
- const SURFACE_LAYOUT_SURFACE_TYPES = Object.freeze(['window', 'side-panel']);
34
+ const SURFACE_LAYOUT_SURFACE_TYPES = Object.freeze(['window', 'side-panel', 'region']);
35
35
  const SURFACE_LAYOUT_PLACEMENTS = Object.freeze(['left', 'right', 'top', 'bottom', 'inline', 'center']);
36
36
  const SURFACE_REMOTE_POLICY_SCHEMA = 'xtend.surface.remote-policy-bridge.v1';
37
37
  const SURFACE_REMOTE_POLICY_REPORT_SCHEMA = 'xtend.surface.remote-policy-report.v1';
@@ -105,7 +105,7 @@ function surfaceElementSelector(surfaceId) {
105
105
  .split(',')
106
106
  .map((selector) => `${selector.trim()}[id="${id}"]`)
107
107
  .join(', ');
108
- return `x-surface-window[surface-id="${id}"], x-side-panel[surface-id="${id}"], ${overlayBySurfaceId}, ${overlayById}`;
108
+ return `x-surface-window[surface-id="${id}"], x-side-panel[surface-id="${id}"], x-surface-region[surface-id="${id}"], x-surface-region[id="${id}"], [data-rmt-surface="${id}"], ${overlayBySurfaceId}, ${overlayById}`;
109
109
  }
110
110
 
111
111
  function safeJsonParse(value) {
@@ -486,6 +486,7 @@ function clonePersistedSurfaceRecord(record) {
486
486
  id: record.id,
487
487
  manager: record.manager,
488
488
  type: record.type,
489
+ kind: record.kind || record.type,
489
490
  label: record.label,
490
491
  status: record.status,
491
492
  active: Boolean(record.active),
@@ -679,7 +680,7 @@ class XSurfaceManager extends HTMLElement {
679
680
  lane: 'visible',
680
681
  hydrationPolicy: 'visible',
681
682
  criticalMeasurements: ['mount', 'register-surface', 'snapshot', 'surface-content-hydrate', 'surface-route-lifecycle', 'surface-stack-policy', 'surface-layout-engine', 'surface-remote-policy'],
682
- cleanup: ['slotchange', 'surface-window-command', 'surface-panel-command', 'surface-overlay-command', 'route-lifecycle-listeners', 'stack-policy-listeners']
683
+ cleanup: ['slotchange', 'surface-window-command', 'surface-panel-command', 'surface-region-command', 'surface-overlay-command', 'route-lifecycle-listeners', 'stack-policy-listeners']
683
684
  };
684
685
  }
685
686
 
@@ -749,6 +750,7 @@ class XSurfaceManager extends HTMLElement {
749
750
  this._handleSlotChange = this._registerAssignedSurfaces.bind(this);
750
751
  this._handleSurfaceCommand = this._onSurfaceCommand.bind(this);
751
752
  this._handlePanelCommand = this._onSurfaceCommand.bind(this);
753
+ this._handleRegionCommand = this._onSurfaceCommand.bind(this);
752
754
  this._handleOverlayCommand = this._onSurfaceCommand.bind(this);
753
755
  this._handleOverlayLifecycle = this._onOverlayLifecycle.bind(this);
754
756
  this._handleSurfaceRouteSignal = this._onSurfaceRouteSignal.bind(this);
@@ -817,6 +819,7 @@ class XSurfaceManager extends HTMLElement {
817
819
  this._slots.forEach((slot) => slot.addEventListener('slotchange', this._handleSlotChange));
818
820
  this.addEventListener('surface-window-command', this._handleSurfaceCommand);
819
821
  this.addEventListener('surface-panel-command', this._handlePanelCommand);
822
+ this.addEventListener('surface-region-command', this._handleRegionCommand);
820
823
  this.addEventListener('surface-overlay-command', this._handleOverlayCommand);
821
824
  this._addSurfaceRouteListeners();
822
825
  this._addSurfaceStackPolicyListeners();
@@ -843,6 +846,7 @@ class XSurfaceManager extends HTMLElement {
843
846
  this._slots.forEach((slot) => slot.removeEventListener('slotchange', this._handleSlotChange));
844
847
  this.removeEventListener('surface-window-command', this._handleSurfaceCommand);
845
848
  this.removeEventListener('surface-panel-command', this._handlePanelCommand);
849
+ this.removeEventListener('surface-region-command', this._handleRegionCommand);
846
850
  this.removeEventListener('surface-overlay-command', this._handleOverlayCommand);
847
851
  this._removeSurfaceRouteListeners();
848
852
  this._removeSurfaceStackPolicyListeners();
@@ -3642,13 +3646,21 @@ class XSurfaceManager extends HTMLElement {
3642
3646
 
3643
3647
  _onSurfaceCommand(event) {
3644
3648
  const detail = event.detail || {};
3645
- const { command, payload } = detail;
3649
+ const { payload } = detail;
3650
+ const rawCommand = detail.command;
3646
3651
  const surfaceId = detail.surfaceId || detail.id;
3647
- if (!surfaceId || !command) return;
3652
+ if (!surfaceId || !rawCommand) return;
3648
3653
  event.stopPropagation();
3654
+ const command = {
3655
+ show: 'open',
3656
+ hide: 'close',
3657
+ dismiss: 'close'
3658
+ }[rawCommand] || rawCommand;
3659
+ const current = this.snapshot().surfaces.find((record) => record.id === surfaceId);
3649
3660
  const commands = {
3650
3661
  open: () => this.openSurface(surfaceId, payload),
3651
3662
  close: () => this.closeSurface(surfaceId, payload && payload.reason),
3663
+ toggle: () => current && current.status !== 'closed' ? this.closeSurface(surfaceId, payload && payload.reason || 'toggle') : this.openSurface(surfaceId, payload),
3652
3664
  focus: () => this.focusSurface(surfaceId),
3653
3665
  move: () => this.moveSurface(surfaceId, payload),
3654
3666
  resize: () => this.resizeSurface(surfaceId, payload),
@@ -3677,7 +3689,7 @@ class XSurfaceManager extends HTMLElement {
3677
3689
  }
3678
3690
 
3679
3691
  const detail = event.detail || {};
3680
- if (event.type.endsWith('-opened')) {
3692
+ if (event.type.endsWith('-opened') || event.type === 'toast-shown') {
3681
3693
  this.openSurface(surfaceId, {
3682
3694
  source: detail.source || event.type,
3683
3695
  legacyEvent: event.type
@@ -3685,7 +3697,7 @@ class XSurfaceManager extends HTMLElement {
3685
3697
  return;
3686
3698
  }
3687
3699
 
3688
- if (event.type.endsWith('-closed')) {
3700
+ if (event.type.endsWith('-closed') || event.type === 'toast-dismissed') {
3689
3701
  this.closeSurface(surfaceId, detail.source || event.type);
3690
3702
  return;
3691
3703
  }
@@ -1,7 +1,7 @@
1
1
  import type { XtendSurfaceRecord, XtendSurfaceType } from './xsurfacemanager-controller';
2
2
 
3
3
  export declare const SURFACE_OVERLAY_BRIDGE_SCHEMA: 'xtend.surface.overlay-stack-bridge.v1';
4
- export declare const SURFACE_OVERLAY_SELECTOR: 'x-modal, x-dialog, x-drawer';
4
+ export declare const SURFACE_OVERLAY_SELECTOR: 'x-modal, x-dialog, x-drawer, x-popover, x-tooltip, x-toast, x-lightbox, x-menu';
5
5
  export declare const OVERLAY_LIFECYCLE_EVENTS: readonly [
6
6
  'modal-opened',
7
7
  'modal-closed',
@@ -9,13 +9,28 @@ export declare const OVERLAY_LIFECYCLE_EVENTS: readonly [
9
9
  'dialog-closed',
10
10
  'drawer-opened',
11
11
  'drawer-closed',
12
- 'drawer-route-selected'
12
+ 'drawer-route-selected',
13
+ 'popover-opened',
14
+ 'popover-closed',
15
+ 'tooltip-opened',
16
+ 'tooltip-closed',
17
+ 'toast-shown',
18
+ 'toast-dismissed',
19
+ 'lightbox-opened',
20
+ 'lightbox-closed',
21
+ 'menu-opened',
22
+ 'menu-closed',
23
+ 'menu-navigate'
13
24
  ];
14
25
 
26
+ export type XtendSurfaceOverlayComponentRef = 'x-modal' | 'x-dialog' | 'x-drawer' | 'x-popover' | 'x-tooltip' | 'x-toast' | 'x-lightbox' | 'x-menu';
27
+ export type XtendSurfaceOverlayType = Extract<XtendSurfaceType, 'modal' | 'dialog' | 'drawer' | 'popover' | 'tooltip' | 'toast' | 'lightbox' | 'menu'>;
28
+
15
29
  export interface XtendSurfaceOverlayCompatibilityProfile {
16
30
  schema: typeof SURFACE_OVERLAY_BRIDGE_SCHEMA;
17
- componentRef: 'x-modal' | 'x-dialog' | 'x-drawer';
18
- surfaceType: Extract<XtendSurfaceType, 'modal' | 'dialog' | 'drawer'>;
31
+ componentRef: XtendSurfaceOverlayComponentRef;
32
+ surfaceType: XtendSurfaceOverlayType;
33
+ surfaceKind: XtendSurfaceOverlayType;
19
34
  managerSlot: 'overlays';
20
35
  managerEvent: 'surface-overlay-command';
21
36
  legacyLifecycleEvents: readonly string[];
@@ -37,7 +52,7 @@ export interface XtendSurfaceOverlayCompatibilityProfile {
37
52
  export declare function isSurfaceOverlayElement(element: Element | null | undefined): element is HTMLElement;
38
53
  export declare function findSurfaceOverlayElement(event: Event): HTMLElement | null;
39
54
  export declare function overlaySurfaceId(element: HTMLElement): string;
40
- export declare function overlaySurfaceType(element: HTMLElement): Extract<XtendSurfaceType, 'modal' | 'dialog' | 'drawer'>;
55
+ export declare function overlaySurfaceType(element: HTMLElement): XtendSurfaceOverlayType;
41
56
  export declare function createOverlayCompatibilityProfile(element: HTMLElement): XtendSurfaceOverlayCompatibilityProfile | null;
42
57
  export declare function toOverlaySurfaceRecord(element: HTMLElement, managerId?: string): Partial<XtendSurfaceRecord> & Record<string, unknown>;
43
58
  export declare function applyOverlaySurfaceSnapshot(element: HTMLElement, record?: Partial<XtendSurfaceRecord>): void;
@@ -1,4 +1,4 @@
1
- const SURFACE_OVERLAY_SELECTOR = 'x-modal, x-dialog, x-drawer';
1
+ const SURFACE_OVERLAY_SELECTOR = 'x-modal, x-dialog, x-drawer, x-popover, x-tooltip, x-toast, x-lightbox, x-menu';
2
2
  const SURFACE_OVERLAY_BRIDGE_SCHEMA = 'xtend.surface.overlay-stack-bridge.v1';
3
3
  const SURFACE_RECORD_SCHEMA = 'xtend.surface.record.v1';
4
4
  const OVERLAY_Z_INDEX_BASE = 2147483000;
@@ -33,6 +33,56 @@ const OVERLAY_PROFILES = Object.freeze({
33
33
  lifecycleEvents: Object.freeze(['drawer-opened', 'drawer-closed', 'drawer-route-selected']),
34
34
  modal: false,
35
35
  capabilities: Object.freeze(['open', 'focus', 'close', 'resize', 'restore', 'snapshot'])
36
+ }),
37
+ 'x-popover': Object.freeze({
38
+ componentRef: 'x-popover',
39
+ surfaceType: 'popover',
40
+ family: 'popover',
41
+ stateKey: 'xpopover-open-<id>',
42
+ labelAttributes: Object.freeze(['label', 'aria-label', 'title']),
43
+ lifecycleEvents: Object.freeze(['popover-opened', 'popover-closed']),
44
+ modal: false,
45
+ capabilities: Object.freeze(['open', 'focus', 'close', 'snapshot'])
46
+ }),
47
+ 'x-tooltip': Object.freeze({
48
+ componentRef: 'x-tooltip',
49
+ surfaceType: 'tooltip',
50
+ family: 'tooltip',
51
+ stateKey: 'xtooltip-open-<id>',
52
+ labelAttributes: Object.freeze(['label', 'aria-label', 'title']),
53
+ lifecycleEvents: Object.freeze(['tooltip-opened', 'tooltip-closed']),
54
+ modal: false,
55
+ capabilities: Object.freeze(['open', 'close', 'snapshot'])
56
+ }),
57
+ 'x-toast': Object.freeze({
58
+ componentRef: 'x-toast',
59
+ surfaceType: 'toast',
60
+ family: 'toast',
61
+ stateKey: 'xtoast-state-<id>',
62
+ labelAttributes: Object.freeze(['label', 'aria-label', 'title', 'type']),
63
+ lifecycleEvents: Object.freeze(['toast-shown', 'toast-dismissed']),
64
+ modal: false,
65
+ capabilities: Object.freeze(['open', 'close', 'dismiss', 'snapshot'])
66
+ }),
67
+ 'x-lightbox': Object.freeze({
68
+ componentRef: 'x-lightbox',
69
+ surfaceType: 'lightbox',
70
+ family: 'media-lightbox',
71
+ stateKey: 'xlightbox-open-<id>',
72
+ labelAttributes: Object.freeze(['label', 'aria-label', 'title', 'alt']),
73
+ lifecycleEvents: Object.freeze(['lightbox-opened', 'lightbox-closed']),
74
+ modal: true,
75
+ capabilities: Object.freeze(['open', 'focus', 'close', 'snapshot'])
76
+ }),
77
+ 'x-menu': Object.freeze({
78
+ componentRef: 'x-menu',
79
+ surfaceType: 'menu',
80
+ family: 'menu',
81
+ stateKey: 'xmenu-state-<id>',
82
+ labelAttributes: Object.freeze(['label', 'aria-label', 'title']),
83
+ lifecycleEvents: Object.freeze(['menu-opened', 'menu-closed', 'menu-navigate']),
84
+ modal: false,
85
+ capabilities: Object.freeze(['open', 'focus', 'close', 'update', 'snapshot'])
36
86
  })
37
87
  });
38
88
 
@@ -43,7 +93,18 @@ const OVERLAY_LIFECYCLE_EVENTS = Object.freeze([
43
93
  'dialog-closed',
44
94
  'drawer-opened',
45
95
  'drawer-closed',
46
- 'drawer-route-selected'
96
+ 'drawer-route-selected',
97
+ 'popover-opened',
98
+ 'popover-closed',
99
+ 'tooltip-opened',
100
+ 'tooltip-closed',
101
+ 'toast-shown',
102
+ 'toast-dismissed',
103
+ 'lightbox-opened',
104
+ 'lightbox-closed',
105
+ 'menu-opened',
106
+ 'menu-closed',
107
+ 'menu-navigate'
47
108
  ]);
48
109
 
49
110
  function overlayTagName(element) {
@@ -108,13 +169,26 @@ function overlaySurfaceType(element) {
108
169
  return profile ? profile.surfaceType : 'dialog';
109
170
  }
110
171
 
172
+ function overlayElementIsOpen(element, profile = overlayProfileFor(element)) {
173
+ if (!element) return false;
174
+ if (element.hasAttribute && element.hasAttribute('open')) return true;
175
+ const tag = overlayTagName(element);
176
+ if (tag === 'x-toast') return element.isConnected !== false && element._dismissed !== true;
177
+ if (tag === 'x-menu') return element.isConnected !== false;
178
+ if (profile && profile.surfaceType === 'menu') return element.isConnected !== false;
179
+ return false;
180
+ }
181
+
111
182
  function overlayLabel(element, profile, id) {
112
183
  return readAttribute(element, profile.labelAttributes, id || profile.surfaceType);
113
184
  }
114
185
 
115
186
  function overlayPlacement(element, type) {
116
- if (type !== 'drawer') return null;
117
- return readAttribute(element, ['placement'], 'right');
187
+ if (type === 'drawer') return readAttribute(element, ['placement'], 'right');
188
+ if (type === 'popover') return readAttribute(element, ['placement'], 'bottom');
189
+ if (type === 'tooltip') return readAttribute(element, ['placement'], 'top');
190
+ if (type === 'menu') return readAttribute(element, ['placement'], 'bottom-start');
191
+ return null;
118
192
  }
119
193
 
120
194
  function overlayIsModal(element, profile, type) {
@@ -134,6 +208,7 @@ function createOverlayCompatibilityProfile(element) {
134
208
  schema: SURFACE_OVERLAY_BRIDGE_SCHEMA,
135
209
  componentRef: profile.componentRef,
136
210
  surfaceType: profile.surfaceType,
211
+ surfaceKind: profile.surfaceType,
137
212
  managerSlot: 'overlays',
138
213
  managerEvent: 'surface-overlay-command',
139
214
  legacyLifecycleEvents: profile.lifecycleEvents.slice(),
@@ -168,10 +243,11 @@ function toOverlaySurfaceRecord(element, managerId = 'xtend.surface.manager') {
168
243
  id,
169
244
  manager: managerId,
170
245
  type,
246
+ kind: type,
171
247
  label: overlayLabel(element, profile, id),
172
248
  stateKey: overlayStateKey(profile, id),
173
- status: element.hasAttribute('open') ? 'open' : 'closed',
174
- defaultOpen: element.hasAttribute('open'),
249
+ status: overlayElementIsOpen(element, profile) ? 'open' : 'closed',
250
+ defaultOpen: overlayElementIsOpen(element, profile),
175
251
  modal: overlayIsModal(element, profile, type),
176
252
  placement,
177
253
  mode: 'overlay',
@@ -183,25 +259,45 @@ function toOverlaySurfaceRecord(element, managerId = 'xtend.surface.manager') {
183
259
  }
184
260
 
185
261
  function callOverlayOpen(element) {
186
- if (overlayTagName(element) === 'x-drawer' && typeof element.openDrawer === 'function') {
187
- element.openDrawer({ source: 'surface-manager' });
188
- return;
262
+ const tag = overlayTagName(element);
263
+ const methodNames = tag === 'x-drawer'
264
+ ? ['openDrawer', 'show', 'open']
265
+ : ['openModal', 'openDialog', 'openLightbox', 'show', 'open'];
266
+ for (const methodName of methodNames) {
267
+ if (typeof element[methodName] === 'function') {
268
+ element[methodName]({ source: 'surface-manager' });
269
+ return;
270
+ }
189
271
  }
190
- if (typeof element.open === 'function') {
191
- element.open({ source: 'surface-manager' });
192
- return;
272
+ if ('open' in element) {
273
+ try {
274
+ element.open = true;
275
+ return;
276
+ } catch (_error) {
277
+ // Fall through to attribute bridge.
278
+ }
193
279
  }
194
280
  element.setAttribute('open', '');
195
281
  }
196
282
 
197
283
  function callOverlayClose(element) {
198
- if (overlayTagName(element) === 'x-drawer' && typeof element.closeDrawer === 'function') {
199
- element.closeDrawer({ source: 'surface-manager' });
200
- return;
284
+ const tag = overlayTagName(element);
285
+ const methodNames = tag === 'x-drawer'
286
+ ? ['closeDrawer', 'hide', 'close']
287
+ : ['closeModal', 'closeDialog', 'closeLightbox', 'dismiss', 'hide', 'close'];
288
+ for (const methodName of methodNames) {
289
+ if (typeof element[methodName] === 'function') {
290
+ element[methodName]({ source: 'surface-manager' });
291
+ return;
292
+ }
201
293
  }
202
- if (typeof element.close === 'function') {
203
- element.close({ source: 'surface-manager' });
204
- return;
294
+ if ('open' in element) {
295
+ try {
296
+ element.open = false;
297
+ return;
298
+ } catch (_error) {
299
+ // Fall through to attribute bridge.
300
+ }
205
301
  }
206
302
  element.removeAttribute('open');
207
303
  }
@@ -0,0 +1,29 @@
1
+ export type XSurfacePortalPolicy = 'stacked' | 'modal' | 'nonmodal' | 'toast-region' | 'clipping-escape' | string;
2
+ export type XSurfacePortalAttributeName = 'portal-id' | 'policy' | 'layer' | 'for' | 'z-index-start' | 'z-step';
3
+
4
+ export interface XSurfacePortalPolicyRecord {
5
+ schema: 'xtend.surface.portal-policy.v1';
6
+ id: string;
7
+ policy: XSurfacePortalPolicy;
8
+ layer: string;
9
+ target: string;
10
+ zIndexStart: number;
11
+ zStep: number;
12
+ component: 'x-surface-portal';
13
+ kernelBoundary: 'no-rmt-kernel-import-of-xtend-types';
14
+ }
15
+
16
+ export interface XSurfacePortalElement extends HTMLElement {
17
+ readonly portalId: string;
18
+ readonly policy: XSurfacePortalPolicy;
19
+ toPortalPolicy(): XSurfacePortalPolicyRecord;
20
+ addEventListener(type: 'surface-portal-policy', listener: (event: CustomEvent<XSurfacePortalPolicyRecord>) => void, options?: boolean | AddEventListenerOptions): void;
21
+ }
22
+
23
+ declare global {
24
+ interface HTMLElementTagNameMap {
25
+ 'x-surface-portal': XSurfacePortalElement;
26
+ }
27
+ }
28
+
29
+ export {};
@@ -0,0 +1,122 @@
1
+ class XSurfacePortal extends HTMLElement {
2
+ static get observedAttributes() {
3
+ return ['portal-id', 'policy', 'layer', 'for', 'z-index-start', 'z-step'];
4
+ }
5
+
6
+ static get xtendComponentContract() {
7
+ return {
8
+ schema: 'xtend.component.contract.v2',
9
+ tag: 'x-surface-portal',
10
+ maturity: 'experimental',
11
+ source: {
12
+ strategy: 'xtend.legacy-esm.component-source',
13
+ state: 'js-runtime',
14
+ sourcePath: 'components/xsurfaceportal.js'
15
+ },
16
+ runtime: {
17
+ format: 'esm',
18
+ artifact: 'components/xsurfaceportal.js',
19
+ declaration: 'components/xsurfaceportal.d.ts',
20
+ localOnly: true,
21
+ cdnAllowed: false
22
+ },
23
+ rmt: {
24
+ adapter: 'xtend.component',
25
+ surfaceContract: 'xtend.surface.type-capability-matrix.v1',
26
+ kernelBoundary: 'no-rmt-kernel-import-of-xtend-types'
27
+ }
28
+ };
29
+ }
30
+
31
+ static get xtendRmtMetadata() {
32
+ return {
33
+ schema: 'xtend.rmt.component-contract.v1',
34
+ adapter: 'xtend.component',
35
+ tag: 'x-surface-portal',
36
+ componentRecordKind: 'custom_element',
37
+ templateMode: 'dom_descriptor',
38
+ portalPolicies: ['stacked', 'modal', 'nonmodal', 'toast-region', 'clipping-escape'],
39
+ kernelBoundary: 'no-rmt-kernel-import-of-xtend-types'
40
+ };
41
+ }
42
+
43
+ static get xtendScaffoldA11yProfile() {
44
+ return {
45
+ schema: 'xtend.a11y.component-profile.v1',
46
+ role: 'none',
47
+ policy: 'portal-policy-announced-by-managed-surface',
48
+ keyboardModel: 'delegated-to-surface-manager',
49
+ aria: ['aria-hidden']
50
+ };
51
+ }
52
+
53
+ static get xtendScaffoldPerformanceProfile() {
54
+ return {
55
+ schema: 'xtend.performance.component-profile.v1',
56
+ budgetClass: 'surface-orchestration',
57
+ lane: 'surface.portal.policy',
58
+ hydrationPolicy: 'policy-only',
59
+ measurements: ['policy-dispatch', 'stack-reflow']
60
+ };
61
+ }
62
+
63
+ constructor() {
64
+ super();
65
+ this.attachShadow({ mode: 'open' });
66
+ this.shadowRoot.innerHTML = `
67
+ <style>
68
+ :host {
69
+ display: contents;
70
+ }
71
+ </style>
72
+ <slot></slot>
73
+ `;
74
+ }
75
+
76
+ connectedCallback() {
77
+ if (!this.hasAttribute('portal-id') && this.id) this.setAttribute('portal-id', this.id);
78
+ if (!this.hasAttribute('policy')) this.setAttribute('policy', 'stacked');
79
+ if (!this.hasAttribute('aria-hidden')) this.setAttribute('aria-hidden', 'true');
80
+ this._emitPolicy();
81
+ }
82
+
83
+ attributeChangedCallback() {
84
+ if (this.isConnected) this._emitPolicy();
85
+ }
86
+
87
+ get portalId() {
88
+ return this.getAttribute('portal-id') || this.id || 'portal.app';
89
+ }
90
+
91
+ get policy() {
92
+ return this.getAttribute('policy') || 'stacked';
93
+ }
94
+
95
+ toPortalPolicy() {
96
+ return {
97
+ schema: 'xtend.surface.portal-policy.v1',
98
+ id: this.portalId,
99
+ policy: this.policy,
100
+ layer: this.getAttribute('layer') || this.portalId,
101
+ target: this.getAttribute('for') || '',
102
+ zIndexStart: Number(this.getAttribute('z-index-start') || 1000),
103
+ zStep: Number(this.getAttribute('z-step') || 10),
104
+ component: 'x-surface-portal',
105
+ kernelBoundary: 'no-rmt-kernel-import-of-xtend-types'
106
+ };
107
+ }
108
+
109
+ _emitPolicy() {
110
+ this.dispatchEvent(new CustomEvent('surface-portal-policy', {
111
+ bubbles: true,
112
+ composed: true,
113
+ detail: this.toPortalPolicy()
114
+ }));
115
+ }
116
+ }
117
+
118
+ if (!customElements.get('x-surface-portal')) {
119
+ customElements.define('x-surface-portal', XSurfacePortal);
120
+ }
121
+
122
+ export { XSurfacePortal };
@@ -0,0 +1,50 @@
1
+ import type {
2
+ XtendSurfaceRecord
3
+ } from './xsurfacemanager-controller';
4
+
5
+ export type XSurfaceRegionKind = 'root' | 'workspace' | 'page' | 'card' | 'list' | 'region' | 'overlay-host' | string;
6
+ export type XSurfaceRegionAttributeName =
7
+ | 'surface-id'
8
+ | 'label'
9
+ | 'kind'
10
+ | 'open'
11
+ | 'active'
12
+ | 'hidden'
13
+ | 'mode'
14
+ | 'placement'
15
+ | 'initial-x'
16
+ | 'initial-y'
17
+ | 'initial-width'
18
+ | 'initial-height'
19
+ | 'role';
20
+
21
+ export type XSurfaceRegionCommand = 'open' | 'close' | 'focus' | 'restore' | 'update';
22
+
23
+ export interface XSurfaceRegionCommandDetail {
24
+ surfaceId: string;
25
+ command: XSurfaceRegionCommand;
26
+ payload: Record<string, unknown>;
27
+ }
28
+
29
+ export interface XSurfaceRegionElement extends HTMLElement {
30
+ surfaceManager: HTMLElement | null;
31
+ readonly surfaceId: string;
32
+ readonly kind: XSurfaceRegionKind;
33
+ open: boolean;
34
+ toSurfaceRecord(managerId: string): Partial<XtendSurfaceRecord> & Record<string, unknown>;
35
+ applySurfaceSnapshot(record: XtendSurfaceRecord): void;
36
+ openRegion(): XSurfaceRegionCommandDetail;
37
+ closeRegion(reason?: string): XSurfaceRegionCommandDetail;
38
+ focusRegion(): XSurfaceRegionCommandDetail;
39
+ restoreRegion(): XSurfaceRegionCommandDetail;
40
+ updateRegion(payload?: Record<string, unknown>): XSurfaceRegionCommandDetail;
41
+ addEventListener(type: 'surface-region-command', listener: (event: CustomEvent<XSurfaceRegionCommandDetail>) => void, options?: boolean | AddEventListenerOptions): void;
42
+ }
43
+
44
+ declare global {
45
+ interface HTMLElementTagNameMap {
46
+ 'x-surface-region': XSurfaceRegionElement;
47
+ }
48
+ }
49
+
50
+ export {};