microui-wc 0.1.0

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 (609) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +33 -0
  3. package/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  4. package/.github/workflows/ci.yml +42 -0
  5. package/.github/workflows/deploy-pages.yml +112 -0
  6. package/AGENTS.md +2366 -0
  7. package/CHANGELOG.md +47 -0
  8. package/CODE_OF_CONDUCT.md +59 -0
  9. package/CONTRIBUTING.md +156 -0
  10. package/LICENSE +190 -0
  11. package/README.md +254 -0
  12. package/SECURITY.md +58 -0
  13. package/app/.generated/routes/alerts.js +8 -0
  14. package/app/.generated/routes/avatars.js +8 -0
  15. package/app/.generated/routes/badges.js +8 -0
  16. package/app/.generated/routes/buttons.js +10 -0
  17. package/app/.generated/routes/cards.js +10 -0
  18. package/app/.generated/routes/checkboxes.js +9 -0
  19. package/app/.generated/routes/chips.js +8 -0
  20. package/app/.generated/routes/dropdowns.js +9 -0
  21. package/app/.generated/routes/home.js +7 -0
  22. package/app/.generated/routes/icons.js +9 -0
  23. package/app/.generated/routes/inputs.js +10 -0
  24. package/app/.generated/routes/installation.js +7 -0
  25. package/app/.generated/routes/layout.js +9 -0
  26. package/app/.generated/routes/modals.js +9 -0
  27. package/app/.generated/routes/navbar.js +7 -0
  28. package/app/.generated/routes/progress.js +9 -0
  29. package/app/.generated/routes/radios.js +9 -0
  30. package/app/.generated/routes/switches.js +9 -0
  31. package/app/.generated/routes/tabs.js +8 -0
  32. package/app/.generated/routes/toasts.js +9 -0
  33. package/app/index.html +67 -0
  34. package/app/pages/alerts.html +23 -0
  35. package/app/pages/avatars.html +22 -0
  36. package/app/pages/badges.html +22 -0
  37. package/app/pages/buttons.html +71 -0
  38. package/app/pages/cards.html +54 -0
  39. package/app/pages/checkboxes.html +39 -0
  40. package/app/pages/chips.html +23 -0
  41. package/app/pages/dropdowns.html +41 -0
  42. package/app/pages/home.html +59 -0
  43. package/app/pages/icons.html +29 -0
  44. package/app/pages/inputs.html +66 -0
  45. package/app/pages/installation.html +34 -0
  46. package/app/pages/layout.html +30 -0
  47. package/app/pages/modals.html +21 -0
  48. package/app/pages/navbar.html +22 -0
  49. package/app/pages/progress.html +35 -0
  50. package/app/pages/radios.html +40 -0
  51. package/app/pages/switches.html +39 -0
  52. package/app/pages/tabs.html +30 -0
  53. package/app/pages/toasts.html +22 -0
  54. package/app-dist/index.html +67 -0
  55. package/app-dist/pages/alerts.html +23 -0
  56. package/app-dist/pages/avatars.html +22 -0
  57. package/app-dist/pages/badges.html +22 -0
  58. package/app-dist/pages/buttons.html +71 -0
  59. package/app-dist/pages/cards.html +54 -0
  60. package/app-dist/pages/checkboxes.html +39 -0
  61. package/app-dist/pages/chips.html +23 -0
  62. package/app-dist/pages/dropdowns.html +41 -0
  63. package/app-dist/pages/home.html +59 -0
  64. package/app-dist/pages/icons.html +29 -0
  65. package/app-dist/pages/inputs.html +66 -0
  66. package/app-dist/pages/installation.html +34 -0
  67. package/app-dist/pages/layout.html +30 -0
  68. package/app-dist/pages/modals.html +21 -0
  69. package/app-dist/pages/navbar.html +22 -0
  70. package/app-dist/pages/progress.html +35 -0
  71. package/app-dist/pages/radios.html +40 -0
  72. package/app-dist/pages/switches.html +39 -0
  73. package/app-dist/pages/tabs.html +30 -0
  74. package/app-dist/pages/toasts.html +22 -0
  75. package/app-dist/pages.json +217 -0
  76. package/app-dist/routes/alerts.js +5 -0
  77. package/app-dist/routes/avatars.js +1 -0
  78. package/app-dist/routes/badges.js +1 -0
  79. package/app-dist/routes/buttons.js +1 -0
  80. package/app-dist/routes/cards.js +1 -0
  81. package/app-dist/routes/checkboxes.js +9 -0
  82. package/app-dist/routes/chips.js +4 -0
  83. package/app-dist/routes/chunk-019e5e2f.js +5 -0
  84. package/app-dist/routes/chunk-0m4j19yd.js +2 -0
  85. package/app-dist/routes/chunk-0tmmp5q0.js +1 -0
  86. package/app-dist/routes/chunk-10xn709r.js +1 -0
  87. package/app-dist/routes/chunk-15m2qcda.js +2 -0
  88. package/app-dist/routes/chunk-1bh8g23n.js +1 -0
  89. package/app-dist/routes/chunk-1vg0v937.js +1 -0
  90. package/app-dist/routes/chunk-1zvcgy3j.js +1 -0
  91. package/app-dist/routes/chunk-2afb0861.js +1 -0
  92. package/app-dist/routes/chunk-2c6ttpzt.js +5 -0
  93. package/app-dist/routes/chunk-3dy30fhs.js +1 -0
  94. package/app-dist/routes/chunk-426dnces.js +13 -0
  95. package/app-dist/routes/chunk-44kgxery.js +1 -0
  96. package/app-dist/routes/chunk-47fdnejd.js +33 -0
  97. package/app-dist/routes/chunk-49a6t2vq.js +1 -0
  98. package/app-dist/routes/chunk-4fe1rm5b.js +1 -0
  99. package/app-dist/routes/chunk-4ggmvkta.js +33 -0
  100. package/app-dist/routes/chunk-4vkz81q7.js +33 -0
  101. package/app-dist/routes/chunk-4w4tmj8f.js +31 -0
  102. package/app-dist/routes/chunk-532s62kr.js +31 -0
  103. package/app-dist/routes/chunk-5hm3bssy.js +33 -0
  104. package/app-dist/routes/chunk-5vrh24hc.js +1 -0
  105. package/app-dist/routes/chunk-61pcg25a.js +1 -0
  106. package/app-dist/routes/chunk-6nfhygvf.js +1 -0
  107. package/app-dist/routes/chunk-700e7je6.js +33 -0
  108. package/app-dist/routes/chunk-7fsn17kg.js +1 -0
  109. package/app-dist/routes/chunk-7k789b32.js +1 -0
  110. package/app-dist/routes/chunk-7r46q0ys.js +36 -0
  111. package/app-dist/routes/chunk-86fmc1fr.js +5 -0
  112. package/app-dist/routes/chunk-8qth37vw.js +1 -0
  113. package/app-dist/routes/chunk-924wv8n0.js +1 -0
  114. package/app-dist/routes/chunk-9mbhgxk9.js +1 -0
  115. package/app-dist/routes/chunk-a216hyd9.js +1 -0
  116. package/app-dist/routes/chunk-akzxykh9.js +33 -0
  117. package/app-dist/routes/chunk-b3dcvy8c.js +1 -0
  118. package/app-dist/routes/chunk-b74zahz5.js +31 -0
  119. package/app-dist/routes/chunk-bftj53p2.js +5 -0
  120. package/app-dist/routes/chunk-c01hnz3e.js +1 -0
  121. package/app-dist/routes/chunk-d8pvv5km.js +1 -0
  122. package/app-dist/routes/chunk-dev0aezr.js +2 -0
  123. package/app-dist/routes/chunk-dh6vnv0e.js +1 -0
  124. package/app-dist/routes/chunk-dn2cbpva.js +36 -0
  125. package/app-dist/routes/chunk-dvn0my90.js +1 -0
  126. package/app-dist/routes/chunk-dvq8mnve.js +36 -0
  127. package/app-dist/routes/chunk-e8c2gc4d.js +5 -0
  128. package/app-dist/routes/chunk-ejf9ak2x.js +1 -0
  129. package/app-dist/routes/chunk-f083m55s.js +1 -0
  130. package/app-dist/routes/chunk-fnrj28s1.js +31 -0
  131. package/app-dist/routes/chunk-fvg3yjdp.js +31 -0
  132. package/app-dist/routes/chunk-g7k381n1.js +1 -0
  133. package/app-dist/routes/chunk-h01kq2ae.js +13 -0
  134. package/app-dist/routes/chunk-h4dk761v.js +5 -0
  135. package/app-dist/routes/chunk-hmx91z2x.js +5 -0
  136. package/app-dist/routes/chunk-hxbg4m42.js +36 -0
  137. package/app-dist/routes/chunk-jbjnfp2b.js +2 -0
  138. package/app-dist/routes/chunk-jxtz5vv6.js +36 -0
  139. package/app-dist/routes/chunk-jxzcs0ey.js +36 -0
  140. package/app-dist/routes/chunk-kt7wwhcx.js +1 -0
  141. package/app-dist/routes/chunk-kzptszyc.js +33 -0
  142. package/app-dist/routes/chunk-mhgca4w4.js +2 -0
  143. package/app-dist/routes/chunk-mhswxa20.js +1 -0
  144. package/app-dist/routes/chunk-n8zfeex6.js +1 -0
  145. package/app-dist/routes/chunk-pee47b2r.js +1 -0
  146. package/app-dist/routes/chunk-pesmw829.js +1 -0
  147. package/app-dist/routes/chunk-pgc4c6f3.js +36 -0
  148. package/app-dist/routes/chunk-q8egegm1.js +1 -0
  149. package/app-dist/routes/chunk-q9mn2qyq.js +36 -0
  150. package/app-dist/routes/chunk-qh0rtaf3.js +5 -0
  151. package/app-dist/routes/chunk-qqhmk6ye.js +2 -0
  152. package/app-dist/routes/chunk-qrxygmf7.js +33 -0
  153. package/app-dist/routes/chunk-r46yzksx.js +36 -0
  154. package/app-dist/routes/chunk-rgpbw2w0.js +5 -0
  155. package/app-dist/routes/chunk-rnpzv3d8.js +2 -0
  156. package/app-dist/routes/chunk-s5v8cv05.js +2 -0
  157. package/app-dist/routes/chunk-sbwn5bpc.js +1 -0
  158. package/app-dist/routes/chunk-sqbg8jbt.js +33 -0
  159. package/app-dist/routes/chunk-sv8dqnf7.js +1 -0
  160. package/app-dist/routes/chunk-t67sw3za.js +1 -0
  161. package/app-dist/routes/chunk-tjdpqwdf.js +31 -0
  162. package/app-dist/routes/chunk-tq2mfghg.js +1 -0
  163. package/app-dist/routes/chunk-ttn10vt6.js +1 -0
  164. package/app-dist/routes/chunk-v2hzpjxr.js +1 -0
  165. package/app-dist/routes/chunk-wfjjkw9y.js +1 -0
  166. package/app-dist/routes/chunk-wt8cxzmf.js +31 -0
  167. package/app-dist/routes/chunk-x45d372k.js +5 -0
  168. package/app-dist/routes/chunk-y3wsazkt.js +1 -0
  169. package/app-dist/routes/chunk-y7pmgc7t.js +33 -0
  170. package/app-dist/routes/chunk-zefdt2q3.js +31 -0
  171. package/app-dist/routes/dropdowns.js +6 -0
  172. package/app-dist/routes/home.js +1 -0
  173. package/app-dist/routes/icons.js +1 -0
  174. package/app-dist/routes/inputs.js +12 -0
  175. package/app-dist/routes/installation.js +1 -0
  176. package/app-dist/routes/layout.js +1 -0
  177. package/app-dist/routes/modals.js +7 -0
  178. package/app-dist/routes/navbar.js +1 -0
  179. package/app-dist/routes/progress.js +1 -0
  180. package/app-dist/routes/radios.js +6 -0
  181. package/app-dist/routes/switches.js +6 -0
  182. package/app-dist/routes/tabs.js +1 -0
  183. package/app-dist/routes/toasts.js +16 -0
  184. package/assets/fonts/material-symbols-mini.woff2 +0 -0
  185. package/assets/fonts/material-symbols.woff2 +0 -0
  186. package/assets/fonts/roboto-400.woff2 +0 -0
  187. package/assets/fonts/roboto-500.woff2 +0 -0
  188. package/assets/fonts/roboto-700.woff2 +0 -0
  189. package/assets/logo-banner-400.jpg +0 -0
  190. package/assets/logo-banner-400.webp +0 -0
  191. package/assets/logo-banner-800.webp +0 -0
  192. package/assets/logo-banner.jpg +0 -0
  193. package/assets/logo-icon-64.jpg +0 -0
  194. package/assets/logo-icon-64.webp +0 -0
  195. package/assets/logo-icon.jpg +0 -0
  196. package/assets/logo-square.jpg +0 -0
  197. package/bun.lock +312 -0
  198. package/bunfig.toml +4 -0
  199. package/custom-elements.json +1916 -0
  200. package/demo/api/sample-data.json +38 -0
  201. package/demo/content/alerts.html +115 -0
  202. package/demo/content/avatars.html +70 -0
  203. package/demo/content/badges.html +65 -0
  204. package/demo/content/buttons.html +188 -0
  205. package/demo/content/callouts.html +91 -0
  206. package/demo/content/cards.html +121 -0
  207. package/demo/content/checkboxes.html +178 -0
  208. package/demo/content/chips.html +67 -0
  209. package/demo/content/codeblocks.html +101 -0
  210. package/demo/content/confirms.html +115 -0
  211. package/demo/content/datatables.html +149 -0
  212. package/demo/content/dividers.html +119 -0
  213. package/demo/content/dropdowns.html +89 -0
  214. package/demo/content/enterprise.html +252 -0
  215. package/demo/content/home.html +149 -0
  216. package/demo/content/icons.html +89 -0
  217. package/demo/content/inputs.html +135 -0
  218. package/demo/content/installation.html +16 -0
  219. package/demo/content/layout.html +136 -0
  220. package/demo/content/modals.html +141 -0
  221. package/demo/content/navbar.html +70 -0
  222. package/demo/content/progress.html +119 -0
  223. package/demo/content/radios.html +88 -0
  224. package/demo/content/skeletons.html +109 -0
  225. package/demo/content/spinners.html +96 -0
  226. package/demo/content/switches.html +84 -0
  227. package/demo/content/tables.html +124 -0
  228. package/demo/content/tabs.html +85 -0
  229. package/demo/content/toasts.html +116 -0
  230. package/demo/content/tooltips.html +107 -0
  231. package/demo/content/virtual-lists.html +233 -0
  232. package/demo/favicon.ico +0 -0
  233. package/demo/favicon.png +0 -0
  234. package/demo/full.html +52 -0
  235. package/demo/iife.html +46 -0
  236. package/demo/manifest.json +34 -0
  237. package/demo/pages/datatable-demo.html +237 -0
  238. package/demo/pages/prompt-ui-demo.html +218 -0
  239. package/demo/pages/responsive-demo.html +122 -0
  240. package/demo/pages/schema-form-demo.html +270 -0
  241. package/demo/robots.txt +6 -0
  242. package/demo/shell.html +712 -0
  243. package/demo/sw.js +387 -0
  244. package/dist/AGENTS.md +2366 -0
  245. package/dist/README.md +254 -0
  246. package/dist/chunks/advanced.js +174 -0
  247. package/dist/chunks/chunk-1nhr1wrq.js +14 -0
  248. package/dist/chunks/chunk-hssyjbr0.js +2 -0
  249. package/dist/chunks/chunk-k8etzx0z.js +2 -0
  250. package/dist/chunks/chunk-rr1et8fg.js +2 -0
  251. package/dist/chunks/chunk-sjcx4fd5.js +6 -0
  252. package/dist/chunks/chunk-v1c777xh.js +5 -0
  253. package/dist/chunks/chunk-w5k5vwjd.js +13 -0
  254. package/dist/chunks/core.js +10 -0
  255. package/dist/chunks/display.js +17 -0
  256. package/dist/chunks/feedback.js +15 -0
  257. package/dist/chunks/forms.js +48 -0
  258. package/dist/chunks/layout.js +9 -0
  259. package/dist/components/chunk-4tezav8r.js +2 -0
  260. package/dist/components/chunk-fqyb2pms.js +2 -0
  261. package/dist/components/chunk-h7cdbhxw.js +13 -0
  262. package/dist/components/chunk-mzd8jwrs.js +2 -0
  263. package/dist/components/chunk-qwmxyn8e.js +2 -0
  264. package/dist/components/chunk-redtk47a.js +14 -0
  265. package/dist/components/mu-alert.js +5 -0
  266. package/dist/components/mu-api-table.js +33 -0
  267. package/dist/components/mu-avatar.js +1 -0
  268. package/dist/components/mu-badge.js +1 -0
  269. package/dist/components/mu-bottom-nav.js +1 -0
  270. package/dist/components/mu-button.js +1 -0
  271. package/dist/components/mu-callout.js +1 -0
  272. package/dist/components/mu-card.js +1 -0
  273. package/dist/components/mu-checkbox.js +9 -0
  274. package/dist/components/mu-chip.js +4 -0
  275. package/dist/components/mu-code.js +48 -0
  276. package/dist/components/mu-confirm.js +10 -0
  277. package/dist/components/mu-container.js +1 -0
  278. package/dist/components/mu-datatable.js +96 -0
  279. package/dist/components/mu-divider.js +1 -0
  280. package/dist/components/mu-doc-page.js +26 -0
  281. package/dist/components/mu-drawer-item.js +9 -0
  282. package/dist/components/mu-drawer.js +1 -0
  283. package/dist/components/mu-dropdown.js +6 -0
  284. package/dist/components/mu-error-boundary.js +10 -0
  285. package/dist/components/mu-example.js +38 -0
  286. package/dist/components/mu-fetch.js +1 -0
  287. package/dist/components/mu-form.js +1 -0
  288. package/dist/components/mu-grid.js +1 -0
  289. package/dist/components/mu-icon.js +5 -0
  290. package/dist/components/mu-input.js +12 -0
  291. package/dist/components/mu-layout.js +1 -0
  292. package/dist/components/mu-lazy.js +1 -0
  293. package/dist/components/mu-modal.js +7 -0
  294. package/dist/components/mu-navbar.js +1 -0
  295. package/dist/components/mu-page.js +1 -0
  296. package/dist/components/mu-progress.js +1 -0
  297. package/dist/components/mu-prompt-ui.js +20 -0
  298. package/dist/components/mu-radio.js +6 -0
  299. package/dist/components/mu-repeat.js +1 -0
  300. package/dist/components/mu-router.js +6 -0
  301. package/dist/components/mu-schema-form.js +76 -0
  302. package/dist/components/mu-sidebar.js +1 -0
  303. package/dist/components/mu-skeleton.js +13 -0
  304. package/dist/components/mu-spinner.js +1 -0
  305. package/dist/components/mu-stack.js +1 -0
  306. package/dist/components/mu-switch.js +6 -0
  307. package/dist/components/mu-table.js +1 -0
  308. package/dist/components/mu-tabs.js +1 -0
  309. package/dist/components/mu-textarea.js +11 -0
  310. package/dist/components/mu-theme-toggle.js +5 -0
  311. package/dist/components/mu-toast.js +4 -0
  312. package/dist/components/mu-tooltip.js +10 -0
  313. package/dist/components/mu-virtual-list.js +33 -0
  314. package/dist/components.css +1 -0
  315. package/dist/microui.css +1 -0
  316. package/dist/microui.d.ts +234 -0
  317. package/dist/microui.esm.js +549 -0
  318. package/dist/microui.esm.js.map +79 -0
  319. package/dist/microui.min.js +549 -0
  320. package/dist/microui.min.js.map +79 -0
  321. package/dist/routes/alerts.js +1 -0
  322. package/dist/routes/avatars.js +1 -0
  323. package/dist/routes/badges.js +1 -0
  324. package/dist/routes/buttons.js +1 -0
  325. package/dist/routes/callouts.js +1 -0
  326. package/dist/routes/cards.js +1 -0
  327. package/dist/routes/checkboxes.js +9 -0
  328. package/dist/routes/chips.js +4 -0
  329. package/dist/routes/chunk-19wgcncm.js +2 -0
  330. package/dist/routes/chunk-1khyr3v1.js +33 -0
  331. package/dist/routes/chunk-4rhxe97g.js +1 -0
  332. package/dist/routes/chunk-5qah04bh.js +2 -0
  333. package/dist/routes/chunk-7gfxy70n.js +5 -0
  334. package/dist/routes/chunk-e86zbeta.js +1 -0
  335. package/dist/routes/chunk-fagt36h6.js +2 -0
  336. package/dist/routes/chunk-fed7zr7m.js +1 -0
  337. package/dist/routes/chunk-hwj7pfwp.js +1 -0
  338. package/dist/routes/chunk-mhvcs2f8.js +5 -0
  339. package/dist/routes/chunk-nv3bddmj.js +13 -0
  340. package/dist/routes/chunk-q3f2aeqe.js +7 -0
  341. package/dist/routes/chunk-qxxa8trk.js +1 -0
  342. package/dist/routes/chunk-rw15y9zh.js +1 -0
  343. package/dist/routes/chunk-sfb7x11v.js +5 -0
  344. package/dist/routes/chunk-swyhghrm.js +48 -0
  345. package/dist/routes/chunk-sxddjs2d.js +2 -0
  346. package/dist/routes/chunk-vby0zg5w.js +17 -0
  347. package/dist/routes/chunk-w6zqjqqs.js +9 -0
  348. package/dist/routes/chunk-z960rexd.js +38 -0
  349. package/dist/routes/codeblocks.js +1 -0
  350. package/dist/routes/confirms.js +10 -0
  351. package/dist/routes/datatables.js +96 -0
  352. package/dist/routes/dividers.js +1 -0
  353. package/dist/routes/dropdowns.js +6 -0
  354. package/dist/routes/enterprise.js +15 -0
  355. package/dist/routes/home.js +1 -0
  356. package/dist/routes/icons.js +1 -0
  357. package/dist/routes/inputs.js +22 -0
  358. package/dist/routes/installation.js +1 -0
  359. package/dist/routes/layout.js +1 -0
  360. package/dist/routes/modals.js +1 -0
  361. package/dist/routes/navbar.js +1 -0
  362. package/dist/routes/page-components.json +316 -0
  363. package/dist/routes/progress.js +1 -0
  364. package/dist/routes/radios.js +6 -0
  365. package/dist/routes/route-deps.json +156 -0
  366. package/dist/routes/shell-critical.js +1 -0
  367. package/dist/routes/shell-deferred.js +1 -0
  368. package/dist/routes/shell.js +20 -0
  369. package/dist/routes/skeletons.js +13 -0
  370. package/dist/routes/spinners.js +1 -0
  371. package/dist/routes/src/chunks/core.js +36 -0
  372. package/dist/routes/switches.js +6 -0
  373. package/dist/routes/tables.js +1 -0
  374. package/dist/routes/tabs.js +1 -0
  375. package/dist/routes/toasts.js +1 -0
  376. package/dist/routes/tooltips.js +10 -0
  377. package/dist/routes/virtual-lists.js +33 -0
  378. package/dist/styles/common.css +1 -0
  379. package/dist/styles/components/animations.css +1 -0
  380. package/dist/styles/components/avatar.css +1 -0
  381. package/dist/styles/components/badge.css +1 -0
  382. package/dist/styles/components/bottom-nav.css +1 -0
  383. package/dist/styles/components/button.css +1 -0
  384. package/dist/styles/components/card.css +1 -0
  385. package/dist/styles/components/checkbox.css +1 -0
  386. package/dist/styles/components/chip.css +1 -0
  387. package/dist/styles/components/datatable.css +1 -0
  388. package/dist/styles/components/divider.css +1 -0
  389. package/dist/styles/components/drawer-item.css +1 -0
  390. package/dist/styles/components/drawer.css +1 -0
  391. package/dist/styles/components/grid.css +1 -0
  392. package/dist/styles/components/icon.css +1 -0
  393. package/dist/styles/components/input.css +1 -0
  394. package/dist/styles/components/layout.css +1 -0
  395. package/dist/styles/components/navbar.css +1 -0
  396. package/dist/styles/components/overlays.css +1 -0
  397. package/dist/styles/components/progress.css +1 -0
  398. package/dist/styles/components/prompt-ui.css +1 -0
  399. package/dist/styles/components/radio.css +1 -0
  400. package/dist/styles/components/schema-form.css +1 -0
  401. package/dist/styles/components/switch.css +1 -0
  402. package/dist/styles/components/tabs.css +1 -0
  403. package/dist/styles/components/tooltip.css +1 -0
  404. package/dist/styles/components/virtual-list.css +1 -0
  405. package/dist/tokens.css +1 -0
  406. package/docs/api-reference.md +175 -0
  407. package/docs/component-schema.md +231 -0
  408. package/docs/components.md +269 -0
  409. package/docs/design-system.md +183 -0
  410. package/docs/getting-started.md +198 -0
  411. package/docs/message-protocol.md +262 -0
  412. package/docs/utility-classes.md +205 -0
  413. package/lighthouse-audit.mjs +113 -0
  414. package/package.json +45 -0
  415. package/scripts/analyze-components.js +105 -0
  416. package/scripts/build-app.js +193 -0
  417. package/scripts/build-framework.js +444 -0
  418. package/scripts/build-utils.js +101 -0
  419. package/scripts/test-isolated.js +151 -0
  420. package/server.js +256 -0
  421. package/src/chunks/advanced.js +27 -0
  422. package/src/chunks/core.js +61 -0
  423. package/src/chunks/display.js +25 -0
  424. package/src/chunks/feedback.js +15 -0
  425. package/src/chunks/forms.js +25 -0
  426. package/src/chunks/layout.js +27 -0
  427. package/src/components/mu-alert.js +96 -0
  428. package/src/components/mu-api-table.js +167 -0
  429. package/src/components/mu-avatar.js +94 -0
  430. package/src/components/mu-badge.js +32 -0
  431. package/src/components/mu-bottom-nav.js +115 -0
  432. package/src/components/mu-button.js +61 -0
  433. package/src/components/mu-callout.js +71 -0
  434. package/src/components/mu-card.js +36 -0
  435. package/src/components/mu-checkbox.js +186 -0
  436. package/src/components/mu-chip.js +125 -0
  437. package/src/components/mu-code.js +534 -0
  438. package/src/components/mu-confirm.js +268 -0
  439. package/src/components/mu-container.js +53 -0
  440. package/src/components/mu-datatable.js +517 -0
  441. package/src/components/mu-divider.js +40 -0
  442. package/src/components/mu-doc-page.js +100 -0
  443. package/src/components/mu-drawer-item.js +158 -0
  444. package/src/components/mu-drawer.js +305 -0
  445. package/src/components/mu-dropdown.js +239 -0
  446. package/src/components/mu-error-boundary.js +191 -0
  447. package/src/components/mu-example.js +335 -0
  448. package/src/components/mu-fetch.js +256 -0
  449. package/src/components/mu-form.js +133 -0
  450. package/src/components/mu-grid.js +63 -0
  451. package/src/components/mu-icon.js +211 -0
  452. package/src/components/mu-input.js +142 -0
  453. package/src/components/mu-layout.js +129 -0
  454. package/src/components/mu-lazy.js +94 -0
  455. package/src/components/mu-modal.js +160 -0
  456. package/src/components/mu-navbar.js +71 -0
  457. package/src/components/mu-page.js +77 -0
  458. package/src/components/mu-progress.js +54 -0
  459. package/src/components/mu-prompt-ui.js +382 -0
  460. package/src/components/mu-radio.js +200 -0
  461. package/src/components/mu-repeat.js +135 -0
  462. package/src/components/mu-router.js +169 -0
  463. package/src/components/mu-schema-form.js +441 -0
  464. package/src/components/mu-sidebar.js +81 -0
  465. package/src/components/mu-skeleton.js +69 -0
  466. package/src/components/mu-spinner.js +30 -0
  467. package/src/components/mu-stack.js +59 -0
  468. package/src/components/mu-switch.js +150 -0
  469. package/src/components/mu-table.js +80 -0
  470. package/src/components/mu-tabs.js +112 -0
  471. package/src/components/mu-textarea.js +96 -0
  472. package/src/components/mu-theme-toggle.js +52 -0
  473. package/src/components/mu-toast.js +151 -0
  474. package/src/components/mu-tooltip.js +182 -0
  475. package/src/components/mu-virtual-list.js +184 -0
  476. package/src/core/MuElement.js +562 -0
  477. package/src/core/agent-api.js +771 -0
  478. package/src/core/breakpoints.js +195 -0
  479. package/src/core/bus.js +378 -0
  480. package/src/core/component-schema.js +287 -0
  481. package/src/core/feature-registry.js +241 -0
  482. package/src/core/form-state.js +252 -0
  483. package/src/core/http.js +104 -0
  484. package/src/core/keyboard.js +105 -0
  485. package/src/core/layers.js +71 -0
  486. package/src/core/render.js +201 -0
  487. package/src/core/ripple.js +158 -0
  488. package/src/core/router.js +100 -0
  489. package/src/core/scheduler.js +109 -0
  490. package/src/core/signals.js +164 -0
  491. package/src/core/store.js +268 -0
  492. package/src/core/theme.js +68 -0
  493. package/src/core/transitions.js +72 -0
  494. package/src/core/utils.js +30 -0
  495. package/src/index.d.ts +234 -0
  496. package/src/index.js +308 -0
  497. package/src/styles/animations.css +252 -0
  498. package/src/styles/common.css +82 -0
  499. package/src/styles/components/animations.css +129 -0
  500. package/src/styles/components/avatar.css +83 -0
  501. package/src/styles/components/badge.css +80 -0
  502. package/src/styles/components/bottom-nav.css +37 -0
  503. package/src/styles/components/button.css +348 -0
  504. package/src/styles/components/card.css +138 -0
  505. package/src/styles/components/checkbox.css +201 -0
  506. package/src/styles/components/chip.css +93 -0
  507. package/src/styles/components/datatable.css +180 -0
  508. package/src/styles/components/divider.css +49 -0
  509. package/src/styles/components/drawer-item.css +123 -0
  510. package/src/styles/components/drawer.css +273 -0
  511. package/src/styles/components/grid.css +189 -0
  512. package/src/styles/components/icon.css +40 -0
  513. package/src/styles/components/input.css +203 -0
  514. package/src/styles/components/layout.css +121 -0
  515. package/src/styles/components/navbar.css +91 -0
  516. package/src/styles/components/overlays.css +329 -0
  517. package/src/styles/components/progress.css +79 -0
  518. package/src/styles/components/prompt-ui.css +286 -0
  519. package/src/styles/components/radio.css +17 -0
  520. package/src/styles/components/schema-form.css +85 -0
  521. package/src/styles/components/switch.css +69 -0
  522. package/src/styles/components/tabs.css +145 -0
  523. package/src/styles/components/tooltip.css +93 -0
  524. package/src/styles/components/virtual-list.css +36 -0
  525. package/src/styles/components.css +3677 -0
  526. package/src/styles/routes/home.css +97 -0
  527. package/src/styles/tokens.css +675 -0
  528. package/tests/agents/agent-integration.test.js +76 -0
  529. package/tests/benchmark.html +296 -0
  530. package/tests/build/scan-components.test.js +173 -0
  531. package/tests/components/all-components.test.js +245 -0
  532. package/tests/components/all-missing-components.test.js +574 -0
  533. package/tests/components/mu-alert.test.js +113 -0
  534. package/tests/components/mu-avatar.test.js +148 -0
  535. package/tests/components/mu-badge.test.js +92 -0
  536. package/tests/components/mu-button.test.js +112 -0
  537. package/tests/components/mu-card.test.js +89 -0
  538. package/tests/components/mu-checkbox.test.js +158 -0
  539. package/tests/components/mu-chip.test.js +118 -0
  540. package/tests/components/mu-container.test.js +120 -0
  541. package/tests/components/mu-divider.test.js +98 -0
  542. package/tests/components/mu-drawer-item.test.js +199 -0
  543. package/tests/components/mu-drawer.test.js +96 -0
  544. package/tests/components/mu-dropdown.test.js +125 -0
  545. package/tests/components/mu-form.test.js +138 -0
  546. package/tests/components/mu-grid.test.js +135 -0
  547. package/tests/components/mu-icon.test.js +110 -0
  548. package/tests/components/mu-input.test.js +131 -0
  549. package/tests/components/mu-lazy.test.js +103 -0
  550. package/tests/components/mu-modal.test.js +275 -0
  551. package/tests/components/mu-navbar.test.js +101 -0
  552. package/tests/components/mu-progress.test.js +115 -0
  553. package/tests/components/mu-radio.test.js +114 -0
  554. package/tests/components/mu-repeat.test.js +106 -0
  555. package/tests/components/mu-sidebar.test.js +126 -0
  556. package/tests/components/mu-skeleton.test.js +162 -0
  557. package/tests/components/mu-stack.test.js +143 -0
  558. package/tests/components/mu-switch.test.js +292 -0
  559. package/tests/components/mu-table.test.js +124 -0
  560. package/tests/components/mu-tabs.test.js +104 -0
  561. package/tests/components/mu-textarea.test.js +115 -0
  562. package/tests/components/mu-toast.test.js +321 -0
  563. package/tests/components/mu-tooltip.test.js +133 -0
  564. package/tests/components/mu-virtual-list.test.js +109 -0
  565. package/tests/core/MuElement.test.js +120 -0
  566. package/tests/core/agent-api.test.js +125 -0
  567. package/tests/core/all-core-modules.test.js +442 -0
  568. package/tests/core/bus.test.js +364 -0
  569. package/tests/core/component-schema.test.js +160 -0
  570. package/tests/core/feature-registry.test.js +198 -0
  571. package/tests/core/form-state.test.js +167 -0
  572. package/tests/core/http.test.js +119 -0
  573. package/tests/core/keyboard.test.js +319 -0
  574. package/tests/core/layers.test.js +129 -0
  575. package/tests/core/namespaced-stores.test.js +114 -0
  576. package/tests/core/render.test.js +121 -0
  577. package/tests/core/ripple.test.js +131 -0
  578. package/tests/core/router.test.js +89 -0
  579. package/tests/core/scheduler.test.js +121 -0
  580. package/tests/core/signals.test.js +128 -0
  581. package/tests/core/store.test.js +171 -0
  582. package/tests/core/transitions.test.js +82 -0
  583. package/tests/e2e/accessibility-harness.html +58 -0
  584. package/tests/e2e/accessibility.test.js +401 -0
  585. package/tests/e2e/agent-features.test.js +372 -0
  586. package/tests/e2e/card-spacing.test.js +287 -0
  587. package/tests/e2e/components.test.js +439 -0
  588. package/tests/e2e/demo-routes.test.js +478 -0
  589. package/tests/e2e/layout-css-fallback.test.js +334 -0
  590. package/tests/e2e/mu-alert.e2e.test.js +111 -0
  591. package/tests/e2e/mu-checkbox.test.js +489 -0
  592. package/tests/e2e/mu-chip.test.js +347 -0
  593. package/tests/e2e/mu-form.test.js +499 -0
  594. package/tests/e2e/mu-icon.test.js +114 -0
  595. package/tests/e2e/mu-radio.test.js +113 -0
  596. package/tests/e2e/mu-skeleton.test.js +140 -0
  597. package/tests/e2e/mu-switch.test.js +415 -0
  598. package/tests/e2e/mu-tabs.test.js +494 -0
  599. package/tests/e2e/mu-textarea.test.js +242 -0
  600. package/tests/e2e/mu-virtual-list.test.js +427 -0
  601. package/tests/e2e/perf-memory.test.js +161 -0
  602. package/tests/e2e/puppeteer-helper.js +137 -0
  603. package/tests/e2e/puppeteer.test.js +226 -0
  604. package/tests/e2e/pwa.test.js +261 -0
  605. package/tests/e2e/test-harness.html +319 -0
  606. package/tests/manual/test-components.html +120 -0
  607. package/tests/memory-test.html +309 -0
  608. package/tests/setup-dom.js +93 -0
  609. package/tests/visual-test.html +301 -0
@@ -0,0 +1,195 @@
1
+ /**
2
+ * @fileoverview Centralized Breakpoint System for microUI
3
+ *
4
+ * Provides MD3-compliant responsive breakpoints with reactive subscriptions.
5
+ * All components should use this utility for consistent responsive behavior.
6
+ *
7
+ * MD3 Window Size Classes:
8
+ * - Compact: < 600px (mobile phones)
9
+ * - Medium: 600-839px (tablets, foldables)
10
+ * - Expanded: ≥ 840px (desktop, large tablets)
11
+ *
12
+ * @see https://m3.material.io/foundations/layout/applying-layout
13
+ */
14
+
15
+ /**
16
+ * MD3 Breakpoint values in pixels
17
+ */
18
+ export const BREAKPOINTS = {
19
+ /** Maximum width for compact (mobile) layout */
20
+ compact: 600,
21
+ /** Maximum width for medium (tablet) layout */
22
+ medium: 840,
23
+ /** Minimum width for expanded (desktop) layout */
24
+ expanded: 840
25
+ };
26
+
27
+ /**
28
+ * Breakpoint size class names
29
+ * @typedef {'compact' | 'medium' | 'expanded'} BreakpointClass
30
+ */
31
+
32
+ /**
33
+ * Callback function type for breakpoint changes
34
+ * @typedef {(breakpoint: BreakpointClass) => void} BreakpointCallback
35
+ */
36
+
37
+ class BreakpointObserver {
38
+ /** @type {Set<BreakpointCallback>} */
39
+ #listeners = new Set();
40
+
41
+ /** @type {BreakpointClass} */
42
+ #current = 'expanded';
43
+
44
+ /** @type {MediaQueryList|null} */
45
+ #mqCompact = null;
46
+
47
+ /** @type {MediaQueryList|null} */
48
+ #mqMedium = null;
49
+
50
+ constructor() {
51
+ if (typeof window !== 'undefined') {
52
+ this.#setupMediaQueries();
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Set up media query listeners
58
+ * @private
59
+ */
60
+ #setupMediaQueries() {
61
+ // Compact: < 600px
62
+ this.#mqCompact = window.matchMedia(`(max-width: ${BREAKPOINTS.compact - 1}px)`);
63
+ this.#mqCompact.addEventListener('change', this.#handleChange);
64
+
65
+ // Medium: 600-839px
66
+ this.#mqMedium = window.matchMedia(
67
+ `(min-width: ${BREAKPOINTS.compact}px) and (max-width: ${BREAKPOINTS.medium - 1}px)`
68
+ );
69
+ this.#mqMedium.addEventListener('change', this.#handleChange);
70
+
71
+ // Set initial value
72
+ this.#updateCurrent();
73
+ }
74
+
75
+ /**
76
+ * Handle media query change events
77
+ * @private
78
+ */
79
+ #handleChange = () => {
80
+ const oldValue = this.#current;
81
+ this.#updateCurrent();
82
+
83
+ if (oldValue !== this.#current) {
84
+ this.#notifyListeners();
85
+ }
86
+ };
87
+
88
+ /**
89
+ * Update current breakpoint based on media queries
90
+ * @private
91
+ */
92
+ #updateCurrent() {
93
+ if (this.#mqCompact?.matches) {
94
+ this.#current = 'compact';
95
+ } else if (this.#mqMedium?.matches) {
96
+ this.#current = 'medium';
97
+ } else {
98
+ this.#current = 'expanded';
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Notify all listeners of breakpoint change
104
+ * @private
105
+ */
106
+ #notifyListeners() {
107
+ this.#listeners.forEach(callback => {
108
+ try {
109
+ callback(this.#current);
110
+ } catch (e) {
111
+ console.error('[Breakpoints] Listener error:', e);
112
+ }
113
+ });
114
+ }
115
+
116
+ /**
117
+ * Get current breakpoint class (live query)
118
+ * @returns {BreakpointClass}
119
+ */
120
+ get current() {
121
+ // Always query live for most accurate state
122
+ if (this.#mqCompact?.matches) {
123
+ return 'compact';
124
+ } else if (this.#mqMedium?.matches) {
125
+ return 'medium';
126
+ }
127
+ return 'expanded';
128
+ }
129
+
130
+ /**
131
+ * Check if currently in compact (mobile) mode
132
+ * @returns {boolean}
133
+ */
134
+ get isCompact() {
135
+ return this.#mqCompact?.matches ?? false;
136
+ }
137
+
138
+ /**
139
+ * Check if currently in medium (tablet) mode
140
+ * @returns {boolean}
141
+ */
142
+ get isMedium() {
143
+ return this.#mqMedium?.matches ?? false;
144
+ }
145
+
146
+ /**
147
+ * Check if currently in expanded (desktop) mode
148
+ * @returns {boolean}
149
+ */
150
+ get isExpanded() {
151
+ return !this.isCompact && !this.isMedium;
152
+ }
153
+
154
+ /**
155
+ * Check if NOT in compact mode (medium or expanded)
156
+ * @returns {boolean}
157
+ */
158
+ get isNotCompact() {
159
+ return this.#current !== 'compact';
160
+ }
161
+
162
+ /**
163
+ * Subscribe to breakpoint changes
164
+ * @param {BreakpointCallback} callback - Called with new breakpoint class on change
165
+ * @returns {() => void} Unsubscribe function
166
+ */
167
+ subscribe(callback) {
168
+ this.#listeners.add(callback);
169
+
170
+ // Call immediately with current value
171
+ callback(this.#current);
172
+
173
+ // Return unsubscribe function
174
+ return () => {
175
+ this.#listeners.delete(callback);
176
+ };
177
+ }
178
+
179
+ /**
180
+ * Get window width in pixels (for testing/debugging)
181
+ * @returns {number}
182
+ */
183
+ get windowWidth() {
184
+ return typeof window !== 'undefined' ? window.innerWidth : 1200;
185
+ }
186
+ }
187
+
188
+ /**
189
+ * Global breakpoint observer singleton
190
+ * @type {BreakpointObserver}
191
+ */
192
+ export const breakpoints = new BreakpointObserver();
193
+
194
+ // Also expose class for testing
195
+ export { BreakpointObserver };
@@ -0,0 +1,378 @@
1
+ /**
2
+ * @fileoverview microUI EventBus - CrossBus 1.0.0 Adapter
3
+ *
4
+ * Wraps CrossBus for microUI components with agentic features.
5
+ * Following AGENTS.md best practices for maximum performance.
6
+ *
7
+ * Performance: 111M ops/sec with emitSync
8
+ * Features:
9
+ * - ACK-based delivery, zero memory leaks
10
+ * - Capability discovery for AI agents
11
+ * - Debug mode toggle
12
+ * - Health monitoring
13
+ * - Inbound/outbound hooks for observability
14
+ */
15
+
16
+ import { CrossBus } from 'crossbus';
17
+
18
+ /** microUI framework version */
19
+ export const MICROUI_VERSION = '0.1.0';
20
+
21
+ // Create singleton instance for microUI (Window Singleton Pattern)
22
+ // Ensures shared bus across split bundles/chunks
23
+ const GLOBAL_BUS_KEY = '__MICROUI_CROSSBUS__';
24
+
25
+ // Defensive check for test environments where window may not be defined
26
+ const globalScope = typeof window !== 'undefined' ? window : globalThis;
27
+
28
+ // AI Agent Discovery: Capability negotiation (stored locally for getCapabilities())
29
+ const MICROUI_CAPABILITIES = [
30
+ 'ui:toast',
31
+ 'ui:modal',
32
+ 'ui:theme',
33
+ 'ui:tabs',
34
+ 'ui:dropdown',
35
+ 'ui:form',
36
+ 'ui:grid',
37
+ 'ui:stack',
38
+ 'ui:virtual-list'
39
+ ];
40
+
41
+ const MICROUI_META = {
42
+ type: 'ui-framework',
43
+ version: MICROUI_VERSION,
44
+ description: 'AI-Optimized UI Framework - Web Components Edition'
45
+ };
46
+
47
+ if (!globalScope[GLOBAL_BUS_KEY]) {
48
+ globalScope[GLOBAL_BUS_KEY] = new CrossBus({
49
+ peerId: 'microui',
50
+ isHub: true,
51
+ requestTimeout: 5000,
52
+ capabilities: MICROUI_CAPABILITIES,
53
+ meta: MICROUI_META
54
+ });
55
+ // Best practice: Set max listeners for many UI components
56
+ globalScope[GLOBAL_BUS_KEY].setMaxListeners(100);
57
+ }
58
+
59
+ const crossBus = globalScope[GLOBAL_BUS_KEY];
60
+
61
+ // ============================================================================
62
+ // COMPONENT CAPABILITY REGISTRY (Phase 2)
63
+ // Allows components to register their capabilities at runtime
64
+ // AI agents can query this to discover available component features
65
+ // ============================================================================
66
+ const COMPONENT_REGISTRY_KEY = '__MICROUI_COMPONENT_REGISTRY__';
67
+ if (!globalScope[COMPONENT_REGISTRY_KEY]) {
68
+ globalScope[COMPONENT_REGISTRY_KEY] = new Map();
69
+ }
70
+ const componentRegistry = globalScope[COMPONENT_REGISTRY_KEY];
71
+
72
+ /**
73
+ * Simplified bus wrapper for microUI components
74
+ * Optimized following CrossBus AGENTS.md
75
+ */
76
+ export const bus = {
77
+ /**
78
+ * Subscribe to a signal
79
+ * @param {string} event - Event name (supports wildcards 'ui:*')
80
+ * @param {Function} callback - Handler function
81
+ * @returns {Function} Unsubscribe function
82
+ */
83
+ on(event, callback) {
84
+ const subscription = crossBus.on(event, (eventData) => {
85
+ callback(eventData.data ?? eventData);
86
+ });
87
+ return () => subscription.unsubscribe();
88
+ },
89
+
90
+ /**
91
+ * Subscribe once
92
+ */
93
+ once(event, callback) {
94
+ const unsub = this.on(event, (data) => {
95
+ unsub();
96
+ callback(data);
97
+ });
98
+ },
99
+
100
+ /**
101
+ * Unsubscribe
102
+ */
103
+ off(event, callback) {
104
+ crossBus.off(event, callback);
105
+ },
106
+
107
+ /**
108
+ * Emit a signal - Uses emitSync for 111M ops/sec
109
+ * Best practice from AGENTS.md: "Always use emitSync for local events"
110
+ */
111
+ emit(event, data) {
112
+ return crossBus.emitSync(event, data);
113
+ },
114
+
115
+ /**
116
+ * Async emit with full envelope (slower but with confirmation)
117
+ */
118
+ async emitAsync(event, data) {
119
+ return crossBus.emit(event, data);
120
+ },
121
+
122
+ /**
123
+ * Broadcast signal to all peers
124
+ */
125
+ signal(event, data) {
126
+ crossBus.signal(event, data);
127
+ },
128
+
129
+ /**
130
+ * Request/Response pattern (RPC)
131
+ */
132
+ async request(peerId, handler, payload) {
133
+ return crossBus.request(peerId, handler, payload);
134
+ },
135
+
136
+ /**
137
+ * Broadcast request to all peers
138
+ */
139
+ async broadcastRequest(handler, payload) {
140
+ return crossBus.broadcastRequest(handler, payload);
141
+ },
142
+
143
+ /**
144
+ * Register a request handler
145
+ */
146
+ handle(name, handler) {
147
+ return crossBus.handle(name, handler);
148
+ },
149
+
150
+ /**
151
+ * Remove handler
152
+ */
153
+ unhandle(name) {
154
+ crossBus.unhandle(name);
155
+ },
156
+
157
+ /**
158
+ * Clear/destroy - Best practice: "Call destroy() to prevent memory leaks"
159
+ */
160
+ destroy() {
161
+ crossBus.destroy();
162
+ },
163
+
164
+ /**
165
+ * Set max listeners
166
+ */
167
+ setMaxListeners(n) {
168
+ crossBus.setMaxListeners(n);
169
+ },
170
+
171
+ /**
172
+ * Peer management
173
+ */
174
+ get peerId() { return crossBus.peerId; },
175
+ get peers() { return crossBus.peers; },
176
+ get peerCount() { return crossBus.peerCount; },
177
+
178
+ /**
179
+ * Check if listeners exist for a signal (CrossBus native)
180
+ * @param {string} event - Event name
181
+ * @returns {boolean}
182
+ */
183
+ hasListeners(event) { return crossBus.hasListeners(event); },
184
+
185
+ /**
186
+ * Direct access to CrossBus instance
187
+ */
188
+ get raw() { return crossBus; }
189
+ };
190
+
191
+ // Predefined UI events
192
+ export const UIEvents = {
193
+ // Toast
194
+ TOAST_SHOW: 'ui:toast:show',
195
+ TOAST_DISMISS: 'ui:toast:dismiss',
196
+
197
+ // Modal
198
+ MODAL_OPEN: 'ui:modal:open',
199
+ MODAL_CLOSE: 'ui:modal:close',
200
+
201
+ // Theme
202
+ THEME_CHANGE: 'ui:theme:change',
203
+
204
+ // Navigation
205
+ TAB_CHANGE: 'ui:tab:change',
206
+ DROPDOWN_SELECT: 'ui:dropdown:select',
207
+
208
+ // Form
209
+ FORM_SUBMIT: 'ui:form:submit',
210
+ FORM_VALIDATE: 'ui:form:validate'
211
+ };
212
+
213
+ /**
214
+ * Show toast helper
215
+ */
216
+ export const showToast = (message, options = {}) => {
217
+ bus.emit(UIEvents.TOAST_SHOW, { message, ...options });
218
+ };
219
+
220
+ // ============================================================================
221
+ // AI AGENT FEATURES (CrossBus 1.0.0)
222
+ // ============================================================================
223
+
224
+ /**
225
+ * Enable debug mode for CrossBus tracing
226
+ *
227
+ * NOTE: CrossBus debug mode is set at creation time.
228
+ * This function checks if debug is enabled but cannot toggle it dynamically.
229
+ * For runtime debugging, use addInboundHook/addOutboundHook instead.
230
+ *
231
+ * @returns {boolean} Whether debug mode is currently enabled
232
+ */
233
+ export const isDebugEnabled = () => crossBus.debug;
234
+
235
+ /**
236
+ * Alias for isDebugEnabled for backwards compatibility
237
+ * @deprecated Use isDebugEnabled() instead
238
+ */
239
+ export const enableDebug = () => {
240
+ console.warn('[microUI] enableDebug() is deprecated. Debug mode is set at CrossBus creation. Use addInboundHook/addOutboundHook for runtime tracing.');
241
+ return crossBus.debug;
242
+ };
243
+
244
+ /**
245
+ * Disable debug mode
246
+ * @deprecated Debug mode cannot be toggled after creation
247
+ */
248
+ export const disableDebug = () => {
249
+ console.warn('[microUI] disableDebug() is deprecated. Debug mode is set at CrossBus creation.');
250
+ };
251
+
252
+ /**
253
+ * Get health status of the CrossBus instance
254
+ * Useful for AI agents to verify framework readiness
255
+ *
256
+ * @returns {Object} Health status including uptime, peers, handlers
257
+ * @example
258
+ * getHealth(); // { status: 'healthy', peerId: 'microui', uptime: 12345, ... }
259
+ */
260
+ export const getHealth = () => {
261
+ return crossBus.healthCheck?.() ?? {
262
+ status: 'unknown',
263
+ peerId: crossBus.peerId,
264
+ note: 'healthCheck not available in this CrossBus version'
265
+ };
266
+ };
267
+
268
+ /**
269
+ * Get framework capabilities
270
+ * AI agents can use this for feature discovery
271
+ *
272
+ * @returns {Object} Capabilities and metadata
273
+ */
274
+ export const getCapabilities = () => ({
275
+ peerId: crossBus.peerId,
276
+ capabilities: MICROUI_CAPABILITIES,
277
+ meta: MICROUI_META,
278
+ version: MICROUI_VERSION
279
+ });
280
+
281
+ /**
282
+ * Add inbound hook for message interception
283
+ * Useful for AI agents to trace/log all incoming messages
284
+ *
285
+ * @param {Function} fn - Hook function (payload, ctx) => payload
286
+ * @returns {Function} Remove hook function
287
+ */
288
+ export const addInboundHook = (fn) => {
289
+ return crossBus.addInboundHook?.(fn) ?? (() => { });
290
+ };
291
+
292
+ /**
293
+ * Add outbound hook for message interception
294
+ * Useful for AI agents to trace/log all outgoing messages
295
+ *
296
+ * @param {Function} fn - Hook function (payload, ctx) => payload
297
+ * @returns {Function} Remove hook function
298
+ */
299
+ export const addOutboundHook = (fn) => {
300
+ return crossBus.addOutboundHook?.(fn) ?? (() => { });
301
+ };
302
+
303
+ // ============================================================================
304
+ // COMPONENT CAPABILITY REGISTRATION (Phase 2)
305
+ // ============================================================================
306
+
307
+ /**
308
+ * Register a component's capabilities
309
+ * Components call this in connectedCallback to announce their features
310
+ *
311
+ * @param {string} tagName - Custom element tag name (e.g., 'mu-toast')
312
+ * @param {Object} capabilities - Component capability descriptor
313
+ * @param {string[]} capabilities.signals - Signals this component listens to
314
+ * @param {string[]} capabilities.handlers - RPC handlers this component provides
315
+ * @param {Object} capabilities.options - Component-specific options (e.g., positions, severities)
316
+ * @example
317
+ * registerComponent('mu-toast', {
318
+ * signals: ['ui:toast:show', 'ui:toast:dismiss'],
319
+ * options: { positions: ['top-right', 'bottom-left'], severities: ['info', 'success'] }
320
+ * });
321
+ */
322
+ export const registerComponent = (tagName, capabilities) => {
323
+ componentRegistry.set(tagName, {
324
+ ...capabilities,
325
+ registeredAt: Date.now()
326
+ });
327
+ };
328
+
329
+ /**
330
+ * Unregister a component (for cleanup)
331
+ *
332
+ * @param {string} tagName - Custom element tag name
333
+ */
334
+ export const unregisterComponent = (tagName) => {
335
+ componentRegistry.delete(tagName);
336
+ };
337
+
338
+ /**
339
+ * Get a specific component's capabilities
340
+ *
341
+ * @param {string} tagName - Custom element tag name
342
+ * @returns {Object|null} Component capabilities or null if not registered
343
+ */
344
+ export const getComponentCapabilities = (tagName) => {
345
+ return componentRegistry.get(tagName) ?? null;
346
+ };
347
+
348
+ /**
349
+ * Get all registered components and their capabilities
350
+ * AI agents use this to discover available UI features
351
+ *
352
+ * @returns {Object} Map of all registered components
353
+ * @example
354
+ * getRegisteredComponents();
355
+ * // {
356
+ * // 'mu-toast': { signals: ['ui:toast:show'], options: {...} },
357
+ * // 'mu-modal': { signals: ['ui:modal:open'], options: {...} }
358
+ * // }
359
+ */
360
+ export const getRegisteredComponents = () => {
361
+ return Object.fromEntries(componentRegistry);
362
+ };
363
+
364
+ /**
365
+ * Check if a specific signal has any registered component handlers
366
+ *
367
+ * @param {string} signal - Signal name to check
368
+ * @returns {string[]} List of component tag names that handle this signal
369
+ */
370
+ export const getComponentsForSignal = (signal) => {
371
+ const handlers = [];
372
+ for (const [tagName, caps] of componentRegistry) {
373
+ if (caps.signals?.includes(signal)) {
374
+ handlers.push(tagName);
375
+ }
376
+ }
377
+ return handlers;
378
+ };