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