@ccslabs/xtend 0.1.0-rc.1

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 (664) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/LICENSE +201 -0
  3. package/README.md +184 -0
  4. package/a11y/motion-contrast-policy.d.ts +32 -0
  5. package/a11y/motion-contrast-policy.js +261 -0
  6. package/a11y/runtime-a11y-contract.d.ts +44 -0
  7. package/a11y/runtime-a11y-contract.js +385 -0
  8. package/a11y/screenreader-signals.d.ts +32 -0
  9. package/a11y/screenreader-signals.js +372 -0
  10. package/api.d.ts +168 -0
  11. package/api.js +864 -0
  12. package/catalog/catalog-public-types.d.ts +66 -0
  13. package/catalog/component-catalog-coverage.d.ts +20 -0
  14. package/catalog/component-catalog-coverage.js +377 -0
  15. package/catalog/component-long-tail-migration.d.ts +18 -0
  16. package/catalog/component-long-tail-migration.js +305 -0
  17. package/catalog/component-regression-priority.d.ts +20 -0
  18. package/catalog/component-regression-priority.js +305 -0
  19. package/catalog/enterprise-component-flex-release-handoff.d.ts +32 -0
  20. package/catalog/enterprise-component-flex-release-handoff.js +437 -0
  21. package/catalog/enterprise-component-style-audit.d.ts +22 -0
  22. package/catalog/enterprise-component-style-audit.js +353 -0
  23. package/catalog/enterprise-form-control-theme-a11y.d.ts +19 -0
  24. package/catalog/enterprise-form-control-theme-a11y.js +220 -0
  25. package/catalog/enterprise-icon-control-audit.d.ts +21 -0
  26. package/catalog/enterprise-icon-control-audit.js +258 -0
  27. package/catalog/enterprise-layout-display-media-tokenization.d.ts +20 -0
  28. package/catalog/enterprise-layout-display-media-tokenization.js +237 -0
  29. package/catalog/enterprise-navigation-routing-state-hardening.d.ts +20 -0
  30. package/catalog/enterprise-navigation-routing-state-hardening.js +255 -0
  31. package/catalog/enterprise-overlay-mode-token-parity.d.ts +15 -0
  32. package/catalog/enterprise-overlay-mode-token-parity.js +178 -0
  33. package/catalog/enterprise-third-party-authoring-guide.d.ts +23 -0
  34. package/catalog/enterprise-third-party-authoring-guide.js +310 -0
  35. package/catalog/enterprise-visual-dom-snapshot-matrix.d.ts +31 -0
  36. package/catalog/enterprise-visual-dom-snapshot-matrix.js +357 -0
  37. package/catalog/epic10-existing-component-metadata.d.ts +25 -0
  38. package/catalog/epic10-existing-component-metadata.js +534 -0
  39. package/catalog/epic10-p0-component-wave.d.ts +28 -0
  40. package/catalog/epic10-p0-component-wave.js +688 -0
  41. package/catalog/epic10-platform-gates.d.ts +31 -0
  42. package/catalog/epic10-platform-gates.js +425 -0
  43. package/catalog/epic10-release-handoff.d.ts +30 -0
  44. package/catalog/epic10-release-handoff.js +195 -0
  45. package/catalog/epic11-enterprise-ux-handoff.d.ts +29 -0
  46. package/catalog/epic11-enterprise-ux-handoff.js +403 -0
  47. package/catalog/epic12-docs-adoption.d.ts +29 -0
  48. package/catalog/epic12-docs-adoption.js +183 -0
  49. package/catalog/epic12-rc0-gate-matrix.d.ts +36 -0
  50. package/catalog/epic12-rc0-gate-matrix.js +439 -0
  51. package/catalog/epic12-rc0-handoff.d.ts +30 -0
  52. package/catalog/epic12-rc0-handoff.js +385 -0
  53. package/catalog/epic13-conditional-network-evidence-ci.d.ts +35 -0
  54. package/catalog/epic13-conditional-network-evidence-ci.js +278 -0
  55. package/catalog/epic13-conditional-network-evidence.d.ts +34 -0
  56. package/catalog/epic13-conditional-network-evidence.js +280 -0
  57. package/catalog/epic13-docs-rmt-production-hardening.d.ts +39 -0
  58. package/catalog/epic13-docs-rmt-production-hardening.js +286 -0
  59. package/catalog/epic13-hydration-performance-closure.d.ts +33 -0
  60. package/catalog/epic13-hydration-performance-closure.js +234 -0
  61. package/catalog/epic13-known-residual-triage.d.ts +32 -0
  62. package/catalog/epic13-known-residual-triage.js +339 -0
  63. package/catalog/epic13-package-export-lock.d.ts +41 -0
  64. package/catalog/epic13-package-export-lock.js +604 -0
  65. package/catalog/epic13-prod-browser-csp-smoke.d.ts +35 -0
  66. package/catalog/epic13-prod-browser-csp-smoke.js +218 -0
  67. package/catalog/epic13-rc1-gate-matrix-ci-handoff.d.ts +36 -0
  68. package/catalog/epic13-rc1-gate-matrix-ci-handoff.js +418 -0
  69. package/catalog/epic13-rc1-migration-notes.d.ts +36 -0
  70. package/catalog/epic13-rc1-migration-notes.js +271 -0
  71. package/catalog/epic13-rc1-readiness.d.ts +33 -0
  72. package/catalog/epic13-rc1-readiness.js +487 -0
  73. package/catalog/epic13-release-owner-acceptance.d.ts +33 -0
  74. package/catalog/epic13-release-owner-acceptance.js +354 -0
  75. package/catalog/epic13-release-report-pack-dry-run-evidence.d.ts +36 -0
  76. package/catalog/epic13-release-report-pack-dry-run-evidence.js +253 -0
  77. package/catalog/epic13-rmt-production-readiness.d.ts +35 -0
  78. package/catalog/epic13-rmt-production-readiness.js +314 -0
  79. package/catalog/epic13-trusted-dom-boundary.d.ts +36 -0
  80. package/catalog/epic13-trusted-dom-boundary.js +230 -0
  81. package/catalog/epic13-visual-owner-artifact.d.ts +35 -0
  82. package/catalog/epic13-visual-owner-artifact.js +233 -0
  83. package/catalog/epic14-lsp-handoff.d.ts +28 -0
  84. package/catalog/epic14-lsp-handoff.js +312 -0
  85. package/catalog/epic14-rmt-tooling.d.ts +33 -0
  86. package/catalog/epic14-rmt-tooling.js +282 -0
  87. package/catalog/surface-manager-adapter-runtime.d.ts +37 -0
  88. package/catalog/surface-manager-adapter-runtime.js +203 -0
  89. package/catalog/surface-manager-browser-lab.d.ts +39 -0
  90. package/catalog/surface-manager-browser-lab.js +225 -0
  91. package/catalog/surface-manager-controller.d.ts +43 -0
  92. package/catalog/surface-manager-controller.js +290 -0
  93. package/catalog/surface-manager-layout-engines.d.ts +32 -0
  94. package/catalog/surface-manager-layout-engines.js +161 -0
  95. package/catalog/surface-manager-lazy-loading.d.ts +35 -0
  96. package/catalog/surface-manager-lazy-loading.js +173 -0
  97. package/catalog/surface-manager-materialization.d.ts +37 -0
  98. package/catalog/surface-manager-materialization.js +202 -0
  99. package/catalog/surface-manager-native-rmt-surfaces.d.ts +48 -0
  100. package/catalog/surface-manager-native-rmt-surfaces.js +325 -0
  101. package/catalog/surface-manager-overlay-bridge.d.ts +42 -0
  102. package/catalog/surface-manager-overlay-bridge.js +247 -0
  103. package/catalog/surface-manager-persistence.d.ts +37 -0
  104. package/catalog/surface-manager-persistence.js +178 -0
  105. package/catalog/surface-manager-quality-gates.d.ts +48 -0
  106. package/catalog/surface-manager-quality-gates.js +324 -0
  107. package/catalog/surface-manager-release-handoff.d.ts +47 -0
  108. package/catalog/surface-manager-release-handoff.js +274 -0
  109. package/catalog/surface-manager-remote-policy.d.ts +34 -0
  110. package/catalog/surface-manager-remote-policy.js +199 -0
  111. package/catalog/surface-manager-rmt-authoring.d.ts +44 -0
  112. package/catalog/surface-manager-rmt-authoring.js +368 -0
  113. package/catalog/surface-manager-route-lifecycle.d.ts +32 -0
  114. package/catalog/surface-manager-route-lifecycle.js +162 -0
  115. package/catalog/surface-manager-runtime-release-handoff.d.ts +36 -0
  116. package/catalog/surface-manager-runtime-release-handoff.js +245 -0
  117. package/catalog/surface-manager-side-panel-runtime.d.ts +46 -0
  118. package/catalog/surface-manager-side-panel-runtime.js +307 -0
  119. package/catalog/surface-manager-stack-policy.d.ts +32 -0
  120. package/catalog/surface-manager-stack-policy.js +169 -0
  121. package/catalog/surface-manager-window-runtime.d.ts +45 -0
  122. package/catalog/surface-manager-window-runtime.js +285 -0
  123. package/catalog/surface-manager-workbench-fixture.d.ts +50 -0
  124. package/catalog/surface-manager-workbench-fixture.js +315 -0
  125. package/catalog/type-exports-api.js +236 -0
  126. package/catalog/type-exports-builder.js +405 -0
  127. package/catalog/type-exports-catalog.js +394 -0
  128. package/catalog/type-exports-loader.js +266 -0
  129. package/catalog/type-exports-policy.js +461 -0
  130. package/catalog/type-exports-rmt.js +407 -0
  131. package/catalog/type-exports-vendor.js +365 -0
  132. package/catalog/type-exports.js +574 -0
  133. package/components/icon-packs/core.js +154 -0
  134. package/components/icon-packs/lucide.js +136 -0
  135. package/components/manifest.json +44 -0
  136. package/components/prism.d.ts +73 -0
  137. package/components/prism.js +300 -0
  138. package/components/turndown.d.ts +34 -0
  139. package/components/turndown.js +107 -0
  140. package/components/x-rmt-lifecycle-demo-build.d.ts +78 -0
  141. package/components/x-rmt-lifecycle-demo-build.js +1175 -0
  142. package/components/x-rmt-lifecycle-demo.d.ts +83 -0
  143. package/components/x-rmt-lifecycle-demo.js +1175 -0
  144. package/components/xalert.d.ts +42 -0
  145. package/components/xalert.js +538 -0
  146. package/components/xbutton.d.ts +127 -0
  147. package/components/xbutton.js +612 -0
  148. package/components/xcalendar.d.ts +39 -0
  149. package/components/xcalendar.js +338 -0
  150. package/components/xcards.d.ts +34 -0
  151. package/components/xcards.js +253 -0
  152. package/components/xcheckbox.d.ts +48 -0
  153. package/components/xcheckbox.js +448 -0
  154. package/components/xcode.d.ts +35 -0
  155. package/components/xcode.js +370 -0
  156. package/components/xdialog.d.ts +48 -0
  157. package/components/xdialog.js +763 -0
  158. package/components/xdrawer.d.ts +61 -0
  159. package/components/xdrawer.js +654 -0
  160. package/components/xfooter.d.ts +41 -0
  161. package/components/xfooter.js +351 -0
  162. package/components/xform.d.ts +43 -0
  163. package/components/xform.js +456 -0
  164. package/components/xheader.d.ts +68 -0
  165. package/components/xheader.js +1253 -0
  166. package/components/xhero.d.ts +42 -0
  167. package/components/xhero.js +475 -0
  168. package/components/xicon.d.ts +146 -0
  169. package/components/xicon.js +688 -0
  170. package/components/xinput.d.ts +37 -0
  171. package/components/xinput.js +444 -0
  172. package/components/xlightbox.d.ts +48 -0
  173. package/components/xlightbox.js +571 -0
  174. package/components/xlink.d.ts +63 -0
  175. package/components/xlink.js +565 -0
  176. package/components/xmasonry.d.ts +35 -0
  177. package/components/xmasonry.js +666 -0
  178. package/components/xmenu.d.ts +118 -0
  179. package/components/xmenu.js +1005 -0
  180. package/components/xmodal.d.ts +64 -0
  181. package/components/xmodal.js +831 -0
  182. package/components/xplayer.d.ts +57 -0
  183. package/components/xplayer.js +1748 -0
  184. package/components/xpopover.d.ts +54 -0
  185. package/components/xpopover.js +466 -0
  186. package/components/xprogress.d.ts +40 -0
  187. package/components/xprogress.js +345 -0
  188. package/components/xradio.d.ts +50 -0
  189. package/components/xradio.js +474 -0
  190. package/components/xrouter.d.ts +244 -0
  191. package/components/xrouter.js +1841 -0
  192. package/components/xsection.d.ts +34 -0
  193. package/components/xsection.js +253 -0
  194. package/components/xselect.d.ts +46 -0
  195. package/components/xselect.js +463 -0
  196. package/components/xsidepanel.d.ts +56 -0
  197. package/components/xsidepanel.js +728 -0
  198. package/components/xspinner.d.ts +38 -0
  199. package/components/xspinner.js +388 -0
  200. package/components/xstate.d.ts +137 -0
  201. package/components/xstate.js +493 -0
  202. package/components/xstatus.d.ts +41 -0
  203. package/components/xstatus.js +381 -0
  204. package/components/xsummary.d.ts +43 -0
  205. package/components/xsummary.js +293 -0
  206. package/components/xsurfacemanager-controller.d.ts +130 -0
  207. package/components/xsurfacemanager-controller.js +699 -0
  208. package/components/xsurfacemanager.d.ts +452 -0
  209. package/components/xsurfacemanager.js +3775 -0
  210. package/components/xsurfaceoverlay-bridge.d.ts +43 -0
  211. package/components/xsurfaceoverlay-bridge.js +238 -0
  212. package/components/xsurfacewindow.d.ts +50 -0
  213. package/components/xsurfacewindow.js +576 -0
  214. package/components/xtabs.d.ts +73 -0
  215. package/components/xtabs.js +611 -0
  216. package/components/xtend-public-types.d.ts +208 -0
  217. package/components/xtextarea.d.ts +46 -0
  218. package/components/xtextarea.js +451 -0
  219. package/components/xtheme.d.ts +253 -0
  220. package/components/xtheme.js +1438 -0
  221. package/components/xtoast.d.ts +39 -0
  222. package/components/xtoast.js +389 -0
  223. package/components/xtooltip.d.ts +53 -0
  224. package/components/xtooltip.js +432 -0
  225. package/components/xtype.d.ts +42 -0
  226. package/components/xtype.js +244 -0
  227. package/components/xutils.d.ts +164 -0
  228. package/components/xutils.js +496 -0
  229. package/components/xwriter.d.ts +67 -0
  230. package/components/xwriter.js +854 -0
  231. package/design-tokens/themes/enterprise-light.json +40 -0
  232. package/design-tokens/themes/xtend-signature.json +126 -0
  233. package/design-tokens/xtend-design-tokens.d.ts +95 -0
  234. package/design-tokens/xtend-design-tokens.js +395 -0
  235. package/design-tokens/xtheme-token-alias-layer.d.ts +84 -0
  236. package/design-tokens/xtheme-token-alias-layer.js +423 -0
  237. package/docs/.htaccess +51 -0
  238. package/docs/README.md +340 -0
  239. package/docs/XTend-ADR.md +221 -0
  240. package/docs/a11y-keyboard-smokes.md +62 -0
  241. package/docs/about.md +18 -0
  242. package/docs/api.md +157 -0
  243. package/docs/best-practices.md +76 -0
  244. package/docs/component-catalog-coverage.md +58 -0
  245. package/docs/component-lab.md +103 -0
  246. package/docs/component-long-tail-migration.md +41 -0
  247. package/docs/component-platform.md +159 -0
  248. package/docs/component-ux-app-authoring.md +130 -0
  249. package/docs/component-ux-authoring.md +96 -0
  250. package/docs/component-ux-gates.md +45 -0
  251. package/docs/components/x-rmt-lifecycle-demo-build.md +60 -0
  252. package/docs/components/xalert.md +81 -0
  253. package/docs/components/xbutton.md +103 -0
  254. package/docs/components/xcalendar.md +82 -0
  255. package/docs/components/xcards.md +128 -0
  256. package/docs/components/xcheckbox.md +102 -0
  257. package/docs/components/xcode.md +126 -0
  258. package/docs/components/xdialog.md +92 -0
  259. package/docs/components/xdrawer.md +84 -0
  260. package/docs/components/xfooter.md +126 -0
  261. package/docs/components/xform.md +128 -0
  262. package/docs/components/xheader.md +308 -0
  263. package/docs/components/xhero.md +142 -0
  264. package/docs/components/xicon.md +125 -0
  265. package/docs/components/xinput.md +129 -0
  266. package/docs/components/xlightbox.md +98 -0
  267. package/docs/components/xlink.md +109 -0
  268. package/docs/components/xmasonry.md +124 -0
  269. package/docs/components/xmenu.md +158 -0
  270. package/docs/components/xmodal.md +82 -0
  271. package/docs/components/xplayer.md +104 -0
  272. package/docs/components/xpopover.md +67 -0
  273. package/docs/components/xprogress.md +56 -0
  274. package/docs/components/xradio.md +103 -0
  275. package/docs/components/xrouter.md +260 -0
  276. package/docs/components/xsection.md +125 -0
  277. package/docs/components/xselect.md +105 -0
  278. package/docs/components/xsidepanel.md +30 -0
  279. package/docs/components/xspinner.md +102 -0
  280. package/docs/components/xstate.md +148 -0
  281. package/docs/components/xstatus.md +55 -0
  282. package/docs/components/xsummary.md +78 -0
  283. package/docs/components/xsurfacemanager.md +27 -0
  284. package/docs/components/xsurfacewindow.md +21 -0
  285. package/docs/components/xtabs.md +160 -0
  286. package/docs/components/xtextarea.md +98 -0
  287. package/docs/components/xtheme.md +167 -0
  288. package/docs/components/xtoast.md +62 -0
  289. package/docs/components/xtooltip.md +66 -0
  290. package/docs/components/xtype.md +82 -0
  291. package/docs/components/xutils.md +144 -0
  292. package/docs/components/xwriter.md +94 -0
  293. package/docs/components.md +117 -0
  294. package/docs/conditional-network-evidence-ci.md +38 -0
  295. package/docs/conditional-network-evidence.md +50 -0
  296. package/docs/core-migration-guide.md +110 -0
  297. package/docs/design-tokens.md +116 -0
  298. package/docs/docs-rmt-production-hardening.md +31 -0
  299. package/docs/enterprise-adoption.md +411 -0
  300. package/docs/enterprise-component-flex-release-handoff.md +129 -0
  301. package/docs/epic10-platform-gates.md +62 -0
  302. package/docs/epic10-release-handoff.md +81 -0
  303. package/docs/epic11-enterprise-ux-handoff.md +70 -0
  304. package/docs/epic12-rc0-handoff.md +61 -0
  305. package/docs/existing-component-metadata.md +67 -0
  306. package/docs/hydration-performance-closure.md +34 -0
  307. package/docs/hydration-policies.md +71 -0
  308. package/docs/index.php +1625 -0
  309. package/docs/known-residual-triage.md +22 -0
  310. package/docs/manifest-import-policy.md +79 -0
  311. package/docs/manifest.md +106 -0
  312. package/docs/menu.json +1190 -0
  313. package/docs/motion-contrast.md +67 -0
  314. package/docs/package-export-lock.md +44 -0
  315. package/docs/performance-measurements.md +106 -0
  316. package/docs/performance-regression.md +89 -0
  317. package/docs/performance.md +94 -0
  318. package/docs/previews/README.md +17 -0
  319. package/docs/prod-browser-csp-smokes.md +40 -0
  320. package/docs/public-component-types.md +79 -0
  321. package/docs/quick-start-guide.md +152 -0
  322. package/docs/rc0-adoption-guide.md +102 -0
  323. package/docs/rc0-gate-matrix.md +58 -0
  324. package/docs/rc1-gate-matrix-ci-handoff.md +56 -0
  325. package/docs/rc1-migration-notes.md +69 -0
  326. package/docs/rc1-readiness.md +46 -0
  327. package/docs/release-owner-acceptance.md +56 -0
  328. package/docs/release-report-pack-dry-run-evidence.md +39 -0
  329. package/docs/rmt-dsl-authoring-polish.md +122 -0
  330. package/docs/rmt-first-demo-app.md +77 -0
  331. package/docs/rmt-first-xtend-apps.md +105 -0
  332. package/docs/rmt-kernel-panic-recovery-incident-handoff.md +61 -0
  333. package/docs/rmt-kernel-security-hardening-migration.md +50 -0
  334. package/docs/rmt-kernel-trusted-output-authoring.md +69 -0
  335. package/docs/rmt-language-server.md +177 -0
  336. package/docs/rmt-lifecycle-demo.md +25 -0
  337. package/docs/rmt-linter.md +140 -0
  338. package/docs/rmt-production-readiness.md +63 -0
  339. package/docs/rmt-tooling-release-gates.md +77 -0
  340. package/docs/rmt-vnext-authoring.md +60 -0
  341. package/docs/rmt-vnext-cross-surface-events.md +68 -0
  342. package/docs/rmt-vnext-enterprise-mfe-handoff.md +70 -0
  343. package/docs/rmt-vnext-migration-notes.md +62 -0
  344. package/docs/rmt-vnext-release-handoff.md +69 -0
  345. package/docs/rmt-vnext-remote-surfaces.md +90 -0
  346. package/docs/rmt-vnext-surface-registry-enterprise.md +76 -0
  347. package/docs/screenreader-signals.md +56 -0
  348. package/docs/supply-chain-gates.md +100 -0
  349. package/docs/surface-manager-authoring-guide.md +94 -0
  350. package/docs/surface-manager-browser-lab.md +45 -0
  351. package/docs/surface-manager-component-lab.md +43 -0
  352. package/docs/surface-manager-controller.md +66 -0
  353. package/docs/surface-manager-layout-engines.md +32 -0
  354. package/docs/surface-manager-lazy-hydration.md +63 -0
  355. package/docs/surface-manager-migration-guide.md +94 -0
  356. package/docs/surface-manager-native-rmt-surfaces.md +38 -0
  357. package/docs/surface-manager-overlay-bridge.md +53 -0
  358. package/docs/surface-manager-persistence.md +30 -0
  359. package/docs/surface-manager-quality-gates.md +51 -0
  360. package/docs/surface-manager-release-handoff.md +68 -0
  361. package/docs/surface-manager-remote-policy.md +54 -0
  362. package/docs/surface-manager-rmt-authoring.md +86 -0
  363. package/docs/surface-manager-route-lifecycle.md +59 -0
  364. package/docs/surface-manager-runtime-release-handoff.md +69 -0
  365. package/docs/surface-manager-side-panel-runtime.md +36 -0
  366. package/docs/surface-manager-stack-policy.md +39 -0
  367. package/docs/surface-manager-window-runtime.md +47 -0
  368. package/docs/surface-manager-workbench-fixture.md +43 -0
  369. package/docs/third-party-design-authoring.md +406 -0
  370. package/docs/trusted-dom-boundary-browser-proof.md +32 -0
  371. package/docs/trusted-dom-sanitizing.md +110 -0
  372. package/docs/type-exports.md +61 -0
  373. package/docs/typescript-components.md +63 -0
  374. package/docs/utils/fabric-runtime.js +650 -0
  375. package/docs/utils/pageloader.js +2823 -0
  376. package/docs/utils/parsedown.php +298 -0
  377. package/docs/visual-browser-regression.md +83 -0
  378. package/docs/visual-owner-artifacts.md +46 -0
  379. package/docs/visual-snapshot-automation.md +87 -0
  380. package/docs/xtend-api-types.md +55 -0
  381. package/docs/xtend-builder-types.md +55 -0
  382. package/docs/xtend-catalog-types.md +44 -0
  383. package/docs/xtend-fabric-rmt-lane-mapping.md +143 -0
  384. package/docs/xtend-fabric.md +474 -0
  385. package/docs/xtend-loader-types.md +58 -0
  386. package/docs/xtend-loader.md +265 -0
  387. package/docs/xtend-policy-types.md +38 -0
  388. package/docs/xtend-rmt-types.md +39 -0
  389. package/docs/xtend-vendor-types.md +36 -0
  390. package/docs/xtendrmt-app-dsl.md +269 -0
  391. package/docs/xtendrmt-migration-guide.md +235 -0
  392. package/docs/xtendrmt-native-authoring.md +337 -0
  393. package/docs/xtendrmt-overview.md +89 -0
  394. package/docs/xtendrmt-parsedown-docs.rmt +956 -0
  395. package/docs/xtendrmt-parsedown-scheduling.md +301 -0
  396. package/docs/xtendrmt-runtime-bridge.md +155 -0
  397. package/fabric/hydration-policy.d.ts +27 -0
  398. package/fabric/hydration-policy.js +306 -0
  399. package/fabric/package.json +58 -0
  400. package/fabric/rmt-lane-mapping.d.ts +47 -0
  401. package/fabric/rmt-lane-mapping.js +504 -0
  402. package/fabric/xtend-fabric.d.ts +81 -0
  403. package/fabric/xtend-fabric.js +2669 -0
  404. package/fabric/xtend-policy-public-types.d.ts +135 -0
  405. package/package.json +8225 -0
  406. package/security/README.md +54 -0
  407. package/security/manifest-import-policy.d.ts +43 -0
  408. package/security/manifest-import-policy.js +260 -0
  409. package/security/supply-chain-gate-policy.d.ts +45 -0
  410. package/security/supply-chain-gate-policy.js +249 -0
  411. package/security/trusted-dom-policy.d.ts +36 -0
  412. package/security/trusted-dom-policy.js +316 -0
  413. package/tools/package.json +77 -0
  414. package/tools/rmt-editor/vscode/README.md +33 -0
  415. package/tools/rmt-editor/vscode/extension.d.ts +9 -0
  416. package/tools/rmt-editor/vscode/extension.js +55 -0
  417. package/tools/rmt-editor/vscode/language-configuration.json +28 -0
  418. package/tools/rmt-editor/vscode/package.json +83 -0
  419. package/tools/rmt-editor/vscode/snippets/rmt.code-snippets +243 -0
  420. package/tools/rmt-editor/vscode/syntaxes/rmt.tmLanguage.json +13 -0
  421. package/tools/rmt-editor/vscode/xtend-rmt-language-0.0.0-enterprise-readiness.vsix +0 -0
  422. package/tools/rmt-language/code-actions.d.ts +15 -0
  423. package/tools/rmt-language/code-actions.js +566 -0
  424. package/tools/rmt-language/completions.d.ts +22 -0
  425. package/tools/rmt-language/completions.js +475 -0
  426. package/tools/rmt-language/definitions.d.ts +13 -0
  427. package/tools/rmt-language/definitions.js +212 -0
  428. package/tools/rmt-language/diagnostics.d.ts +23 -0
  429. package/tools/rmt-language/diagnostics.js +486 -0
  430. package/tools/rmt-language/format-adapter.d.ts +16 -0
  431. package/tools/rmt-language/format-adapter.js +270 -0
  432. package/tools/rmt-language/hover.d.ts +12 -0
  433. package/tools/rmt-language/hover.js +326 -0
  434. package/tools/rmt-language/kernel-escalation.d.ts +122 -0
  435. package/tools/rmt-language/kernel-escalation.js +427 -0
  436. package/tools/rmt-language/kernel-panic-monitor.d.ts +176 -0
  437. package/tools/rmt-language/kernel-panic-monitor.js +674 -0
  438. package/tools/rmt-language/kernel-policy-parity.d.ts +142 -0
  439. package/tools/rmt-language/kernel-policy-parity.js +629 -0
  440. package/tools/rmt-language/kernel-recovery.d.ts +173 -0
  441. package/tools/rmt-language/kernel-recovery.js +666 -0
  442. package/tools/rmt-language/kernel-scheduler-failure.d.ts +136 -0
  443. package/tools/rmt-language/kernel-scheduler-failure.js +486 -0
  444. package/tools/rmt-language/kernel-security-regression.d.ts +154 -0
  445. package/tools/rmt-language/kernel-security-regression.js +465 -0
  446. package/tools/rmt-language/kernel-trust-authority.d.ts +120 -0
  447. package/tools/rmt-language/kernel-trust-authority.js +549 -0
  448. package/tools/rmt-language/parser.d.ts +14 -0
  449. package/tools/rmt-language/parser.js +111 -0
  450. package/tools/rmt-language/rmt-tooling-public-types.d.ts +179 -0
  451. package/tools/rmt-language/rules/boundary-policy.js +81 -0
  452. package/tools/rmt-language/rules/document-policy.js +65 -0
  453. package/tools/rmt-language/rules/index.js +29 -0
  454. package/tools/rmt-language/rules/route-policy.js +81 -0
  455. package/tools/rmt-language/rules/scheduler-policy.js +66 -0
  456. package/tools/rmt-language/rules/template-policy.js +130 -0
  457. package/tools/rmt-language/semantic-graph.d.ts +18 -0
  458. package/tools/rmt-language/semantic-graph.js +827 -0
  459. package/tools/rmt-language/snippets/README.md +17 -0
  460. package/tools/rmt-language/snippets/index.d.ts +17 -0
  461. package/tools/rmt-language/snippets/index.js +417 -0
  462. package/tools/rmt-language/snippets/rmt.code-snippets +243 -0
  463. package/tools/rmt-language/source-model.d.ts +14 -0
  464. package/tools/rmt-language/source-model.js +731 -0
  465. package/tools/rmt-language/symbols.d.ts +13 -0
  466. package/tools/rmt-language/symbols.js +183 -0
  467. package/tools/rmt-language/vnext-compatibility.d.ts +28 -0
  468. package/tools/rmt-language/vnext-compatibility.js +675 -0
  469. package/tools/rmt-language/vnext-compiler.d.ts +17 -0
  470. package/tools/rmt-language/vnext-compiler.js +716 -0
  471. package/tools/rmt-language/vnext-composition.d.ts +30 -0
  472. package/tools/rmt-language/vnext-composition.js +595 -0
  473. package/tools/rmt-language/vnext-conditions.d.ts +25 -0
  474. package/tools/rmt-language/vnext-conditions.js +474 -0
  475. package/tools/rmt-language/vnext-cross-surface-events.d.ts +30 -0
  476. package/tools/rmt-language/vnext-cross-surface-events.js +607 -0
  477. package/tools/rmt-language/vnext-degradation.d.ts +23 -0
  478. package/tools/rmt-language/vnext-degradation.js +428 -0
  479. package/tools/rmt-language/vnext-enterprise-fixtures.d.ts +28 -0
  480. package/tools/rmt-language/vnext-enterprise-fixtures.js +487 -0
  481. package/tools/rmt-language/vnext-enterprise-registry.d.ts +21 -0
  482. package/tools/rmt-language/vnext-enterprise-registry.js +495 -0
  483. package/tools/rmt-language/vnext-enterprise-release.d.ts +44 -0
  484. package/tools/rmt-language/vnext-enterprise-release.js +472 -0
  485. package/tools/rmt-language/vnext-event-governance.d.ts +29 -0
  486. package/tools/rmt-language/vnext-event-governance.js +488 -0
  487. package/tools/rmt-language/vnext-events.d.ts +44 -0
  488. package/tools/rmt-language/vnext-events.js +680 -0
  489. package/tools/rmt-language/vnext-import-resolver.d.ts +28 -0
  490. package/tools/rmt-language/vnext-import-resolver.js +642 -0
  491. package/tools/rmt-language/vnext-lifecycle.d.ts +22 -0
  492. package/tools/rmt-language/vnext-lifecycle.js +404 -0
  493. package/tools/rmt-language/vnext-parser.d.ts +21 -0
  494. package/tools/rmt-language/vnext-parser.js +1391 -0
  495. package/tools/rmt-language/vnext-regression.d.ts +25 -0
  496. package/tools/rmt-language/vnext-regression.js +394 -0
  497. package/tools/rmt-language/vnext-release.d.ts +29 -0
  498. package/tools/rmt-language/vnext-release.js +293 -0
  499. package/tools/rmt-language/vnext-remote-compatibility.d.ts +33 -0
  500. package/tools/rmt-language/vnext-remote-compatibility.js +892 -0
  501. package/tools/rmt-language/vnext-remote-compiler.d.ts +14 -0
  502. package/tools/rmt-language/vnext-remote-compiler.js +520 -0
  503. package/tools/rmt-language/vnext-remote-manifest.d.ts +33 -0
  504. package/tools/rmt-language/vnext-remote-manifest.js +538 -0
  505. package/tools/rmt-language/vnext-remote-security.d.ts +27 -0
  506. package/tools/rmt-language/vnext-remote-security.js +380 -0
  507. package/tools/rmt-language/vnext-remote-tooling.d.ts +25 -0
  508. package/tools/rmt-language/vnext-remote-tooling.js +805 -0
  509. package/tools/rmt-language/vnext-scheduler.d.ts +24 -0
  510. package/tools/rmt-language/vnext-scheduler.js +469 -0
  511. package/tools/rmt-language/vnext-security.d.ts +28 -0
  512. package/tools/rmt-language/vnext-security.js +597 -0
  513. package/tools/rmt-language/vnext-streaming.d.ts +28 -0
  514. package/tools/rmt-language/vnext-streaming.js +593 -0
  515. package/tools/rmt-language/vnext-surfaces.d.ts +24 -0
  516. package/tools/rmt-language/vnext-surfaces.js +406 -0
  517. package/tools/rmt-language/vnext-tooling.d.ts +25 -0
  518. package/tools/rmt-language/vnext-tooling.js +728 -0
  519. package/tools/rmt-language-server/protocol.d.ts +22 -0
  520. package/tools/rmt-language-server/protocol.js +352 -0
  521. package/tools/rmt-language-server/server.d.ts +15 -0
  522. package/tools/rmt-language-server/server.js +622 -0
  523. package/tools/rmt-linter/cli.d.ts +14 -0
  524. package/tools/rmt-linter/cli.js +450 -0
  525. package/tools/rmt-linter/reporter.d.ts +16 -0
  526. package/tools/rmt-linter/reporter.js +472 -0
  527. package/xtend-builder/README.md +83 -0
  528. package/xtend-builder/a11y/README.md +42 -0
  529. package/xtend-builder/a11y/component-a11y-profile.d.ts +14 -0
  530. package/xtend-builder/a11y/component-a11y-profile.js +314 -0
  531. package/xtend-builder/blueprints/README.md +105 -0
  532. package/xtend-builder/blueprints/component-blueprint.contract.d.ts +16 -0
  533. package/xtend-builder/blueprints/component-blueprint.contract.js +343 -0
  534. package/xtend-builder/builder-public-types.d.ts +234 -0
  535. package/xtend-builder/extensions/README.md +26 -0
  536. package/xtend-builder/extensions/component-extension-points.d.ts +11 -0
  537. package/xtend-builder/extensions/component-extension-points.js +277 -0
  538. package/xtend-builder/generators/README.md +149 -0
  539. package/xtend-builder/generators/component-files.d.ts +5 -0
  540. package/xtend-builder/generators/component-files.js +769 -0
  541. package/xtend-builder/generators/component-plan.d.ts +4 -0
  542. package/xtend-builder/generators/component-plan.js +104 -0
  543. package/xtend-builder/generators/registry.d.ts +6 -0
  544. package/xtend-builder/generators/registry.js +118 -0
  545. package/xtend-builder/generators/rmt-build.js +738 -0
  546. package/xtend-builder/generators/rmt-lifecycle-demo.js +922 -0
  547. package/xtend-builder/lib/cli.d.ts +9 -0
  548. package/xtend-builder/lib/cli.js +543 -0
  549. package/xtend-builder/lib/layout.d.ts +6 -0
  550. package/xtend-builder/lib/layout.js +153 -0
  551. package/xtend-builder/lib/package-resolver.js +25 -0
  552. package/xtend-builder/package.json +90 -0
  553. package/xtend-builder/performance/README.md +31 -0
  554. package/xtend-builder/performance/component-performance-profile.d.ts +11 -0
  555. package/xtend-builder/performance/component-performance-profile.js +347 -0
  556. package/xtend-builder/performance/component-ux-performance-contract.d.ts +27 -0
  557. package/xtend-builder/performance/component-ux-performance-contract.js +424 -0
  558. package/xtend-builder/preview/README.md +61 -0
  559. package/xtend-builder/preview/component-lab-ux-inspector.d.ts +20 -0
  560. package/xtend-builder/preview/component-lab-ux-inspector.js +448 -0
  561. package/xtend-builder/preview/component-lab.d.ts +14 -0
  562. package/xtend-builder/preview/component-lab.js +278 -0
  563. package/xtend-builder/preview/component-preview.d.ts +5 -0
  564. package/xtend-builder/preview/component-preview.js +160 -0
  565. package/xtend-builder/scaffold.config.d.ts +4 -0
  566. package/xtend-builder/scaffold.config.js +2056 -0
  567. package/xtend-builder/scaffold.d.ts +3 -0
  568. package/xtend-builder/scaffold.js +11 -0
  569. package/xtend-builder/templates/README.md +33 -0
  570. package/xtend-builder/templates/component/a11y.template.ts +11 -0
  571. package/xtend-builder/templates/component/component-suite.template.d.ts +2 -0
  572. package/xtend-builder/templates/component/component-suite.template.js +108 -0
  573. package/xtend-builder/templates/component/contract.template.ts +10 -0
  574. package/xtend-builder/templates/component/demo-plan.template.md +73 -0
  575. package/xtend-builder/templates/component/docs.template.md +301 -0
  576. package/xtend-builder/templates/component/fixture-data.template.ts +28 -0
  577. package/xtend-builder/templates/component/fixture.template.html +37 -0
  578. package/xtend-builder/templates/component/manifest-plan.template.json +22 -0
  579. package/xtend-builder/templates/component/performance.template.ts +13 -0
  580. package/xtend-builder/templates/component/rmt.template.ts +12 -0
  581. package/xtend-builder/templates/component/source.template.d.ts +2 -0
  582. package/xtend-builder/templates/component/source.template.js +137 -0
  583. package/xtend-builder/templates/component/source.template.ts +110 -0
  584. package/xtend-builder/templates/component/types.template.d.ts +423 -0
  585. package/xtend-builder/templates/loader.d.ts +4 -0
  586. package/xtend-builder/templates/loader.js +51 -0
  587. package/xtend-builder/templates/registry.d.ts +6 -0
  588. package/xtend-builder/templates/registry.js +119 -0
  589. package/xtend-builder/typing/README.md +130 -0
  590. package/xtend-builder/typing/component-contract-v2.d.ts +15 -0
  591. package/xtend-builder/typing/component-contract-v2.js +248 -0
  592. package/xtend-builder/typing/component-network-contract.d.ts +22 -0
  593. package/xtend-builder/typing/component-network-contract.js +478 -0
  594. package/xtend-builder/typing/component-shell-contract.d.ts +21 -0
  595. package/xtend-builder/typing/component-shell-contract.js +312 -0
  596. package/xtend-builder/typing/component-styling-contract.d.ts +22 -0
  597. package/xtend-builder/typing/component-styling-contract.js +301 -0
  598. package/xtend-builder/typing/component-types.d.ts +10 -0
  599. package/xtend-builder/typing/component-types.js +551 -0
  600. package/xtend-builder/typing/enterprise-component-flex-hardening-contract.d.ts +20 -0
  601. package/xtend-builder/typing/enterprise-component-flex-hardening-contract.js +332 -0
  602. package/xtend-builder/typing/feedback-status-ux-contract.d.ts +25 -0
  603. package/xtend-builder/typing/feedback-status-ux-contract.js +347 -0
  604. package/xtend-builder/typing/form-controls-ux-contract.d.ts +25 -0
  605. package/xtend-builder/typing/form-controls-ux-contract.js +357 -0
  606. package/xtend-builder/typing/layout-display-media-ux-contract.d.ts +25 -0
  607. package/xtend-builder/typing/layout-display-media-ux-contract.js +420 -0
  608. package/xtend-builder/typing/navigation-routing-ux-contract.d.ts +17 -0
  609. package/xtend-builder/typing/navigation-routing-ux-contract.js +297 -0
  610. package/xtend-builder/typing/overlay-interaction-ux-contract.d.ts +25 -0
  611. package/xtend-builder/typing/overlay-interaction-ux-contract.js +383 -0
  612. package/xtend-builder/typing/rmt-dsl-authoring-polish.d.ts +27 -0
  613. package/xtend-builder/typing/rmt-dsl-authoring-polish.js +419 -0
  614. package/xtend-builder/typing/rmt-shell-authoring-contract.d.ts +26 -0
  615. package/xtend-builder/typing/rmt-shell-authoring-contract.js +315 -0
  616. package/xtend-builder/utils/README.md +8 -0
  617. package/xtend-builder/utils/naming.d.ts +7 -0
  618. package/xtend-builder/utils/naming.js +36 -0
  619. package/xtend-builder/utils/validation.d.ts +5 -0
  620. package/xtend-builder/utils/validation.js +95 -0
  621. package/xtend-builder/wiring/README.md +46 -0
  622. package/xtend-builder/wiring/features.d.ts +5 -0
  623. package/xtend-builder/wiring/features.js +165 -0
  624. package/xtend-builder/wiring/hydration.d.ts +4 -0
  625. package/xtend-builder/wiring/hydration.js +44 -0
  626. package/xtend-builder/wiring/manifest.d.ts +5 -0
  627. package/xtend-builder/wiring/manifest.js +48 -0
  628. package/xtend-builder/workflows/README.md +47 -0
  629. package/xtend-builder/workflows/developer-workflow.d.ts +6 -0
  630. package/xtend-builder/workflows/developer-workflow.js +125 -0
  631. package/xtend-builder/writing/manifest-patcher.d.ts +49 -0
  632. package/xtend-builder/writing/manifest-patcher.js +391 -0
  633. package/xtend-builder/writing/write-plan.d.ts +148 -0
  634. package/xtend-builder/writing/write-plan.js +646 -0
  635. package/xtend-dev.d.ts +23 -0
  636. package/xtend-dev.js +4 -0
  637. package/xtend-loader.d.ts +201 -0
  638. package/xtend-loader.js +1704 -0
  639. package/xtend.css +402 -0
  640. package/xtendrmt/package.json +64 -0
  641. package/xtendrmt/rmt-core.d.ts +4452 -0
  642. package/xtendrmt/rmt-core.esm.js +25793 -0
  643. package/xtendrmt/rmt-first-demo-app.js +265 -0
  644. package/xtendrmt/rmt-first-demo-app.rmt +737 -0
  645. package/xtendrmt/rmt-lifecycle-demo.app.js +493 -0
  646. package/xtendrmt/rmt-lifecycle-demo.core.json +810 -0
  647. package/xtendrmt/rmt-lifecycle-demo.rmt +35 -0
  648. package/xtendrmt/rmt-lifecycle-demo.rmt-build.app.js +153 -0
  649. package/xtendrmt/rmt-lifecycle-demo.rmt-build.core.json +810 -0
  650. package/xtendrmt/rmt-lifecycle-demo.rmt-build.scaffold.json +202 -0
  651. package/xtendrmt/rmt-lifecycle-demo.scaffold.json +187 -0
  652. package/xtendrmt/rmt-manifest.json +548 -0
  653. package/xtendrmt/rmt-runtime.browser.js +26183 -0
  654. package/xtendrmt/rmt-runtime.esm.js +26214 -0
  655. package/xtendrmt/rmt-vnext-enterprise-mfe-demo.core.json +849 -0
  656. package/xtendrmt/rmt-vnext-enterprise-mfe-demo.rmt +50 -0
  657. package/xtendrmt/rmt-vnext-reference-demo.core.json +1069 -0
  658. package/xtendrmt/rmt-vnext-reference-demo.rmt +50 -0
  659. package/xtendrmt/rmt.schema.json +3145 -0
  660. package/xtendrmt/surface-workbench.js +316 -0
  661. package/xtendrmt/surface-workbench.rmt +762 -0
  662. package/xtendrmt/xtendrmt-bestcase-demo.core.json +1187 -0
  663. package/xtendrmt/xtendrmt-bestcase-demo.js +1728 -0
  664. package/xtendrmt/xtendrmt-bestcase-demo.rmt +57 -0
@@ -0,0 +1,353 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const ENTERPRISE_COMPONENT_STYLE_AUDIT_SCHEMA = 'xtend.enterprise.component-style-audit.v1';
5
+ const ENTERPRISE_COMPONENT_STYLE_AUDIT_FINDING_SCHEMA = 'xtend.enterprise.component-style-audit-finding.v1';
6
+ const ENTERPRISE_COMPONENT_STYLE_AUDIT_REPORT_SCHEMA = 'xtend.enterprise.component-style-audit-report.v1';
7
+ const ENTERPRISE_COMPONENT_STYLE_AUDIT_WORKPACKAGE = 'ECH-WP-02';
8
+ const ENTERPRISE_COMPONENT_STYLE_AUDIT_LOCAL_GATE = 'node scripts/run_xtend_tests.js enterprise-component-style-audit --json';
9
+
10
+ const AUDIT_CATEGORIES = Object.freeze([
11
+ 'style.color.literal',
12
+ 'style.surface.literal',
13
+ 'style.radius.literal',
14
+ 'style.shadow.literal',
15
+ 'style.spacing.literal',
16
+ 'style.typography.literal',
17
+ 'style.z-index.literal',
18
+ 'control.text-glyph',
19
+ 'control.missing-icon-part',
20
+ 'theme.missing-forced-colors',
21
+ 'theme.missing-reduced-motion'
22
+ ]);
23
+
24
+ const CATEGORY_SUGGESTIONS = Object.freeze({
25
+ 'style.color.literal': 'Expose the value through a component token with an XTheme-backed fallback.',
26
+ 'style.surface.literal': 'Route the surface through a public component token and keep light/dark/forced-colors readable.',
27
+ 'style.radius.literal': 'Replace the literal radius with a public radius token or component-scoped alias.',
28
+ 'style.shadow.literal': 'Replace the literal shadow with an elevation token and a forced-colors-safe fallback.',
29
+ 'style.spacing.literal': 'Replace fixed spacing with a public density or spacing token.',
30
+ 'style.typography.literal': 'Use the XTend typography bridge tokens instead of a fixed font stack.',
31
+ 'style.z-index.literal': 'Use a named layer token and document the stacking contract.',
32
+ 'control.text-glyph': 'Replace text glyph controls with an icon part or an accessible component icon.',
33
+ 'control.missing-icon-part': 'Expose the control graphic through a stable icon CSS part.',
34
+ 'theme.missing-forced-colors': 'Add forced-colors handling for all visible surfaces, borders, and text.',
35
+ 'theme.missing-reduced-motion': 'Add prefers-reduced-motion handling for transitions and animations.'
36
+ });
37
+
38
+ const SCAN_ROOTS = Object.freeze([
39
+ 'components',
40
+ 'src/components',
41
+ 'docs/components',
42
+ 'tests/components/fixtures',
43
+ 'tests/browser/fixtures'
44
+ ]);
45
+
46
+ const SCAN_EXTENSIONS = Object.freeze(['.js', '.ts', '.html', '.md']);
47
+
48
+ const P0_COMPONENTS = Object.freeze([
49
+ 'x-header',
50
+ 'x-theme',
51
+ 'x-icon',
52
+ 'x-button',
53
+ 'x-menu',
54
+ 'x-drawer',
55
+ 'x-side-panel',
56
+ 'x-modal',
57
+ 'x-dialog',
58
+ 'x-popover',
59
+ 'x-toast'
60
+ ]);
61
+
62
+ const KNOWN_RESIDUAL_FILES = Object.freeze([
63
+ 'components/xheader.js',
64
+ 'components/xtheme.js',
65
+ 'components/xicon.js',
66
+ 'components/xbutton.js',
67
+ 'components/xmenu.js',
68
+ 'components/xdrawer.js',
69
+ 'components/xsidepanel.js',
70
+ 'components/xmodal.js',
71
+ 'components/xdialog.js',
72
+ 'components/xpopover.js',
73
+ 'components/xtoast.js',
74
+ 'docs/components/xheader.md',
75
+ 'docs/components/xtheme.md',
76
+ 'docs/components/xicon.md',
77
+ 'docs/components/xbutton.md',
78
+ 'docs/components/xmenu.md',
79
+ 'docs/components/xdrawer.md',
80
+ 'docs/components/xsidepanel.md',
81
+ 'docs/components/xmodal.md',
82
+ 'docs/components/xdialog.md',
83
+ 'docs/components/xpopover.md',
84
+ 'docs/components/xtoast.md'
85
+ ]);
86
+
87
+ function normalizePath(value) {
88
+ return String(value || '').replace(/\\/g, '/');
89
+ }
90
+
91
+ function resolveRootDir(rootDir) {
92
+ return rootDir || path.resolve(__dirname, '..');
93
+ }
94
+
95
+ function readJsonIfExists(rootDir, relativePath) {
96
+ const absolutePath = path.join(rootDir, relativePath);
97
+ if (!fs.existsSync(absolutePath)) return null;
98
+ return JSON.parse(fs.readFileSync(absolutePath, 'utf8'));
99
+ }
100
+
101
+ function walkFiles(rootDir, relativePath, output = []) {
102
+ const absolutePath = path.join(rootDir, relativePath);
103
+ if (!fs.existsSync(absolutePath)) return output;
104
+ const stat = fs.statSync(absolutePath);
105
+ if (stat.isFile()) {
106
+ if (SCAN_EXTENSIONS.includes(path.extname(absolutePath))) output.push(normalizePath(relativePath));
107
+ return output;
108
+ }
109
+ fs.readdirSync(absolutePath).forEach((entry) => {
110
+ walkFiles(rootDir, path.join(relativePath, entry), output);
111
+ });
112
+ return output;
113
+ }
114
+
115
+ function createPathTagMap(rootDir) {
116
+ const manifest = readJsonIfExists(rootDir, 'components/manifest.json') || {};
117
+ const map = new Map();
118
+ Object.entries(manifest).forEach(([tag, source]) => {
119
+ map.set(normalizePath(`components/${String(source).replace(/^\.\//, '')}`), tag);
120
+ });
121
+ return map;
122
+ }
123
+
124
+ function resolveTagForFile(relativePath, pathTagMap) {
125
+ const normalized = normalizePath(relativePath);
126
+ if (pathTagMap.has(normalized)) return pathTagMap.get(normalized);
127
+ const basename = path.basename(normalized, path.extname(normalized));
128
+ if (basename.startsWith('x') && basename !== 'xstate') {
129
+ return `x-${basename.slice(1).replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}`;
130
+ }
131
+ if (basename === 'xstate') return 'xstate';
132
+ return null;
133
+ }
134
+
135
+ function isP0Tag(tag) {
136
+ return P0_COMPONENTS.includes(tag);
137
+ }
138
+
139
+ function isAllowedFallbackLine(line) {
140
+ return line.includes('var(') || line.includes('Canvas') || line.includes('CanvasText') || line.includes('Highlight');
141
+ }
142
+
143
+ function hasVisualLiteral(line) {
144
+ return /#[0-9a-fA-F]{3,8}\b|rgba?\(|hsla?\(/u.test(line);
145
+ }
146
+
147
+ function addFinding(findings, category, message, line, lineNumber, file, tag, scope) {
148
+ findings.push({
149
+ schema: ENTERPRISE_COMPONENT_STYLE_AUDIT_FINDING_SCHEMA,
150
+ category,
151
+ message,
152
+ suggestion: CATEGORY_SUGGESTIONS[category] || 'Review this finding against the Enterprise Component Hardening rules.',
153
+ file,
154
+ line: lineNumber,
155
+ tag,
156
+ scope,
157
+ excerpt: line.trim().slice(0, 180)
158
+ });
159
+ }
160
+
161
+ function detectLineFindings({ line, lineNumber = 1, file = '<inline>', tag = null, scope = 'source' }) {
162
+ const findings = [];
163
+ const text = String(line || '');
164
+ const lower = text.toLowerCase();
165
+ const allowedFallback = isAllowedFallbackLine(text);
166
+
167
+ if (hasVisualLiteral(text) && !allowedFallback) {
168
+ addFinding(findings, text.includes('background') || text.includes('surface') ? 'style.surface.literal' : 'style.color.literal', 'direct color/surface literal without public fallback', text, lineNumber, file, tag, scope);
169
+ }
170
+ if (/border-radius\s*:\s*[^;]*(px|rem|em|%)\b/u.test(text) && !allowedFallback) {
171
+ addFinding(findings, 'style.radius.literal', 'direct border-radius literal without token', text, lineNumber, file, tag, scope);
172
+ }
173
+ if (/box-shadow\s*:\s*[^;]+/u.test(text) && !allowedFallback && !lower.includes('none')) {
174
+ addFinding(findings, 'style.shadow.literal', 'direct box-shadow literal without token', text, lineNumber, file, tag, scope);
175
+ }
176
+ if (/(padding|margin|gap)\s*:\s*[^;]*(px|rem|em)\b/u.test(text) && !allowedFallback) {
177
+ addFinding(findings, 'style.spacing.literal', 'direct spacing literal without token', text, lineNumber, file, tag, scope);
178
+ }
179
+ if (/font-family\s*:\s*[^;]+/u.test(text) && !allowedFallback) {
180
+ addFinding(findings, 'style.typography.literal', 'direct font-family literal without token', text, lineNumber, file, tag, scope);
181
+ }
182
+ if (/z-index\s*:\s*\d+/u.test(text) && !allowedFallback) {
183
+ addFinding(findings, 'style.z-index.literal', 'direct z-index literal without token', text, lineNumber, file, tag, scope);
184
+ }
185
+ if (/(&times;|&#9776;|&#10003;|&#9888;|>\s*[Xx]\s*<|>\s*[-+]\s*<|\u2630|\u2713|\u26a0)/u.test(text) || /innerHTML\s*=.*(&times;|\u2630|\u2713|\u26a0)/u.test(text)) {
186
+ addFinding(findings, 'control.text-glyph', 'visible text glyph used as control graphic', text, lineNumber, file, tag, scope);
187
+ }
188
+
189
+ return findings;
190
+ }
191
+
192
+ function classifyScope(relativePath) {
193
+ if (relativePath.startsWith('components/') || relativePath.startsWith('src/components/')) return 'source';
194
+ if (relativePath.startsWith('docs/')) return 'docs';
195
+ if (relativePath.startsWith('tests/')) return 'fixture';
196
+ return 'other';
197
+ }
198
+
199
+ function isKnownResidual(finding) {
200
+ if (KNOWN_RESIDUAL_FILES.includes(finding.file)) return true;
201
+ if (finding.scope === 'docs' || finding.scope === 'fixture') return true;
202
+ if (finding.category === 'theme.missing-forced-colors' || finding.category === 'theme.missing-reduced-motion') return true;
203
+ return false;
204
+ }
205
+
206
+ function isBlockingFinding(finding) {
207
+ if (!finding || finding.knownResidual) return false;
208
+ if (!isP0Tag(finding.tag)) return false;
209
+ return [
210
+ 'style.color.literal',
211
+ 'style.surface.literal',
212
+ 'style.radius.literal',
213
+ 'style.shadow.literal',
214
+ 'style.spacing.literal',
215
+ 'style.typography.literal',
216
+ 'style.z-index.literal',
217
+ 'control.text-glyph',
218
+ 'control.missing-icon-part'
219
+ ].includes(finding.category);
220
+ }
221
+
222
+ function scanFile(rootDir, relativePath, pathTagMap) {
223
+ const absolutePath = path.join(rootDir, relativePath);
224
+ const text = fs.readFileSync(absolutePath, 'utf8');
225
+ const lines = text.split(/\r?\n/u);
226
+ const tag = resolveTagForFile(relativePath, pathTagMap);
227
+ const scope = classifyScope(relativePath);
228
+ const findings = [];
229
+
230
+ lines.forEach((line, index) => {
231
+ findings.push(...detectLineFindings({
232
+ line,
233
+ lineNumber: index + 1,
234
+ file: relativePath,
235
+ tag,
236
+ scope
237
+ }));
238
+ });
239
+
240
+ if (scope === 'source' && text.includes('customElements.define')) {
241
+ if (!text.includes('forced-colors')) {
242
+ addFinding(findings, 'theme.missing-forced-colors', 'component source does not declare forced-colors handling', relativePath, 1, relativePath, tag, scope);
243
+ }
244
+ if (!text.includes('prefers-reduced-motion')) {
245
+ addFinding(findings, 'theme.missing-reduced-motion', 'component source does not declare reduced-motion handling', relativePath, 1, relativePath, tag, scope);
246
+ }
247
+ if (/(close|dismiss|menu|trigger)/iu.test(text) && !text.includes('part="icon"') && !text.includes('part="trigger-icon"') && !text.includes('part="close icon"')) {
248
+ addFinding(findings, 'control.missing-icon-part', 'interactive control surface may be missing an icon part', relativePath, 1, relativePath, tag, scope);
249
+ }
250
+ }
251
+
252
+ return findings.map((finding) => {
253
+ const knownResidual = isKnownResidual(finding);
254
+ const normalized = {
255
+ ...finding,
256
+ priority: isP0Tag(finding.tag) ? 'P0' : 'P1/P2',
257
+ knownResidual
258
+ };
259
+ return {
260
+ ...normalized,
261
+ blocking: isBlockingFinding(normalized)
262
+ };
263
+ });
264
+ }
265
+
266
+ function summarizeFindings(findings) {
267
+ return findings.reduce((summary, finding) => {
268
+ summary.total += 1;
269
+ summary.byCategory[finding.category] = (summary.byCategory[finding.category] || 0) + 1;
270
+ summary.byScope[finding.scope] = (summary.byScope[finding.scope] || 0) + 1;
271
+ if (finding.knownResidual) summary.knownResiduals += 1;
272
+ if (finding.blocking) {
273
+ summary.blocking += 1;
274
+ summary.blockingFiles.push(finding.file);
275
+ }
276
+ return summary;
277
+ }, {
278
+ total: 0,
279
+ byCategory: {},
280
+ byScope: {},
281
+ knownResiduals: 0,
282
+ blocking: 0,
283
+ blockingFiles: []
284
+ });
285
+ }
286
+
287
+ function createEnterpriseComponentStyleAuditReport(options = {}) {
288
+ const rootDir = resolveRootDir(options.rootDir);
289
+ const pathTagMap = createPathTagMap(rootDir);
290
+ const files = (options.files && options.files.length ? options.files : SCAN_ROOTS.flatMap((root) => walkFiles(rootDir, root)))
291
+ .map(normalizePath)
292
+ .filter((file) => SCAN_EXTENSIONS.includes(path.extname(file)));
293
+ const findings = files.flatMap((file) => scanFile(rootDir, file, pathTagMap));
294
+ const summary = summarizeFindings(findings);
295
+
296
+ return {
297
+ schema: ENTERPRISE_COMPONENT_STYLE_AUDIT_SCHEMA,
298
+ reportSchema: ENTERPRISE_COMPONENT_STYLE_AUDIT_REPORT_SCHEMA,
299
+ findingSchema: ENTERPRISE_COMPONENT_STYLE_AUDIT_FINDING_SCHEMA,
300
+ workpackage: ENTERPRISE_COMPONENT_STYLE_AUDIT_WORKPACKAGE,
301
+ generatedAt: options.generatedAt || 'static-local',
302
+ localGate: ENTERPRISE_COMPONENT_STYLE_AUDIT_LOCAL_GATE,
303
+ scanRoots: SCAN_ROOTS.slice(),
304
+ categories: AUDIT_CATEGORIES.slice(),
305
+ p0Components: P0_COMPONENTS.slice(),
306
+ baselineMode: 'known-residual-file-baseline',
307
+ residualPolicy: {
308
+ knownResidualFiles: KNOWN_RESIDUAL_FILES.slice(),
309
+ newP0FindingsBlock: true,
310
+ docsAndFixturesReportOnly: true
311
+ },
312
+ files,
313
+ findings,
314
+ summary,
315
+ ok: summary.blocking === 0
316
+ };
317
+ }
318
+
319
+ function validateEnterpriseComponentStyleAuditReport(report = {}) {
320
+ const errors = [];
321
+ if (report.schema !== ENTERPRISE_COMPONENT_STYLE_AUDIT_SCHEMA) errors.push(`schema must be ${ENTERPRISE_COMPONENT_STYLE_AUDIT_SCHEMA}`);
322
+ if (report.reportSchema !== ENTERPRISE_COMPONENT_STYLE_AUDIT_REPORT_SCHEMA) errors.push(`reportSchema must be ${ENTERPRISE_COMPONENT_STYLE_AUDIT_REPORT_SCHEMA}`);
323
+ if (report.findingSchema !== ENTERPRISE_COMPONENT_STYLE_AUDIT_FINDING_SCHEMA) errors.push(`findingSchema must be ${ENTERPRISE_COMPONENT_STYLE_AUDIT_FINDING_SCHEMA}`);
324
+ if (report.workpackage !== ENTERPRISE_COMPONENT_STYLE_AUDIT_WORKPACKAGE) errors.push(`workpackage must be ${ENTERPRISE_COMPONENT_STYLE_AUDIT_WORKPACKAGE}`);
325
+ if (!Array.isArray(report.categories) || !AUDIT_CATEGORIES.every((category) => report.categories.includes(category))) errors.push('report categories must include every audit category');
326
+ if (!Array.isArray(report.scanRoots) || !SCAN_ROOTS.every((root) => report.scanRoots.includes(root))) errors.push('report scanRoots must include the planned scan roots');
327
+ if (!report.residualPolicy || report.residualPolicy.newP0FindingsBlock !== true) errors.push('residualPolicy.newP0FindingsBlock must be true');
328
+ if (!report.summary || typeof report.summary.blocking !== 'number') errors.push('summary.blocking must be numeric');
329
+ if (!Array.isArray(report.findings)) errors.push('findings must be an array');
330
+ return {
331
+ schema: ENTERPRISE_COMPONENT_STYLE_AUDIT_REPORT_SCHEMA,
332
+ ok: errors.length === 0,
333
+ errors
334
+ };
335
+ }
336
+
337
+ module.exports = {
338
+ AUDIT_CATEGORIES,
339
+ CATEGORY_SUGGESTIONS,
340
+ ENTERPRISE_COMPONENT_STYLE_AUDIT_FINDING_SCHEMA,
341
+ ENTERPRISE_COMPONENT_STYLE_AUDIT_LOCAL_GATE,
342
+ ENTERPRISE_COMPONENT_STYLE_AUDIT_REPORT_SCHEMA,
343
+ ENTERPRISE_COMPONENT_STYLE_AUDIT_SCHEMA,
344
+ ENTERPRISE_COMPONENT_STYLE_AUDIT_WORKPACKAGE,
345
+ KNOWN_RESIDUAL_FILES,
346
+ P0_COMPONENTS,
347
+ SCAN_EXTENSIONS,
348
+ SCAN_ROOTS,
349
+ createEnterpriseComponentStyleAuditReport,
350
+ detectLineFindings,
351
+ isBlockingFinding,
352
+ validateEnterpriseComponentStyleAuditReport
353
+ };
@@ -0,0 +1,19 @@
1
+ import type {
2
+ XtendCatalogConstant,
3
+ XtendCatalogOptions,
4
+ XtendCatalogRecord,
5
+ XtendCatalogReport
6
+ } from './catalog-public-types';
7
+
8
+ export declare const ENTERPRISE_FORM_CONTROL_THEME_A11Y_FINDING_SCHEMA: string;
9
+ export declare const ENTERPRISE_FORM_CONTROL_THEME_A11Y_LOCAL_GATE: string;
10
+ export declare const ENTERPRISE_FORM_CONTROL_THEME_A11Y_REPORT_SCHEMA: string;
11
+ export declare const ENTERPRISE_FORM_CONTROL_THEME_A11Y_SCHEMA: string;
12
+ export declare const ENTERPRISE_FORM_CONTROL_THEME_A11Y_WORKPACKAGE: string;
13
+ export declare const FORM_CONTROL_THEME_TARGETS: readonly XtendCatalogRecord[];
14
+ export declare const REQUIRED_DOC_MARKERS: readonly XtendCatalogConstant[];
15
+ export declare const REQUIRED_FIXTURE_MARKERS: readonly XtendCatalogConstant[];
16
+ export declare const REQUIRED_FORM_TOKENS: readonly XtendCatalogConstant[];
17
+ export declare const REQUIRED_SOURCE_MARKERS: readonly XtendCatalogConstant[];
18
+ export declare function createEnterpriseFormControlThemeA11yReport(options?: XtendCatalogOptions): XtendCatalogReport;
19
+ export declare function validateEnterpriseFormControlThemeA11yReport(report?: unknown): XtendCatalogReport;
@@ -0,0 +1,220 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const ENTERPRISE_FORM_CONTROL_THEME_A11Y_SCHEMA = 'xtend.enterprise.form-control-theme-a11y.v1';
5
+ const ENTERPRISE_FORM_CONTROL_THEME_A11Y_FINDING_SCHEMA = 'xtend.enterprise.form-control-theme-a11y-finding.v1';
6
+ const ENTERPRISE_FORM_CONTROL_THEME_A11Y_REPORT_SCHEMA = 'xtend.enterprise.form-control-theme-a11y-report.v1';
7
+ const ENTERPRISE_FORM_CONTROL_THEME_A11Y_WORKPACKAGE = 'ECH-WP-08';
8
+ const ENTERPRISE_FORM_CONTROL_THEME_A11Y_LOCAL_GATE = 'node scripts/run_xtend_tests.js enterprise-form-control-theme-a11y --json';
9
+
10
+ const REQUIRED_FORM_TOKENS = Object.freeze([
11
+ '--xtend-form-text',
12
+ '--xtend-form-control-surface',
13
+ '--xtend-form-control-text',
14
+ '--xtend-form-label-text',
15
+ '--xtend-form-helper-text',
16
+ '--xtend-form-error-text',
17
+ '--xtend-form-error-surface',
18
+ '--xtend-form-error-border',
19
+ '--xtend-form-focus-ring',
20
+ '--xtend-form-radius',
21
+ '--xtend-form-gap',
22
+ '--xtend-form-font-family',
23
+ '--xtend-form-control-font-size',
24
+ '--xtend-form-helper-font-size',
25
+ '--xtend-form-icon-color'
26
+ ]);
27
+
28
+ const REQUIRED_SOURCE_MARKERS = Object.freeze([
29
+ 'signatureDesign',
30
+ 'densityProfiles',
31
+ 'states:',
32
+ 'density="comfortable"',
33
+ 'density="compact"',
34
+ 'density="dense"',
35
+ 'aria-invalid',
36
+ 'aria-busy',
37
+ 'prefers-reduced-motion',
38
+ 'forced-colors',
39
+ 'part="label',
40
+ 'part="helper',
41
+ 'part="error status"'
42
+ ]);
43
+
44
+ const REQUIRED_DOC_MARKERS = Object.freeze([
45
+ 'ECH-WP-08',
46
+ 'signatureDesign',
47
+ 'Density-Profile',
48
+ 'Invalid'
49
+ ]);
50
+
51
+ const REQUIRED_FIXTURE_MARKERS = Object.freeze([
52
+ 'data-xtend-form-theme="enterprise-foreign"',
53
+ '--xtend-form-control-surface',
54
+ '--xtend-form-error-border',
55
+ '--xtend-form-focus-ring',
56
+ 'density='
57
+ ]);
58
+
59
+ const FORM_CONTROL_THEME_TARGETS = Object.freeze([
60
+ {
61
+ tag: 'x-input',
62
+ file: 'components/xinput.js',
63
+ docs: 'docs/components/xinput.md',
64
+ fixture: 'tests/components/fixtures/xinput.component.html',
65
+ nonColorMarkers: ['border-inline-start', 'box-shadow: var(--xtend-form-error-shadow']
66
+ },
67
+ {
68
+ tag: 'x-select',
69
+ file: 'components/xselect.js',
70
+ docs: 'docs/components/xselect.md',
71
+ fixture: 'tests/components/fixtures/xselect.component.html',
72
+ nonColorMarkers: ['border-inline-start', 'box-shadow: var(--xtend-form-error-shadow']
73
+ },
74
+ {
75
+ tag: 'x-checkbox',
76
+ file: 'components/xcheckbox.js',
77
+ docs: 'docs/components/xcheckbox.md',
78
+ fixture: 'tests/components/fixtures/xcheckbox.component.html',
79
+ nonColorMarkers: ['border-inline-start', 'outline: var(--xtend-form-error-outline']
80
+ },
81
+ {
82
+ tag: 'x-radio',
83
+ file: 'components/xradio.js',
84
+ docs: 'docs/components/xradio.md',
85
+ fixture: 'tests/components/fixtures/xradio.component.html',
86
+ nonColorMarkers: ['border-inline-start', 'outline: var(--xtend-form-error-outline']
87
+ },
88
+ {
89
+ tag: 'x-textarea',
90
+ file: 'components/xtextarea.js',
91
+ docs: 'docs/components/xtextarea.md',
92
+ fixture: 'tests/components/fixtures/xtextarea.component.html',
93
+ nonColorMarkers: ['border-inline-start', 'box-shadow: var(--xtend-form-error-shadow']
94
+ },
95
+ {
96
+ tag: 'x-form',
97
+ file: 'components/xform.js',
98
+ docs: 'docs/components/xform.md',
99
+ fixture: 'tests/components/fixtures/xform.component.html',
100
+ nonColorMarkers: ['border-color: var(--xtend-form-error-border', 'box-shadow: var(--xtend-form-error-shadow']
101
+ }
102
+ ]);
103
+
104
+ function resolveRootDir(rootDir) {
105
+ return rootDir || path.resolve(__dirname, '..');
106
+ }
107
+
108
+ function readFile(rootDir, relativePath) {
109
+ return fs.readFileSync(path.join(rootDir, relativePath), 'utf8');
110
+ }
111
+
112
+ function addFinding(findings, target, category, message, pattern, file) {
113
+ findings.push({
114
+ schema: ENTERPRISE_FORM_CONTROL_THEME_A11Y_FINDING_SCHEMA,
115
+ category,
116
+ tag: target.tag,
117
+ file: file || target.file,
118
+ message,
119
+ pattern,
120
+ blocking: true
121
+ });
122
+ }
123
+
124
+ function inspectTarget(rootDir, target) {
125
+ const source = readFile(rootDir, target.file);
126
+ const docs = readFile(rootDir, target.docs);
127
+ const fixture = readFile(rootDir, target.fixture);
128
+ const findings = [];
129
+
130
+ REQUIRED_FORM_TOKENS.forEach((token) => {
131
+ if (!source.includes(token)) addFinding(findings, target, 'form.token.source-missing', `${target.tag} source must consume ${token}`, token);
132
+ if (!docs.includes(token)) addFinding(findings, target, 'form.token.docs-missing', `${target.tag} docs must document ${token}`, token, target.docs);
133
+ });
134
+
135
+ REQUIRED_SOURCE_MARKERS.forEach((marker) => {
136
+ if (!source.includes(marker)) addFinding(findings, target, 'form.source-marker.missing', `${target.tag} source must include ${marker}`, marker);
137
+ });
138
+
139
+ REQUIRED_DOC_MARKERS.forEach((marker) => {
140
+ if (!docs.includes(marker)) addFinding(findings, target, 'form.docs-marker.missing', `${target.tag} docs must include ${marker}`, marker, target.docs);
141
+ });
142
+
143
+ REQUIRED_FIXTURE_MARKERS.forEach((marker) => {
144
+ if (!fixture.includes(marker)) addFinding(findings, target, 'form.fixture-theme.missing', `${target.tag} fixture must include ${marker}`, marker, target.fixture);
145
+ });
146
+
147
+ target.nonColorMarkers.forEach((marker) => {
148
+ if (!source.includes(marker)) addFinding(findings, target, 'form.invalid.non-color-missing', `${target.tag} invalid/error state must not be color-only`, marker);
149
+ });
150
+
151
+ return {
152
+ tag: target.tag,
153
+ file: target.file,
154
+ docs: target.docs,
155
+ fixture: target.fixture,
156
+ tokenCount: REQUIRED_FORM_TOKENS.length,
157
+ findings
158
+ };
159
+ }
160
+
161
+ function createEnterpriseFormControlThemeA11yReport(options = {}) {
162
+ const rootDir = resolveRootDir(options.rootDir);
163
+ const targets = FORM_CONTROL_THEME_TARGETS.map((target) => inspectTarget(rootDir, target));
164
+ const findings = targets.flatMap((target) => target.findings);
165
+ const summary = findings.reduce((result, finding) => {
166
+ result.total += 1;
167
+ result.byCategory[finding.category] = (result.byCategory[finding.category] || 0) + 1;
168
+ return result;
169
+ }, { total: 0, byCategory: {} });
170
+
171
+ return {
172
+ schema: ENTERPRISE_FORM_CONTROL_THEME_A11Y_SCHEMA,
173
+ reportSchema: ENTERPRISE_FORM_CONTROL_THEME_A11Y_REPORT_SCHEMA,
174
+ findingSchema: ENTERPRISE_FORM_CONTROL_THEME_A11Y_FINDING_SCHEMA,
175
+ workpackage: ENTERPRISE_FORM_CONTROL_THEME_A11Y_WORKPACKAGE,
176
+ localGate: ENTERPRISE_FORM_CONTROL_THEME_A11Y_LOCAL_GATE,
177
+ requiredTokens: REQUIRED_FORM_TOKENS.slice(),
178
+ requiredSourceMarkers: REQUIRED_SOURCE_MARKERS.slice(),
179
+ requiredDocMarkers: REQUIRED_DOC_MARKERS.slice(),
180
+ requiredFixtureMarkers: REQUIRED_FIXTURE_MARKERS.slice(),
181
+ targets,
182
+ findings,
183
+ summary,
184
+ ok: findings.length === 0
185
+ };
186
+ }
187
+
188
+ function validateEnterpriseFormControlThemeA11yReport(report = {}) {
189
+ const errors = [];
190
+ if (report.schema !== ENTERPRISE_FORM_CONTROL_THEME_A11Y_SCHEMA) errors.push(`schema must be ${ENTERPRISE_FORM_CONTROL_THEME_A11Y_SCHEMA}`);
191
+ if (report.reportSchema !== ENTERPRISE_FORM_CONTROL_THEME_A11Y_REPORT_SCHEMA) errors.push(`reportSchema must be ${ENTERPRISE_FORM_CONTROL_THEME_A11Y_REPORT_SCHEMA}`);
192
+ if (report.findingSchema !== ENTERPRISE_FORM_CONTROL_THEME_A11Y_FINDING_SCHEMA) errors.push(`findingSchema must be ${ENTERPRISE_FORM_CONTROL_THEME_A11Y_FINDING_SCHEMA}`);
193
+ if (report.workpackage !== ENTERPRISE_FORM_CONTROL_THEME_A11Y_WORKPACKAGE) errors.push(`workpackage must be ${ENTERPRISE_FORM_CONTROL_THEME_A11Y_WORKPACKAGE}`);
194
+ if (report.localGate !== ENTERPRISE_FORM_CONTROL_THEME_A11Y_LOCAL_GATE) errors.push('invalid local gate');
195
+ if (!Array.isArray(report.requiredTokens) || !REQUIRED_FORM_TOKENS.every((token) => report.requiredTokens.includes(token))) errors.push('requiredTokens must include every form token');
196
+ if (!Array.isArray(report.targets) || report.targets.length !== FORM_CONTROL_THEME_TARGETS.length) errors.push('targets must cover every WP-08 target');
197
+ if (!Array.isArray(report.findings)) errors.push('findings must be an array');
198
+ if (!report.summary || typeof report.summary.total !== 'number') errors.push('summary.total must be numeric');
199
+ if (report.ok !== (Array.isArray(report.findings) && report.findings.length === 0)) errors.push('ok must reflect finding count');
200
+ return {
201
+ schema: ENTERPRISE_FORM_CONTROL_THEME_A11Y_REPORT_SCHEMA,
202
+ ok: errors.length === 0,
203
+ errors
204
+ };
205
+ }
206
+
207
+ module.exports = {
208
+ ENTERPRISE_FORM_CONTROL_THEME_A11Y_FINDING_SCHEMA,
209
+ ENTERPRISE_FORM_CONTROL_THEME_A11Y_LOCAL_GATE,
210
+ ENTERPRISE_FORM_CONTROL_THEME_A11Y_REPORT_SCHEMA,
211
+ ENTERPRISE_FORM_CONTROL_THEME_A11Y_SCHEMA,
212
+ ENTERPRISE_FORM_CONTROL_THEME_A11Y_WORKPACKAGE,
213
+ FORM_CONTROL_THEME_TARGETS,
214
+ REQUIRED_DOC_MARKERS,
215
+ REQUIRED_FIXTURE_MARKERS,
216
+ REQUIRED_FORM_TOKENS,
217
+ REQUIRED_SOURCE_MARKERS,
218
+ createEnterpriseFormControlThemeA11yReport,
219
+ validateEnterpriseFormControlThemeA11yReport
220
+ };
@@ -0,0 +1,21 @@
1
+ import type {
2
+ XtendCatalogConstant,
3
+ XtendCatalogOptions,
4
+ XtendCatalogReport
5
+ } from './catalog-public-types';
6
+
7
+ export declare const CONTROL_KEYWORDS: readonly XtendCatalogConstant[];
8
+ export declare const ENTERPRISE_ICON_CONTROL_AUDIT_FINDING_SCHEMA: string;
9
+ export declare const ENTERPRISE_ICON_CONTROL_AUDIT_LOCAL_GATE: string;
10
+ export declare const ENTERPRISE_ICON_CONTROL_AUDIT_REPORT_SCHEMA: string;
11
+ export declare const ENTERPRISE_ICON_CONTROL_AUDIT_SCHEMA: string;
12
+ export declare const ENTERPRISE_ICON_CONTROL_AUDIT_WORKPACKAGE: string;
13
+ export declare const IGNORED_FILES: readonly XtendCatalogConstant[];
14
+ export declare const PRODUCTION_SCAN_PATHS: readonly XtendCatalogConstant[];
15
+ export declare const REQUIRED_CORE_ICONS: readonly XtendCatalogConstant[];
16
+ export declare const SCAN_EXTENSIONS: readonly XtendCatalogConstant[];
17
+ export declare const TEXT_GLYPH_ENTITIES: readonly XtendCatalogConstant[];
18
+ export declare const TEXT_GLYPH_LITERALS: readonly XtendCatalogConstant[];
19
+ export declare function createEnterpriseIconControlAuditReport(options?: XtendCatalogOptions): XtendCatalogReport;
20
+ export declare function isTextGlyphControlContent(value?: unknown): boolean;
21
+ export declare function validateEnterpriseIconControlAuditReport(report?: unknown): XtendCatalogReport;