microui-wc 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/AGENTS.md +71 -71
  2. package/CHANGELOG.md +1 -1
  3. package/README.md +14 -9
  4. package/dist/AGENTS.md +116 -116
  5. package/dist/README.md +21 -16
  6. package/dist/components.css +1 -1
  7. package/dist/microui.css +1 -1
  8. package/dist/microui.esm.js.map +1 -1
  9. package/dist/microui.min.js.map +1 -1
  10. package/dist/styles/components/switch.css +1 -1
  11. package/docs/getting-started.md +3 -3
  12. package/package.json +38 -10
  13. package/src/components/mu-schema-form.js +1 -1
  14. package/src/styles/components/switch.css +7 -8
  15. package/src/styles/components.css +6 -6
  16. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  17. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -33
  18. package/.github/PULL_REQUEST_TEMPLATE.md +0 -28
  19. package/.github/workflows/ci.yml +0 -42
  20. package/.github/workflows/deploy-pages.yml +0 -112
  21. package/CODE_OF_CONDUCT.md +0 -59
  22. package/CONTRIBUTING.md +0 -156
  23. package/SECURITY.md +0 -58
  24. package/app/.generated/routes/alerts.js +0 -8
  25. package/app/.generated/routes/avatars.js +0 -8
  26. package/app/.generated/routes/badges.js +0 -8
  27. package/app/.generated/routes/buttons.js +0 -10
  28. package/app/.generated/routes/cards.js +0 -10
  29. package/app/.generated/routes/checkboxes.js +0 -9
  30. package/app/.generated/routes/chips.js +0 -8
  31. package/app/.generated/routes/dropdowns.js +0 -9
  32. package/app/.generated/routes/home.js +0 -7
  33. package/app/.generated/routes/icons.js +0 -9
  34. package/app/.generated/routes/inputs.js +0 -10
  35. package/app/.generated/routes/installation.js +0 -7
  36. package/app/.generated/routes/layout.js +0 -9
  37. package/app/.generated/routes/modals.js +0 -9
  38. package/app/.generated/routes/navbar.js +0 -7
  39. package/app/.generated/routes/progress.js +0 -9
  40. package/app/.generated/routes/radios.js +0 -9
  41. package/app/.generated/routes/switches.js +0 -9
  42. package/app/.generated/routes/tabs.js +0 -8
  43. package/app/.generated/routes/toasts.js +0 -9
  44. package/app/index.html +0 -67
  45. package/app/pages/alerts.html +0 -23
  46. package/app/pages/avatars.html +0 -22
  47. package/app/pages/badges.html +0 -22
  48. package/app/pages/buttons.html +0 -71
  49. package/app/pages/cards.html +0 -54
  50. package/app/pages/checkboxes.html +0 -39
  51. package/app/pages/chips.html +0 -23
  52. package/app/pages/dropdowns.html +0 -41
  53. package/app/pages/home.html +0 -59
  54. package/app/pages/icons.html +0 -29
  55. package/app/pages/inputs.html +0 -66
  56. package/app/pages/installation.html +0 -34
  57. package/app/pages/layout.html +0 -30
  58. package/app/pages/modals.html +0 -21
  59. package/app/pages/navbar.html +0 -22
  60. package/app/pages/progress.html +0 -35
  61. package/app/pages/radios.html +0 -40
  62. package/app/pages/switches.html +0 -39
  63. package/app/pages/tabs.html +0 -30
  64. package/app/pages/toasts.html +0 -22
  65. package/app-dist/index.html +0 -67
  66. package/app-dist/pages/alerts.html +0 -23
  67. package/app-dist/pages/avatars.html +0 -22
  68. package/app-dist/pages/badges.html +0 -22
  69. package/app-dist/pages/buttons.html +0 -71
  70. package/app-dist/pages/cards.html +0 -54
  71. package/app-dist/pages/checkboxes.html +0 -39
  72. package/app-dist/pages/chips.html +0 -23
  73. package/app-dist/pages/dropdowns.html +0 -41
  74. package/app-dist/pages/home.html +0 -59
  75. package/app-dist/pages/icons.html +0 -29
  76. package/app-dist/pages/inputs.html +0 -66
  77. package/app-dist/pages/installation.html +0 -34
  78. package/app-dist/pages/layout.html +0 -30
  79. package/app-dist/pages/modals.html +0 -21
  80. package/app-dist/pages/navbar.html +0 -22
  81. package/app-dist/pages/progress.html +0 -35
  82. package/app-dist/pages/radios.html +0 -40
  83. package/app-dist/pages/switches.html +0 -39
  84. package/app-dist/pages/tabs.html +0 -30
  85. package/app-dist/pages/toasts.html +0 -22
  86. package/app-dist/pages.json +0 -217
  87. package/app-dist/routes/alerts.js +0 -5
  88. package/app-dist/routes/avatars.js +0 -1
  89. package/app-dist/routes/badges.js +0 -1
  90. package/app-dist/routes/buttons.js +0 -1
  91. package/app-dist/routes/cards.js +0 -1
  92. package/app-dist/routes/checkboxes.js +0 -9
  93. package/app-dist/routes/chips.js +0 -4
  94. package/app-dist/routes/chunk-019e5e2f.js +0 -5
  95. package/app-dist/routes/chunk-0m4j19yd.js +0 -2
  96. package/app-dist/routes/chunk-0tmmp5q0.js +0 -1
  97. package/app-dist/routes/chunk-10xn709r.js +0 -1
  98. package/app-dist/routes/chunk-15m2qcda.js +0 -2
  99. package/app-dist/routes/chunk-1bh8g23n.js +0 -1
  100. package/app-dist/routes/chunk-1vg0v937.js +0 -1
  101. package/app-dist/routes/chunk-1zvcgy3j.js +0 -1
  102. package/app-dist/routes/chunk-2afb0861.js +0 -1
  103. package/app-dist/routes/chunk-2c6ttpzt.js +0 -5
  104. package/app-dist/routes/chunk-3dy30fhs.js +0 -1
  105. package/app-dist/routes/chunk-426dnces.js +0 -13
  106. package/app-dist/routes/chunk-44kgxery.js +0 -1
  107. package/app-dist/routes/chunk-47fdnejd.js +0 -33
  108. package/app-dist/routes/chunk-49a6t2vq.js +0 -1
  109. package/app-dist/routes/chunk-4fe1rm5b.js +0 -1
  110. package/app-dist/routes/chunk-4ggmvkta.js +0 -33
  111. package/app-dist/routes/chunk-4vkz81q7.js +0 -33
  112. package/app-dist/routes/chunk-4w4tmj8f.js +0 -31
  113. package/app-dist/routes/chunk-532s62kr.js +0 -31
  114. package/app-dist/routes/chunk-5hm3bssy.js +0 -33
  115. package/app-dist/routes/chunk-5vrh24hc.js +0 -1
  116. package/app-dist/routes/chunk-61pcg25a.js +0 -1
  117. package/app-dist/routes/chunk-6nfhygvf.js +0 -1
  118. package/app-dist/routes/chunk-700e7je6.js +0 -33
  119. package/app-dist/routes/chunk-7fsn17kg.js +0 -1
  120. package/app-dist/routes/chunk-7k789b32.js +0 -1
  121. package/app-dist/routes/chunk-7r46q0ys.js +0 -36
  122. package/app-dist/routes/chunk-86fmc1fr.js +0 -5
  123. package/app-dist/routes/chunk-8qth37vw.js +0 -1
  124. package/app-dist/routes/chunk-924wv8n0.js +0 -1
  125. package/app-dist/routes/chunk-9mbhgxk9.js +0 -1
  126. package/app-dist/routes/chunk-a216hyd9.js +0 -1
  127. package/app-dist/routes/chunk-akzxykh9.js +0 -33
  128. package/app-dist/routes/chunk-b3dcvy8c.js +0 -1
  129. package/app-dist/routes/chunk-b74zahz5.js +0 -31
  130. package/app-dist/routes/chunk-bftj53p2.js +0 -5
  131. package/app-dist/routes/chunk-c01hnz3e.js +0 -1
  132. package/app-dist/routes/chunk-d8pvv5km.js +0 -1
  133. package/app-dist/routes/chunk-dev0aezr.js +0 -2
  134. package/app-dist/routes/chunk-dh6vnv0e.js +0 -1
  135. package/app-dist/routes/chunk-dn2cbpva.js +0 -36
  136. package/app-dist/routes/chunk-dvn0my90.js +0 -1
  137. package/app-dist/routes/chunk-dvq8mnve.js +0 -36
  138. package/app-dist/routes/chunk-e8c2gc4d.js +0 -5
  139. package/app-dist/routes/chunk-ejf9ak2x.js +0 -1
  140. package/app-dist/routes/chunk-f083m55s.js +0 -1
  141. package/app-dist/routes/chunk-fnrj28s1.js +0 -31
  142. package/app-dist/routes/chunk-fvg3yjdp.js +0 -31
  143. package/app-dist/routes/chunk-g7k381n1.js +0 -1
  144. package/app-dist/routes/chunk-h01kq2ae.js +0 -13
  145. package/app-dist/routes/chunk-h4dk761v.js +0 -5
  146. package/app-dist/routes/chunk-hmx91z2x.js +0 -5
  147. package/app-dist/routes/chunk-hxbg4m42.js +0 -36
  148. package/app-dist/routes/chunk-jbjnfp2b.js +0 -2
  149. package/app-dist/routes/chunk-jxtz5vv6.js +0 -36
  150. package/app-dist/routes/chunk-jxzcs0ey.js +0 -36
  151. package/app-dist/routes/chunk-kt7wwhcx.js +0 -1
  152. package/app-dist/routes/chunk-kzptszyc.js +0 -33
  153. package/app-dist/routes/chunk-mhgca4w4.js +0 -2
  154. package/app-dist/routes/chunk-mhswxa20.js +0 -1
  155. package/app-dist/routes/chunk-n8zfeex6.js +0 -1
  156. package/app-dist/routes/chunk-pee47b2r.js +0 -1
  157. package/app-dist/routes/chunk-pesmw829.js +0 -1
  158. package/app-dist/routes/chunk-pgc4c6f3.js +0 -36
  159. package/app-dist/routes/chunk-q8egegm1.js +0 -1
  160. package/app-dist/routes/chunk-q9mn2qyq.js +0 -36
  161. package/app-dist/routes/chunk-qh0rtaf3.js +0 -5
  162. package/app-dist/routes/chunk-qqhmk6ye.js +0 -2
  163. package/app-dist/routes/chunk-qrxygmf7.js +0 -33
  164. package/app-dist/routes/chunk-r46yzksx.js +0 -36
  165. package/app-dist/routes/chunk-rgpbw2w0.js +0 -5
  166. package/app-dist/routes/chunk-rnpzv3d8.js +0 -2
  167. package/app-dist/routes/chunk-s5v8cv05.js +0 -2
  168. package/app-dist/routes/chunk-sbwn5bpc.js +0 -1
  169. package/app-dist/routes/chunk-sqbg8jbt.js +0 -33
  170. package/app-dist/routes/chunk-sv8dqnf7.js +0 -1
  171. package/app-dist/routes/chunk-t67sw3za.js +0 -1
  172. package/app-dist/routes/chunk-tjdpqwdf.js +0 -31
  173. package/app-dist/routes/chunk-tq2mfghg.js +0 -1
  174. package/app-dist/routes/chunk-ttn10vt6.js +0 -1
  175. package/app-dist/routes/chunk-v2hzpjxr.js +0 -1
  176. package/app-dist/routes/chunk-wfjjkw9y.js +0 -1
  177. package/app-dist/routes/chunk-wt8cxzmf.js +0 -31
  178. package/app-dist/routes/chunk-x45d372k.js +0 -5
  179. package/app-dist/routes/chunk-y3wsazkt.js +0 -1
  180. package/app-dist/routes/chunk-y7pmgc7t.js +0 -33
  181. package/app-dist/routes/chunk-zefdt2q3.js +0 -31
  182. package/app-dist/routes/dropdowns.js +0 -6
  183. package/app-dist/routes/home.js +0 -1
  184. package/app-dist/routes/icons.js +0 -1
  185. package/app-dist/routes/inputs.js +0 -12
  186. package/app-dist/routes/installation.js +0 -1
  187. package/app-dist/routes/layout.js +0 -1
  188. package/app-dist/routes/modals.js +0 -7
  189. package/app-dist/routes/navbar.js +0 -1
  190. package/app-dist/routes/progress.js +0 -1
  191. package/app-dist/routes/radios.js +0 -6
  192. package/app-dist/routes/switches.js +0 -6
  193. package/app-dist/routes/tabs.js +0 -1
  194. package/app-dist/routes/toasts.js +0 -16
  195. package/assets/fonts/material-symbols-mini.woff2 +0 -0
  196. package/assets/fonts/material-symbols.woff2 +0 -0
  197. package/assets/fonts/roboto-400.woff2 +0 -0
  198. package/assets/fonts/roboto-500.woff2 +0 -0
  199. package/assets/fonts/roboto-700.woff2 +0 -0
  200. package/assets/logo-banner-400.jpg +0 -0
  201. package/assets/logo-banner-400.webp +0 -0
  202. package/assets/logo-banner-800.webp +0 -0
  203. package/assets/logo-banner.jpg +0 -0
  204. package/assets/logo-icon-64.jpg +0 -0
  205. package/assets/logo-icon-64.webp +0 -0
  206. package/assets/logo-icon.jpg +0 -0
  207. package/assets/logo-square.jpg +0 -0
  208. package/bun.lock +0 -312
  209. package/bunfig.toml +0 -4
  210. package/custom-elements.json +0 -1916
  211. package/demo/api/sample-data.json +0 -38
  212. package/demo/content/alerts.html +0 -115
  213. package/demo/content/avatars.html +0 -70
  214. package/demo/content/badges.html +0 -65
  215. package/demo/content/buttons.html +0 -188
  216. package/demo/content/callouts.html +0 -91
  217. package/demo/content/cards.html +0 -121
  218. package/demo/content/checkboxes.html +0 -178
  219. package/demo/content/chips.html +0 -67
  220. package/demo/content/codeblocks.html +0 -101
  221. package/demo/content/confirms.html +0 -115
  222. package/demo/content/datatables.html +0 -149
  223. package/demo/content/dividers.html +0 -119
  224. package/demo/content/dropdowns.html +0 -89
  225. package/demo/content/enterprise.html +0 -252
  226. package/demo/content/home.html +0 -149
  227. package/demo/content/icons.html +0 -89
  228. package/demo/content/inputs.html +0 -135
  229. package/demo/content/installation.html +0 -16
  230. package/demo/content/layout.html +0 -136
  231. package/demo/content/modals.html +0 -141
  232. package/demo/content/navbar.html +0 -70
  233. package/demo/content/progress.html +0 -119
  234. package/demo/content/radios.html +0 -88
  235. package/demo/content/skeletons.html +0 -109
  236. package/demo/content/spinners.html +0 -96
  237. package/demo/content/switches.html +0 -84
  238. package/demo/content/tables.html +0 -124
  239. package/demo/content/tabs.html +0 -85
  240. package/demo/content/toasts.html +0 -116
  241. package/demo/content/tooltips.html +0 -107
  242. package/demo/content/virtual-lists.html +0 -233
  243. package/demo/favicon.ico +0 -0
  244. package/demo/favicon.png +0 -0
  245. package/demo/full.html +0 -52
  246. package/demo/iife.html +0 -46
  247. package/demo/manifest.json +0 -34
  248. package/demo/pages/datatable-demo.html +0 -237
  249. package/demo/pages/prompt-ui-demo.html +0 -218
  250. package/demo/pages/responsive-demo.html +0 -122
  251. package/demo/pages/schema-form-demo.html +0 -270
  252. package/demo/robots.txt +0 -6
  253. package/demo/shell.html +0 -712
  254. package/demo/sw.js +0 -387
  255. package/lighthouse-audit.mjs +0 -113
  256. package/scripts/analyze-components.js +0 -105
  257. package/scripts/build-app.js +0 -193
  258. package/scripts/build-framework.js +0 -444
  259. package/scripts/build-utils.js +0 -101
  260. package/scripts/test-isolated.js +0 -151
  261. package/server.js +0 -256
  262. package/tests/agents/agent-integration.test.js +0 -76
  263. package/tests/benchmark.html +0 -296
  264. package/tests/build/scan-components.test.js +0 -173
  265. package/tests/components/all-components.test.js +0 -245
  266. package/tests/components/all-missing-components.test.js +0 -574
  267. package/tests/components/mu-alert.test.js +0 -113
  268. package/tests/components/mu-avatar.test.js +0 -148
  269. package/tests/components/mu-badge.test.js +0 -92
  270. package/tests/components/mu-button.test.js +0 -112
  271. package/tests/components/mu-card.test.js +0 -89
  272. package/tests/components/mu-checkbox.test.js +0 -158
  273. package/tests/components/mu-chip.test.js +0 -118
  274. package/tests/components/mu-container.test.js +0 -120
  275. package/tests/components/mu-divider.test.js +0 -98
  276. package/tests/components/mu-drawer-item.test.js +0 -199
  277. package/tests/components/mu-drawer.test.js +0 -96
  278. package/tests/components/mu-dropdown.test.js +0 -125
  279. package/tests/components/mu-form.test.js +0 -138
  280. package/tests/components/mu-grid.test.js +0 -135
  281. package/tests/components/mu-icon.test.js +0 -110
  282. package/tests/components/mu-input.test.js +0 -131
  283. package/tests/components/mu-lazy.test.js +0 -103
  284. package/tests/components/mu-modal.test.js +0 -275
  285. package/tests/components/mu-navbar.test.js +0 -101
  286. package/tests/components/mu-progress.test.js +0 -115
  287. package/tests/components/mu-radio.test.js +0 -114
  288. package/tests/components/mu-repeat.test.js +0 -106
  289. package/tests/components/mu-sidebar.test.js +0 -126
  290. package/tests/components/mu-skeleton.test.js +0 -162
  291. package/tests/components/mu-stack.test.js +0 -143
  292. package/tests/components/mu-switch.test.js +0 -292
  293. package/tests/components/mu-table.test.js +0 -124
  294. package/tests/components/mu-tabs.test.js +0 -104
  295. package/tests/components/mu-textarea.test.js +0 -115
  296. package/tests/components/mu-toast.test.js +0 -321
  297. package/tests/components/mu-tooltip.test.js +0 -133
  298. package/tests/components/mu-virtual-list.test.js +0 -109
  299. package/tests/core/MuElement.test.js +0 -120
  300. package/tests/core/agent-api.test.js +0 -125
  301. package/tests/core/all-core-modules.test.js +0 -442
  302. package/tests/core/bus.test.js +0 -364
  303. package/tests/core/component-schema.test.js +0 -160
  304. package/tests/core/feature-registry.test.js +0 -198
  305. package/tests/core/form-state.test.js +0 -167
  306. package/tests/core/http.test.js +0 -119
  307. package/tests/core/keyboard.test.js +0 -319
  308. package/tests/core/layers.test.js +0 -129
  309. package/tests/core/namespaced-stores.test.js +0 -114
  310. package/tests/core/render.test.js +0 -121
  311. package/tests/core/ripple.test.js +0 -131
  312. package/tests/core/router.test.js +0 -89
  313. package/tests/core/scheduler.test.js +0 -121
  314. package/tests/core/signals.test.js +0 -128
  315. package/tests/core/store.test.js +0 -171
  316. package/tests/core/transitions.test.js +0 -82
  317. package/tests/e2e/accessibility-harness.html +0 -58
  318. package/tests/e2e/accessibility.test.js +0 -401
  319. package/tests/e2e/agent-features.test.js +0 -372
  320. package/tests/e2e/card-spacing.test.js +0 -287
  321. package/tests/e2e/components.test.js +0 -439
  322. package/tests/e2e/demo-routes.test.js +0 -478
  323. package/tests/e2e/layout-css-fallback.test.js +0 -334
  324. package/tests/e2e/mu-alert.e2e.test.js +0 -111
  325. package/tests/e2e/mu-checkbox.test.js +0 -489
  326. package/tests/e2e/mu-chip.test.js +0 -347
  327. package/tests/e2e/mu-form.test.js +0 -499
  328. package/tests/e2e/mu-icon.test.js +0 -114
  329. package/tests/e2e/mu-radio.test.js +0 -113
  330. package/tests/e2e/mu-skeleton.test.js +0 -140
  331. package/tests/e2e/mu-switch.test.js +0 -415
  332. package/tests/e2e/mu-tabs.test.js +0 -494
  333. package/tests/e2e/mu-textarea.test.js +0 -242
  334. package/tests/e2e/mu-virtual-list.test.js +0 -427
  335. package/tests/e2e/perf-memory.test.js +0 -161
  336. package/tests/e2e/puppeteer-helper.js +0 -137
  337. package/tests/e2e/puppeteer.test.js +0 -226
  338. package/tests/e2e/pwa.test.js +0 -261
  339. package/tests/e2e/test-harness.html +0 -319
  340. package/tests/manual/test-components.html +0 -120
  341. package/tests/memory-test.html +0 -309
  342. package/tests/setup-dom.js +0 -93
  343. package/tests/visual-test.html +0 -301
package/AGENTS.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **SOTA reference for AI coding assistants.** This document is optimized for LLMs generating microUI code.
4
4
 
5
- ## 🚨 REGOLE INVIOLABILI
5
+ ## 🚨 MANDATORY RULES
6
6
 
7
7
  > [!CAUTION]
8
8
  > These rules can NEVER be violated. Any code that violates these rules must be rejected.
@@ -10,13 +10,13 @@
10
10
  ### ❌ NO SHADOW DOM
11
11
 
12
12
  **microUI must NEVER use Shadow DOM.** All components must:
13
- - Usare Light DOM (il DOM normale)
14
- - Inserire gli elementi direttamente nel documento
15
- - Usare classi CSS con prefisso `mu-` per l'incapsulamento
16
- - Mai usare `this.attachShadow()` o `this.shadowRoot`
13
+ - Use Light DOM (normal DOM)
14
+ - Insert elements directly into the document
15
+ - Use CSS classes with `mu-` prefix for encapsulation
16
+ - Never use `this.attachShadow()` or `this.shadowRoot`
17
17
 
18
18
  ```javascript
19
- // ❌ FORBIDDEN - Non usare MAI
19
+ // ❌ FORBIDDEN - Never use this
20
20
  this.attachShadow({ mode: 'open' });
21
21
  this.shadowRoot.innerHTML = '...';
22
22
 
@@ -25,12 +25,12 @@ this.innerHTML = '...';
25
25
  this.classList.add('mu-component');
26
26
  ```
27
27
 
28
- ### 🧪 TEST ISOLATION OBBLIGATORIA
28
+ ### 🧪 MANDATORY TEST ISOLATION
29
29
 
30
- **Tests MUST be run with `test-isolated.js`**, never with `bun test` diretto.
30
+ **Tests MUST be run with `test-isolated.js`**, never with `bun test` directly.
31
31
 
32
32
  ```bash
33
- # ❌ SBAGLIATO - Test falliscono per linkedom globalThis pollution
33
+ # ❌ WRONG - Tests fail due to linkedom globalThis pollution
34
34
  bun test tests/components
35
35
 
36
36
  # ✅ CORRECT - Each test in separate process
@@ -40,15 +40,15 @@ bun run scripts/test-isolated.js
40
40
  bun run test:e2e
41
41
  ```
42
42
 
43
- **Why?** linkedom (used to simulate DOM in unit tests) pollutes `globalThis` e il registry dei custom elements. When tests are run in parallel in the same process, the registrations conflict.
43
+ **Why?** linkedom (used to simulate DOM in unit tests) pollutes `globalThis` and the custom elements registry. When tests are run in parallel in the same process, the registrations conflict.
44
44
 
45
45
  ---
46
46
 
47
47
  ## 🛠️ COMPONENT DEVELOPMENT GUIDELINES
48
48
 
49
- > **Linee guida obbligatorie per creare nuovi componenti microUI.** Seguire queste regole previene memory leak, crash e garantisce consistenza con il framework.
49
+ > **Mandatory guidelines for creating new microUI components.** Following these rules prevents memory leaks, crashes, and ensures consistency with the framework.
50
50
 
51
- ### 📋 Template Componente Completo
51
+ ### 📋 Complete Component Template
52
52
 
53
53
  ```javascript
54
54
  /**
@@ -59,7 +59,7 @@ bun run test:e2e
59
59
  */
60
60
 
61
61
  import { MuElement, define } from '../core/MuElement.js';
62
- import { escapeHTML } from '../core/utils.js'; // Per contenuti user-facing
62
+ import { escapeHTML } from '../core/utils.js'; // For user-facing content
63
63
 
64
64
  export class MuExample extends MuElement {
65
65
  static get observedAttributes() {
@@ -75,17 +75,17 @@ export class MuExample extends MuElement {
75
75
  }
76
76
 
77
77
  // ========================
78
- // LIFECYCLE (OBBLIGATORIO)
78
+ // LIFECYCLE (MANDATORY)
79
79
  // ========================
80
80
 
81
81
  connectedCallback() {
82
- super.connectedCallback(); // ⚠️ OBBLIGATORIO - Inizializza AbortController
82
+ super.connectedCallback(); // ⚠️ MANDATORY - Initializes AbortController
83
83
  this.render();
84
84
  }
85
85
 
86
86
  disconnectedCallback() {
87
- super.disconnectedCallback(); // ⚠️ OBBLIGATORIO se usi timer/subscriptions
88
- // Cleanup subscriptions manuali (es. breakpoints.subscribe)
87
+ super.disconnectedCallback(); // ⚠️ MANDATORY if using timer/subscriptions
88
+ // Cleanup manual subscriptions (e.g. breakpoints.subscribe)
89
89
  }
90
90
 
91
91
  attributeChangedCallback(name, oldVal, newVal) {
@@ -115,7 +115,7 @@ export class MuExample extends MuElement {
115
115
  // ========================
116
116
 
117
117
  render() {
118
- // ✅ SEMPRE escapare contenuti user-facing
118
+ // ✅ ALWAYS escape user-facing content
119
119
  this.innerHTML = `
120
120
  <div class="mu-example">
121
121
  <label>${escapeHTML(this.label)}</label>
@@ -174,7 +174,7 @@ export class MuExample extends MuElement {
174
174
 
175
175
  _validate() {
176
176
  if (!this.label) {
177
- // ✅ Segnala errori per AI agent debugging
177
+ // ✅ Report errors for AI agent debugging
178
178
  this.logError('MISSING_LABEL', 'mu-example requires a label attribute');
179
179
  }
180
180
  }
@@ -189,57 +189,57 @@ if (!customElements.get('mu-example')) {
189
189
  ### ⚠️ ANTI-PATTERN: What NEVER to Do
190
190
 
191
191
  ```javascript
192
- // ❌ FORBIDDEN: addEventListener diretto (memory leak)
192
+ // ❌ FORBIDDEN: Direct addEventListener (memory leak)
193
193
  this.querySelector('button').addEventListener('click', handler);
194
194
 
195
195
  // ❌ FORBIDDEN: setTimeout/setInterval raw (memory leak)
196
196
  setTimeout(() => this.update(), 1000);
197
197
  setInterval(() => this.poll(), 5000);
198
198
 
199
- // ❌ FORBIDDEN: Nessun super.connectedCallback() (AbortController non inizializzato)
199
+ // ❌ FORBIDDEN: No super.connectedCallback() (AbortController not initialized)
200
200
  connectedCallback() {
201
- this.render(); // this.listen() non funzionerà!
201
+ this.render(); // this.listen() won't work!
202
202
  }
203
203
 
204
- // ❌ FORBIDDEN: innerHTML senza escaping (XSS vulnerability)
204
+ // ❌ FORBIDDEN: innerHTML without escaping (XSS vulnerability)
205
205
  this.innerHTML = `<div>${userInput}</div>`;
206
206
 
207
- // ❌ FORBIDDEN: removeEventListener con arrow function (non funziona mai)
207
+ // ❌ FORBIDDEN: removeEventListener with arrow function (never works)
208
208
  window.removeEventListener('resize', () => this.handleResize());
209
209
 
210
- // ❌ FORBIDDEN: Temporal dead zone con setTimeout
210
+ // ❌ FORBIDDEN: Temporal dead zone with setTimeout
211
211
  const id = setTimeout(() => { this._timers.delete(id); }, delay);
212
212
 
213
213
  // ❌ FORBIDDEN: Shadow DOM
214
214
  this.attachShadow({ mode: 'open' });
215
215
 
216
- // ❌ FORBIDDEN: DOM Teleportation senza reset del flag listener (Bug Jan 2026)
216
+ // ❌ FORBIDDEN: DOM Teleportation without resetting listener flag (Bug Jan 2026)
217
217
  // When a component moves ITSELF in the DOM (e.g. appendChild(this)),
218
- // disconnectedCallback aborta i listener ma il flag impedisce ri-registrazione
218
+ // disconnectedCallback aborts listeners but the flag prevents re-registration
219
219
  connectedCallback() {
220
- if (!this._listenerSetup) { // ⚠️ Il flag resta true dopo disconnect!
220
+ if (!this._listenerSetup) { // ⚠️ Flag stays true after disconnect!
221
221
  this._listenerSetup = true;
222
- this.listen(this, 'click', handler); // Perso dopo teleportation
222
+ this.listen(this, 'click', handler); // Lost after teleportation
223
223
  }
224
224
  }
225
- // ✅ CORRECT: Reset del flag in disconnectedCallback
225
+ // ✅ CORRECT: Reset flag in disconnectedCallback
226
226
  disconnectedCallback() {
227
227
  super.disconnectedCallback();
228
- this._listenerSetup = false; // Permette ri-registrazione dopo move
228
+ this._listenerSetup = false; // Allows re-registration after move
229
229
  }
230
230
  ```
231
231
 
232
- ### ✅ PATTERN OBBLIGATORI
232
+ ### ✅ MANDATORY PATTERNS
233
233
 
234
234
  | Pattern | Method | Why |
235
235
  |---------|--------|--------|
236
236
  | **Event Listeners** | `this.listen(target, type, handler)` | Auto-cleanup via AbortController |
237
- | **Timers** | `this.setTimeout()` / `this.setInterval()` | Auto-cleanup su disconnectedCallback |
238
- | **XSS Prevention** | `escapeHTML(userInput)` | Previene injection in innerHTML |
239
- | **Keyboard A11y** | `this.setupActivation(callback)` | Gestisce Enter/Space per elementi interattivi |
240
- | **AI Debugging** | `this.logError(code, message)` | Errori strutturati per AI agents |
241
- | **Lifecycle** | `super.connectedCallback()` | Inizializza AbortController per this.listen() |
242
- | **DOM Teleportation** | Reset flag in `disconnectedCallback()` | Previene listener orfani dopo move |
237
+ | **Timers** | `this.setTimeout()` / `this.setInterval()` | Auto-cleanup on disconnectedCallback |
238
+ | **XSS Prevention** | `escapeHTML(userInput)` | Prevents injection in innerHTML |
239
+ | **Keyboard A11y** | `this.setupActivation(callback)` | Handles Enter/Space for interactive elements |
240
+ | **AI Debugging** | `this.logError(code, message)` | Structured errors for AI agents |
241
+ | **Lifecycle** | `super.connectedCallback()` | Initializes AbortController for this.listen() |
242
+ | **DOM Teleportation** | Reset flag in `disconnectedCallback()` | Prevents orphan listeners after move |
243
243
 
244
244
  ### 🚀 SOTA Patterns (Feb 2026)
245
245
 
@@ -247,15 +247,15 @@ Modern patterns that should be used for new components and migrations.
247
247
 
248
248
  #### ✅ Performance CSS (Implemented)
249
249
 
250
- Il framework applica **by default** le seguenti ottimizzazioni:
250
+ The framework applies **by default** the following optimizations:
251
251
 
252
- | Tecnica | File | Beneficio |
252
+ | Technique | File | Benefit |
253
253
  |---------|------|-----------|
254
- | `will-change` | animations.css | GPU compositor hints per 13+ classi animazione |
255
- | `CSS contain` | layout.css, components.css | Isola repaint scope per mu-layout, modals |
256
- | `content-visibility: auto` | components.css | Skip rendering off-screen per mu-example |
257
- | Speculation Rules API | shell.html | Prefetch route bundle predittivo |
258
- | View Transitions API | shell.html | Animazioni smooth tra pagine SPA |
254
+ | `will-change` | animations.css | GPU compositor hints for 13+ animation classes |
255
+ | `CSS contain` | layout.css, components.css | Isolates repaint scope for mu-layout, modals |
256
+ | `content-visibility: auto` | components.css | Skip rendering off-screen for mu-example |
257
+ | Speculation Rules API | shell.html | Predictive route bundle prefetch |
258
+ | View Transitions API | shell.html | Smooth page transitions in SPA |
259
259
 
260
260
  **Lighthouse Score**: 98/100 Performance, 100/100 Accessibility/BP/SEO
261
261
 
@@ -276,37 +276,37 @@ mu-layout {
276
276
  }
277
277
  ```
278
278
 
279
- #### ✅ Native `<dialog>` per Modal (COMPLETATO)
280
- **mu-modal** usa ora `<dialog>` nativo con `showModal()`:
281
- - Top-layer automatico (niente z-index manuali)
282
- - Focus trap built-in
283
- - ESC key gestito nativamente
284
- - `::backdrop` per scrim animato
285
- - `margin: auto` per centrare
279
+ #### ✅ Native `<dialog>` for Modal (COMPLETED)
280
+ **mu-modal** now uses native `<dialog>` with `showModal()`:
281
+ - Automatic top-layer (no manual z-index)
282
+ - Built-in focus trap
283
+ - Native ESC key handling
284
+ - Animated `::backdrop` scrim
285
+ - `margin: auto` for centering
286
286
 
287
287
  ```javascript
288
288
  // ✅ SOTA: Native dialog
289
289
  this.#dialog = document.createElement('dialog');
290
290
  this.#dialog.showModal();
291
291
 
292
- // ❌ VECCHIO: Position fixed + z-index + manual focus trap
292
+ // ❌ OLD: Position fixed + z-index + manual focus trap
293
293
  this.style.cssText = 'position:fixed;z-index:9999;';
294
294
  document.body.appendChild(this);
295
295
  ```
296
296
 
297
- #### 🔜 Popover API (CANDIDATI)
298
- I seguenti componenti potrebbero beneficiare della **Popover API**:
297
+ #### 🔜 Popover API (CANDIDATES)
298
+ The following components could benefit from the **Popover API**:
299
299
 
300
- | Componente | Pattern Attuale | SOTA Migration |
300
+ | Component | Current Pattern | SOTA Migration |
301
301
  |------------|----------------|----------------|
302
302
  | `mu-dropdown` | Portal container + z-index | `popover` attribute |
303
303
  | `mu-tooltip` | Position fixed + z-index | `popover` attribute |
304
304
 
305
- **Benefici Popover API**:
306
- - Light-dismiss automatico (click outside)
307
- - Top-layer (niente z-index issues)
305
+ **Popover API Benefits**:
306
+ - Automatic light-dismiss (click outside)
307
+ - Top-layer (no z-index issues)
308
308
  - `showPopover()` / `hidePopover()` / `togglePopover()`
309
- - Keyboard accessibility built-in
309
+ - Built-in keyboard accessibility
310
310
 
311
311
  ```html
312
312
  <!-- SOTA: Declarative popover -->
@@ -316,27 +316,27 @@ I seguenti componenti potrebbero beneficiare della **Popover API**:
316
316
 
317
317
  ### 🔒 Security Checklist
318
318
 
319
- Prima di completare un componente, verifica:
319
+ Before completing a component, verify:
320
320
 
321
- - [ ] Tutti i contenuti user-facing usano `escapeHTML()`
321
+ - [ ] All user-facing content uses `escapeHTML()`
322
322
  - [ ] Interpolated attributes in innerHTML are escaped
323
323
  - [ ] Slot content controlled (developer-provided) or escaped
324
- - [ ] Nessun `eval()`, `Function()`, `document.write()`
324
+ - [ ] No `eval()`, `Function()`, `document.write()`
325
325
 
326
326
  ### ♿ Accessibility Checklist
327
327
 
328
- - [ ] Elementi interattivi hanno `tabindex="0"`
329
- - [ ] Role ARIA appropriato (`role="button"`, `role="menuitem"`, etc.)
330
- - [ ] `setupActivation()` per attivazione via keyboard (Enter/Space)
331
- - [ ] `aria-label` o label associata per screen reader
332
- - [ ] Stati (`aria-checked`, `aria-expanded`, etc.) aggiornati dinamicamente
328
+ - [ ] Interactive elements have `tabindex="0"`
329
+ - [ ] Appropriate ARIA role (`role="button"`, `role="menuitem"`, etc.)
330
+ - [ ] `setupActivation()` for keyboard activation (Enter/Space)
331
+ - [ ] `aria-label` or associated label for screen readers
332
+ - [ ] States (`aria-checked`, `aria-expanded`, etc.) dynamically updated
333
333
 
334
334
  ### 🧪 Testing Checklist
335
335
 
336
- - [ ] Unit test con `bun run scripts/test-isolated.js`
337
- - [ ] E2E test per interazioni browser reali
336
+ - [ ] Unit test with `bun run scripts/test-isolated.js`
337
+ - [ ] E2E test for real browser interactions
338
338
  - [ ] Coverage ≥97%
339
- - [ ] Test memory leak: componente aggiunto/rimosso dal DOM non lascia listener
339
+ - [ ] Test memory leak: component added/removed from DOM leaves no listeners
340
340
 
341
341
  ---
342
342
 
package/CHANGELOG.md CHANGED
@@ -44,4 +44,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
44
44
 
45
45
  ### Live Demo
46
46
 
47
- 🌐 https://giuseppescottolavina.github.io/microUI/demo/shell.html
47
+ 🌐 https://giuseppescottolavina.github.io/microUI/
package/README.md CHANGED
@@ -6,15 +6,20 @@
6
6
 
7
7
  <p align="center">
8
8
  <strong>The AI-First Web Components Framework</strong><br>
9
- <sub>49 Components • 808 Tests Passing • 100% Lighthouse • Zero Config</sub>
9
+ <sub>49 Components • 868 Tests Passing • 100% Lighthouse • Zero Config</sub>
10
10
  </p>
11
11
 
12
12
  <p align="center">
13
- <img src="https://img.shields.io/badge/tests-808%20passing-brightgreen" alt="808 tests">
13
+ <a href="https://www.npmjs.com/package/microui-wc"><img src="https://img.shields.io/npm/v/microui-wc?color=blue&label=npm" alt="npm version"></a>
14
+ <a href="https://github.com/GiuseppeScottoLavina/microUI/actions"><img src="https://img.shields.io/github/actions/workflow/status/GiuseppeScottoLavina/microUI/ci.yml?label=CI" alt="CI Status"></a>
14
15
  <img src="https://img.shields.io/badge/lighthouse-100%25-brightgreen" alt="100% Lighthouse">
15
- <img src="https://img.shields.io/badge/security-Grade%20A-brightgreen" alt="Security Grade A">
16
- <img src="https://img.shields.io/badge/bundle-8KB%20initial-blue" alt="8KB initial">
17
- <img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="Apache 2.0">
16
+ <a href="https://github.com/GiuseppeScottoLavina/microUI/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/microui-wc" alt="License"></a>
17
+ </p>
18
+
19
+ <p align="center">
20
+ <a href="https://giuseppescottolavina.github.io/microUI/"><strong>🚀 Live Demo</strong></a> •
21
+ <a href="./docs/getting-started.md"><strong>📖 Docs</strong></a> •
22
+ <a href="./AGENTS.md"><strong>🤖 Agent Guide</strong></a>
18
23
  </p>
19
24
 
20
25
  ---
@@ -27,7 +32,7 @@
27
32
  | Native Web Components | ✅ | ❌ | ❌ | ❌ |
28
33
  | AI Agent optimized | ✅ | ❌ | ❌ | ❌ |
29
34
  | Config required | None | Babel, Webpack | Vite/CLI | Rollup |
30
- | Initial bundle | **8 KB** | ~45 KB | ~35 KB | ~15 KB |
35
+ | Bundle (gzipped) | **~59 KB** | ~44 KB | ~34 KB | ~4 KB |
31
36
  | Learning curve | HTML | JSX + Hooks | SFC + Composition | Runes |
32
37
 
33
38
  > **Stop reinventing the wheel.** microUI gives you production-ready components with Material Design 3, full accessibility, and perfect Lighthouse scores—out of the box.
@@ -177,7 +182,7 @@ if (breakpoints.isCompact) {
177
182
 
178
183
  | Metric | Value |
179
184
  |--------|-------|
180
- | Unit tests | **808 passing** |
185
+ | Unit tests | **868 passing** |
181
186
  | Test coverage | Components: 100% |
182
187
  | Lighthouse Performance | **100** |
183
188
  | Lighthouse Accessibility | **100** |
@@ -191,10 +196,10 @@ if (breakpoints.isCompact) {
191
196
 
192
197
  ```bash
193
198
  # npm
194
- npm install microui
199
+ npm install microui-wc
195
200
 
196
201
  # bun (recommended)
197
- bun add microui
202
+ bun add microui-wc
198
203
 
199
204
  # CDN (no install)
200
205
  <script type="module" src="https://unpkg.com/microui-wc/dist/microui.esm.js"></script>