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,156 @@
1
+ {
2
+ "toasts": [
3
+ "alerts",
4
+ "buttons",
5
+ "cards",
6
+ "icons",
7
+ "layout",
8
+ "tabs"
9
+ ],
10
+ "buttons": [
11
+ "cards",
12
+ "layout",
13
+ "tabs"
14
+ ],
15
+ "navbar": [
16
+ "buttons",
17
+ "tabs"
18
+ ],
19
+ "radios": [
20
+ "layout",
21
+ "tabs"
22
+ ],
23
+ "badges": [
24
+ "layout",
25
+ "tabs"
26
+ ],
27
+ "home": [
28
+ "cards",
29
+ "icons",
30
+ "layout"
31
+ ],
32
+ "dividers": [
33
+ "cards",
34
+ "icons",
35
+ "layout",
36
+ "tabs"
37
+ ],
38
+ "progress": [
39
+ "alerts",
40
+ "cards",
41
+ "icons",
42
+ "layout",
43
+ "tabs"
44
+ ],
45
+ "layout": [
46
+ "buttons",
47
+ "cards",
48
+ "tabs"
49
+ ],
50
+ "virtual-lists": [
51
+ "alerts",
52
+ "buttons",
53
+ "cards",
54
+ "icons",
55
+ "layout",
56
+ "tabs"
57
+ ],
58
+ "avatars": [
59
+ "layout",
60
+ "tabs"
61
+ ],
62
+ "inputs": [
63
+ "buttons",
64
+ "layout",
65
+ "tabs"
66
+ ],
67
+ "skeletons": [
68
+ "cards",
69
+ "layout",
70
+ "tabs"
71
+ ],
72
+ "checkboxes": [
73
+ "buttons",
74
+ "icons",
75
+ "layout",
76
+ "tabs"
77
+ ],
78
+ "confirms": [
79
+ "buttons",
80
+ "tabs"
81
+ ],
82
+ "tables": [
83
+ "tabs"
84
+ ],
85
+ "switches": [
86
+ "cards",
87
+ "layout",
88
+ "tabs"
89
+ ],
90
+ "chips": [
91
+ "tabs"
92
+ ],
93
+ "cards": [
94
+ "buttons",
95
+ "icons",
96
+ "layout",
97
+ "tabs"
98
+ ],
99
+ "callouts": [
100
+ "layout",
101
+ "tabs"
102
+ ],
103
+ "modals": [
104
+ "alerts",
105
+ "buttons",
106
+ "cards",
107
+ "icons",
108
+ "layout",
109
+ "tabs"
110
+ ],
111
+ "spinners": [
112
+ "buttons",
113
+ "layout",
114
+ "progress",
115
+ "tabs"
116
+ ],
117
+ "datatables": [
118
+ "layout",
119
+ "tabs"
120
+ ],
121
+ "icons": [
122
+ "buttons",
123
+ "layout",
124
+ "tabs"
125
+ ],
126
+ "enterprise": [
127
+ "alerts",
128
+ "buttons",
129
+ "cards",
130
+ "chips",
131
+ "icons",
132
+ "layout",
133
+ "tabs"
134
+ ],
135
+ "codeblocks": [
136
+ "layout",
137
+ "tabs"
138
+ ],
139
+ "tooltips": [
140
+ "buttons",
141
+ "cards",
142
+ "icons",
143
+ "layout",
144
+ "tabs"
145
+ ],
146
+ "alerts": [
147
+ "cards",
148
+ "icons",
149
+ "inputs",
150
+ "layout",
151
+ "tabs"
152
+ ],
153
+ "dropdowns": [
154
+ "tabs"
155
+ ]
156
+ }
@@ -0,0 +1 @@
1
+ import"./chunk-w6zqjqqs.js";import"./chunk-fagt36h6.js";import"./chunk-sfb7x11v.js";import"./chunk-sxddjs2d.js";import"./chunk-5qah04bh.js";
@@ -0,0 +1 @@
1
+ import"./chunk-7gfxy70n.js";import"./chunk-vby0zg5w.js";import"./chunk-hwj7pfwp.js";import"./chunk-fagt36h6.js";import"./chunk-sfb7x11v.js";import"./chunk-e86zbeta.js";import"./chunk-5qah04bh.js";
@@ -0,0 +1,20 @@
1
+ import"./chunk-w6zqjqqs.js";import"./chunk-7gfxy70n.js";import"./chunk-vby0zg5w.js";import"./chunk-hwj7pfwp.js";import"./chunk-fagt36h6.js";import"./chunk-sfb7x11v.js";import"./chunk-sxddjs2d.js";import"./chunk-e86zbeta.js";import"./chunk-5qah04bh.js";var f=Symbol("listeners"),j=Symbol("subCounter"),O=Symbol("maxListeners"),p=Symbol("fastCache"),x=Object.freeze({peerId:"self",origin:typeof globalThis.location<"u"?globalThis.location.origin:"unknown",type:"local"});class P{constructor(){this[f]=new Map,this[j]=0,this[O]=10,this[p]=Object.create(null)}setMaxListeners(e){return this[O]=e,this}getMaxListeners(){return this[O]}on(e,t,s={}){if(typeof e!=="string")throw TypeError("Signal name must be a string");if(typeof t!=="function")throw TypeError("Handler must be a function");let r=`sub_${++this[j]}`,i={id:r,handler:t,priority:s.priority??0,mode:s.mode??"async",once:s.once??!1,signal:s.signal??null};if(!this[f].has(e))this[f].set(e,[]);let n=this[f].get(e);if(n.length===0||i.priority<=n[n.length-1].priority)n.push(i);else{let u=0,g=n.length;while(u<g){let A=u+g>>>1;if(n[A].priority>=i.priority)u=A+1;else g=A}n.splice(u,0,i)}this[p][e]=n.map((u)=>u.handler);let o=this[O];if(o>0&&n.length>o)console.warn(`[CrossBus] Possible memory leak: ${n.length} listeners for "${e}". Use setMaxListeners(n) to increase limit.`);let l=!0,h={id:r,signalName:e,get active(){return l},unsubscribe:()=>{if(l)this.#t(e,r),l=!1}};if(i.signal)if(i.signal.aborted)this.#t(e,r),l=!1;else i.signal.addEventListener("abort",()=>{h.unsubscribe()},{once:!0});return h}once(e,t,s={}){return this.on(e,t,{...s,once:!0})}onFast(e,t){return(this[p][e]||=[]).push(t),()=>{this[p][e]=this[p][e]?.filter((s)=>s!==t)}}offFast(e,t){let s=this[p][e];if(s){let i=s.indexOf(t);if(i!==-1)s.splice(i,1)}let r=this[f].get(e);if(r){let i=r.findIndex((n)=>n.handler===t);if(i!==-1)r.splice(i,1)}}off(e,t){if(typeof e!=="string")throw TypeError("Signal name must be a string");let s=this[f].get(e);if(!s||s.length===0)return{success:!1,removedCount:0,remainingCount:0};let r=0;if(t===void 0)r=s.length,this[f].delete(e),delete this[p][e];else{let n=s.length,o=s.filter((l)=>l.handler!==t);if(r=n-o.length,o.length===0)this[f].delete(e),delete this[p][e];else this[f].set(e,o),this[p][e]=o.map((l)=>l.handler)}let i=this[f].get(e)?.length??0;return{success:r>0,removedCount:r,remainingCount:i}}emitSync(e,t){let s=this[p][e];if(!s)return 0;let r=s.length;if(r===1)return s[0](t),1;if(r===2)return s[0](t),s[1](t),2;if(r===3)return s[0](t),s[1](t),s[2](t),3;if(r===4)return s[0](t),s[1](t),s[2](t),s[3](t),4;for(let i=0;i<r;i++)s[i](t);return r}async emit(e,t,s){if(typeof e!=="string")throw TypeError("Signal name must be a string");let r=this[f].get(e),i=this[f].has("*");if(r?.length===1&&!i&&!s){let h=r[0],u={name:e,data:t,messageId:crypto.randomUUID(),timestamp:Date.now(),source:x};try{if(h.mode==="sync")await h.handler(u);else Promise.resolve().then(()=>h.handler(u))}catch(g){console.error(`[CrossBus] Handler error for "${e}":`,g)}if(h.once)this.#t(e,h.id);return 1}let n={name:e,data:t,messageId:crypto.randomUUID(),timestamp:Date.now(),source:s?{...x,...s}:x},o=this.#e(e),l=[];for(let{signalName:h,entry:u}of o){try{if(u.mode==="sync")await u.handler(n);else Promise.resolve().then(()=>u.handler(n))}catch(g){console.error(`[CrossBus] Handler error for "${e}":`,g)}if(u.once)l.push({signalName:h,id:u.id})}for(let{signalName:h,id:u}of l)this.#t(h,u);return o.length}hasListeners(e){let t=this[f].get(e);return t!==void 0&&t.length>0}listenerCount(e){return this[f].get(e)?.length??0}getSignalNames(){return Array.from(this[f].keys())}clear(){this[f].clear();for(let e in this[p])delete this[p][e]}#e(e){let t=this[f].get(e),s=this[f].get("*"),r=null,i=e.indexOf(":");if(i>0){let l=e.slice(0,i+1)+"*";r=this[f].get(l)}if(t&&!s&&!r)return t.map((l)=>({signalName:e,entry:l}));let n=[t&&{signalName:e,entries:t},s&&{signalName:"*",entries:s},r&&{signalName:e.slice(0,i+1)+"*",entries:r}].filter(Boolean);if(n.length===0)return[];if(n.length===1)return n[0].entries.map((l)=>({signalName:n[0].signalName,entry:l}));let o=[];for(let{signalName:l,entries:h}of n)for(let u of h)o.push({signalName:l,entry:u});return o.sort((l,h)=>h.entry.priority-l.entry.priority),o}#t(e,t){let s=this[f].get(e);if(!s)return;let r=s.filter((i)=>i.id!==t);if(r.length===0)this[f].delete(e),delete this[p][e];else this[f].set(e,r),this[p][e]=r.map((i)=>i.handler)}}var y="_cb",E=1,d=Object.freeze({SIGNAL:"sig",REQUEST:"req",RESPONSE:"res",ACK:"ack",HANDSHAKE:"hsk",HANDSHAKE_INIT:"hsk_init",HANDSHAKE_ACK:"hsk_ack",HANDSHAKE_COMPLETE:"hsk_done",PING:"png",PONG:"pog",BYE:"bye",BROADCAST:"bc"}),U=Object.freeze({INIT:"init",INIT_SENT:"init_sent",ACK:"ack",ACK_SENT:"ack_sent",DONE:"done"}),H=Object.freeze({CONNECTING:"connecting",CONNECTED:"connected",DISCONNECTED:"disconnected",RECONNECTING:"reconnecting",FAILED:"failed"}),Oe=Object.freeze({IFRAME:"iframe",WORKER:"worker",SERVICE_WORKER:"sw",WINDOW:"window",PORT:"port"}),Ne=Object.freeze({LOCAL:"local",SENT:"sent",ACKED:"acked",QUEUED:"queued",TIMEOUT:"timeout",FAILED:"failed"});function R(e){return e!==null&&typeof e==="object"&&e[y]===E&&typeof e.id==="string"&&(typeof e.type==="string"||typeof e.t==="string")}function ue(e){if(e instanceof ArrayBuffer)return!0;if(e instanceof MessagePort)return!0;if(typeof ImageBitmap<"u"&&e instanceof ImageBitmap)return!0;if(typeof OffscreenCanvas<"u"&&e instanceof OffscreenCanvas)return!0;if(typeof ReadableStream<"u"&&e instanceof ReadableStream)return!0;if(typeof WritableStream<"u"&&e instanceof WritableStream)return!0;if(typeof TransformStream<"u"&&e instanceof TransformStream)return!0;return!1}function v(e,t=new Set){if(e===null||e===void 0)return Array.from(t);if(ue(e))return t.add(e),Array.from(t);if(Array.isArray(e))for(let s of e)v(s,t);else if(typeof e==="object")for(let s of Object.keys(e))v(e[s],t);return Array.from(t)}function J(e,t,s={},r=null){return Object.freeze({[y]:E,version:E,id:r||crypto.randomUUID(),type:e,timestamp:Date.now(),payload:Object.freeze({...t}),meta:Object.freeze({...s})})}function ce(e,t,s,r=null){return J(d.SIGNAL,{name:e,data:t,source:s,dest:r})}function de(e,t,s,r,i=null){return J(d.REQUEST,{name:e,data:t,source:s,dest:r},{},i)}function N(e,t,s,r=!0,i=null){return J(d.RESPONSE,{requestId:e,data:t,source:s,success:r,error:i})}var a=Object.freeze({HANDSHAKE_TIMEOUT:"ERR_HANDSHAKE_TIMEOUT",HANDSHAKE_REJECTED:"ERR_HANDSHAKE_REJECTED",ORIGIN_FORBIDDEN:"ERR_ORIGIN_FORBIDDEN",PEER_EXISTS:"ERR_PEER_EXISTS",PEER_NOT_FOUND:"ERR_PEER_NOT_FOUND",PEER_DISCONNECTED:"ERR_PEER_DISCONNECTED",RECONNECT_FAILED:"ERR_RECONNECT_FAILED",UNSUPPORTED:"ERR_UNSUPPORTED",NOT_CONNECTED:"ERR_NOT_CONNECTED",ACK_TIMEOUT:"ERR_ACK_TIMEOUT",RESPONSE_TIMEOUT:"ERR_RESPONSE_TIMEOUT",QUEUE_FULL:"ERR_QUEUE_FULL",INVALID_MESSAGE:"ERR_INVALID_MESSAGE",VERSION_MISMATCH:"ERR_VERSION_MISMATCH",CLONE_ERROR:"ERR_CLONE_ERROR",TRANSFER_ERROR:"ERR_TRANSFER_ERROR",MESSAGE_TOO_LARGE:"ERR_MESSAGE_TOO_LARGE",UNREACHABLE:"ERR_UNREACHABLE",TTL_EXCEEDED:"ERR_TTL_EXCEEDED",NO_ROUTE:"ERR_NO_ROUTE",NO_HANDLER:"ERR_NO_HANDLER",HANDLER_ERROR:"ERR_HANDLER_ERROR",HANDLER_TIMEOUT:"ERR_HANDLER_TIMEOUT",HANDLER_EXISTS:"ERR_HANDLER_EXISTS",SEND_FAILED:"ERR_SEND_FAILED",CHANNEL_FAILED:"ERR_CHANNEL_FAILED",CHANNEL_CLOSED:"ERR_CHANNEL_CLOSED",MAX_PEERS:"ERR_MAX_PEERS",MAX_PENDING:"ERR_MAX_PENDING",DESTROYED:"ERR_DESTROYED",CIRCUIT_OPEN:"ERR_CIRCUIT_OPEN",PAYLOAD_TOO_LARGE:"ERR_PAYLOAD_TOO_LARGE",RATE_LIMITED:"ERR_RATE_LIMITED",UNAUTHORIZED:"ERR_UNAUTHORIZED",INVALID_PAYLOAD:"ERR_INVALID_PAYLOAD"}),fe=Object.freeze({[a.HANDSHAKE_TIMEOUT]:{message:"Handshake timed out",retryable:!0,suggestion:"Increase timeout or check if target is loaded. Use iframe.onload before connecting."},[a.HANDSHAKE_REJECTED]:{message:"Handshake rejected by peer",retryable:!1,suggestion:"Check targetOrigin matches the peer's origin. Verify peer allows your origin."},[a.ORIGIN_FORBIDDEN]:{message:"Origin not in allowed origins list",retryable:!1,suggestion:'Add your origin to allowedOrigins option or use targetOrigin: "*" for development.'},[a.PEER_EXISTS]:{message:"Peer with this ID already exists",retryable:!1,suggestion:"Use unique peerId for each context. Try: peerId: `agent-${Date.now()}`"},[a.PEER_NOT_FOUND]:{message:"Peer not found",retryable:!1,suggestion:"Check if peer is connected using bus.peers. Wait for peer connection before request."},[a.PEER_DISCONNECTED]:{message:"Peer is disconnected",retryable:!0,suggestion:'Wait for peer to reconnect. Listen for "peer:join" event before retry.'},[a.RECONNECT_FAILED]:{message:"Max reconnection attempts reached",retryable:!1,suggestion:"Check network connectivity. Consider increasing maxRetries option."},[a.UNSUPPORTED]:{message:"Operation not supported by this environment",retryable:!1,suggestion:"This feature requires a browser environment. Check for feature availability first."},[a.NOT_CONNECTED]:{message:"Transport is not connected",retryable:!0,suggestion:"Call addTransport() and wait for connection before sending messages."},[a.ACK_TIMEOUT]:{message:"ACK not received within timeout",retryable:!0,suggestion:"Increase ackTimeout option or check peer availability."},[a.RESPONSE_TIMEOUT]:{message:"Response not received within timeout",retryable:!0,suggestion:"Increase timeout in request options: { timeout: 10000 }. Check if handler exists on peer."},[a.QUEUE_FULL]:{message:"Message queue is full",retryable:!1,suggestion:"Increase maxQueueSize or wait for queue to drain. Consider using batching plugin."},[a.INVALID_MESSAGE]:{message:"Invalid message format",retryable:!1,suggestion:"Ensure message data is JSON-serializable. Avoid DOM nodes and functions."},[a.VERSION_MISMATCH]:{message:"Protocol version mismatch",retryable:!1,suggestion:"Update CrossBus to same version on both sides."},[a.CLONE_ERROR]:{message:"Data cannot be cloned (contains functions or DOM nodes)",retryable:!1,suggestion:"Remove functions, DOM nodes, and circular references from message data."},[a.TRANSFER_ERROR]:{message:"Failed to transfer object ownership",retryable:!1,suggestion:"Ensure ArrayBuffers are not detached. Each buffer can only be transferred once."},[a.MESSAGE_TOO_LARGE]:{message:"Message exceeds maximum size",retryable:!1,suggestion:"Use streaming for large payloads or increase maxMessageSize option."},[a.UNREACHABLE]:{message:"Destination peer is unreachable",retryable:!0,suggestion:"Check if peer is still connected. Use bus.peers to list available peers."},[a.TTL_EXCEEDED]:{message:"Message TTL exceeded (possible routing loop)",retryable:!1,suggestion:"Check for circular transport configurations. Increase maxTTL if needed."},[a.NO_ROUTE]:{message:"No route to destination",retryable:!1,suggestion:"Add transport connecting to target peer. Set isHub: true on orchestrator."},[a.NO_HANDLER]:{message:"No handler registered for this request",retryable:!1,suggestion:'Register handler on target: bus.handle("handlerName", fn). Check handler name spelling.'},[a.HANDLER_ERROR]:{message:"Handler threw an exception",retryable:!1,suggestion:"Check target peer logs for error. Wrap handler in try/catch."},[a.HANDLER_TIMEOUT]:{message:"Handler did not respond within timeout",retryable:!0,suggestion:"Handler is slow. Increase timeout or optimize handler performance."},[a.HANDLER_EXISTS]:{message:"Handler already registered with this name",retryable:!1,suggestion:"Use different handler name or call bus.removeHandler() first."},[a.SEND_FAILED]:{message:"Failed to send message to peer",retryable:!0,suggestion:"Check transport status. Target window may be closed or blocked."},[a.CHANNEL_FAILED]:{message:"Failed to create direct channel",retryable:!0,suggestion:"Check browser support for MessageChannel. Retry after short delay."},[a.CHANNEL_CLOSED]:{message:"Channel was closed unexpectedly",retryable:!1,suggestion:"Target context was destroyed. Check if iframe/worker still exists."},[a.MAX_PEERS]:{message:"Maximum number of peers reached",retryable:!1,suggestion:"Increase maxPeers option or disconnect unused peers first."},[a.MAX_PENDING]:{message:"Maximum pending requests reached",retryable:!1,suggestion:"Wait for pending requests to complete. Increase maxPendingRequests option."},[a.DESTROYED]:{message:"CrossBus instance has been destroyed",retryable:!1,suggestion:"Create new CrossBus instance. Do not use bus after calling destroy()."},[a.CIRCUIT_OPEN]:{message:"Circuit breaker is open",retryable:!1,suggestion:"Too many failures. Wait for circuit to reset or call circuit.reset()."},[a.PAYLOAD_TOO_LARGE]:{message:"Payload exceeds maximum allowed size",retryable:!1,suggestion:"Reduce payload size or increase maxPayloadSize option. Consider using streaming for large data."},[a.RATE_LIMITED]:{message:"Request rate limit exceeded",retryable:!0,suggestion:"Wait before retrying. Consider adding delay or using exponential backoff."},[a.UNAUTHORIZED]:{message:"Peer is not authorized to call this handler",retryable:!1,suggestion:"Add peer to handler allowedPeers list or remove peer restrictions."},[a.INVALID_PAYLOAD]:{message:"Payload validation failed",retryable:!1,suggestion:"Check payload structure against handler requirements."}});class c extends Error{code;details;retryable;cause;timestamp;constructor(e,t,s={}){let r=fe[e]??{message:"Unknown error",retryable:!1};super(t??r.message);if(this.name="CrossBusError",this.code=e,this.details=s.details??{},this.retryable=s.retryable??r.retryable,this.cause=s.cause,this.timestamp=Date.now(),Error.captureStackTrace)Error.captureStackTrace(this,c)}static from(e,t={}){return new c(e,void 0,{details:t})}static wrap(e,t,s={}){return new c(e,t.message,{cause:t,details:s})}toJSON(){return{name:this.name,code:this.code,message:this.message,details:this.details,retryable:this.retryable,timestamp:this.timestamp}}toString(){return`${this.name} [${this.code}]: ${this.message}`}}function _(){if(typeof crypto<"u"&&crypto.randomUUID)return crypto.randomUUID();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(e)=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}function q(){if(typeof Promise.withResolvers==="function")return Promise.withResolvers();let e,t;return{promise:new Promise((s,r)=>{e=s,t=r}),resolve:e,reject:t}}function $(e,t,s="Operation timed out"){return Promise.race([e,new Promise((r,i)=>{setTimeout(()=>i(Error(s)),t)})])}class Q extends P{#e=new Map;#t=0;#s=new Map;#i=Object.create(null);#r=Object.create(null);#n=[];constructor(){super()}addPeer(e,t,s={}){if(this.#e.has(e))throw c.from(a.PEER_EXISTS,{peerId:e});if(typeof t!=="function")throw TypeError("sendFn must be a function");let r={peerId:e,sendFn:t,meta:s.meta??{},origin:s.origin??"unknown",status:H.CONNECTED,connectedAt:Date.now()};this.#e.set(e,r),this.#s.set(e,0),this.#i[e]=r,this.#r[e]=t,this.#n.push(e),this.emit("peer:added",{peerId:e,meta:r.meta})}removePeer(e){let t=this.#i[e];if(!t)return!1;this.#e.delete(e),this.#s.delete(e),delete this.#i[e],delete this.#r[e];let s=this.#n.indexOf(e);if(s!==-1)this.#n.splice(s,1);return this.emit("peer:removed",{peerId:e,meta:t.meta}),!0}getPeer(e){return this.#i[e]}getPeerIds(){return this.#n.slice()}get peerCount(){return this.#e.size}route(e,t={}){let{target:s,payload:r}=e;if(s)return this.#a(s,r);else{let i=t.exclude,n=i?.length?new Set(i):null;return this.#o(r,n)}}broadcast(e,t={}){let s=t.exclude,r=s?.length?new Set(s):null,i=t.include,n=i?.length?new Set(i):null,o=0,l=[];for(let[h,u]of this.#e){if(r?.has(h))continue;if(n&&!n.has(h))continue;if(u.status!==H.CONNECTED)continue;try{let g=this.#l(h,e,d.BROADCAST);u.sendFn(g),o++}catch(g){console.error(`[Router] Failed to send to ${h}:`,g),l.push(h)}}return{success:l.length===0,delivered:o,failed:l}}getSequence(e){return this.#s.get(e)??0}setPeerStatus(e,t){let s=this.#i[e];if(s)s.status=t,this.emit("peer:status",{peerId:e,status:t})}clearPeers(){let e=this.#n.slice();for(let t of e)this.removePeer(t)}#a(e,t){let s=this.#i[e];if(!s)return{success:!1,delivered:0,failed:[e],error:a.PEER_NOT_FOUND};if(s.status!==H.CONNECTED)return{success:!1,delivered:0,failed:[e],error:a.PEER_DISCONNECTED};try{let r=t&&t._cb?t:this.#l(e,t,d.SIGNAL);return s.sendFn(r),{success:!0,delivered:1,failed:[]}}catch(r){return console.error(`[Router] Failed to send to ${e}:`,r),{success:!1,delivered:0,failed:[e]}}}#o(e,t){return this.broadcast(e,t?{exclude:Array.from(t)}:{})}#l(e,t,s){let r=(this.#s.get(e)??0)+1;return this.#s.set(e,r),{id:`msg_${++this.#t}`,t:s,ts:Date.now(),seq:r,p:t}}}class Y{#e=new Map;#t=Object.create(null);#s=0;#i;#r;constructor(e={}){this.#i=e.defaultTimeout??30000,this.#r=e.maxPending??1000}create(e,t,s={}){if(this.#r>0&&this.#e.size>=this.#r)throw c.from(a.MAX_PENDING,{current:this.#e.size,max:this.#r,targetPeer:e,handlerName:t});let r=Date.now(),i=`req_${++this.#s}_${r}`,n=s.timeout??this.#i,{promise:o,resolve:l,reject:h}=q(),u={id:i,targetPeer:e,handlerName:t,createdAt:r,timeout:n,resolve:l,reject:h,defaultValue:s.defaultValue};this.#e.set(i,u),this.#t[i]=u;let g=$(o,n).catch((A)=>{if(i in this.#t){if(this.#e.delete(i),delete this.#t[i],"defaultValue"in s)return s.defaultValue;throw c.from(a.RESPONSE_TIMEOUT,{requestId:i,targetPeer:e,handlerName:t,timeout:n})}throw A});return{requestId:i,promise:g}}resolve(e,t){let s=this.#t[e];if(!s)return!1;if(this.#e.delete(e),delete this.#t[e],t.success)s.resolve(t.data);else{let r=c.from(t.error?.code??a.HANDLER_ERROR,{requestId:e,targetPeer:s.targetPeer,handlerName:s.handlerName,originalError:t.error});r.message=t.error?.message??"Handler error",s.reject(r)}return!0}reject(e,t){let s=this.#t[e];if(!s)return!1;this.#e.delete(e),delete this.#t[e];let r=t instanceof Error?t:Error(t);return s.reject(r),!0}cancel(e){let t=this.#t[e];if(!t)return!1;return this.#e.delete(e),delete this.#t[e],t.reject(Error("Request cancelled")),!0}cancelForPeer(e){let t=0;for(let[s,r]of this.#e)if(r.targetPeer===e)this.#e.delete(s),delete this.#t[s],r.reject(c.from(a.PEER_DISCONNECTED,{peerId:e,requestId:s})),t++;return t}cancelAll(){let e=this.#e.size;for(let[t,s]of this.#e)s.reject(Error("All requests cancelled"));this.#e.clear();for(let t in this.#t)delete this.#t[t];return e}has(e){return e in this.#t}get(e){return this.#t[e]}get size(){return this.#e.size}getRequestIds(){return Array.from(this.#e.keys())}getForPeer(e){let t=[];for(let s of this.#e.values())if(s.targetPeer===e)t.push(s);return t}}class V{#e;#t;#s;#i;#r=new Map;constructor(e={}){this.#e=e.peerId??_(),this.#t=e.meta??{},this.#s=e.capabilities??[],this.#i=e.timeout??1e4}get peerId(){return this.#e}createInitMessage(){return{type:d.HANDSHAKE_INIT,handshakeId:_(),peerId:this.#e,meta:this.#t,capabilities:this.#s,timestamp:Date.now()}}createAckMessage(e,t,s){return{type:d.HANDSHAKE_ACK,handshakeId:e.handshakeId,peerId:this.#e,meta:this.#t,capabilities:this.#s,accept:t,reason:t?void 0:s,timestamp:Date.now()}}createCompleteMessage(e){return{type:d.HANDSHAKE_COMPLETE,handshakeId:e,confirmed:!0,timestamp:Date.now()}}async initiate(e){let t=this.createInitMessage(),{promise:s,resolve:r,reject:i}=q();this.#r.set(t.handshakeId,{phase:U.INIT_SENT,resolve:r,reject:i,initMsg:t,startTime:Date.now()}),e(t);try{return await $(s,this.#i)}catch(n){if(this.#r.delete(t.handshakeId),n.code===a.HANDSHAKE_TIMEOUT)return{success:!1,error:a.HANDSHAKE_TIMEOUT,reason:`Handshake timeout after ${this.#i}ms`};return{success:!1,error:a.HANDSHAKE_REJECTED,reason:n.message}}}handleMessage(e,t,s,r){switch(e.type){case d.HANDSHAKE_INIT:return this.#n(e,t,s,r);case d.HANDSHAKE_ACK:return this.#a(e,t,s);case d.HANDSHAKE_COMPLETE:return this.#o(e,t);default:return null}}hasPending(e){return this.#r.has(e)}cancel(e){let t=this.#r.get(e);if(t)t.reject(Error("Handshake cancelled")),this.#r.delete(e)}cancelAll(){for(let[e,t]of this.#r)t.reject(Error("All handshakes cancelled"));this.#r.clear()}#n(e,t,s,r){if(r&&!r(e,t)){let n=this.createAckMessage(e,!1,"Validation failed");return s(n),null}let i=this.createAckMessage(e,!0);return s(i),this.#r.set(e.handshakeId,{phase:U.ACK_SENT,remotePeer:{peerId:e.peerId,origin:t,meta:e.meta,capabilities:e.capabilities}}),null}#a(e,t,s){let r=this.#r.get(e.handshakeId);if(!r)return null;if(!e.accept)return r.reject(Error(e.reason||"Connection rejected")),this.#r.delete(e.handshakeId),null;let i=this.createCompleteMessage(e.handshakeId);s(i);let n={peerId:e.peerId,origin:t,meta:e.meta,capabilities:e.capabilities,type:"unknown",connectedAt:Date.now()};return r.resolve({success:!0,peer:n}),this.#r.delete(e.handshakeId),n}#o(e,t){let s=this.#r.get(e.handshakeId);if(!s||s.phase!==U.ACK_SENT)return null;if(!e.confirmed)return this.#r.delete(e.handshakeId),null;let r={...s.remotePeer,connectedAt:Date.now()};return this.#r.delete(e.handshakeId),r}}class W{#e=new Set;#t=[];#s=!1;#i;constructor(e={}){if(this.#s=e.allowAll??!1,this.#i=globalThis.location?.origin,e.allowed)for(let t of e.allowed)this.#r(t)}isAllowed(e){if(this.#s)return!0;if(e==="null"||e===null)return this.#e.has("null");if(this.#e.size===0&&this.#t.length===0)return e===this.#i;if(this.#e.has(e))return!0;for(let t of this.#t)if(t.test(e))return!0;return!1}allow(e){return this.#r(e),this}disallow(e){if(this.#e.has(e))return this.#e.delete(e),!0;return!1}getAllowed(){return Array.from(this.#e)}clear(){this.#e.clear(),this.#t=[]}get selfOrigin(){return this.#i}#r(e){if(typeof e!=="string")throw TypeError("Origin must be a string");if(e==="*"){this.#s=!0;return}if(e.includes("*")){let t=this.#n(e);this.#t.push(t)}else this.#e.add(e)}#n(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,"[a-zA-Z0-9.-]{0,253}");return new RegExp(`^${t}$`)}}class z extends P{#e;#t;#s;#i;#r;#n;#a;#o=new Map;#l=[];#h=[];#d;#f;#c;#g;#u;#p;#y=new Map;#m=new Map;#w=!1;#b="[CrossBus]";#S;#E=!1;constructor(e={}){super();if(this.#e=e.peerId??_(),this.#t=e.isHub??!1,this.#d=e.meta??{},this.#f=e.capabilities??[],this.#c=e.requestTimeout??30000,this.#s=new Q,this.#i=new Y({defaultTimeout:this.#c}),this.#r=new V({peerId:this.#e,meta:this.#d,capabilities:this.#f,timeout:e.handshakeTimeout??1e4}),this.#n=new W({allowed:e.allowedOrigins??[]}),this.#a=e.contentType??"application/json",this.#g=e.maxPayloadSize??1048576,this.#u=e.maxPendingRequests??100,this.#p=e.strictMode??!1,this.#w=e.debug??!1,this.#b=e.debugPrefix??"[CrossBus]",this.#S=Date.now(),this.#O(e),this.#f.push(`serializer:${this.#a}`),this.#s.on("peer:added",(t)=>{this.emit("peer:connected",t.data)}),this.#s.on("peer:removed",(t)=>{this.emit("peer:disconnected",t.data)}),this.#s.on("peer:status",(t)=>{this.emit("peer:status",t.data)}),this.#w)this.#R("info",`Initialized (isHub: ${this.#t})`)}get peerId(){return this.#e}get isHub(){return this.#t}get peerCount(){return this.#s.peerCount}get peers(){return this.#s.getPeerIds()}getPeer(e){return this.#s.getPeer(e)}async signal(e,t,s={}){this.#T();let r=await this.#_(this.#h,t,{type:"signal",direction:"outbound"}),i=ce(e,r,this.#e),n=await this.#s.broadcast(i,s);return this.#R("out",`SIGNAL "${e}" to ${n.delivered} peers`),n}async request(e,t,s,r={}){if(this.#T(),this.#R("out",`REQUEST "${t}" to ${e}`),!this.#s.getPeer(e))throw c.from(a.PEER_NOT_FOUND,{peerId:e});let{requestId:i,promise:n}=this.#i.create(e,t,{timeout:r.timeout??this.#c}),o=await this.#_(this.#h,s,{type:"request",peerId:e,handlerName:t,direction:"outbound"}),l=de(t,o,this.#e,e,i);if(!this.#s.route({target:e,payload:l}).success)throw this.#i.cancel(i),c.from(a.SEND_FAILED,{peerId:e});return n}async broadcastRequest(e,t,s={}){this.#T();let r=s.timeout??this.#c,i=s.ignoreErrors??!0,n=new Set(s.exclude??[]),o=new Map,l=[];for(let h of this.#s.getPeerIds()){if(n.has(h))continue;let u=this.request(h,e,t,{timeout:r}).then((g)=>{o.set(h,{success:!0,data:g})}).catch((g)=>{if(i)o.set(h,{success:!1,error:g.message});else throw g});l.push(u)}return await Promise.all(l),o}handle(e,t,s={}){if(this.#o.has(e))throw c.from(a.HANDLER_EXISTS,{handlerName:e});if(s.allowedPeers||s.rateLimit||s.validatePayload)this.#m.set(e,s);return this.#o.set(e,t),()=>{this.#o.delete(e),this.#m.delete(e)}}unhandle(e){return this.#o.delete(e)}hasHandler(e){return this.#o.has(e)}addInboundHook(e,t=10){if(typeof e!=="function")throw TypeError("hookFn must be a function");let s={fn:e,priority:t};return this.#l.push(s),this.#l.sort((r,i)=>r.priority-i.priority),()=>this.removeInboundHook(e)}addOutboundHook(e,t=10){if(typeof e!=="function")throw TypeError("hookFn must be a function");let s={fn:e,priority:t};return this.#h.push(s),this.#h.sort((r,i)=>r.priority-i.priority),()=>this.removeOutboundHook(e)}removeInboundHook(e){let t=this.#l.findIndex((s)=>s.fn===e);if(t!==-1)return this.#l.splice(t,1),!0;return!1}removeOutboundHook(e){let t=this.#h.findIndex((s)=>s.fn===e);if(t!==-1)return this.#h.splice(t,1),!0;return!1}addPeer(e,t,s={}){this.#T(),this.#s.addPeer(e,t,s)}removePeer(e){return this.#i.cancelForPeer(e),this.#s.removePeer(e)}addTransport(e,t={}){if(this.#T(),!e||typeof e.send!=="function")throw TypeError("Transport must have a send() method");let s=t.peerId||e.peerId||`transport-${_()}`,r=t.origin||"*";if(typeof e.onMessage==="function")e.onMessage((i)=>{this.handleMessage(i,r,s)});return this.addPeer(s,(i)=>{e.send(i)},t),()=>{if(this.removePeer(s),typeof e.destroy==="function")e.destroy()}}async handleMessage(e,t,s,r){if(this.#E)return;if(!this.#n.isAllowed(t)){console.warn(`[CrossBus] Blocked message from unauthorized origin: ${t}`);return}let i=e.payload??e.data??e.p,n=e.type??e.t,o=e.handler??e.name,l=i;if(e.payload&&typeof e.payload==="object"&&!e.p){if(n===d.SIGNAL||n===d.BROADCAST)o=e.payload.name,l=e.payload.data;else if(n===d.REQUEST)o=e.payload.name,l=e.payload.data;else if(n===d.RESPONSE)l=e.payload.data}else if(e.t&&!e.type&&e.p&&typeof e.p==="object"&&e.p.payload){let h=e.p;o=h.payload.name??h.name,l=h.payload.data??h.data}if(l!==void 0){let h={type:n===d.SIGNAL?"signal":n===d.REQUEST?"request":"response",peerId:s,handlerName:o,direction:"inbound"};l=await this.#_(this.#l,l,h)}switch(n){case d.BROADCAST:case d.SIGNAL:if(typeof o!=="string"){console.warn("[CrossBus] Invalid signal name type");return}await this.#A(o,l,s);break;case d.REQUEST:if(typeof o!=="string"){console.warn("[CrossBus] Invalid handler name type");return}await this.#I(e.id,o,l,s,r);break;case d.RESPONSE:{let{success:h,error:u}=e;if(e.payload&&e.payload.success!==void 0)h=e.payload.success,u=e.payload.error;this.#C(e.payload?.requestId??e.id,h,l,u);break}case d.HANDSHAKE_INIT:case d.HANDSHAKE_ACK:case d.HANDSHAKE_COMPLETE:this.#r.handleMessage(e,t,r);break;default:console.warn(`[CrossBus] Unknown message type: ${n}`)}}destroy(){if(this.#E)return;this.#E=!0,this.#i.cancelAll(),this.#o.clear(),this.#s.clearPeers(),this.clear(),this.emit("destroyed",{})}get isDestroyed(){return this.#E}async#A(e,t,s){await this.emit(e,{payload:t,source:s})}async#I(e,t,s,r,i){let n=this.#o.get(t),o;if(!n)o=N(e,null,this.#e,!1,{code:a.NO_HANDLER,message:"Handler not found"});else{let l=this.#N(t,r,s);if(!l.allowed)o=N(e,null,this.#e,!1,{code:l.error?.code??a.UNAUTHORIZED,message:l.error?.message??"Security check failed"});else try{let h=await n(s,{peerId:r,requestId:e,handlerName:t}),u=await this.#_(this.#h,h,{type:"response",peerId:r,handlerName:t,direction:"outbound"});o=N(e,u,this.#e,!0)}catch(h){o=N(e,null,this.#e,!1,{code:h.code??a.HANDLER_ERROR,message:h.message})}}if(i)i(o);else if(r)this.#s.route({target:r,payload:o})}#C(e,t,s,r){this.#i.resolve(e,{requestId:e,success:t,data:s,error:r})}#T(){if(this.#E)throw c.from(a.DESTROYED,{context:"CrossBus operation"})}async#_(e,t,s){let r=t;for(let{fn:i}of e)try{r=await i(r,s)}catch(n){console.error("[CrossBus] Hook error:",n)}return r}#O(e){if(!(typeof process<"u"?process.env?.NODE_ENV!=="production":typeof window<"u"&&window.location?.hostname==="localhost"))return;if(!e.allowedOrigins||e.allowedOrigins.length===0)console.warn(`[CrossBus Security] ⚠️ No allowedOrigins specified.
2
+ `+`This bus will REJECT all incoming messages from transports.
3
+ To receive messages, specify allowed origins:
4
+ allowedOrigins: ["https://trusted-domain.com"]
5
+ For development only: allowedOrigins: ["*"]`);if(e.allowedOrigins?.includes("*")){if(console.warn(`[CrossBus Security] ⚠️ allowedOrigins: ["*"] accepts messages from ANY origin.
6
+ `+`This is INSECURE in production. Use specific origins instead:
7
+ allowedOrigins: ["https://trusted-domain.com"]
8
+ For production, use:
9
+ CrossBus.createSecure({ allowedOrigins: ["https://..."] })
10
+ Suppress this warning with NODE_ENV=production`),this.#p)throw Error('strictMode: allowedOrigins: ["*"] is not allowed. Use specific origins for security.')}}#N(e,t,s){let r=this.#m.get(e);if(!r)return{allowed:!0};if(r.allowedPeers&&!r.allowedPeers.includes(t))return{allowed:!1,error:c.from(a.UNAUTHORIZED,{handler:e,peer:t,allowedPeers:r.allowedPeers})};if(r.rateLimit){let i=`${e}:${t}`;if(!this.#D(i,r.rateLimit))return{allowed:!1,error:c.from(a.RATE_LIMITED,{handler:e,peer:t,limit:r.rateLimit})}}if(r.validatePayload)try{if(!r.validatePayload(s))return{allowed:!1,error:c.from(a.INVALID_PAYLOAD,{handler:e})}}catch(i){return{allowed:!1,error:c.from(a.INVALID_PAYLOAD,{handler:e,reason:i?.message??"Validation error"})}}return{allowed:!0}}#D(e,t){let s=Date.now(),r=this.#y.get(e);if(!r||s>=r.resetAt)return this.#y.set(e,{count:1,resetAt:s+1000}),!0;if(r.count>=t)return!1;return r.count++,!0}get maxPayloadSize(){return this.#g}get strictMode(){return this.#p}get debug(){return this.#w}get uptime(){return Date.now()-this.#S}#R(e,t){if(!this.#w)return;let s=e==="out"?"→":e==="in"?"←":e==="warn"?"⚠️":e==="error"?"❌":"ℹ️";console.log(`${this.#b} ${s} ${t}`)}healthCheck(){let e=this.#s.getPeerIds(),t=e.length,s="healthy";if(this.#E)s="unhealthy";else if(t===0&&this.#t)s="degraded";let r;if(typeof process<"u"&&process.memoryUsage)try{let i=process.memoryUsage();r={heapUsed:i.heapUsed,heapTotal:i.heapTotal,rss:i.rss}}catch{}return{status:s,peerId:this.#e,isHub:this.#t,uptime:this.uptime,peers:{total:t,ids:e},handlers:Array.from(this.#o.keys()),pendingRequests:this.#i.size??0,destroyed:this.#E,...r&&{memory:r}}}static createSecure(e={}){if(!e.allowedOrigins||e.allowedOrigins.length===0)throw Error('createSecure() requires allowedOrigins to be specified. For development, use: new CrossBus({ allowedOrigins: ["*"] })');if(e.allowedOrigins.includes("*"))throw Error('createSecure() does not allow wildcard origins. Specify exact origins: allowedOrigins: ["https://example.com"]');return new z({strictMode:!0,maxPayloadSize:1048576,maxPendingRequests:100,requestTimeout:30000,...e})}diagnose(){let e=[],t=[],s=[];if(this.#E)return e.push("Instance is destroyed"),t.push("Create a new CrossBus instance"),{status:"error",issues:e,suggestions:t,warnings:s};let r=this.#s.getPeerIds().length;if(r===0)if(this.#t)s.push("Hub has no connected peers"),t.push("Add transports with addTransport() or wait for agents to connect");else e.push("Agent has no connected peers"),t.push('Add a transport to connect to hub: bus.addTransport(transport, {peerId: "hub"})');let i=this.#o.size;if(this.#t&&i===0)s.push("Hub has no registered handlers"),t.push('Register handlers with bus.handle("name", fn)');let n=this.#i.size??0;if(n>this.#u*0.8)s.push(`High pending request count: ${n}/${this.#u}`),t.push("Consider increasing maxPendingRequests or check for slow handlers");if(!this.#p)s.push("strictMode is disabled"),t.push("For production, use CrossBus.createSecure() or set strictMode: true");let o="healthy";if(e.length>0)o="error";else if(s.length>0)o="warning";return{status:o,peerId:this.#e,isHub:this.#t,peerCount:r,handlerCount:i,pendingRequests:n,uptime:this.uptime,issues:e,warnings:s,suggestions:t}}}class Z{#e;#t;#s;#i;#r=0;#n=!1;#a=!1;#o;constructor(e,t,s={}){this.#e=_(),this.#t=t,this.#s=e,this.#i=s.chunkSize??64000,this.#o=s.meta??{}}get streamId(){return this.#e}get name(){return this.#t}async open(e){if(this.#a)return;this.#a=!0,await this.#l({st:"open",name:this.#t,meta:{...this.#o,...e}})}async write(e){if(this.#n)throw Error("Stream already ended");if(!this.#a)await this.open();let t,s=!1;if(e instanceof ArrayBuffer)t=this.#d(new Uint8Array(e)),s=!0;else if(e instanceof Uint8Array)t=this.#d(e),s=!0;else if(typeof e==="string"){let r=this.#h(e,this.#i);for(let i of r)await this.#l({st:"data",seq:this.#r++,d:i,b64:!1});return}else t=JSON.stringify(e);if(s){let r=this.#h(t,this.#i);for(let i of r)await this.#l({st:"data",seq:this.#r++,d:i,b64:!0})}else await this.#l({st:"data",seq:this.#r++,d:t,b64:!1})}async end(e){if(this.#n)return;this.#n=!0,await this.#l({st:"end",seq:this.#r,meta:e})}async abort(e){if(this.#n)return;this.#n=!0,await this.#l({st:"error",reason:e??"Stream aborted"})}async#l(e){let t={[y]:E,t:"stream",sid:this.#e,...e};await this.#s(t)}#h(e,t){let s=[];for(let r=0;r<e.length;r+=t)s.push(e.slice(r,r+t));return s}#d(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}}class ee{#e;#t;#s;#i=[];#r=null;#n=!1;#a=null;constructor(e,t,s={}){this.#e=e,this.#t=t,this.#s=s}get streamId(){return this.#e}get name(){return this.#t}get meta(){return this.#s}get ended(){return this.#n}push(e){if(this.#n)return;let t=e.d;if(e.b64)t=this.#o(t);if(this.#i.push(t),this.#r){let s=this.#r;this.#r=null,s()}}end(e){if(this.#n=!0,e)this.#s={...this.#s,...e};if(this.#r){let t=this.#r;this.#r=null,t()}}error(e){if(this.#n=!0,this.#a=Error(e),this.#r){let t=this.#r;this.#r=null,t()}}async*[Symbol.asyncIterator](){while(!0){while(this.#i.length>0)yield this.#i.shift();if(this.#n){if(this.#a)throw this.#a;return}await new Promise((e)=>{this.#r=e})}}async collect(){let e=[],t=!1;for await(let s of this)if(e.push(s),s instanceof Uint8Array)t=!0;if(t){let s=e.reduce((n,o)=>n+o.length,0),r=new Uint8Array(s),i=0;for(let n of e)r.set(n,i),i+=n.length;return r}else return e.join("")}#o(e){let t=atob(e),s=new Uint8Array(t.length);for(let r=0;r<t.length;r++)s[r]=t.charCodeAt(r);return s}}class ge{#e=new Map;#t=new Map;#s;constructor(e){this.#s=e}createStream(e,t,s={}){return new Z(async(r)=>{await this.#s(t,r)},e,s)}onStream(e,t){return this.#t.set(e,t),()=>this.#t.delete(e)}handleMessage(e,t){if(e.t!=="stream")return;let s=e.sid;switch(e.st){case"open":this.#i(s,e,t);break;case"data":this.#r(s,e);break;case"end":this.#n(s,e);break;case"error":this.#a(s,e);break}}#i(e,t,s){let r=this.#t.get(t.name);if(!r){console.warn(`[CrossBus] No handler for stream: ${t.name}`);return}let i=new ee(e,t.name,t.meta);this.#e.set(e,i),r(i).catch((n)=>{console.error("[CrossBus] Stream handler error:",n)})}#r(e,t){let s=this.#e.get(e);if(!s)return;s.push(t)}#n(e,t){let s=this.#e.get(e);if(!s)return;s.end(t.meta),this.#e.delete(e)}#a(e,t){let s=this.#e.get(e);if(!s)return;s.error(t.reason),this.#e.delete(e)}get activeStreamCount(){return this.#e.size}}class me extends P{#e;#t;#s=new Map;#i;#r;#n=null;#a=null;#o=!1;#l="online";#h={};constructor(e,t){super();if(!t.peerId)throw Error("peerId is required");if(this.#e=t.peerId,this.#t=e,this.#i=t.heartbeatInterval??15000,this.#r=t.timeout??45000,t.autoStart!==!1)this.start()}get peerId(){return this.#e}get status(){return this.#l}get onlineCount(){let e=0;for(let t of this.#s.values())if(t.status!=="offline")e++;return e}start(){if(this.#n)return;this.#u("join"),this.#n=setInterval(()=>{this.#u("heartbeat")},this.#i),this.#a=setInterval(()=>{this.#g()},this.#i)}stop(){if(this.#n)clearInterval(this.#n),this.#n=null;if(this.#a)clearInterval(this.#a),this.#a=null;this.#u("leave")}setStatus(e,t){if(this.#l=e,t)this.#h={...this.#h,...t};this.#u("update")}setMeta(e){this.#h={...this.#h,...e},this.#u("update")}getOnlinePeers(){let e=[];for(let[t,s]of this.#s)if(s.status!=="offline")e.push(t);return e}getAllPeers(){return Array.from(this.#s.values())}getPeer(e){return this.#s.get(e)}isOnline(e){let t=this.#s.get(e);return t?t.status!=="offline":!1}handleMessage(e,t){if(e.t!=="presence")return;if(t===this.#e)return;let{pt:s,status:r,meta:i}=e,n=Date.now();switch(s){case"join":this.#d(t,r,i,n),this.#u("heartbeat");break;case"leave":this.#f(t);break;case"heartbeat":case"update":this.#c(t,r,i,n);break}}#d(e,t,s,r){let i=!this.#s.has(e);if(this.#s.set(e,{peerId:e,status:t??"online",lastSeen:r,meta:s??{}}),i)this.emitSync("join",{peerId:e,meta:s})}#f(e){let t=this.#s.get(e);if(!t)return;t.status="offline",this.#s.delete(e),this.emitSync("leave",{peerId:e})}#c(e,t,s,r){let i=this.#s.get(e),n=!i||i.status==="offline";if(!i)i={peerId:e,status:t??"online",lastSeen:r,meta:s??{}},this.#s.set(e,i);else{if(i.lastSeen=r,t)i.status=t;if(s)i.meta={...i.meta,...s}}if(n&&i.status!=="offline")this.emitSync("join",{peerId:e,meta:i.meta});else this.emitSync("update",{peerId:e,peer:i})}#g(){let e=Date.now()-this.#r;for(let[t,s]of this.#s)if(s.lastSeen<e&&s.status!=="offline")s.status="offline",this.#s.delete(t),this.emitSync("leave",{peerId:t})}async#u(e){if(this.#o)return;let t={[y]:E,t:"presence",pt:e,peerId:this.#e,status:this.#l,meta:this.#h,ts:Date.now()};try{await this.#t(t)}catch(s){console.error("[CrossBus] Failed to send presence:",s)}}destroy(){if(this.#o)return;this.#o=!0,this.stop(),this.#s.clear()}get isDestroyed(){return this.#o}}var k={contentType:"application/json",serialize:(e)=>JSON.stringify(e),deserialize:(e)=>JSON.parse(e)},te=new Map;te.set(k.contentType,k);function M(e){return te.get(e)||k}class pe{#e=null;#t;#s;#i;#r;#n;#a=null;#o=null;#l=!1;static isSupported(){return typeof globalThis.postMessage==="function"||typeof Window<"u"}constructor(e,t={}){if(!this.#f(e))throw TypeError("Target must support postMessage");if(this.#e=e,this.#t=t.targetOrigin??"*",this.#s=new Set(t.allowedOrigins??[]),this.#i=t.autoTransfer??!1,this.#n=t.contentType??"application/json",this.#r=M(this.#n),(typeof process<"u"?process.env?.NODE_ENV!=="production":typeof window<"u"&&window.location?.hostname==="localhost")&&this.#t==="*")console.warn(`[CrossBus Security] ⚠️ targetOrigin: "*" broadcasts to ANY window.
11
+ `+`This is INSECURE in production. Use specific origin:
12
+ targetOrigin: "https://iframe-domain.com"
13
+ Suppress this warning with NODE_ENV=production`);this.#o=this.#h.bind(this),this.#u().addEventListener("message",this.#o)}send(e,t){if(this.#l)throw c.from(a.DESTROYED,{context:"PostMessageTransport.send"});if(this.#g())throw c.from(a.PEER_DISCONNECTED,{reason:"Target window is closed"});let s={[y]:E,...e},r=s;if(this.#n!=="application/json")r=this.#r.serialize(s);let i=t;if(this.#i&&!t){if(i=v(e),i.length===0)i=void 0}if(this.#c())this.#e.postMessage(r,i);else this.#e.postMessage(s,this.#t,i)}onMessage(e){if(typeof e!=="function")throw TypeError("Handler must be a function");this.#a=e}offMessage(){this.#a=null}destroy(){if(this.#l)return;if(this.#l=!0,this.#a=null,this.#o)this.#u().removeEventListener("message",this.#o),this.#o=null}get isDestroyed(){return this.#l}get targetOrigin(){return this.#t}#h(e){if(!this.#a)return;let t=e.data;if(!R(t))return;if(e.origin&&!this.#d(e.origin)){console.warn(`[CrossBus] Blocked message from unauthorized origin: ${e.origin}`);return}if(this.#e&&"postMessage"in this.#e&&!this.#c()){if(e.source!==this.#e)return}try{this.#a(t,{origin:e.origin??"worker",source:e.source??e.currentTarget})}catch(s){console.error("[CrossBus] Message handler error:",s)}}#d(e){if(this.#s.size===0)return e===globalThis.location?.origin;if(this.#s.has("*"))return!0;if(this.#s.has(e))return!0;for(let t of this.#s)if(t.includes("*")){if(new RegExp("^"+t.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,"[a-zA-Z0-9.-]{0,253}")+"$").test(e))return!0}return!1}#f(e){if(!e)return!1;return typeof e.postMessage==="function"}#c(){if(typeof Worker<"u"&&this.#e instanceof Worker)return!0;if(typeof ServiceWorker<"u"&&this.#e instanceof ServiceWorker)return!0;if(typeof MessagePort<"u"&&this.#e instanceof MessagePort)return!0;return!1}#g(){if(this.#c())return!1;return this.#e.closed===!0}#u(){if(typeof DedicatedWorkerGlobalScope<"u"&&globalThis instanceof DedicatedWorkerGlobalScope)return globalThis;if(this.#c())return this.#e;if(typeof window<"u")return window;return globalThis}}class se{#e;#t;#s;#i;#r=null;#n=!1;static isSupported(){return typeof BroadcastChannel<"u"}constructor(e={}){if(!se.isSupported())throw c.from(a.UNSUPPORTED,{api:"BroadcastChannel"});this.#t=e.channelName??"crossbus:default",this.#e=new BroadcastChannel(this.#t),this.#i=e.contentType??"application/json",this.#s=M(this.#i),this.#e.onmessage=this.#a.bind(this),this.#e.onmessageerror=this.#o.bind(this)}send(e){if(this.#n)throw c.from(a.DESTROYED,{context:"BroadcastChannelTransport.send"});let t={[y]:E,...e},s=t;if(this.#i!=="application/json")s=this.#s.serialize(t);this.#e.postMessage(s)}onMessage(e){if(typeof e!=="function")throw TypeError("Handler must be a function");this.#r=e}offMessage(){this.#r=null}destroy(){if(this.#n)return;if(this.#n=!0,this.#r=null,this.#e)this.#e.close(),this.#e=null}get channelName(){return this.#t}get isDestroyed(){return this.#n}#a(e){if(!this.#r)return;let t=e.data;if(t instanceof ArrayBuffer||t instanceof Uint8Array)try{let s=new TextDecoder().decode(t instanceof ArrayBuffer?new Uint8Array(t):t);t=k.deserialize(s)}catch(s){console.warn("[CrossBus] Failed to deserialize binary message",s);return}if(!R(t))return;try{this.#r(t,{origin:"broadcast"})}catch(s){console.error("[CrossBus] BroadcastChannel handler error:",s)}}#o(e){console.error("[CrossBus] BroadcastChannel message error:",e)}}class G{#e;#t;#s;#i;#r;#n=null;#a=!1;#o;static isSupported(){return typeof MessageChannel<"u"}static fromPort(e,t={}){if(!(e instanceof MessagePort))throw TypeError("Port must be a MessagePort");let s=Object.create(G.prototype);return s.#e=e,s.#t=null,s.#s=t.autoTransfer??!1,s.#r=t.contentType??"application/json",s.#i=M(s.#r),s.#a=!1,s.#o=!1,s.#n=null,s.#e.onmessage=s.#l.bind(s),s.#e.onmessageerror=s.#h.bind(s),s}constructor(e={}){if(!G.isSupported())throw c.from(a.UNSUPPORTED,{api:"MessageChannel"});let t=new MessageChannel;this.#e=t.port1,this.#t=t.port2,this.#s=e.autoTransfer??!1,this.#r=e.contentType??"application/json",this.#i=M(this.#r),this.#o=!0,this.#e.onmessage=this.#l.bind(this),this.#e.onmessageerror=this.#h.bind(this)}get remotePort(){return this.#t}markRemoteTransferred(){this.#t=null}get isInitiator(){return this.#o}send(e,t){if(this.#a)throw c.from(a.DESTROYED,{context:"MessageChannelTransport.send"});let s={[y]:E,...e},r=s;if(this.#r!=="application/json")r=this.#i.serialize(s);let i=t;if(this.#s&&!t){if(i=v(e),i.length===0)i=void 0}this.#e.postMessage(r,i)}onMessage(e){if(typeof e!=="function")throw TypeError("Handler must be a function");this.#n=e}offMessage(){this.#n=null}destroy(){if(this.#a)return;if(this.#a=!0,this.#n=null,this.#e)this.#e.close(),this.#e=null;if(this.#t)this.#t.close(),this.#t=null}get isDestroyed(){return this.#a}#l(e){if(!this.#n)return;let t=e.data;if(!R(t))return;try{this.#n(t,{origin:"channel"})}catch(s){console.error("[CrossBus] MessageChannel handler error:",s)}}#h(e){console.error("[CrossBus] MessageChannel error:",e)}}class re{#e=null;#t=null;#s;#i=null;#r=!1;static isSupported(){return typeof SharedWorker<"u"}constructor(e={}){if(!re.isSupported())throw c.from(a.UNSUPPORTED,{api:"SharedWorker"});this.#s=e.workerUrl??"/crossbus-shared-worker.js",this.#e=new SharedWorker(this.#s,e.name),this.#t=this.#e.port,this.#t.onmessage=this.#n.bind(this),this.#t.onmessageerror=this.#a.bind(this),this.#e.onerror=this.#o.bind(this),this.#t.start()}send(e,t){if(this.#r)throw c.from(a.DESTROYED,{context:"SharedWorkerTransport.send"});let s={[y]:E,...e};if(!this.#t)return;if(t&&t.length>0)this.#t.postMessage(s,t);else this.#t.postMessage(s)}onMessage(e){if(typeof e!=="function")throw TypeError("Handler must be a function");this.#i=e}offMessage(){this.#i=null}destroy(){if(this.#r)return;if(this.#r=!0,this.#i=null,this.#t)this.#t.close(),this.#t=null;this.#e=null}get workerUrl(){return this.#s}get isDestroyed(){return this.#r}#n(e){if(!this.#i)return;if(!R(e.data))return;try{this.#i(e.data,{origin:"sharedworker"})}catch(t){console.error("[CrossBus] SharedWorker handler error:",t)}}#a(e){console.error("[CrossBus] SharedWorker message error:",e)}#o(e){console.error("[CrossBus] SharedWorker error:",e.message)}}class ie{#e=null;#t=null;#s=!1;#i;#r=null;static isSupported(){return typeof navigator<"u"&&"serviceWorker"in navigator}constructor(e={}){if(!ie.isSupported())throw c.from(a.UNSUPPORTED,{api:"ServiceWorker"});this.#i=this.#n()}get ready(){return this.#i}async#n(){let e=await navigator.serviceWorker.ready;this.#e=e.active||navigator.serviceWorker.controller,this.#r=this.#a.bind(this),navigator.serviceWorker.addEventListener("message",this.#r)}send(e,t){if(this.#s)throw c.from(a.DESTROYED,{context:"ServiceWorkerTransport.send"});if(!this.#e)throw c.from(a.NOT_CONNECTED,{context:"ServiceWorkerTransport.send",reason:"No active ServiceWorker"});let s={[y]:E,...e};if(t&&t.length>0)this.#e.postMessage(s,t);else this.#e.postMessage(s)}onMessage(e){if(typeof e!=="function")throw TypeError("Handler must be a function");this.#t=e}offMessage(){this.#t=null}destroy(){if(this.#s)return;if(this.#s=!0,this.#t=null,this.#r)navigator.serviceWorker.removeEventListener("message",this.#r),this.#r=null;this.#e=null}get isDestroyed(){return this.#s}#a(e){if(!this.#t)return;if(!R(e.data))return;try{this.#t(e.data,{origin:"serviceworker"})}catch(t){console.error("[CrossBus] ServiceWorker handler error:",t)}}}class B{#e="none";#t;#s;#i=null;#r=!1;#n=!1;#a=[];#o;#l=null;#h;#d;#f;static detectBridge(){if(globalThis.CrossBus&&typeof globalThis.CrossBus.postMessage==="function")return"android";if(globalThis.AndroidBridge&&typeof globalThis.AndroidBridge.postMessage==="function")return"android";if(globalThis.webkit?.messageHandlers?.crossbus)return"ios";return"none"}static isSupported(){return B.detectBridge()!=="none"}constructor(e={}){this.#t=e.androidInterface??"CrossBus",this.#s=e.iosHandler??"crossbus",this.#o=e.queueWhileInit??!0,this.#h=e.heartbeatInterval??30000,this.#d=new Promise((t)=>{this.#f=t}),this.#c(e.initTimeout??5000)}async#c(e){let t=Date.now(),s=()=>{if(this.#e=B.detectBridge(),this.#e!=="none"){this.#g();return}if(Date.now()-t<e)setTimeout(s,50);else console.warn("[CrossBus] No native bridge detected after timeout"),this.#n=!0,this.#f?.()};s(),this.#u()}#g(){if(this.#n=!0,this.#f?.(),this.#y(),this.#h>0)this.#m()}#u(){globalThis.__crossbus_receive__=(e)=>{if(this.#r||!this.#i)return;try{let t=typeof e==="string"?JSON.parse(e):e;if(!R(t))return;this.#i(t,{bridgeType:this.#e})}catch(t){console.error("[CrossBus] Failed to parse native message:",t)}}}send(e){if(this.#r)throw c.from(a.DESTROYED,{context:"NativeBridgeTransport.send"});let t={[y]:E,...e};if(!this.#n&&this.#o){this.#a.push(t);return}this.#p(t)}#p(e){let t=JSON.stringify(e);try{if(this.#e==="android"){let s=globalThis[this.#t]||globalThis.AndroidBridge;if(s?.postMessage)s.postMessage(t)}else if(this.#e==="ios"){let s=globalThis.webkit?.messageHandlers?.[this.#s];if(s?.postMessage)s.postMessage(e)}}catch(s){console.error("[CrossBus] Failed to send to native:",s)}}#y(){while(this.#a.length>0){let e=this.#a.shift();this.#p(e)}}#m(){this.#l=setInterval(()=>{if(this.#r)return;this.#p({[y]:E,t:"hb",ts:Date.now()})},this.#h)}onMessage(e){if(typeof e!=="function")throw TypeError("Handler must be a function");this.#i=e}offMessage(){this.#i=null}destroy(){if(this.#r)return;if(this.#r=!0,this.#i=null,this.#a=[],this.#l)clearInterval(this.#l),this.#l=null;delete globalThis.__crossbus_receive__}get isDestroyed(){return this.#r}get bridgeType(){return this.#e}get isReady(){return this.#n}get ready(){return this.#d}}class Ee{#e;#t;#s=null;#i;#r;#n;#a;#o;#l=null;#h=null;#d=null;#f=null;#c="disconnected";#g=[];#u=!1;constructor(e){this.#e=e.url,this.#t=e.peerId??_(),this.#i=e.autoReconnect??!0,this.#r=e.reconnectDelayMs??1000,this.#n=e.maxReconnectDelayMs??30000,this.#a=this.#r,this.#o=e.heartbeatIntervalMs??30000}get peerId(){return this.#t}get state(){return this.#c}get isConnected(){return this.#c==="connected"&&this.#s?.readyState===WebSocket.OPEN}async connect(){if(this.#s&&this.#s.readyState===WebSocket.OPEN)return;return this.#u=!1,this.#m("connecting"),new Promise((e,t)=>{try{this.#s=new WebSocket(this.#e),this.#s.onopen=()=>{this.#m("connected"),this.#a=this.#r,this.#y(),this.#w(),e()},this.#s.onmessage=(s)=>{this.#p(s)},this.#s.onclose=(s)=>{if(this.#b(),this.#m("disconnected"),!this.#u&&this.#i)this.#S()},this.#s.onerror=(s)=>{if(this.#m("error"),this.#c==="connecting")t(Error("WebSocket connection failed"))}}catch(s){this.#m("error"),t(s)}})}disconnect(){if(this.#u=!0,this.#b(),this.#h)clearTimeout(this.#h),this.#h=null;if(this.#s)this.#s.close(1000,"Client disconnect"),this.#s=null;this.#m("disconnected")}send(e){let t={_cb:E,_m:y,id:_(),from:this.#t,timestamp:Date.now(),...e};if(this.isConnected&&this.#s)return this.#s.send(JSON.stringify(t)),!0;else return this.#g.push(t),!1}onMessage(e){this.#d=e}onStateChange(e){this.#f=e}#p(e){try{let t=JSON.parse(e.data);if(t.type==="pong")return;if(this.#d)this.#d(t)}catch(t){console.error("[WebSocketTransport] Failed to parse message:",t)}}#y(){while(this.#g.length>0&&this.isConnected&&this.#s){let e=this.#g.shift();if(e)this.#s.send(JSON.stringify(e))}}#m(e){if(this.#c!==e){if(this.#c=e,this.#f)this.#f(e)}}#w(){if(this.#o<=0)return;this.#l=setInterval(()=>{if(this.isConnected&&this.#s)this.#s.send(JSON.stringify({type:"ping",from:this.#t}))},this.#o)}#b(){if(this.#l)clearInterval(this.#l),this.#l=null}#S(){if(this.#h)return;this.#h=setTimeout(async()=>{this.#h=null;try{await this.connect()}catch{if(this.#a=Math.min(this.#a*2,this.#n),this.#i&&!this.#u)this.#S()}},this.#a)}destroy(){this.disconnect(),this.#d=null,this.#f=null,this.#g=[]}}class I{#e;#t;constructor(e,t={}){if(this.#e=e,this.#t=new Map(Object.entries(t)),!this.#t.has(e))this.#t.set(e,0)}get ownId(){return this.#e}get(e){return this.#t.get(e)??0}tick(){let e=this.get(this.#e)+1;return this.#t.set(this.#e,e),e}update(e){for(let[t,s]of e.#t){let r=this.get(t);if(s>r)this.#t.set(t,s)}}happenedBefore(e){let t=!1,s=new Set([...this.#t.keys(),...e.#t.keys()]);for(let r of s){let i=this.get(r),n=e.get(r);if(i>n)return!1;if(i<n)t=!0}return t}isConcurrentWith(e){return!this.happenedBefore(e)&&!e.happenedBefore(this)&&!this.equals(e)}equals(e){let t=new Set([...this.#t.keys(),...e.#t.keys()]);for(let s of t)if(this.get(s)!==e.get(s))return!1;return!0}canDeliver(e,t){let s=e.get(t),r=this.get(t);if(s!==r+1)return!1;for(let[i,n]of e.#t){if(i===t)continue;if(n>this.get(i))return!1}return!0}clone(){let e=Object.fromEntries(this.#t);return new I(this.#e,e)}toJSON(){return{ownId:this.#e,counters:Object.fromEntries(this.#t)}}static fromJSON(e){return new I(e.ownId,e.counters)}toString(){let e=[...this.#t.entries()].map(([t,s])=>`${t}:${s}`).join(", ");return`VectorClock(${this.#e}){${e}}`}}class ye{#e;#t;#s;#i;#r;#n;constructor(e,t={}){this.#e=e,this.#t=new I(e),this.#s=[],this.#i=t.onDeliver||(()=>{}),this.#r=t.maxBufferSize??1000,this.#n=t.onBufferOverflow||null}get ownId(){return this.#e}get bufferSize(){return this.#s.length}receive(e,t){let s=I.fromJSON(t.clock);if(this.#t.canDeliver(s,e))this.#a(e,t,s),this.#l();else this.#o(e,t,s)}#a(e,t,s){this.#t.update(s),this.#i(t)}#o(e,t,s){if(this.#s.length>=this.#r){if(this.#n)this.#n({senderId:e,message:t,bufferSize:this.#s.length});return}this.#s.push({senderId:e,message:t,clock:s})}#l(){let e=!0;while(e){e=!1;for(let t=this.#s.length-1;t>=0;t--){let{senderId:s,message:r,clock:i}=this.#s[t];if(this.#t.canDeliver(i,s))this.#s.splice(t,1),this.#a(s,r,i),e=!0}}}tick(){return this.#t.tick(),this.#t.clone()}getVectorClock(){return this.#t.clone()}clear(){this.#s=[]}}var we="0.1.0",D="__MICROUI_CROSSBUS__",T=typeof window<"u"?window:globalThis,be=["ui:toast","ui:modal","ui:theme","ui:tabs","ui:dropdown","ui:form","ui:grid","ui:stack","ui:virtual-list"],Se={type:"ui-framework",version:we,description:"AI-Optimized UI Framework - Web Components Edition"};if(!T[D])T[D]=new z({peerId:"microui",isHub:!0,requestTimeout:5000,capabilities:be,meta:Se}),T[D].setMaxListeners(100);var m=T[D],X="__MICROUI_COMPONENT_REGISTRY__";if(!T[X])T[X]=new Map;var Te=T[X],b={on(e,t){let s=m.on(e,(r)=>{t(r.data??r)});return()=>s.unsubscribe()},once(e,t){let s=this.on(e,(r)=>{s(),t(r)})},off(e,t){m.off(e,t)},emit(e,t){return m.emitSync(e,t)},async emitAsync(e,t){return m.emit(e,t)},signal(e,t){m.signal(e,t)},async request(e,t,s){return m.request(e,t,s)},async broadcastRequest(e,t){return m.broadcastRequest(e,t)},handle(e,t){return m.handle(e,t)},unhandle(e){m.unhandle(e)},destroy(){m.destroy()},setMaxListeners(e){m.setMaxListeners(e)},get peerId(){return m.peerId},get peers(){return m.peers},get peerCount(){return m.peerCount},hasListeners(e){return m.hasListeners(e)},get raw(){return m}},w={TOAST_SHOW:"ui:toast:show",TOAST_DISMISS:"ui:toast:dismiss",MODAL_OPEN:"ui:modal:open",MODAL_CLOSE:"ui:modal:close",THEME_CHANGE:"ui:theme:change",TAB_CHANGE:"ui:tab:change",DROPDOWN_SELECT:"ui:dropdown:select",FORM_SUBMIT:"ui:form:submit",FORM_VALIDATE:"ui:form:validate"};var L=(e,t)=>{Te.set(e,{...t,registeredAt:Date.now()})};class S extends HTMLElement{static observedAttributes=[];static baseClass="";static cssFile=null;static _loadedCSS=new Set;static useContainment=!0;_rendered=!1;_abortController=null;_timers=new Set;_intervals=new Set;constructor(){super();this._initAgentLogger()}_initAgentLogger(){if(!window.__MICROUI_ERRORS__)window.__MICROUI_ERRORS__=[];if(!window.microUIAgent)window.microUIAgent={reset:()=>{window.__MICROUI_ERRORS__=[],console.log("[microUIAgent] Errors cleared")},getErrors:()=>window.__MICROUI_ERRORS__,hasError:(e,t)=>{return window.__MICROUI_ERRORS__.some((s)=>s.component===e.toLowerCase()&&s.code===t)}}}logError(e,t){let s={component:this.tagName.toLowerCase(),code:e,message:t,element:this,timestamp:Date.now()};window.__MICROUI_ERRORS__.push(s),console.warn(`[microUI] ${e}: ${t}`,this)}connectedCallback(){if(!this._abortController)this._abortController=new AbortController;if(this.constructor.baseClass)this.classList.add(this.constructor.baseClass);if(this.constructor.useContainment&&!this.style.contain)this.style.contain="layout style";if(this.#e(),!this._rendered)this.render(),this._rendered=!0;this._loadComponentCSS(),this._inferSemanticAttributes()}#e(){this.listen(this,"click",(e)=>{let t=e.target.closest("[data-action]");if(!t||!this.contains(t))return;let s=t.dataset.action;if(this.handleAction)this.handleAction(s,t,e)})}_loadComponentCSS(){let e=this.constructor.cssFile;if(!e)return;if(S._loadedCSS.has(e))return;S._loadedCSS.add(e);let t=document.createElement("link");t.id=`mu-css-${e}`,t.rel="stylesheet";let s="/styles/",r=document.querySelector('link[href*="/styles/"]');if(r){let i=r.href.match(/(.*\/(?:src\/|dist\/)?styles\/)/);if(i)s=i[1]}else{let i=document.querySelector('link[href*="/dist/"]');if(i){let n=i.href.match(/(.*\/dist\/)/);if(n)s=n[1]+"styles/"}else{let n=document.querySelector('script[src*="/src/"]');if(n){let o=n.src.match(/(.*\/src\/)/);if(o)s=o[1]+"styles/"}}}t.href=`${s}components/${e}.css`,document.head.appendChild(t)}_inferSemanticAttributes(){let e=this.tagName.toLowerCase();if(this.hasAttribute("data-mu-action"))return;let t="",s="";switch(e){case"mu-button":t=this._inferButtonAction(),s=this._inferButtonRole();break;case"mu-input":case"mu-textarea":t="input",s="text-field";break;case"mu-checkbox":case"mu-switch":t="toggle",s="control";break;case"mu-dropdown":t="select",s="selector";break;case"mu-modal":t="dialog",s="overlay";break;case"mu-tabs":t="navigate",s="navigation";break;case"mu-card":s="container";break}if(t)this.setAttribute("data-mu-action",t);if(s)this.setAttribute("data-mu-role",s)}_inferButtonAction(){let e=this.textContent?.toLowerCase().trim()||"";if(/^(save|submit|confirm|send|create|add|apply|ok|yes)$/.test(e))return"submit";if(/^(cancel|close|dismiss|no|nevermind)$/.test(e))return"cancel";if(/^(delete|remove|clear|trash)$/.test(e))return"delete";if(/^(back|next|previous|forward|continue)$/.test(e))return"navigate";return"click"}_inferButtonRole(){let e=this.getAttribute("variant");if(e==="filled"||e==="elevated")return"primary-action";if(e==="tonal"||e==="outlined")return"secondary-action";if(e==="text")return"tertiary-action";if(e==="danger")return"destructive-action";return"action"}disconnectedCallback(){if(this._abortController)this._abortController.abort(),this._abortController=null;for(let e of this._timers)clearTimeout(e);this._timers.clear();for(let e of this._intervals)clearInterval(e);this._intervals.clear(),this.cleanup()}cleanup(){}attributeChangedCallback(e,t,s){if(t!==s&&this._rendered)this.update(e,s,t)}render(){}update(e,t,s){}setupEvents(){}attr(e,t=""){return this.getAttribute(e)??t}has(e){return this.hasAttribute(e)}emit(e,t={}){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))}listen(e,t,s,r={}){if(!this._abortController)this._abortController=new AbortController;let i={...r,signal:this._abortController.signal};e.addEventListener(t,s,i)}setTimeout(e,t){let s;return s=setTimeout(()=>{this._timers.delete(s),e()},t),this._timers.add(s),s}setInterval(e,t){let s=setInterval(e,t);return this._intervals.add(s),s}setupActivation(e){this.updateTabindex(),this.addEventListener("keydown",(t)=>{if((t.key==="Enter"||t.key===" ")&&!this.has("disabled"))t.preventDefault(),e()})}updateTabindex(){this.setAttribute("tabindex",this.has("disabled")?"-1":"0")}setDisplay(e){this.style.display=e}get isDisabled(){return this.has("disabled")}}function C(e,t,s={}){if(customElements.get(e))return;let r=s.priority||"user-blocking";if(typeof scheduler<"u"&&scheduler.postTask)scheduler.postTask(()=>{if(!customElements.get(e))customElements.define(e,t)},{priority:r});else customElements.define(e,t)}var _e="scheduler"in globalThis;class ne extends S{static baseClass="mu-toast";static cssFile="snackbar";static observedAttributes=["severity","duration","position"];#e=null;#t=null;connectedCallback(){if(!this.#t&&!this.querySelector(".mu-toast__content"))this.#t=this.innerHTML;super.connectedCallback(),this.listen(this,"click",(t)=>{if(t.target.classList.contains("mu-toast__close"))this.dismiss()});let e=parseInt(this.attr("duration","3000"));if(e>0)this.#e=this.setTimeout(()=>this.dismiss(),e)}disconnectedCallback(){super.disconnectedCallback()}render(){if(this.querySelector(".mu-toast__content")){this.#s();return}let e=this.#t||"";this.innerHTML=`
14
+ <span class="mu-toast__content">${e}</span>
15
+ <button class="mu-toast__close" aria-label="Dismiss">✕</button>
16
+ `,this.#s()}update(e,t,s){this.#s()}#s(){let e=this.attr("severity","info"),t=this.attr("position","bottom-center");this.className=`mu-toast mu-toast--${e} mu-toast--${t}`}dismiss(){this.emit("mu-dismiss"),this.classList.add("is-exiting");let e=!1,t=()=>{if(!e)e=!0,this.remove()};this.addEventListener("animationend",t,{once:!0}),this.setTimeout(t,200)}}C("mu-toast",ne);class ae extends S{static baseClass="mu-toast-container";connectedCallback(){super.connectedCallback(),this.setAttribute("role","status"),this.setAttribute("aria-live","polite")}}C("mu-toast-container",ae);var F={show(e,t={}){let s=t.position||"bottom-center",r=document.querySelector(`mu-toast-container[position="${s}"]`);if(!r)r=document.createElement("mu-toast-container"),r.setAttribute("position",s),document.body.appendChild(r);let i=document.createElement("mu-toast");if(i.textContent=e,t.severity)i.setAttribute("severity",t.severity);if(t.duration)i.setAttribute("duration",t.duration.toString());return r.appendChild(i),i}};if(typeof window<"u"&&b&&!b.hasListeners(w.TOAST_SHOW))b.on(w.TOAST_SHOW,(e)=>{F.show(e.message,e)});L("mu-toast",{signals:[w.TOAST_SHOW,w.TOAST_DISMISS],options:{severities:["info","success","warning","error"],positions:["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"],defaultDuration:3000},description:"MD3 Snackbar/Toast Notification component"});class oe{#e=[];#t=!1;schedule(e){if(this.#e.push(e),!this.#t)this.#t=!0,requestAnimationFrame(()=>this.#s())}#s(){let e=this.#e.slice();this.#e=[],this.#t=!1;for(let t of e)try{t()}catch(s){console.error("[RenderScheduler] Error:",s)}}}var Re=new oe;class le{#e=[];#t=[];#s=!1;read(e){this.#e.push(e),this.#i()}write(e){this.#t.push(e),this.#i()}#i(){if(!this.#s)this.#s=!0,requestAnimationFrame(()=>this.#r())}#r(){let e;while(e=this.#e.shift())try{e()}catch(t){console.error(t)}while(e=this.#t.shift())try{e()}catch(t){console.error(t)}if(this.#s=!1,this.#e.length||this.#t.length)this.#i()}}var Ae=new le;var K={set(e){if(e==="auto"){let t=window.matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.setAttribute("data-theme",t?"dark":"light")}else document.documentElement.setAttribute("data-theme",e);localStorage.setItem("mu-theme",e),b.emit(w.THEME_CHANGE,{theme:e})},get(){return document.documentElement.getAttribute("data-theme")||"light"},toggle(){let e=this.get();this.set(e==="dark"?"light":"dark")},init(){let e=localStorage.getItem("mu-theme");if(e)this.set(e);else this.set("auto");window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",(t)=>{if(localStorage.getItem("mu-theme")==="auto")document.documentElement.setAttribute("data-theme",t.matches?"dark":"light")})}};if(typeof window<"u")K.init();function Ie(e={}){let t={...e},s=new Set;return{get(){return t},set(r){t={...t,...r},this.notify()},update(r){let i=r(t);this.set(i)},subscribe(r){return s.add(r),r(t),()=>s.delete(r)},notify(){for(let r of s)r(t)},reset(){t={...e},this.notify()}}}var tt=Ie({});var st="startViewTransition"in document;class he extends S{static baseClass="mu-theme-toggle";connectedCallback(){super.connectedCallback(),this.listen(this,"click",()=>K.toggle()),b.on(w.THEME_CHANGE,()=>this.#e())}render(){this.innerHTML=`
17
+ <button class="mu-theme-toggle__button" aria-label="Toggle theme">
18
+ <span class="mu-theme-toggle__icon"></span>
19
+ </button>
20
+ `,this.#e()}#e(){let e=K.get()==="dark",t=this.querySelector(".mu-theme-toggle__icon");if(t)t.textContent=e?"☀️":"\uD83C\uDF19"}}C("mu-theme-toggle",he);L("mu-theme-toggle",{signals:[w.THEME_CHANGE],options:{themes:["light","dark"],emits:["click"]},description:"Theme toggle button that switches between light/dark modes"});if(!b.hasListeners(w.TOAST_SHOW))b.on(w.TOAST_SHOW,(e)=>{F.show(e.message,e)});
@@ -0,0 +1,13 @@
1
+ import"./chunk-qxxa8trk.js";import"./chunk-1khyr3v1.js";import"./chunk-z960rexd.js";import"./chunk-sxddjs2d.js";import"./chunk-swyhghrm.js";import"./chunk-e86zbeta.js";import{j as a,k as l}from"./chunk-5qah04bh.js";class o extends a{static baseClass="mu-skeleton";static observedAttributes=["variant","width","height","size","lines"];render(){if(this.querySelector(".mu-skeleton__line")||this.style.animation)return;let t=this.attr("variant","rect"),s=this.attr("width","100%"),r=this.attr("height","20px"),n=this.attr("size","40px"),i=parseInt(this.attr("lines","1"));if(this.style.display="block",t==="text"&&i>1)this.innerHTML=Array(i).fill(0).map((e,h)=>`<div class="mu-skeleton__line" style="
2
+ height: 16px;
3
+ margin-bottom: 8px;
4
+ width: ${h===i-1?"70%":"100%"};
5
+ background: var(--md-sys-color-surface-container-highest);
6
+ border-radius: 4px;
7
+ animation: mu-skeleton-pulse 1.5s ease-in-out infinite;
8
+ "></div>`).join("");else this.style.width=t==="circle"?n:s,this.style.height=t==="circle"?n:r,this.style.borderRadius=t==="circle"?"50%":"4px",this.style.background="var(--md-sys-color-surface-container-highest)",this.style.animation="mu-skeleton-pulse 1.5s ease-in-out infinite";if(!document.getElementById("mu-skeleton-styles")){let e=document.createElement("style");e.id="mu-skeleton-styles",e.textContent=`
9
+ @keyframes mu-skeleton-pulse {
10
+ 0%, 100% { opacity: 1; }
11
+ 50% { opacity: 0.5; }
12
+ }
13
+ `,document.head.appendChild(e)}}update(t,s,r){this.render()}}l("mu-skeleton",o);
@@ -0,0 +1 @@
1
+ import"./chunk-rw15y9zh.js";import"./chunk-1khyr3v1.js";import"./chunk-nv3bddmj.js";import"./chunk-z960rexd.js";import"./chunk-sxddjs2d.js";import"./chunk-swyhghrm.js";import"./chunk-e86zbeta.js";import{j as i,k as t}from"./chunk-5qah04bh.js";class e extends i{static baseClass="mu-spinner";static observedAttributes=["size","color"];render(){if(this.querySelector(".mu-spinner__circle"))return;this.innerHTML='<span class="mu-spinner__circle"></span>',this.#r()}update(r,s,n){this.#r()}#r(){let r=this.attr("size","md"),s=this.attr("color","primary");this.className=`mu-spinner mu-spinner--${r} mu-spinner--${s}`}}t("mu-spinner",e);
@@ -0,0 +1,36 @@
1
+ class P extends HTMLElement{static observedAttributes=[];static baseClass="";static cssFile=null;static _loadedCSS=new Set;static useContainment=!0;_rendered=!1;_abortController=null;_timers=new Set;_intervals=new Set;constructor(){super();this._initAgentLogger()}_initAgentLogger(){if(!window.__MICROUI_ERRORS__)window.__MICROUI_ERRORS__=[];if(!window.microUIAgent)window.microUIAgent={reset:()=>{window.__MICROUI_ERRORS__=[],console.log("[microUIAgent] Errors cleared")},getErrors:()=>window.__MICROUI_ERRORS__,hasError:(Z,$)=>{return window.__MICROUI_ERRORS__.some((J)=>J.component===Z.toLowerCase()&&J.code===$)}}}logError(Z,$){let J={component:this.tagName.toLowerCase(),code:Z,message:$,element:this,timestamp:Date.now()};window.__MICROUI_ERRORS__.push(J),console.warn(`[microUI] ${Z}: ${$}`,this)}connectedCallback(){if(!this._abortController)this._abortController=new AbortController;if(this.constructor.baseClass)this.classList.add(this.constructor.baseClass);if(this.constructor.useContainment&&!this.style.contain)this.style.contain="layout style";if(this.#Z(),!this._rendered)this.render(),this._rendered=!0;this._loadComponentCSS(),this._inferSemanticAttributes()}#Z(){this.listen(this,"click",(Z)=>{let $=Z.target.closest("[data-action]");if(!$||!this.contains($))return;let J=$.dataset.action;if(this.handleAction)this.handleAction(J,$,Z)})}_loadComponentCSS(){let Z=this.constructor.cssFile;if(!Z)return;if(P._loadedCSS.has(Z))return;P._loadedCSS.add(Z);let $=document.createElement("link");$.id=`mu-css-${Z}`,$.rel="stylesheet";let J="/styles/",X=document.querySelector('link[href*="/styles/"]');if(X){let G=X.href.match(/(.*\/(?:src\/|dist\/)?styles\/)/);if(G)J=G[1]}else{let G=document.querySelector('link[href*="/dist/"]');if(G){let Q=G.href.match(/(.*\/dist\/)/);if(Q)J=Q[1]+"styles/"}else{let Q=document.querySelector('script[src*="/src/"]');if(Q){let K=Q.src.match(/(.*\/src\/)/);if(K)J=K[1]+"styles/"}}}$.href=`${J}components/${Z}.css`,document.head.appendChild($)}_inferSemanticAttributes(){let Z=this.tagName.toLowerCase();if(this.hasAttribute("data-mu-action"))return;let $="",J="";switch(Z){case"mu-button":$=this._inferButtonAction(),J=this._inferButtonRole();break;case"mu-input":case"mu-textarea":$="input",J="text-field";break;case"mu-checkbox":case"mu-switch":$="toggle",J="control";break;case"mu-dropdown":$="select",J="selector";break;case"mu-modal":$="dialog",J="overlay";break;case"mu-tabs":$="navigate",J="navigation";break;case"mu-card":J="container";break}if($)this.setAttribute("data-mu-action",$);if(J)this.setAttribute("data-mu-role",J)}_inferButtonAction(){let Z=this.textContent?.toLowerCase().trim()||"";if(/^(save|submit|confirm|send|create|add|apply|ok|yes)$/.test(Z))return"submit";if(/^(cancel|close|dismiss|no|nevermind)$/.test(Z))return"cancel";if(/^(delete|remove|clear|trash)$/.test(Z))return"delete";if(/^(back|next|previous|forward|continue)$/.test(Z))return"navigate";return"click"}_inferButtonRole(){let Z=this.getAttribute("variant");if(Z==="filled"||Z==="elevated")return"primary-action";if(Z==="tonal"||Z==="outlined")return"secondary-action";if(Z==="text")return"tertiary-action";if(Z==="danger")return"destructive-action";return"action"}disconnectedCallback(){if(this._abortController)this._abortController.abort(),this._abortController=null;for(let Z of this._timers)clearTimeout(Z);this._timers.clear();for(let Z of this._intervals)clearInterval(Z);this._intervals.clear(),this.cleanup()}cleanup(){}attributeChangedCallback(Z,$,J){if($!==J&&this._rendered)this.update(Z,J,$)}render(){}update(Z,$,J){}setupEvents(){}attr(Z,$=""){return this.getAttribute(Z)??$}has(Z){return this.hasAttribute(Z)}emit(Z,$={}){this.dispatchEvent(new CustomEvent(Z,{bubbles:!0,composed:!0,detail:$}))}listen(Z,$,J,X={}){if(!this._abortController)this._abortController=new AbortController;let G={...X,signal:this._abortController.signal};Z.addEventListener($,J,G)}setTimeout(Z,$){let J;return J=setTimeout(()=>{this._timers.delete(J),Z()},$),this._timers.add(J),J}setInterval(Z,$){let J=setInterval(Z,$);return this._intervals.add(J),J}setupActivation(Z){this.updateTabindex(),this.addEventListener("keydown",($)=>{if(($.key==="Enter"||$.key===" ")&&!this.has("disabled"))$.preventDefault(),Z()})}updateTabindex(){this.setAttribute("tabindex",this.has("disabled")?"-1":"0")}setDisplay(Z){this.style.display=Z}get isDisabled(){return this.has("disabled")}}function O(Z,$,J={}){if(customElements.get(Z))return;let X=J.priority||"user-blocking";if(typeof scheduler<"u"&&scheduler.postTask)scheduler.postTask(()=>{if(!customElements.get(Z))customElements.define(Z,$)},{priority:X});else customElements.define(Z,$)}var _=Symbol("listeners"),r=Symbol("subCounter"),k=Symbol("maxListeners"),q=Symbol("fastCache");var g=Object.freeze({peerId:"self",origin:typeof globalThis.location<"u"?globalThis.location.origin:"unknown",type:"local"});class C{constructor(){this[_]=new Map,this[r]=0,this[k]=10,this[q]=Object.create(null)}setMaxListeners(Z){return this[k]=Z,this}getMaxListeners(){return this[k]}on(Z,$,J={}){if(typeof Z!=="string")throw TypeError("Signal name must be a string");if(typeof $!=="function")throw TypeError("Handler must be a function");let X=`sub_${++this[r]}`,G={id:X,handler:$,priority:J.priority??0,mode:J.mode??"async",once:J.once??!1,signal:J.signal??null};if(!this[_].has(Z))this[_].set(Z,[]);let Q=this[_].get(Z);if(Q.length===0||G.priority<=Q[Q.length-1].priority)Q.push(G);else{let U=0,V=Q.length;while(U<V){let L=U+V>>>1;if(Q[L].priority>=G.priority)U=L+1;else V=L}Q.splice(U,0,G)}this[q][Z]=Q.map((U)=>U.handler);let K=this[k];if(K>0&&Q.length>K)console.warn(`[CrossBus] Possible memory leak: ${Q.length} listeners for "${Z}". Use setMaxListeners(n) to increase limit.`);let Y=!0,D={id:X,signalName:Z,get active(){return Y},unsubscribe:()=>{if(Y)this.#$(Z,X),Y=!1}};if(G.signal)if(G.signal.aborted)this.#$(Z,X),Y=!1;else G.signal.addEventListener("abort",()=>{D.unsubscribe()},{once:!0});return D}once(Z,$,J={}){return this.on(Z,$,{...J,once:!0})}onFast(Z,$){return(this[q][Z]||=[]).push($),()=>{this[q][Z]=this[q][Z]?.filter((J)=>J!==$)}}offFast(Z,$){let J=this[q][Z];if(J){let G=J.indexOf($);if(G!==-1)J.splice(G,1)}let X=this[_].get(Z);if(X){let G=X.findIndex((Q)=>Q.handler===$);if(G!==-1)X.splice(G,1)}}off(Z,$){if(typeof Z!=="string")throw TypeError("Signal name must be a string");let J=this[_].get(Z);if(!J||J.length===0)return{success:!1,removedCount:0,remainingCount:0};let X=0;if($===void 0)X=J.length,this[_].delete(Z),delete this[q][Z];else{let Q=J.length,K=J.filter((Y)=>Y.handler!==$);if(X=Q-K.length,K.length===0)this[_].delete(Z),delete this[q][Z];else this[_].set(Z,K),this[q][Z]=K.map((Y)=>Y.handler)}let G=this[_].get(Z)?.length??0;return{success:X>0,removedCount:X,remainingCount:G}}emitSync(Z,$){let J=this[q][Z];if(!J)return 0;let X=J.length;if(X===1)return J[0]($),1;if(X===2)return J[0]($),J[1]($),2;if(X===3)return J[0]($),J[1]($),J[2]($),3;if(X===4)return J[0]($),J[1]($),J[2]($),J[3]($),4;for(let G=0;G<X;G++)J[G]($);return X}async emit(Z,$,J){if(typeof Z!=="string")throw TypeError("Signal name must be a string");let X=this[_].get(Z),G=this[_].has("*");if(X?.length===1&&!G&&!J){let D=X[0],U={name:Z,data:$,messageId:crypto.randomUUID(),timestamp:Date.now(),source:g};try{if(D.mode==="sync")await D.handler(U);else Promise.resolve().then(()=>D.handler(U))}catch(V){console.error(`[CrossBus] Handler error for "${Z}":`,V)}if(D.once)this.#$(Z,D.id);return 1}let Q={name:Z,data:$,messageId:crypto.randomUUID(),timestamp:Date.now(),source:J?{...g,...J}:g},K=this.#Z(Z),Y=[];for(let{signalName:D,entry:U}of K){try{if(U.mode==="sync")await U.handler(Q);else Promise.resolve().then(()=>U.handler(Q))}catch(V){console.error(`[CrossBus] Handler error for "${Z}":`,V)}if(U.once)Y.push({signalName:D,id:U.id})}for(let{signalName:D,id:U}of Y)this.#$(D,U);return K.length}hasListeners(Z){let $=this[_].get(Z);return $!==void 0&&$.length>0}listenerCount(Z){return this[_].get(Z)?.length??0}getSignalNames(){return Array.from(this[_].keys())}clear(){this[_].clear();for(let Z in this[q])delete this[q][Z]}#Z(Z){let $=this[_].get(Z),J=this[_].get("*"),X=null,G=Z.indexOf(":");if(G>0){let Y=Z.slice(0,G+1)+"*";X=this[_].get(Y)}if($&&!J&&!X)return $.map((Y)=>({signalName:Z,entry:Y}));let Q=[$&&{signalName:Z,entries:$},J&&{signalName:"*",entries:J},X&&{signalName:Z.slice(0,G+1)+"*",entries:X}].filter(Boolean);if(Q.length===0)return[];if(Q.length===1)return Q[0].entries.map((Y)=>({signalName:Q[0].signalName,entry:Y}));let K=[];for(let{signalName:Y,entries:D}of Q)for(let U of D)K.push({signalName:Y,entry:U});return K.sort((Y,D)=>D.entry.priority-Y.entry.priority),K}#$(Z,$){let J=this[_].get(Z);if(!J)return;let X=J.filter((G)=>G.id!==$);if(X.length===0)this[_].delete(Z),delete this[q][Z];else this[_].set(Z,X),this[q][Z]=X.map((G)=>G.handler)}}var H="_cb",w=1,j=Object.freeze({SIGNAL:"sig",REQUEST:"req",RESPONSE:"res",ACK:"ack",HANDSHAKE:"hsk",HANDSHAKE_INIT:"hsk_init",HANDSHAKE_ACK:"hsk_ack",HANDSHAKE_COMPLETE:"hsk_done",PING:"png",PONG:"pog",BYE:"bye",BROADCAST:"bc"}),u=Object.freeze({INIT:"init",INIT_SENT:"init_sent",ACK:"ack",ACK_SENT:"ack_sent",DONE:"done"}),c=Object.freeze({CONNECTING:"connecting",CONNECTED:"connected",DISCONNECTED:"disconnected",RECONNECTING:"reconnecting",FAILED:"failed"}),$1=Object.freeze({IFRAME:"iframe",WORKER:"worker",SERVICE_WORKER:"sw",WINDOW:"window",PORT:"port"}),J1=Object.freeze({LOCAL:"local",SENT:"sent",ACKED:"acked",QUEUED:"queued",TIMEOUT:"timeout",FAILED:"failed"});function R(Z){return Z!==null&&typeof Z==="object"&&Z[H]===w&&typeof Z.id==="string"&&(typeof Z.type==="string"||typeof Z.t==="string")}function BZ(Z){if(Z instanceof ArrayBuffer)return!0;if(Z instanceof MessagePort)return!0;if(typeof ImageBitmap<"u"&&Z instanceof ImageBitmap)return!0;if(typeof OffscreenCanvas<"u"&&Z instanceof OffscreenCanvas)return!0;if(typeof ReadableStream<"u"&&Z instanceof ReadableStream)return!0;if(typeof WritableStream<"u"&&Z instanceof WritableStream)return!0;if(typeof TransformStream<"u"&&Z instanceof TransformStream)return!0;return!1}function b(Z,$=new Set){if(Z===null||Z===void 0)return Array.from($);if(BZ(Z))return $.add(Z),Array.from($);if(Array.isArray(Z))for(let J of Z)b(J,$);else if(typeof Z==="object")for(let J of Object.keys(Z))b(Z[J],$);return Array.from($)}function l(Z,$,J={},X=null){return Object.freeze({[H]:w,version:w,id:X||crypto.randomUUID(),type:Z,timestamp:Date.now(),payload:Object.freeze({...$}),meta:Object.freeze({...J})})}function PZ(Z,$,J,X=null){return l(j.SIGNAL,{name:Z,data:$,source:J,dest:X})}function MZ(Z,$,J,X,G=null){return l(j.REQUEST,{name:Z,data:$,source:J,dest:X},{},G)}function T(Z,$,J,X=!0,G=null){return l(j.RESPONSE,{requestId:Z,data:$,source:J,success:X,error:G})}var W=Object.freeze({HANDSHAKE_TIMEOUT:"ERR_HANDSHAKE_TIMEOUT",HANDSHAKE_REJECTED:"ERR_HANDSHAKE_REJECTED",ORIGIN_FORBIDDEN:"ERR_ORIGIN_FORBIDDEN",PEER_EXISTS:"ERR_PEER_EXISTS",PEER_NOT_FOUND:"ERR_PEER_NOT_FOUND",PEER_DISCONNECTED:"ERR_PEER_DISCONNECTED",RECONNECT_FAILED:"ERR_RECONNECT_FAILED",UNSUPPORTED:"ERR_UNSUPPORTED",NOT_CONNECTED:"ERR_NOT_CONNECTED",ACK_TIMEOUT:"ERR_ACK_TIMEOUT",RESPONSE_TIMEOUT:"ERR_RESPONSE_TIMEOUT",QUEUE_FULL:"ERR_QUEUE_FULL",INVALID_MESSAGE:"ERR_INVALID_MESSAGE",VERSION_MISMATCH:"ERR_VERSION_MISMATCH",CLONE_ERROR:"ERR_CLONE_ERROR",TRANSFER_ERROR:"ERR_TRANSFER_ERROR",MESSAGE_TOO_LARGE:"ERR_MESSAGE_TOO_LARGE",UNREACHABLE:"ERR_UNREACHABLE",TTL_EXCEEDED:"ERR_TTL_EXCEEDED",NO_ROUTE:"ERR_NO_ROUTE",NO_HANDLER:"ERR_NO_HANDLER",HANDLER_ERROR:"ERR_HANDLER_ERROR",HANDLER_TIMEOUT:"ERR_HANDLER_TIMEOUT",HANDLER_EXISTS:"ERR_HANDLER_EXISTS",SEND_FAILED:"ERR_SEND_FAILED",CHANNEL_FAILED:"ERR_CHANNEL_FAILED",CHANNEL_CLOSED:"ERR_CHANNEL_CLOSED",MAX_PEERS:"ERR_MAX_PEERS",MAX_PENDING:"ERR_MAX_PENDING",DESTROYED:"ERR_DESTROYED",CIRCUIT_OPEN:"ERR_CIRCUIT_OPEN",PAYLOAD_TOO_LARGE:"ERR_PAYLOAD_TOO_LARGE",RATE_LIMITED:"ERR_RATE_LIMITED",UNAUTHORIZED:"ERR_UNAUTHORIZED",INVALID_PAYLOAD:"ERR_INVALID_PAYLOAD"}),NZ=Object.freeze({[W.HANDSHAKE_TIMEOUT]:{message:"Handshake timed out",retryable:!0,suggestion:"Increase timeout or check if target is loaded. Use iframe.onload before connecting."},[W.HANDSHAKE_REJECTED]:{message:"Handshake rejected by peer",retryable:!1,suggestion:"Check targetOrigin matches the peer's origin. Verify peer allows your origin."},[W.ORIGIN_FORBIDDEN]:{message:"Origin not in allowed origins list",retryable:!1,suggestion:'Add your origin to allowedOrigins option or use targetOrigin: "*" for development.'},[W.PEER_EXISTS]:{message:"Peer with this ID already exists",retryable:!1,suggestion:"Use unique peerId for each context. Try: peerId: `agent-${Date.now()}`"},[W.PEER_NOT_FOUND]:{message:"Peer not found",retryable:!1,suggestion:"Check if peer is connected using bus.peers. Wait for peer connection before request."},[W.PEER_DISCONNECTED]:{message:"Peer is disconnected",retryable:!0,suggestion:'Wait for peer to reconnect. Listen for "peer:join" event before retry.'},[W.RECONNECT_FAILED]:{message:"Max reconnection attempts reached",retryable:!1,suggestion:"Check network connectivity. Consider increasing maxRetries option."},[W.UNSUPPORTED]:{message:"Operation not supported by this environment",retryable:!1,suggestion:"This feature requires a browser environment. Check for feature availability first."},[W.NOT_CONNECTED]:{message:"Transport is not connected",retryable:!0,suggestion:"Call addTransport() and wait for connection before sending messages."},[W.ACK_TIMEOUT]:{message:"ACK not received within timeout",retryable:!0,suggestion:"Increase ackTimeout option or check peer availability."},[W.RESPONSE_TIMEOUT]:{message:"Response not received within timeout",retryable:!0,suggestion:"Increase timeout in request options: { timeout: 10000 }. Check if handler exists on peer."},[W.QUEUE_FULL]:{message:"Message queue is full",retryable:!1,suggestion:"Increase maxQueueSize or wait for queue to drain. Consider using batching plugin."},[W.INVALID_MESSAGE]:{message:"Invalid message format",retryable:!1,suggestion:"Ensure message data is JSON-serializable. Avoid DOM nodes and functions."},[W.VERSION_MISMATCH]:{message:"Protocol version mismatch",retryable:!1,suggestion:"Update CrossBus to same version on both sides."},[W.CLONE_ERROR]:{message:"Data cannot be cloned (contains functions or DOM nodes)",retryable:!1,suggestion:"Remove functions, DOM nodes, and circular references from message data."},[W.TRANSFER_ERROR]:{message:"Failed to transfer object ownership",retryable:!1,suggestion:"Ensure ArrayBuffers are not detached. Each buffer can only be transferred once."},[W.MESSAGE_TOO_LARGE]:{message:"Message exceeds maximum size",retryable:!1,suggestion:"Use streaming for large payloads or increase maxMessageSize option."},[W.UNREACHABLE]:{message:"Destination peer is unreachable",retryable:!0,suggestion:"Check if peer is still connected. Use bus.peers to list available peers."},[W.TTL_EXCEEDED]:{message:"Message TTL exceeded (possible routing loop)",retryable:!1,suggestion:"Check for circular transport configurations. Increase maxTTL if needed."},[W.NO_ROUTE]:{message:"No route to destination",retryable:!1,suggestion:"Add transport connecting to target peer. Set isHub: true on orchestrator."},[W.NO_HANDLER]:{message:"No handler registered for this request",retryable:!1,suggestion:'Register handler on target: bus.handle("handlerName", fn). Check handler name spelling.'},[W.HANDLER_ERROR]:{message:"Handler threw an exception",retryable:!1,suggestion:"Check target peer logs for error. Wrap handler in try/catch."},[W.HANDLER_TIMEOUT]:{message:"Handler did not respond within timeout",retryable:!0,suggestion:"Handler is slow. Increase timeout or optimize handler performance."},[W.HANDLER_EXISTS]:{message:"Handler already registered with this name",retryable:!1,suggestion:"Use different handler name or call bus.removeHandler() first."},[W.SEND_FAILED]:{message:"Failed to send message to peer",retryable:!0,suggestion:"Check transport status. Target window may be closed or blocked."},[W.CHANNEL_FAILED]:{message:"Failed to create direct channel",retryable:!0,suggestion:"Check browser support for MessageChannel. Retry after short delay."},[W.CHANNEL_CLOSED]:{message:"Channel was closed unexpectedly",retryable:!1,suggestion:"Target context was destroyed. Check if iframe/worker still exists."},[W.MAX_PEERS]:{message:"Maximum number of peers reached",retryable:!1,suggestion:"Increase maxPeers option or disconnect unused peers first."},[W.MAX_PENDING]:{message:"Maximum pending requests reached",retryable:!1,suggestion:"Wait for pending requests to complete. Increase maxPendingRequests option."},[W.DESTROYED]:{message:"CrossBus instance has been destroyed",retryable:!1,suggestion:"Create new CrossBus instance. Do not use bus after calling destroy()."},[W.CIRCUIT_OPEN]:{message:"Circuit breaker is open",retryable:!1,suggestion:"Too many failures. Wait for circuit to reset or call circuit.reset()."},[W.PAYLOAD_TOO_LARGE]:{message:"Payload exceeds maximum allowed size",retryable:!1,suggestion:"Reduce payload size or increase maxPayloadSize option. Consider using streaming for large data."},[W.RATE_LIMITED]:{message:"Request rate limit exceeded",retryable:!0,suggestion:"Wait before retrying. Consider adding delay or using exponential backoff."},[W.UNAUTHORIZED]:{message:"Peer is not authorized to call this handler",retryable:!1,suggestion:"Add peer to handler allowedPeers list or remove peer restrictions."},[W.INVALID_PAYLOAD]:{message:"Payload validation failed",retryable:!1,suggestion:"Check payload structure against handler requirements."}});class z extends Error{code;details;retryable;cause;timestamp;constructor(Z,$,J={}){let X=NZ[Z]??{message:"Unknown error",retryable:!1};super($??X.message);if(this.name="CrossBusError",this.code=Z,this.details=J.details??{},this.retryable=J.retryable??X.retryable,this.cause=J.cause,this.timestamp=Date.now(),Error.captureStackTrace)Error.captureStackTrace(this,z)}static from(Z,$={}){return new z(Z,void 0,{details:$})}static wrap(Z,$,J={}){return new z(Z,$.message,{cause:$,details:J})}toJSON(){return{name:this.name,code:this.code,message:this.message,details:this.details,retryable:this.retryable,timestamp:this.timestamp}}toString(){return`${this.name} [${this.code}]: ${this.message}`}}function M(){if(typeof crypto<"u"&&crypto.randomUUID)return crypto.randomUUID();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(Z)=>{let $=Math.random()*16|0;return(Z==="x"?$:$&3|8).toString(16)})}function e(){if(typeof Promise.withResolvers==="function")return Promise.withResolvers();let Z,$;return{promise:new Promise((X,G)=>{Z=X,$=G}),resolve:Z,reject:$}}function ZZ(Z,$,J="Operation timed out"){return Promise.race([Z,new Promise((X,G)=>{setTimeout(()=>G(Error(J)),$)})])}class $Z extends C{#Z=new Map;#$=0;#J=new Map;#G=Object.create(null);#X=Object.create(null);#Q=[];constructor(){super()}addPeer(Z,$,J={}){if(this.#Z.has(Z))throw z.from(W.PEER_EXISTS,{peerId:Z});if(typeof $!=="function")throw TypeError("sendFn must be a function");let X={peerId:Z,sendFn:$,meta:J.meta??{},origin:J.origin??"unknown",status:c.CONNECTED,connectedAt:Date.now()};this.#Z.set(Z,X),this.#J.set(Z,0),this.#G[Z]=X,this.#X[Z]=$,this.#Q.push(Z),this.emit("peer:added",{peerId:Z,meta:X.meta})}removePeer(Z){let $=this.#G[Z];if(!$)return!1;this.#Z.delete(Z),this.#J.delete(Z),delete this.#G[Z],delete this.#X[Z];let J=this.#Q.indexOf(Z);if(J!==-1)this.#Q.splice(J,1);return this.emit("peer:removed",{peerId:Z,meta:$.meta}),!0}getPeer(Z){return this.#G[Z]}getPeerIds(){return this.#Q.slice()}get peerCount(){return this.#Z.size}route(Z,$={}){let{target:J,payload:X}=Z;if(J)return this.#Y(J,X);else{let G=$.exclude,Q=G?.length?new Set(G):null;return this.#K(X,Q)}}broadcast(Z,$={}){let J=$.exclude,X=J?.length?new Set(J):null,G=$.include,Q=G?.length?new Set(G):null,K=0,Y=[];for(let[D,U]of this.#Z){if(X?.has(D))continue;if(Q&&!Q.has(D))continue;if(U.status!==c.CONNECTED)continue;try{let V=this.#W(D,Z,j.BROADCAST);U.sendFn(V),K++}catch(V){console.error(`[Router] Failed to send to ${D}:`,V),Y.push(D)}}return{success:Y.length===0,delivered:K,failed:Y}}getSequence(Z){return this.#J.get(Z)??0}setPeerStatus(Z,$){let J=this.#G[Z];if(J)J.status=$,this.emit("peer:status",{peerId:Z,status:$})}clearPeers(){let Z=this.#Q.slice();for(let $ of Z)this.removePeer($)}#Y(Z,$){let J=this.#G[Z];if(!J)return{success:!1,delivered:0,failed:[Z],error:W.PEER_NOT_FOUND};if(J.status!==c.CONNECTED)return{success:!1,delivered:0,failed:[Z],error:W.PEER_DISCONNECTED};try{let X=$&&$._cb?$:this.#W(Z,$,j.SIGNAL);return J.sendFn(X),{success:!0,delivered:1,failed:[]}}catch(X){return console.error(`[Router] Failed to send to ${Z}:`,X),{success:!1,delivered:0,failed:[Z]}}}#K(Z,$){return this.broadcast(Z,$?{exclude:Array.from($)}:{})}#W(Z,$,J){let X=(this.#J.get(Z)??0)+1;return this.#J.set(Z,X),{id:`msg_${++this.#$}`,t:J,ts:Date.now(),seq:X,p:$}}}class JZ{#Z=new Map;#$=Object.create(null);#J=0;#G;#X;constructor(Z={}){this.#G=Z.defaultTimeout??30000,this.#X=Z.maxPending??1000}create(Z,$,J={}){if(this.#X>0&&this.#Z.size>=this.#X)throw z.from(W.MAX_PENDING,{current:this.#Z.size,max:this.#X,targetPeer:Z,handlerName:$});let X=Date.now(),G=`req_${++this.#J}_${X}`,Q=J.timeout??this.#G,{promise:K,resolve:Y,reject:D}=e(),U={id:G,targetPeer:Z,handlerName:$,createdAt:X,timeout:Q,resolve:Y,reject:D,defaultValue:J.defaultValue};this.#Z.set(G,U),this.#$[G]=U;let V=ZZ(K,Q).catch((L)=>{if(G in this.#$){if(this.#Z.delete(G),delete this.#$[G],"defaultValue"in J)return J.defaultValue;throw z.from(W.RESPONSE_TIMEOUT,{requestId:G,targetPeer:Z,handlerName:$,timeout:Q})}throw L});return{requestId:G,promise:V}}resolve(Z,$){let J=this.#$[Z];if(!J)return!1;if(this.#Z.delete(Z),delete this.#$[Z],$.success)J.resolve($.data);else{let X=z.from($.error?.code??W.HANDLER_ERROR,{requestId:Z,targetPeer:J.targetPeer,handlerName:J.handlerName,originalError:$.error});X.message=$.error?.message??"Handler error",J.reject(X)}return!0}reject(Z,$){let J=this.#$[Z];if(!J)return!1;this.#Z.delete(Z),delete this.#$[Z];let X=$ instanceof Error?$:Error($);return J.reject(X),!0}cancel(Z){let $=this.#$[Z];if(!$)return!1;return this.#Z.delete(Z),delete this.#$[Z],$.reject(Error("Request cancelled")),!0}cancelForPeer(Z){let $=0;for(let[J,X]of this.#Z)if(X.targetPeer===Z)this.#Z.delete(J),delete this.#$[J],X.reject(z.from(W.PEER_DISCONNECTED,{peerId:Z,requestId:J})),$++;return $}cancelAll(){let Z=this.#Z.size;for(let[$,J]of this.#Z)J.reject(Error("All requests cancelled"));this.#Z.clear();for(let $ in this.#$)delete this.#$[$];return Z}has(Z){return Z in this.#$}get(Z){return this.#$[Z]}get size(){return this.#Z.size}getRequestIds(){return Array.from(this.#Z.keys())}getForPeer(Z){let $=[];for(let J of this.#Z.values())if(J.targetPeer===Z)$.push(J);return $}}class XZ{#Z;#$;#J;#G;#X=new Map;constructor(Z={}){this.#Z=Z.peerId??M(),this.#$=Z.meta??{},this.#J=Z.capabilities??[],this.#G=Z.timeout??1e4}get peerId(){return this.#Z}createInitMessage(){return{type:j.HANDSHAKE_INIT,handshakeId:M(),peerId:this.#Z,meta:this.#$,capabilities:this.#J,timestamp:Date.now()}}createAckMessage(Z,$,J){return{type:j.HANDSHAKE_ACK,handshakeId:Z.handshakeId,peerId:this.#Z,meta:this.#$,capabilities:this.#J,accept:$,reason:$?void 0:J,timestamp:Date.now()}}createCompleteMessage(Z){return{type:j.HANDSHAKE_COMPLETE,handshakeId:Z,confirmed:!0,timestamp:Date.now()}}async initiate(Z){let $=this.createInitMessage(),{promise:J,resolve:X,reject:G}=e();this.#X.set($.handshakeId,{phase:u.INIT_SENT,resolve:X,reject:G,initMsg:$,startTime:Date.now()}),Z($);try{return await ZZ(J,this.#G)}catch(Q){if(this.#X.delete($.handshakeId),Q.code===W.HANDSHAKE_TIMEOUT)return{success:!1,error:W.HANDSHAKE_TIMEOUT,reason:`Handshake timeout after ${this.#G}ms`};return{success:!1,error:W.HANDSHAKE_REJECTED,reason:Q.message}}}handleMessage(Z,$,J,X){switch(Z.type){case j.HANDSHAKE_INIT:return this.#Q(Z,$,J,X);case j.HANDSHAKE_ACK:return this.#Y(Z,$,J);case j.HANDSHAKE_COMPLETE:return this.#K(Z,$);default:return null}}hasPending(Z){return this.#X.has(Z)}cancel(Z){let $=this.#X.get(Z);if($)$.reject(Error("Handshake cancelled")),this.#X.delete(Z)}cancelAll(){for(let[Z,$]of this.#X)$.reject(Error("All handshakes cancelled"));this.#X.clear()}#Q(Z,$,J,X){if(X&&!X(Z,$)){let Q=this.createAckMessage(Z,!1,"Validation failed");return J(Q),null}let G=this.createAckMessage(Z,!0);return J(G),this.#X.set(Z.handshakeId,{phase:u.ACK_SENT,remotePeer:{peerId:Z.peerId,origin:$,meta:Z.meta,capabilities:Z.capabilities}}),null}#Y(Z,$,J){let X=this.#X.get(Z.handshakeId);if(!X)return null;if(!Z.accept)return X.reject(Error(Z.reason||"Connection rejected")),this.#X.delete(Z.handshakeId),null;let G=this.createCompleteMessage(Z.handshakeId);J(G);let Q={peerId:Z.peerId,origin:$,meta:Z.meta,capabilities:Z.capabilities,type:"unknown",connectedAt:Date.now()};return X.resolve({success:!0,peer:Q}),this.#X.delete(Z.handshakeId),Q}#K(Z,$){let J=this.#X.get(Z.handshakeId);if(!J||J.phase!==u.ACK_SENT)return null;if(!Z.confirmed)return this.#X.delete(Z.handshakeId),null;let X={...J.remotePeer,connectedAt:Date.now()};return this.#X.delete(Z.handshakeId),X}}class GZ{#Z=new Set;#$=[];#J=!1;#G;constructor(Z={}){if(this.#J=Z.allowAll??!1,this.#G=globalThis.location?.origin,Z.allowed)for(let $ of Z.allowed)this.#X($)}isAllowed(Z){if(this.#J)return!0;if(Z==="null"||Z===null)return this.#Z.has("null");if(this.#Z.size===0&&this.#$.length===0)return Z===this.#G;if(this.#Z.has(Z))return!0;for(let $ of this.#$)if($.test(Z))return!0;return!1}allow(Z){return this.#X(Z),this}disallow(Z){if(this.#Z.has(Z))return this.#Z.delete(Z),!0;return!1}getAllowed(){return Array.from(this.#Z)}clear(){this.#Z.clear(),this.#$=[]}get selfOrigin(){return this.#G}#X(Z){if(typeof Z!=="string")throw TypeError("Origin must be a string");if(Z==="*"){this.#J=!0;return}if(Z.includes("*")){let $=this.#Q(Z);this.#$.push($)}else this.#Z.add(Z)}#Q(Z){let $=Z.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,"[a-zA-Z0-9.-]{0,253}");return new RegExp(`^${$}$`)}}class y extends C{#Z;#$;#J;#G;#X;#Q;#Y;#K=new Map;#W=[];#D=[];#j;#_;#z;#V;#U;#x;#q=new Map;#A=new Map;#w=!1;#L="[CrossBus]";#H;#F=!1;constructor(Z={}){super();if(this.#Z=Z.peerId??M(),this.#$=Z.isHub??!1,this.#j=Z.meta??{},this.#_=Z.capabilities??[],this.#z=Z.requestTimeout??30000,this.#J=new $Z,this.#G=new JZ({defaultTimeout:this.#z}),this.#X=new XZ({peerId:this.#Z,meta:this.#j,capabilities:this.#_,timeout:Z.handshakeTimeout??1e4}),this.#Q=new GZ({allowed:Z.allowedOrigins??[]}),this.#Y=Z.contentType??"application/json",this.#V=Z.maxPayloadSize??1048576,this.#U=Z.maxPendingRequests??100,this.#x=Z.strictMode??!1,this.#w=Z.debug??!1,this.#L=Z.debugPrefix??"[CrossBus]",this.#H=Date.now(),this.#f(Z),this.#_.push(`serializer:${this.#Y}`),this.#J.on("peer:added",($)=>{this.emit("peer:connected",$.data)}),this.#J.on("peer:removed",($)=>{this.emit("peer:disconnected",$.data)}),this.#J.on("peer:status",($)=>{this.emit("peer:status",$.data)}),this.#w)this.#M("info",`Initialized (isHub: ${this.#$})`)}get peerId(){return this.#Z}get isHub(){return this.#$}get peerCount(){return this.#J.peerCount}get peers(){return this.#J.getPeerIds()}getPeer(Z){return this.#J.getPeer(Z)}async signal(Z,$,J={}){this.#B();let X=await this.#P(this.#D,$,{type:"signal",direction:"outbound"}),G=PZ(Z,X,this.#Z),Q=await this.#J.broadcast(G,J);return this.#M("out",`SIGNAL "${Z}" to ${Q.delivered} peers`),Q}async request(Z,$,J,X={}){if(this.#B(),this.#M("out",`REQUEST "${$}" to ${Z}`),!this.#J.getPeer(Z))throw z.from(W.PEER_NOT_FOUND,{peerId:Z});let{requestId:Q,promise:K}=this.#G.create(Z,$,{timeout:X.timeout??this.#z}),Y=await this.#P(this.#D,J,{type:"request",peerId:Z,handlerName:$,direction:"outbound"}),D=MZ($,Y,this.#Z,Z,Q);if(!this.#J.route({target:Z,payload:D}).success)throw this.#G.cancel(Q),z.from(W.SEND_FAILED,{peerId:Z});return K}async broadcastRequest(Z,$,J={}){this.#B();let X=J.timeout??this.#z,G=J.ignoreErrors??!0,Q=new Set(J.exclude??[]),K=new Map,Y=[];for(let D of this.#J.getPeerIds()){if(Q.has(D))continue;let U=this.request(D,Z,$,{timeout:X}).then((V)=>{K.set(D,{success:!0,data:V})}).catch((V)=>{if(G)K.set(D,{success:!1,error:V.message});else throw V});Y.push(U)}return await Promise.all(Y),K}handle(Z,$,J={}){if(this.#K.has(Z))throw z.from(W.HANDLER_EXISTS,{handlerName:Z});if(J.allowedPeers||J.rateLimit||J.validatePayload)this.#A.set(Z,J);return this.#K.set(Z,$),()=>{this.#K.delete(Z),this.#A.delete(Z)}}unhandle(Z){return this.#K.delete(Z)}hasHandler(Z){return this.#K.has(Z)}addInboundHook(Z,$=10){if(typeof Z!=="function")throw TypeError("hookFn must be a function");let J={fn:Z,priority:$};return this.#W.push(J),this.#W.sort((X,G)=>X.priority-G.priority),()=>this.removeInboundHook(Z)}addOutboundHook(Z,$=10){if(typeof Z!=="function")throw TypeError("hookFn must be a function");let J={fn:Z,priority:$};return this.#D.push(J),this.#D.sort((X,G)=>X.priority-G.priority),()=>this.removeOutboundHook(Z)}removeInboundHook(Z){let $=this.#W.findIndex((J)=>J.fn===Z);if($!==-1)return this.#W.splice($,1),!0;return!1}removeOutboundHook(Z){let $=this.#D.findIndex((J)=>J.fn===Z);if($!==-1)return this.#D.splice($,1),!0;return!1}addPeer(Z,$,J={}){this.#B(),this.#J.addPeer(Z,$,J)}removePeer(Z){return this.#G.cancelForPeer(Z),this.#J.removePeer(Z)}addTransport(Z,$={}){if(this.#B(),!Z||typeof Z.send!=="function")throw TypeError("Transport must have a send() method");let J=$.peerId||Z.peerId||`transport-${M()}`,X=$.origin||"*";if(typeof Z.onMessage==="function")Z.onMessage((G)=>{this.handleMessage(G,X,J)});return this.addPeer(J,(G)=>{Z.send(G)},$),()=>{if(this.removePeer(J),typeof Z.destroy==="function")Z.destroy()}}async handleMessage(Z,$,J,X){if(this.#F)return;if(!this.#Q.isAllowed($)){console.warn(`[CrossBus] Blocked message from unauthorized origin: ${$}`);return}let G=Z.payload??Z.data??Z.p,Q=Z.type??Z.t,K=Z.handler??Z.name,Y=G;if(Z.payload&&typeof Z.payload==="object"&&!Z.p){if(Q===j.SIGNAL||Q===j.BROADCAST)K=Z.payload.name,Y=Z.payload.data;else if(Q===j.REQUEST)K=Z.payload.name,Y=Z.payload.data;else if(Q===j.RESPONSE)Y=Z.payload.data}else if(Z.t&&!Z.type&&Z.p&&typeof Z.p==="object"&&Z.p.payload){let D=Z.p;K=D.payload.name??D.name,Y=D.payload.data??D.data}if(Y!==void 0){let D={type:Q===j.SIGNAL?"signal":Q===j.REQUEST?"request":"response",peerId:J,handlerName:K,direction:"inbound"};Y=await this.#P(this.#W,Y,D)}switch(Q){case j.BROADCAST:case j.SIGNAL:if(typeof K!=="string"){console.warn("[CrossBus] Invalid signal name type");return}await this.#N(K,Y,J);break;case j.REQUEST:if(typeof K!=="string"){console.warn("[CrossBus] Invalid handler name type");return}await this.#O(Z.id,K,Y,J,X);break;case j.RESPONSE:{let{success:D,error:U}=Z;if(Z.payload&&Z.payload.success!==void 0)D=Z.payload.success,U=Z.payload.error;this.#R(Z.payload?.requestId??Z.id,D,Y,U);break}case j.HANDSHAKE_INIT:case j.HANDSHAKE_ACK:case j.HANDSHAKE_COMPLETE:this.#X.handleMessage(Z,$,X);break;default:console.warn(`[CrossBus] Unknown message type: ${Q}`)}}destroy(){if(this.#F)return;this.#F=!0,this.#G.cancelAll(),this.#K.clear(),this.#J.clearPeers(),this.clear(),this.emit("destroyed",{})}get isDestroyed(){return this.#F}async#N(Z,$,J){await this.emit(Z,{payload:$,source:J})}async#O(Z,$,J,X,G){let Q=this.#K.get($),K;if(!Q)K=T(Z,null,this.#Z,!1,{code:W.NO_HANDLER,message:"Handler not found"});else{let Y=this.#S($,X,J);if(!Y.allowed)K=T(Z,null,this.#Z,!1,{code:Y.error?.code??W.UNAUTHORIZED,message:Y.error?.message??"Security check failed"});else try{let D=await Q(J,{peerId:X,requestId:Z,handlerName:$}),U=await this.#P(this.#D,D,{type:"response",peerId:X,handlerName:$,direction:"outbound"});K=T(Z,U,this.#Z,!0)}catch(D){K=T(Z,null,this.#Z,!1,{code:D.code??W.HANDLER_ERROR,message:D.message})}}if(G)G(K);else if(X)this.#J.route({target:X,payload:K})}#R(Z,$,J,X){this.#G.resolve(Z,{requestId:Z,success:$,data:J,error:X})}#B(){if(this.#F)throw z.from(W.DESTROYED,{context:"CrossBus operation"})}async#P(Z,$,J){let X=$;for(let{fn:G}of Z)try{X=await G(X,J)}catch(Q){console.error("[CrossBus] Hook error:",Q)}return X}#f(Z){if(!(typeof process<"u"?process.env?.NODE_ENV!=="production":typeof window<"u"&&window.location?.hostname==="localhost"))return;if(!Z.allowedOrigins||Z.allowedOrigins.length===0)console.warn(`[CrossBus Security] ⚠️ No allowedOrigins specified.
2
+ `+`This bus will REJECT all incoming messages from transports.
3
+ To receive messages, specify allowed origins:
4
+ allowedOrigins: ["https://trusted-domain.com"]
5
+ For development only: allowedOrigins: ["*"]`);if(Z.allowedOrigins?.includes("*")){if(console.warn(`[CrossBus Security] ⚠️ allowedOrigins: ["*"] accepts messages from ANY origin.
6
+ `+`This is INSECURE in production. Use specific origins instead:
7
+ allowedOrigins: ["https://trusted-domain.com"]
8
+ For production, use:
9
+ CrossBus.createSecure({ allowedOrigins: ["https://..."] })
10
+ Suppress this warning with NODE_ENV=production`),this.#x)throw Error('strictMode: allowedOrigins: ["*"] is not allowed. Use specific origins for security.')}}#S(Z,$,J){let X=this.#A.get(Z);if(!X)return{allowed:!0};if(X.allowedPeers&&!X.allowedPeers.includes($))return{allowed:!1,error:z.from(W.UNAUTHORIZED,{handler:Z,peer:$,allowedPeers:X.allowedPeers})};if(X.rateLimit){let G=`${Z}:${$}`;if(!this.#k(G,X.rateLimit))return{allowed:!1,error:z.from(W.RATE_LIMITED,{handler:Z,peer:$,limit:X.rateLimit})}}if(X.validatePayload)try{if(!X.validatePayload(J))return{allowed:!1,error:z.from(W.INVALID_PAYLOAD,{handler:Z})}}catch(G){return{allowed:!1,error:z.from(W.INVALID_PAYLOAD,{handler:Z,reason:G?.message??"Validation error"})}}return{allowed:!0}}#k(Z,$){let J=Date.now(),X=this.#q.get(Z);if(!X||J>=X.resetAt)return this.#q.set(Z,{count:1,resetAt:J+1000}),!0;if(X.count>=$)return!1;return X.count++,!0}get maxPayloadSize(){return this.#V}get strictMode(){return this.#x}get debug(){return this.#w}get uptime(){return Date.now()-this.#H}#M(Z,$){if(!this.#w)return;let J=Z==="out"?"→":Z==="in"?"←":Z==="warn"?"⚠️":Z==="error"?"❌":"ℹ️";console.log(`${this.#L} ${J} ${$}`)}healthCheck(){let Z=this.#J.getPeerIds(),$=Z.length,J="healthy";if(this.#F)J="unhealthy";else if($===0&&this.#$)J="degraded";let X;if(typeof process<"u"&&process.memoryUsage)try{let G=process.memoryUsage();X={heapUsed:G.heapUsed,heapTotal:G.heapTotal,rss:G.rss}}catch{}return{status:J,peerId:this.#Z,isHub:this.#$,uptime:this.uptime,peers:{total:$,ids:Z},handlers:Array.from(this.#K.keys()),pendingRequests:this.#G.size??0,destroyed:this.#F,...X&&{memory:X}}}static createSecure(Z={}){if(!Z.allowedOrigins||Z.allowedOrigins.length===0)throw Error('createSecure() requires allowedOrigins to be specified. For development, use: new CrossBus({ allowedOrigins: ["*"] })');if(Z.allowedOrigins.includes("*"))throw Error('createSecure() does not allow wildcard origins. Specify exact origins: allowedOrigins: ["https://example.com"]');return new y({strictMode:!0,maxPayloadSize:1048576,maxPendingRequests:100,requestTimeout:30000,...Z})}diagnose(){let Z=[],$=[],J=[];if(this.#F)return Z.push("Instance is destroyed"),$.push("Create a new CrossBus instance"),{status:"error",issues:Z,suggestions:$,warnings:J};let X=this.#J.getPeerIds().length;if(X===0)if(this.#$)J.push("Hub has no connected peers"),$.push("Add transports with addTransport() or wait for agents to connect");else Z.push("Agent has no connected peers"),$.push('Add a transport to connect to hub: bus.addTransport(transport, {peerId: "hub"})');let G=this.#K.size;if(this.#$&&G===0)J.push("Hub has no registered handlers"),$.push('Register handlers with bus.handle("name", fn)');let Q=this.#G.size??0;if(Q>this.#U*0.8)J.push(`High pending request count: ${Q}/${this.#U}`),$.push("Consider increasing maxPendingRequests or check for slow handlers");if(!this.#x)J.push("strictMode is disabled"),$.push("For production, use CrossBus.createSecure() or set strictMode: true");let K="healthy";if(Z.length>0)K="error";else if(J.length>0)K="warning";return{status:K,peerId:this.#Z,isHub:this.#$,peerCount:X,handlerCount:G,pendingRequests:Q,uptime:this.uptime,issues:Z,warnings:J,suggestions:$}}}class QZ{#Z;#$;#J;#G;#X=0;#Q=!1;#Y=!1;#K;constructor(Z,$,J={}){this.#Z=M(),this.#$=$,this.#J=Z,this.#G=J.chunkSize??64000,this.#K=J.meta??{}}get streamId(){return this.#Z}get name(){return this.#$}async open(Z){if(this.#Y)return;this.#Y=!0,await this.#W({st:"open",name:this.#$,meta:{...this.#K,...Z}})}async write(Z){if(this.#Q)throw Error("Stream already ended");if(!this.#Y)await this.open();let $,J=!1;if(Z instanceof ArrayBuffer)$=this.#j(new Uint8Array(Z)),J=!0;else if(Z instanceof Uint8Array)$=this.#j(Z),J=!0;else if(typeof Z==="string"){let X=this.#D(Z,this.#G);for(let G of X)await this.#W({st:"data",seq:this.#X++,d:G,b64:!1});return}else $=JSON.stringify(Z);if(J){let X=this.#D($,this.#G);for(let G of X)await this.#W({st:"data",seq:this.#X++,d:G,b64:!0})}else await this.#W({st:"data",seq:this.#X++,d:$,b64:!1})}async end(Z){if(this.#Q)return;this.#Q=!0,await this.#W({st:"end",seq:this.#X,meta:Z})}async abort(Z){if(this.#Q)return;this.#Q=!0,await this.#W({st:"error",reason:Z??"Stream aborted"})}async#W(Z){let $={[H]:w,t:"stream",sid:this.#Z,...Z};await this.#J($)}#D(Z,$){let J=[];for(let X=0;X<Z.length;X+=$)J.push(Z.slice(X,X+$));return J}#j(Z){let $="";for(let J=0;J<Z.length;J++)$+=String.fromCharCode(Z[J]);return btoa($)}}class YZ{#Z;#$;#J;#G=[];#X=null;#Q=!1;#Y=null;constructor(Z,$,J={}){this.#Z=Z,this.#$=$,this.#J=J}get streamId(){return this.#Z}get name(){return this.#$}get meta(){return this.#J}get ended(){return this.#Q}push(Z){if(this.#Q)return;let $=Z.d;if(Z.b64)$=this.#K($);if(this.#G.push($),this.#X){let J=this.#X;this.#X=null,J()}}end(Z){if(this.#Q=!0,Z)this.#J={...this.#J,...Z};if(this.#X){let $=this.#X;this.#X=null,$()}}error(Z){if(this.#Q=!0,this.#Y=Error(Z),this.#X){let $=this.#X;this.#X=null,$()}}async*[Symbol.asyncIterator](){while(!0){while(this.#G.length>0)yield this.#G.shift();if(this.#Q){if(this.#Y)throw this.#Y;return}await new Promise((Z)=>{this.#X=Z})}}async collect(){let Z=[],$=!1;for await(let J of this)if(Z.push(J),J instanceof Uint8Array)$=!0;if($){let J=Z.reduce((Q,K)=>Q+K.length,0),X=new Uint8Array(J),G=0;for(let Q of Z)X.set(Q,G),G+=Q.length;return X}else return Z.join("")}#K(Z){let $=atob(Z),J=new Uint8Array($.length);for(let X=0;X<$.length;X++)J[X]=$.charCodeAt(X);return J}}class OZ{#Z=new Map;#$=new Map;#J;constructor(Z){this.#J=Z}createStream(Z,$,J={}){return new QZ(async(G)=>{await this.#J($,G)},Z,J)}onStream(Z,$){return this.#$.set(Z,$),()=>this.#$.delete(Z)}handleMessage(Z,$){if(Z.t!=="stream")return;let J=Z.sid;switch(Z.st){case"open":this.#G(J,Z,$);break;case"data":this.#X(J,Z);break;case"end":this.#Q(J,Z);break;case"error":this.#Y(J,Z);break}}#G(Z,$,J){let X=this.#$.get($.name);if(!X){console.warn(`[CrossBus] No handler for stream: ${$.name}`);return}let G=new YZ(Z,$.name,$.meta);this.#Z.set(Z,G),X(G).catch((Q)=>{console.error("[CrossBus] Stream handler error:",Q)})}#X(Z,$){let J=this.#Z.get(Z);if(!J)return;J.push($)}#Q(Z,$){let J=this.#Z.get(Z);if(!J)return;J.end($.meta),this.#Z.delete(Z)}#Y(Z,$){let J=this.#Z.get(Z);if(!J)return;J.error($.reason),this.#Z.delete(Z)}get activeStreamCount(){return this.#Z.size}}class RZ extends C{#Z;#$;#J=new Map;#G;#X;#Q=null;#Y=null;#K=!1;#W="online";#D={};constructor(Z,$){super();if(!$.peerId)throw Error("peerId is required");if(this.#Z=$.peerId,this.#$=Z,this.#G=$.heartbeatInterval??15000,this.#X=$.timeout??45000,$.autoStart!==!1)this.start()}get peerId(){return this.#Z}get status(){return this.#W}get onlineCount(){let Z=0;for(let $ of this.#J.values())if($.status!=="offline")Z++;return Z}start(){if(this.#Q)return;this.#U("join"),this.#Q=setInterval(()=>{this.#U("heartbeat")},this.#G),this.#Y=setInterval(()=>{this.#V()},this.#G)}stop(){if(this.#Q)clearInterval(this.#Q),this.#Q=null;if(this.#Y)clearInterval(this.#Y),this.#Y=null;this.#U("leave")}setStatus(Z,$){if(this.#W=Z,$)this.#D={...this.#D,...$};this.#U("update")}setMeta(Z){this.#D={...this.#D,...Z},this.#U("update")}getOnlinePeers(){let Z=[];for(let[$,J]of this.#J)if(J.status!=="offline")Z.push($);return Z}getAllPeers(){return Array.from(this.#J.values())}getPeer(Z){return this.#J.get(Z)}isOnline(Z){let $=this.#J.get(Z);return $?$.status!=="offline":!1}handleMessage(Z,$){if(Z.t!=="presence")return;if($===this.#Z)return;let{pt:J,status:X,meta:G}=Z,Q=Date.now();switch(J){case"join":this.#j($,X,G,Q),this.#U("heartbeat");break;case"leave":this.#_($);break;case"heartbeat":case"update":this.#z($,X,G,Q);break}}#j(Z,$,J,X){let G=!this.#J.has(Z);if(this.#J.set(Z,{peerId:Z,status:$??"online",lastSeen:X,meta:J??{}}),G)this.emitSync("join",{peerId:Z,meta:J})}#_(Z){let $=this.#J.get(Z);if(!$)return;$.status="offline",this.#J.delete(Z),this.emitSync("leave",{peerId:Z})}#z(Z,$,J,X){let G=this.#J.get(Z),Q=!G||G.status==="offline";if(!G)G={peerId:Z,status:$??"online",lastSeen:X,meta:J??{}},this.#J.set(Z,G);else{if(G.lastSeen=X,$)G.status=$;if(J)G.meta={...G.meta,...J}}if(Q&&G.status!=="offline")this.emitSync("join",{peerId:Z,meta:G.meta});else this.emitSync("update",{peerId:Z,peer:G})}#V(){let $=Date.now()-this.#X;for(let[J,X]of this.#J)if(X.lastSeen<$&&X.status!=="offline")X.status="offline",this.#J.delete(J),this.emitSync("leave",{peerId:J})}async#U(Z){if(this.#K)return;let $={[H]:w,t:"presence",pt:Z,peerId:this.#Z,status:this.#W,meta:this.#D,ts:Date.now()};try{await this.#$($)}catch(J){console.error("[CrossBus] Failed to send presence:",J)}}destroy(){if(this.#K)return;this.#K=!0,this.stop(),this.#J.clear()}get isDestroyed(){return this.#K}}var v={contentType:"application/json",serialize:(Z)=>JSON.stringify(Z),deserialize:(Z)=>JSON.parse(Z)},KZ=new Map;KZ.set(v.contentType,v);function E(Z){return KZ.get(Z)||v}class fZ{#Z=null;#$;#J;#G;#X;#Q;#Y=null;#K=null;#W=!1;static isSupported(){return typeof globalThis.postMessage==="function"||typeof Window<"u"}constructor(Z,$={}){if(!this.#_(Z))throw TypeError("Target must support postMessage");if(this.#Z=Z,this.#$=$.targetOrigin??"*",this.#J=new Set($.allowedOrigins??[]),this.#G=$.autoTransfer??!1,this.#Q=$.contentType??"application/json",this.#X=E(this.#Q),(typeof process<"u"?process.env?.NODE_ENV!=="production":typeof window<"u"&&window.location?.hostname==="localhost")&&this.#$==="*")console.warn(`[CrossBus Security] ⚠️ targetOrigin: "*" broadcasts to ANY window.
11
+ `+`This is INSECURE in production. Use specific origin:
12
+ targetOrigin: "https://iframe-domain.com"
13
+ Suppress this warning with NODE_ENV=production`);this.#K=this.#D.bind(this),this.#U().addEventListener("message",this.#K)}send(Z,$){if(this.#W)throw z.from(W.DESTROYED,{context:"PostMessageTransport.send"});if(this.#V())throw z.from(W.PEER_DISCONNECTED,{reason:"Target window is closed"});let J={[H]:w,...Z},X=J;if(this.#Q!=="application/json")X=this.#X.serialize(J);let G=$;if(this.#G&&!$){if(G=b(Z),G.length===0)G=void 0}if(this.#z())this.#Z.postMessage(X,G);else this.#Z.postMessage(J,this.#$,G)}onMessage(Z){if(typeof Z!=="function")throw TypeError("Handler must be a function");this.#Y=Z}offMessage(){this.#Y=null}destroy(){if(this.#W)return;if(this.#W=!0,this.#Y=null,this.#K)this.#U().removeEventListener("message",this.#K),this.#K=null}get isDestroyed(){return this.#W}get targetOrigin(){return this.#$}#D(Z){if(!this.#Y)return;let $=Z.data;if(!R($))return;if(Z.origin&&!this.#j(Z.origin)){console.warn(`[CrossBus] Blocked message from unauthorized origin: ${Z.origin}`);return}if(this.#Z&&"postMessage"in this.#Z&&!this.#z()){if(Z.source!==this.#Z)return}try{this.#Y($,{origin:Z.origin??"worker",source:Z.source??Z.currentTarget})}catch(J){console.error("[CrossBus] Message handler error:",J)}}#j(Z){if(this.#J.size===0)return Z===globalThis.location?.origin;if(this.#J.has("*"))return!0;if(this.#J.has(Z))return!0;for(let $ of this.#J)if($.includes("*")){if(new RegExp("^"+$.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\\\*/g,"[a-zA-Z0-9.-]{0,253}")+"$").test(Z))return!0}return!1}#_(Z){if(!Z)return!1;return typeof Z.postMessage==="function"}#z(){if(typeof Worker<"u"&&this.#Z instanceof Worker)return!0;if(typeof ServiceWorker<"u"&&this.#Z instanceof ServiceWorker)return!0;if(typeof MessagePort<"u"&&this.#Z instanceof MessagePort)return!0;return!1}#V(){if(this.#z())return!1;return this.#Z.closed===!0}#U(){if(typeof DedicatedWorkerGlobalScope<"u"&&globalThis instanceof DedicatedWorkerGlobalScope)return globalThis;if(this.#z())return this.#Z;if(typeof window<"u")return window;return globalThis}}class WZ{#Z;#$;#J;#G;#X=null;#Q=!1;static isSupported(){return typeof BroadcastChannel<"u"}constructor(Z={}){if(!WZ.isSupported())throw z.from(W.UNSUPPORTED,{api:"BroadcastChannel"});this.#$=Z.channelName??"crossbus:default",this.#Z=new BroadcastChannel(this.#$),this.#G=Z.contentType??"application/json",this.#J=E(this.#G),this.#Z.onmessage=this.#Y.bind(this),this.#Z.onmessageerror=this.#K.bind(this)}send(Z){if(this.#Q)throw z.from(W.DESTROYED,{context:"BroadcastChannelTransport.send"});let $={[H]:w,...Z},J=$;if(this.#G!=="application/json")J=this.#J.serialize($);this.#Z.postMessage(J)}onMessage(Z){if(typeof Z!=="function")throw TypeError("Handler must be a function");this.#X=Z}offMessage(){this.#X=null}destroy(){if(this.#Q)return;if(this.#Q=!0,this.#X=null,this.#Z)this.#Z.close(),this.#Z=null}get channelName(){return this.#$}get isDestroyed(){return this.#Q}#Y(Z){if(!this.#X)return;let $=Z.data;if($ instanceof ArrayBuffer||$ instanceof Uint8Array)try{let J=new TextDecoder().decode($ instanceof ArrayBuffer?new Uint8Array($):$);$=v.deserialize(J)}catch(J){console.warn("[CrossBus] Failed to deserialize binary message",J);return}if(!R($))return;try{this.#X($,{origin:"broadcast"})}catch(J){console.error("[CrossBus] BroadcastChannel handler error:",J)}}#K(Z){console.error("[CrossBus] BroadcastChannel message error:",Z)}}class m{#Z;#$;#J;#G;#X;#Q=null;#Y=!1;#K;static isSupported(){return typeof MessageChannel<"u"}static fromPort(Z,$={}){if(!(Z instanceof MessagePort))throw TypeError("Port must be a MessagePort");let J=Object.create(m.prototype);return J.#Z=Z,J.#$=null,J.#J=$.autoTransfer??!1,J.#X=$.contentType??"application/json",J.#G=E(J.#X),J.#Y=!1,J.#K=!1,J.#Q=null,J.#Z.onmessage=J.#W.bind(J),J.#Z.onmessageerror=J.#D.bind(J),J}constructor(Z={}){if(!m.isSupported())throw z.from(W.UNSUPPORTED,{api:"MessageChannel"});let $=new MessageChannel;this.#Z=$.port1,this.#$=$.port2,this.#J=Z.autoTransfer??!1,this.#X=Z.contentType??"application/json",this.#G=E(this.#X),this.#K=!0,this.#Z.onmessage=this.#W.bind(this),this.#Z.onmessageerror=this.#D.bind(this)}get remotePort(){return this.#$}markRemoteTransferred(){this.#$=null}get isInitiator(){return this.#K}send(Z,$){if(this.#Y)throw z.from(W.DESTROYED,{context:"MessageChannelTransport.send"});let J={[H]:w,...Z},X=J;if(this.#X!=="application/json")X=this.#G.serialize(J);let G=$;if(this.#J&&!$){if(G=b(Z),G.length===0)G=void 0}this.#Z.postMessage(X,G)}onMessage(Z){if(typeof Z!=="function")throw TypeError("Handler must be a function");this.#Q=Z}offMessage(){this.#Q=null}destroy(){if(this.#Y)return;if(this.#Y=!0,this.#Q=null,this.#Z)this.#Z.close(),this.#Z=null;if(this.#$)this.#$.close(),this.#$=null}get isDestroyed(){return this.#Y}#W(Z){if(!this.#Q)return;let $=Z.data;if(!R($))return;try{this.#Q($,{origin:"channel"})}catch(J){console.error("[CrossBus] MessageChannel handler error:",J)}}#D(Z){console.error("[CrossBus] MessageChannel error:",Z)}}class DZ{#Z=null;#$=null;#J;#G=null;#X=!1;static isSupported(){return typeof SharedWorker<"u"}constructor(Z={}){if(!DZ.isSupported())throw z.from(W.UNSUPPORTED,{api:"SharedWorker"});this.#J=Z.workerUrl??"/crossbus-shared-worker.js",this.#Z=new SharedWorker(this.#J,Z.name),this.#$=this.#Z.port,this.#$.onmessage=this.#Q.bind(this),this.#$.onmessageerror=this.#Y.bind(this),this.#Z.onerror=this.#K.bind(this),this.#$.start()}send(Z,$){if(this.#X)throw z.from(W.DESTROYED,{context:"SharedWorkerTransport.send"});let J={[H]:w,...Z};if(!this.#$)return;if($&&$.length>0)this.#$.postMessage(J,$);else this.#$.postMessage(J)}onMessage(Z){if(typeof Z!=="function")throw TypeError("Handler must be a function");this.#G=Z}offMessage(){this.#G=null}destroy(){if(this.#X)return;if(this.#X=!0,this.#G=null,this.#$)this.#$.close(),this.#$=null;this.#Z=null}get workerUrl(){return this.#J}get isDestroyed(){return this.#X}#Q(Z){if(!this.#G)return;if(!R(Z.data))return;try{this.#G(Z.data,{origin:"sharedworker"})}catch($){console.error("[CrossBus] SharedWorker handler error:",$)}}#Y(Z){console.error("[CrossBus] SharedWorker message error:",Z)}#K(Z){console.error("[CrossBus] SharedWorker error:",Z.message)}}class UZ{#Z=null;#$=null;#J=!1;#G;#X=null;static isSupported(){return typeof navigator<"u"&&"serviceWorker"in navigator}constructor(Z={}){if(!UZ.isSupported())throw z.from(W.UNSUPPORTED,{api:"ServiceWorker"});this.#G=this.#Q()}get ready(){return this.#G}async#Q(){let Z=await navigator.serviceWorker.ready;this.#Z=Z.active||navigator.serviceWorker.controller,this.#X=this.#Y.bind(this),navigator.serviceWorker.addEventListener("message",this.#X)}send(Z,$){if(this.#J)throw z.from(W.DESTROYED,{context:"ServiceWorkerTransport.send"});if(!this.#Z)throw z.from(W.NOT_CONNECTED,{context:"ServiceWorkerTransport.send",reason:"No active ServiceWorker"});let J={[H]:w,...Z};if($&&$.length>0)this.#Z.postMessage(J,$);else this.#Z.postMessage(J)}onMessage(Z){if(typeof Z!=="function")throw TypeError("Handler must be a function");this.#$=Z}offMessage(){this.#$=null}destroy(){if(this.#J)return;if(this.#J=!0,this.#$=null,this.#X)navigator.serviceWorker.removeEventListener("message",this.#X),this.#X=null;this.#Z=null}get isDestroyed(){return this.#J}#Y(Z){if(!this.#$)return;if(!R(Z.data))return;try{this.#$(Z.data,{origin:"serviceworker"})}catch($){console.error("[CrossBus] ServiceWorker handler error:",$)}}}class p{#Z="none";#$;#J;#G=null;#X=!1;#Q=!1;#Y=[];#K;#W=null;#D;#j;#_;static detectBridge(){if(globalThis.CrossBus&&typeof globalThis.CrossBus.postMessage==="function")return"android";if(globalThis.AndroidBridge&&typeof globalThis.AndroidBridge.postMessage==="function")return"android";if(globalThis.webkit?.messageHandlers?.crossbus)return"ios";return"none"}static isSupported(){return p.detectBridge()!=="none"}constructor(Z={}){this.#$=Z.androidInterface??"CrossBus",this.#J=Z.iosHandler??"crossbus",this.#K=Z.queueWhileInit??!0,this.#D=Z.heartbeatInterval??30000,this.#j=new Promise(($)=>{this.#_=$}),this.#z(Z.initTimeout??5000)}async#z(Z){let $=Date.now(),J=()=>{if(this.#Z=p.detectBridge(),this.#Z!=="none"){this.#V();return}if(Date.now()-$<Z)setTimeout(J,50);else console.warn("[CrossBus] No native bridge detected after timeout"),this.#Q=!0,this.#_?.()};J(),this.#U()}#V(){if(this.#Q=!0,this.#_?.(),this.#q(),this.#D>0)this.#A()}#U(){globalThis.__crossbus_receive__=($)=>{if(this.#X||!this.#G)return;try{let J=typeof $==="string"?JSON.parse($):$;if(!R(J))return;this.#G(J,{bridgeType:this.#Z})}catch(J){console.error("[CrossBus] Failed to parse native message:",J)}}}send(Z){if(this.#X)throw z.from(W.DESTROYED,{context:"NativeBridgeTransport.send"});let $={[H]:w,...Z};if(!this.#Q&&this.#K){this.#Y.push($);return}this.#x($)}#x(Z){let $=JSON.stringify(Z);try{if(this.#Z==="android"){let J=globalThis[this.#$]||globalThis.AndroidBridge;if(J?.postMessage)J.postMessage($)}else if(this.#Z==="ios"){let J=globalThis.webkit?.messageHandlers?.[this.#J];if(J?.postMessage)J.postMessage(Z)}}catch(J){console.error("[CrossBus] Failed to send to native:",J)}}#q(){while(this.#Y.length>0){let Z=this.#Y.shift();this.#x(Z)}}#A(){this.#W=setInterval(()=>{if(this.#X)return;this.#x({[H]:w,t:"hb",ts:Date.now()})},this.#D)}onMessage(Z){if(typeof Z!=="function")throw TypeError("Handler must be a function");this.#G=Z}offMessage(){this.#G=null}destroy(){if(this.#X)return;if(this.#X=!0,this.#G=null,this.#Y=[],this.#W)clearInterval(this.#W),this.#W=null;delete globalThis.__crossbus_receive__}get isDestroyed(){return this.#X}get bridgeType(){return this.#Z}get isReady(){return this.#Q}get ready(){return this.#j}}class SZ{#Z;#$;#J=null;#G;#X;#Q;#Y;#K;#W=null;#D=null;#j=null;#_=null;#z="disconnected";#V=[];#U=!1;constructor(Z){this.#Z=Z.url,this.#$=Z.peerId??M(),this.#G=Z.autoReconnect??!0,this.#X=Z.reconnectDelayMs??1000,this.#Q=Z.maxReconnectDelayMs??30000,this.#Y=this.#X,this.#K=Z.heartbeatIntervalMs??30000}get peerId(){return this.#$}get state(){return this.#z}get isConnected(){return this.#z==="connected"&&this.#J?.readyState===WebSocket.OPEN}async connect(){if(this.#J&&this.#J.readyState===WebSocket.OPEN)return;return this.#U=!1,this.#A("connecting"),new Promise((Z,$)=>{try{this.#J=new WebSocket(this.#Z),this.#J.onopen=()=>{this.#A("connected"),this.#Y=this.#X,this.#q(),this.#w(),Z()},this.#J.onmessage=(J)=>{this.#x(J)},this.#J.onclose=(J)=>{if(this.#L(),this.#A("disconnected"),!this.#U&&this.#G)this.#H()},this.#J.onerror=(J)=>{if(this.#A("error"),this.#z==="connecting")$(Error("WebSocket connection failed"))}}catch(J){this.#A("error"),$(J)}})}disconnect(){if(this.#U=!0,this.#L(),this.#D)clearTimeout(this.#D),this.#D=null;if(this.#J)this.#J.close(1000,"Client disconnect"),this.#J=null;this.#A("disconnected")}send(Z){let $={_cb:w,_m:H,id:M(),from:this.#$,timestamp:Date.now(),...Z};if(this.isConnected&&this.#J)return this.#J.send(JSON.stringify($)),!0;else return this.#V.push($),!1}onMessage(Z){this.#j=Z}onStateChange(Z){this.#_=Z}#x(Z){try{let $=JSON.parse(Z.data);if($.type==="pong")return;if(this.#j)this.#j($)}catch($){console.error("[WebSocketTransport] Failed to parse message:",$)}}#q(){while(this.#V.length>0&&this.isConnected&&this.#J){let Z=this.#V.shift();if(Z)this.#J.send(JSON.stringify(Z))}}#A(Z){if(this.#z!==Z){if(this.#z=Z,this.#_)this.#_(Z)}}#w(){if(this.#K<=0)return;this.#W=setInterval(()=>{if(this.isConnected&&this.#J)this.#J.send(JSON.stringify({type:"ping",from:this.#$}))},this.#K)}#L(){if(this.#W)clearInterval(this.#W),this.#W=null}#H(){if(this.#D)return;this.#D=setTimeout(async()=>{this.#D=null;try{await this.connect()}catch{if(this.#Y=Math.min(this.#Y*2,this.#Q),this.#G&&!this.#U)this.#H()}},this.#Y)}destroy(){this.disconnect(),this.#j=null,this.#_=null,this.#V=[]}}class f{#Z;#$;constructor(Z,$={}){if(this.#Z=Z,this.#$=new Map(Object.entries($)),!this.#$.has(Z))this.#$.set(Z,0)}get ownId(){return this.#Z}get(Z){return this.#$.get(Z)??0}tick(){let $=this.get(this.#Z)+1;return this.#$.set(this.#Z,$),$}update(Z){for(let[$,J]of Z.#$){let X=this.get($);if(J>X)this.#$.set($,J)}}happenedBefore(Z){let $=!1,J=new Set([...this.#$.keys(),...Z.#$.keys()]);for(let X of J){let G=this.get(X),Q=Z.get(X);if(G>Q)return!1;if(G<Q)$=!0}return $}isConcurrentWith(Z){return!this.happenedBefore(Z)&&!Z.happenedBefore(this)&&!this.equals(Z)}equals(Z){let $=new Set([...this.#$.keys(),...Z.#$.keys()]);for(let J of $)if(this.get(J)!==Z.get(J))return!1;return!0}canDeliver(Z,$){let J=Z.get($),X=this.get($);if(J!==X+1)return!1;for(let[G,Q]of Z.#$){if(G===$)continue;if(Q>this.get(G))return!1}return!0}clone(){let Z=Object.fromEntries(this.#$);return new f(this.#Z,Z)}toJSON(){return{ownId:this.#Z,counters:Object.fromEntries(this.#$)}}static fromJSON(Z){return new f(Z.ownId,Z.counters)}toString(){let Z=[...this.#$.entries()].map(([$,J])=>`${$}:${J}`).join(", ");return`VectorClock(${this.#Z}){${Z}}`}}class kZ{#Z;#$;#J;#G;#X;#Q;constructor(Z,$={}){this.#Z=Z,this.#$=new f(Z),this.#J=[],this.#G=$.onDeliver||(()=>{}),this.#X=$.maxBufferSize??1000,this.#Q=$.onBufferOverflow||null}get ownId(){return this.#Z}get bufferSize(){return this.#J.length}receive(Z,$){let J=f.fromJSON($.clock);if(this.#$.canDeliver(J,Z))this.#Y(Z,$,J),this.#W();else this.#K(Z,$,J)}#Y(Z,$,J){this.#$.update(J),this.#G($)}#K(Z,$,J){if(this.#J.length>=this.#X){if(this.#Q)this.#Q({senderId:Z,message:$,bufferSize:this.#J.length});return}this.#J.push({senderId:Z,message:$,clock:J})}#W(){let Z=!0;while(Z){Z=!1;for(let $=this.#J.length-1;$>=0;$--){let{senderId:J,message:X,clock:G}=this.#J[$];if(this.#$.canDeliver(G,J))this.#J.splice($,1),this.#Y(J,X,G),Z=!0}}}tick(){return this.#$.tick(),this.#$.clone()}getVectorClock(){return this.#$.clone()}clear(){this.#J=[]}}var TZ="0.1.0",I="__MICROUI_CROSSBUS__",N=typeof window<"u"?window:globalThis,bZ=["ui:toast","ui:modal","ui:theme","ui:tabs","ui:dropdown","ui:form","ui:grid","ui:stack","ui:virtual-list"],vZ={type:"ui-framework",version:TZ,description:"AI-Optimized UI Framework - Web Components Edition"};if(!N[I])N[I]=new y({peerId:"microui",isHub:!0,requestTimeout:5000,capabilities:bZ,meta:vZ}),N[I].setMaxListeners(100);var x=N[I],i="__MICROUI_COMPONENT_REGISTRY__";if(!N[i])N[i]=new Map;var EZ=N[i],A={on(Z,$){let J=x.on(Z,(X)=>{$(X.data??X)});return()=>J.unsubscribe()},once(Z,$){let J=this.on(Z,(X)=>{J(),$(X)})},off(Z,$){x.off(Z,$)},emit(Z,$){return x.emitSync(Z,$)},async emitAsync(Z,$){return x.emit(Z,$)},signal(Z,$){x.signal(Z,$)},async request(Z,$,J){return x.request(Z,$,J)},async broadcastRequest(Z,$){return x.broadcastRequest(Z,$)},handle(Z,$){return x.handle(Z,$)},unhandle(Z){x.unhandle(Z)},destroy(){x.destroy()},setMaxListeners(Z){x.setMaxListeners(Z)},get peerId(){return x.peerId},get peers(){return x.peers},get peerCount(){return x.peerCount},hasListeners(Z){return x.hasListeners(Z)},get raw(){return x}},F={TOAST_SHOW:"ui:toast:show",TOAST_DISMISS:"ui:toast:dismiss",MODAL_OPEN:"ui:modal:open",MODAL_CLOSE:"ui:modal:close",THEME_CHANGE:"ui:theme:change",TAB_CHANGE:"ui:tab:change",DROPDOWN_SELECT:"ui:dropdown:select",FORM_SUBMIT:"ui:form:submit",FORM_VALIDATE:"ui:form:validate"},CZ=(Z,$={})=>{A.emit(F.TOAST_SHOW,{message:Z,...$})};var h=(Z,$)=>{EZ.set(Z,{...$,registeredAt:Date.now()})};var S={set(Z){if(Z==="auto"){let $=window.matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.setAttribute("data-theme",$?"dark":"light")}else document.documentElement.setAttribute("data-theme",Z);localStorage.setItem("mu-theme",Z),A.emit(F.THEME_CHANGE,{theme:Z})},get(){return document.documentElement.getAttribute("data-theme")||"light"},toggle(){let Z=this.get();this.set(Z==="dark"?"light":"dark")},init(){let Z=localStorage.getItem("mu-theme");if(Z)this.set(Z);else this.set("auto");window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",($)=>{if(localStorage.getItem("mu-theme")==="auto")document.documentElement.setAttribute("data-theme",$.matches?"dark":"light")})}};if(typeof window<"u")S.init();function zZ(Z={}){let $={...Z},J=new Set;return{get(){return $},set(X){$={...$,...X},this.notify()},update(X){let G=X($);this.set(G)},subscribe(X){return J.add(X),X($),()=>J.delete(X)},notify(){for(let X of J)X($)},reset(){$={...Z},this.notify()}}}var yZ=zZ({});function jZ(Z,$,J={}){let{color:X="currentColor",centered:G=!1}=J,Q=Z.getBoundingClientRect(),K,Y;if(G||!$)K=Q.width/2,Y=Q.height/2;else{let LZ=$.touches?$.touches[0].clientX:$.clientX,HZ=$.touches?$.touches[0].clientY:$.clientY;K=LZ-Q.left,Y=HZ-Q.top}let D=Math.max(Math.hypot(K,Y),Math.hypot(Q.width-K,Y),Math.hypot(K,Q.height-Y),Math.hypot(Q.width-K,Q.height-Y))*2,U=document.createElement("span");U.className="mu-ripple-wave",U.style.cssText=`
14
+ position: absolute;
15
+ width: ${D}px;
16
+ height: ${D}px;
17
+ left: ${K-D/2}px;
18
+ top: ${Y-D/2}px;
19
+ background: ${X};
20
+ border-radius: 50%;
21
+ transform: scale(0);
22
+ opacity: 0.10;
23
+ pointer-events: none;
24
+ `;let V=getComputedStyle(Z);if(V.position==="static")Z.style.position="relative";if(V.overflow!=="hidden")Z.style.overflow="hidden";Z.appendChild(U),U.animate([{transform:"scale(0)"},{transform:"scale(1)"}],{duration:300,easing:"cubic-bezier(0.4, 0, 0.2, 1)",fill:"forwards"});let L=()=>{U.animate([{opacity:"0.10"},{opacity:"0"}],{duration:150,easing:"ease-out",fill:"forwards"}).onfinish=()=>U.remove(),Z.removeEventListener("pointerup",L),Z.removeEventListener("pointerleave",L),Z.removeEventListener("pointercancel",L)};return Z.addEventListener("pointerup",L,{once:!0}),Z.addEventListener("pointerleave",L,{once:!0}),Z.addEventListener("pointercancel",L,{once:!0}),U}function _Z(Z,$={}){let J=(X)=>{if(Z.hasAttribute("disabled"))return;jZ(Z,X,$)};return Z.addEventListener("pointerdown",J),()=>{Z.removeEventListener("pointerdown",J)}}var IZ=(Z)=>class extends Z{#Z=null;initRipple($=this,J={}){this.#Z=_Z($,J)}disconnectedCallback(){if(this.#Z)this.#Z(),this.#Z=null;super.disconnectedCallback?.()}};var VZ=0;function hZ(Z,$){let J=Z,X=$||`signal_${++VZ}`,G=`signal:${X}`,Q=new Set,K=()=>{if(B){let Y=A.on(G,B);Q.add(Y)}return J};return K.set=(Y)=>{if(J!==Y){let D=J;J=Y,A.emit(G,{value:Y,oldValue:D,signal:X})}},K.update=(Y)=>{K.set(Y(J))},K.peek=()=>J,K.signalName=X,K.subscribe=(Y)=>{return A.on(G,(D)=>Y(D.value,D.oldValue))},K.dispose=()=>{for(let Y of Q)Y();Q.clear()},K}var B=null;function gZ(Z,$){let J=$||`computed_${++VZ}`,X=`signal:${J}`,G,Q=!0,K=()=>{Q=!0;let D=Z();if(G!==D)G=D,A.emit(X,{value:D,signal:J})},Y=()=>{if(Q){let D=B;B=K;try{G=Z()}finally{B=D}Q=!1}if(B)A.on(X,B);return G};return Y.signalName=J,Y.subscribe=(D)=>A.on(X,(U)=>D(U.value)),Y}function uZ(Z){let $=!1,J=[],X=()=>{if($)return;for(let Q of J)Q();J.length=0;let G=B;B=X;try{Z()}finally{B=G}};return X(),()=>{$=!0;for(let G of J)G()}}function cZ(Z){Z()}var d="startViewTransition"in document;async function o(Z){if(d)await document.startViewTransition(async()=>{await Z()}).finished;else await Z()}async function mZ(Z,{name:$="page"}={}){if(d){let J=document.createElement("style");J.textContent=`
25
+ ::view-transition-old(${$}),
26
+ ::view-transition-new(${$}) {
27
+ animation-duration: 0.3s;
28
+ }
29
+ `,document.head.appendChild(J),await o(Z),J.remove()}else await Z()}async function pZ(Z,$){await o(()=>{window.history.pushState({},"",Z),$()})}var n="scheduler"in globalThis;async function t(Z,$="user-visible"){if(n)return globalThis.scheduler.postTask(Z,{priority:$});let J=$==="user-blocking"?0:$==="user-visible"?0:1;return new Promise((X)=>{setTimeout(()=>X(Z()),J)})}async function AZ(){if(n&&"yield"in globalThis.scheduler)return globalThis.scheduler.yield();return new Promise((Z)=>setTimeout(Z,0))}async function lZ(Z,$,J=50){for(let X=0;X<Z.length;X++)if($(Z[X],X),(X+1)%J===0)await AZ()}function iZ(Z){return t(Z,"background")}function dZ(Z){return t(Z,"user-blocking")}class xZ{#Z=[];#$=!1;schedule(Z){if(this.#Z.push(Z),!this.#$)this.#$=!0,requestAnimationFrame(()=>this.#J())}#J(){let Z=this.#Z.slice();this.#Z=[],this.#$=!1;for(let $ of Z)try{$()}catch(J){console.error("[RenderScheduler] Error:",J)}}}var oZ=new xZ;function nZ(Z,$=JSON.stringify){let J=new Map;return(...X)=>{let G=$(X);if(J.has(G))return J.get(G);let Q=Z(...X);return J.set(G,Q),Q}}function tZ(Z,$=100){let J=null;return(...X)=>{if(J)clearTimeout(J);J=setTimeout(()=>Z(...X),$)}}function aZ(Z,$=100){let J=!1;return(...X)=>{if(!J)Z(...X),J=!0,setTimeout(()=>J=!1,$)}}function sZ(Z,$={}){let J=new IntersectionObserver((X)=>{for(let G of X)if(G.isIntersecting)Z(G.target),J.unobserve(G.target)},{rootMargin:"100px",threshold:0,...$});return{observe:(X)=>J.observe(X),disconnect:()=>J.disconnect()}}class FZ{#Z=[];#$=[];#J=!1;read(Z){this.#Z.push(Z),this.#G()}write(Z){this.#$.push(Z),this.#G()}#G(){if(!this.#J)this.#J=!0,requestAnimationFrame(()=>this.#X())}#X(){let Z;while(Z=this.#Z.shift())try{Z()}catch($){console.error($)}while(Z=this.#$.shift())try{Z()}catch($){console.error($)}if(this.#J=!1,this.#Z.length||this.#$.length)this.#G()}}var rZ=new FZ;async function eZ(Z,$,J=100){for(let X=0;X<Z.length;X+=J){let G=Z.slice(X,X+J);for(let Q of G)$(Q,X);await new Promise((Q)=>setTimeout(Q,0))}}class a extends P{static baseClass="mu-theme-toggle";connectedCallback(){super.connectedCallback(),this.listen(this,"click",()=>S.toggle()),A.on(F.THEME_CHANGE,()=>this.#Z())}render(){this.innerHTML=`
30
+ <button class="mu-theme-toggle__button" aria-label="Toggle theme">
31
+ <span class="mu-theme-toggle__icon"></span>
32
+ </button>
33
+ `,this.#Z()}#Z(){let Z=S.get()==="dark",$=this.querySelector(".mu-theme-toggle__icon");if($)$.textContent=Z?"☀️":"\uD83C\uDF19"}}O("mu-theme-toggle",a);h("mu-theme-toggle",{signals:[F.THEME_CHANGE],options:{themes:["light","dark"],emits:["click"]},description:"Theme toggle button that switches between light/dark modes"});class qZ extends P{static baseClass="mu-toast";static cssFile="snackbar";static observedAttributes=["severity","duration","position"];#Z=null;#$=null;connectedCallback(){if(!this.#$&&!this.querySelector(".mu-toast__content"))this.#$=this.innerHTML;super.connectedCallback(),this.listen(this,"click",($)=>{if($.target.classList.contains("mu-toast__close"))this.dismiss()});let Z=parseInt(this.attr("duration","3000"));if(Z>0)this.#Z=this.setTimeout(()=>this.dismiss(),Z)}disconnectedCallback(){super.disconnectedCallback()}render(){if(this.querySelector(".mu-toast__content")){this.#J();return}let Z=this.#$||"";this.innerHTML=`
34
+ <span class="mu-toast__content">${Z}</span>
35
+ <button class="mu-toast__close" aria-label="Dismiss">✕</button>
36
+ `,this.#J()}update(Z,$,J){this.#J()}#J(){let Z=this.attr("severity","info"),$=this.attr("position","bottom-center");this.className=`mu-toast mu-toast--${Z} mu-toast--${$}`}dismiss(){this.emit("mu-dismiss"),this.classList.add("is-exiting");let Z=!1,$=()=>{if(!Z)Z=!0,this.remove()};this.addEventListener("animationend",$,{once:!0}),this.setTimeout($,200)}}O("mu-toast",qZ);class wZ extends P{static baseClass="mu-toast-container";connectedCallback(){super.connectedCallback(),this.setAttribute("role","status"),this.setAttribute("aria-live","polite")}}O("mu-toast-container",wZ);var s={show(Z,$={}){let J=$.position||"bottom-center",X=document.querySelector(`mu-toast-container[position="${J}"]`);if(!X)X=document.createElement("mu-toast-container"),X.setAttribute("position",J),document.body.appendChild(X);let G=document.createElement("mu-toast");if(G.textContent=Z,$.severity)G.setAttribute("severity",$.severity);if($.duration)G.setAttribute("duration",$.duration.toString());return X.appendChild(G),G}};if(typeof window<"u"&&A&&!A.hasListeners(F.TOAST_SHOW))A.on(F.TOAST_SHOW,(Z)=>{s.show(Z.message,Z)});h("mu-toast",{signals:[F.TOAST_SHOW,F.TOAST_DISMISS],options:{severities:["info","success","warning","error"],positions:["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"],defaultDuration:3000},description:"MD3 Snackbar/Toast Notification component"});if(!A.hasListeners(F.TOAST_SHOW))A.on(F.TOAST_SHOW,(Z)=>{s.show(Z.message,Z)});export{AZ as yieldToMain,mZ as transitionNamed,o as transition,aZ as throttle,d as supportsViewTransitions,n as supportsScheduler,hZ as signal,CZ as showToast,oZ as scheduler,t as scheduleTask,dZ as runImmediate,iZ as runBackground,lZ as processWithYield,eZ as processInChunks,pZ as navigateWithTransition,nZ as memo,uZ as effect,rZ as domBatch,O as define,tZ as debounce,sZ as createVisibilityObserver,zZ as createStore,jZ as createRipple,gZ as computed,A as bus,cZ as batch,_Z as attachRipple,yZ as appStore,F as UIEvents,S as Theme,IZ as RippleMixin,a as MuThemeToggle,P as MuElement};
@@ -0,0 +1,6 @@
1
+ import{h as n}from"./chunk-nv3bddmj.js";import"./chunk-z960rexd.js";import{i as h}from"./chunk-sxddjs2d.js";import"./chunk-swyhghrm.js";import"./chunk-e86zbeta.js";import{j as l,k as c}from"./chunk-5qah04bh.js";class d extends l{static baseClass="mu-switch";static cssFile="switch";static observedAttributes=["checked","disabled","label"];connectedCallback(){super.connectedCallback(),this.setAttribute("role","switch"),this.setupActivation(()=>this.toggle()),this.listen(this,"pointerdown",(t)=>{if(!this.isDisabled)n(this,t)}),this.listen(this,"click",()=>{if(!this.isDisabled)this.toggle()})}render(){if(this.querySelector(".mu-switch__track")){this.#t();return}let t=h(this.attr("label","")||this.textContent);this.innerHTML=`
2
+ <span class="mu-switch__track">
3
+ <span class="mu-switch__thumb"></span>
4
+ </span>
5
+ ${t?`<span class="mu-switch__label">${t}</span>`:""}
6
+ `,this.style.display="inline-flex",this.style.alignItems="center",this.style.gap="12px",this.style.cursor=this.has("disabled")?"not-allowed":"pointer",this.#t()}update(t,s,e){this.#t()}#t(){let t=this.querySelector(".mu-switch__track"),s=this.querySelector(".mu-switch__thumb"),e=this.has("checked"),i=this.has("disabled");if(this.style.cursor=i?"not-allowed":"pointer",t)if(t.style.width="52px",t.style.height="32px",t.style.borderRadius="16px",t.style.position="relative",t.style.transition="background var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-standard)",i)t.style.background="color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent)";else t.style.background=e?"var(--md-sys-color-primary)":"var(--md-sys-color-surface-container-highest)";if(s){let a=e?24:16,m=e?4:8,u=e?24:6;if(s.style.width=`${a}px`,s.style.height=`${a}px`,s.style.borderRadius=`${a/2}px`,s.style.position="absolute",s.style.top=`${m}px`,s.style.left=`${u}px`,s.style.transition="all var(--md-sys-motion-duration-short4) var(--md-sys-motion-easing-emphasized)",i)s.style.background="color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent)",s.style.boxShadow="none";else s.style.background=e?"var(--md-sys-color-on-primary)":"var(--md-sys-color-outline)",s.style.boxShadow="var(--md-sys-elevation-level1)"}let r=this.querySelector(".mu-switch__label");if(r)r.style.color=i?"color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent)":"var(--md-sys-color-on-surface)";this.setAttribute("aria-checked",String(e)),this.setAttribute("aria-disabled",String(i)),this.setAttribute("tabindex",i?"-1":"0");let o=r?.textContent||this.attr("label","");if(o)this.setAttribute("aria-label",o)}toggle(){if(this.has("checked"))this.removeAttribute("checked");else this.setAttribute("checked","");this.emit("mu-change",{checked:this.has("checked")})}get checked(){return this.has("checked")}set checked(t){if(t)this.setAttribute("checked","");else this.removeAttribute("checked")}}c("mu-switch",d);
@@ -0,0 +1 @@
1
+ import"./chunk-1khyr3v1.js";import"./chunk-z960rexd.js";import"./chunk-sxddjs2d.js";import"./chunk-swyhghrm.js";import"./chunk-e86zbeta.js";import{j as s,k as t}from"./chunk-5qah04bh.js";class e extends s{static baseClass="mu-table";static observedAttributes=["striped","hover"];render(){this.style.display="table",this.style.width="100%",this.style.borderCollapse="collapse",this.style.fontSize="var(--md-sys-typescale-body-medium-size, 14px)"}}class a extends s{static baseClass="mu-table__head";render(){this.style.display="table-header-group",this.style.background="var(--md-sys-color-surface-container)"}}class l extends s{static baseClass="mu-table__body";render(){this.style.display="table-row-group"}}class i extends s{static baseClass="mu-table__row";render(){this.style.display="table-row",this.style.borderBottom="1px solid var(--md-sys-color-outline-variant)"}}class r extends s{static baseClass="mu-table__header";render(){this.style.display="table-cell",this.style.padding="12px 16px",this.style.fontWeight="600",this.style.textAlign="left"}}class d extends s{static baseClass="mu-table__cell";render(){this.style.display="table-cell",this.style.padding="12px 16px"}}t("mu-table",e);t("mu-thead",a);t("mu-tbody",l);t("mu-tr",i);t("mu-th",r);t("mu-td",d);
@@ -0,0 +1 @@
1
+ import"./chunk-z960rexd.js";import"./chunk-sxddjs2d.js";import"./chunk-swyhghrm.js";import"./chunk-e86zbeta.js";import"./chunk-5qah04bh.js";
@@ -0,0 +1 @@
1
+ import"./chunk-mhvcs2f8.js";import"./chunk-vby0zg5w.js";import"./chunk-sfb7x11v.js";import"./chunk-qxxa8trk.js";import"./chunk-rw15y9zh.js";import"./chunk-nv3bddmj.js";import"./chunk-z960rexd.js";import"./chunk-sxddjs2d.js";import"./chunk-swyhghrm.js";import"./chunk-e86zbeta.js";import"./chunk-5qah04bh.js";
@@ -0,0 +1,10 @@
1
+ import"./chunk-sfb7x11v.js";import"./chunk-qxxa8trk.js";import"./chunk-rw15y9zh.js";import"./chunk-1khyr3v1.js";import"./chunk-nv3bddmj.js";import"./chunk-z960rexd.js";import"./chunk-sxddjs2d.js";import"./chunk-swyhghrm.js";import"./chunk-e86zbeta.js";import{j as l,k as a}from"./chunk-5qah04bh.js";var h=8;class p extends l{static baseClass="mu-tooltip";static cssFile="tooltip";static observedAttributes=["content","position"];#t=null;connectedCallback(){super.connectedCallback(),this.listen(this,"mouseenter",()=>this.show()),this.listen(this,"mouseleave",()=>this.hide()),this.listen(this,"focus",()=>this.show(),{capture:!0}),this.listen(this,"blur",()=>this.hide(),{capture:!0})}render(){let s=this.attr("position","top");this.className=`mu-tooltip mu-tooltip--${s}`,this.style.position="relative",this.style.display="inline-block"}update(s,t,i){if(s==="position"){let e=this.attr("position","top");this.className=`mu-tooltip mu-tooltip--${e}`}}show(){if(this.#t)return;let s=this.attr("content","");if(!s)return;let t=this.attr("position","top");this.#t=document.createElement("div"),this.#t.className=`mu-tooltip__content mu-tooltip__content--${t}`,this.#t.textContent=s,this.#t.setAttribute("role","tooltip"),this.#t.style.cssText=`
2
+ position: fixed !important;
3
+ top: 0 !important;
4
+ left: 0 !important;
5
+ transform: none !important;
6
+ visibility: hidden;
7
+ z-index: var(--mu-z-tooltip, 9999);
8
+ pointer-events: none;
9
+ margin: 0 !important;
10
+ `,document.body.appendChild(this.#t),this.#e(t),requestAnimationFrame(()=>{if(this.#t)this.#t.style.visibility="visible",this.#t.style.opacity="1"})}#e(s){let t=this.getBoundingClientRect(),i=this.#t.getBoundingClientRect(),{x:e,y:o}=this.#i(s,t,i),n=this.#s(s,e,o,i,t);if(n!==s)({x:e,y:o}=this.#i(n,t,i));let{innerWidth:r,innerHeight:m}=window;e=Math.max(4,Math.min(e,r-i.width-4)),o=Math.max(4,Math.min(o,m-i.height-4)),this.#t.style.setProperty("left",`${e}px`,"important"),this.#t.style.setProperty("top",`${o}px`,"important")}#i(s,t,i){let e,o;switch(s){case"top":e=t.left+(t.width-i.width)/2,o=t.top-i.height-h;break;case"bottom":e=t.left+(t.width-i.width)/2,o=t.bottom+h;break;case"left":e=t.left-i.width-h,o=t.top+(t.height-i.height)/2;break;case"right":e=t.right+h,o=t.top+(t.height-i.height)/2;break;default:e=t.left+(t.width-i.width)/2,o=t.top-i.height-h}return{x:e,y:o}}#s(s,t,i,e,o){let{innerWidth:n,innerHeight:r}=window;switch(s){case"top":if(i<0)return"bottom";break;case"bottom":if(i+e.height>r)return"top";break;case"left":if(t<0)return"right";break;case"right":if(t+e.width>n)return"left";break}return s}hide(){if(this.#t)this.#t.remove(),this.#t=null}disconnectedCallback(){super.disconnectedCallback(),this.hide()}}a("mu-tooltip",p);