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
@@ -1,233 +0,0 @@
1
- <div class="page active">
2
- <h1 class="page-title">Virtual List</h1>
3
- <p class="page-subtitle">
4
- <code>&lt;mu-virtual-list&gt;</code> efficiently renders large datasets
5
- by only displaying visible items (virtualization).
6
- </p>
7
-
8
- <mu-tabs active="0" id="virtuallist-doc-tabs" style="margin-bottom: 24px;">
9
- <mu-tab>OVERVIEW</mu-tab>
10
- <mu-tab>API</mu-tab>
11
- <mu-tab>STYLING</mu-tab>
12
- <mu-tab>EXAMPLES</mu-tab>
13
- </mu-tabs>
14
-
15
- <div id="virtuallist-overview" class="doc-tab-content">
16
- <mu-example title="Basic Virtual List (1,000 items)">
17
- <div slot="demo">
18
- <mu-virtual-list id="demo-virtual-list" item-height="50"
19
- style="height: 300px; width: 100%; border: 1px solid var(--md-sys-color-outline); border-radius: 8px;">
20
- </mu-virtual-list>
21
- </div>
22
- <div slot="code">&lt;mu-virtual-list
23
- item-height="50"
24
- .items="${largeArray}"
25
- .renderItem="${(item) => `&lt;div&gt;${item.name}&lt;/div&gt;`}"&gt;
26
- &lt;/mu-virtual-list&gt;</div>
27
- </mu-example>
28
-
29
- <div class="component-section">
30
- <h2 class="section-title">When to use</h2>
31
- <mu-card variant="outlined">
32
- <mu-stack gap="md">
33
- <mu-stack direction="row" gap="sm" align="start">
34
- <mu-icon name="check_circle" size="20"
35
- style="color: var(--md-sys-color-primary); margin-top: 2px;"></mu-icon>
36
- <div>
37
- <strong>Large datasets (100+ items)</strong>
38
- <div style="font-size: 13px; color: var(--md-sys-color-on-surface-variant);">Chat logs,
39
- logs, big tables, infinite scroll</div>
40
- </div>
41
- </mu-stack>
42
- <mu-stack direction="row" gap="sm" align="start">
43
- <mu-icon name="check_circle" size="20"
44
- style="color: var(--md-sys-color-primary); margin-top: 2px;"></mu-icon>
45
- <div>
46
- <strong>Performance-critical UI</strong>
47
- <div style="font-size: 13px; color: var(--md-sys-color-on-surface-variant);">When rendering
48
- all items would cause lag</div>
49
- </div>
50
- </mu-stack>
51
- </mu-stack>
52
- </mu-card>
53
- </div>
54
-
55
- <div class="component-section">
56
- <h2 class="section-title">When NOT to use</h2>
57
- <mu-stack gap="md">
58
- <mu-alert severity="warning">Don't use for <strong>small lists (&lt;50 items)</strong> - overhead isn't
59
- worth it</mu-alert>
60
- <mu-alert severity="warning">Don't use for <strong>variable-height items</strong> without setting proper
61
- item-height</mu-alert>
62
- </mu-stack>
63
- </div>
64
-
65
- <mu-example title="Custom Item Rendering">
66
- <div slot="demo">
67
- <mu-virtual-list id="demo-virtual-list-custom" item-height="72"
68
- style="height: 300px; width: 100%; border: 1px solid var(--md-sys-color-outline); border-radius: 8px;">
69
- </mu-virtual-list>
70
- </div>
71
- <div slot="code">&lt;mu-virtual-list
72
- item-height="72"
73
- .items="${users}"
74
- .renderItem="${(user) => `
75
- &lt;mu-stack direction="row" gap="md" align="center" style="padding: 12px 16px;"&gt;
76
- &lt;mu-avatar initials="${user.initials}"&gt;&lt;/mu-avatar&gt;
77
- &lt;div&gt;
78
- &lt;strong&gt;${user.name}&lt;/strong&gt;
79
- &lt;div style="font-size: 12px; opacity: 0.7;"&gt;${user.email}&lt;/div&gt;
80
- &lt;/div&gt;
81
- &lt;/mu-stack&gt;
82
- `}"&gt;
83
- &lt;/mu-virtual-list&gt;</div>
84
- </mu-example>
85
- </div>
86
-
87
- <div id="virtuallist-api" class="doc-tab-content" style="display: none;">
88
- <div class="component-section">
89
- <h2 class="section-title">Attributes</h2>
90
- <mu-api-table type="attributes">
91
- <mu-api-row name="item-height" type="number" default="50">Height of each item in pixels (required for
92
- calculations)</mu-api-row>
93
- <mu-api-row name="buffer" type="number" default="5">Number of extra items to render above/below
94
- viewport</mu-api-row>
95
- </mu-api-table>
96
- </div>
97
-
98
- <div class="component-section">
99
- <h2 class="section-title">Properties</h2>
100
- <mu-api-table type="properties">
101
- <mu-api-row name="items" type="Array" default="[]">The array of data items to render</mu-api-row>
102
- <mu-api-row name="renderItem" type="Function" default="(item) => item">Render function: (item, index) =>
103
- HTML string</mu-api-row>
104
- </mu-api-table>
105
- </div>
106
-
107
- <div class="component-section">
108
- <h2 class="section-title">Methods</h2>
109
- <mu-api-table type="methods">
110
- <mu-api-row name="scrollToIndex(index)" type="void">Scrolls to bring the item at given index into
111
- view</mu-api-row>
112
- </mu-api-table>
113
- </div>
114
- </div>
115
-
116
- <div id="virtuallist-styling" class="doc-tab-content" style="display: none;">
117
- <div class="component-section">
118
- <h2 class="section-title">CSS Custom Properties</h2>
119
- <mu-api-table type="tokens">
120
- <mu-api-row name="--md-sys-color-surface" default="#FFFBFE">Background color of items</mu-api-row>
121
- <mu-api-row name="--md-sys-color-outline" default="#79747E">Border color</mu-api-row>
122
- </mu-api-table>
123
- </div>
124
-
125
- <div class="component-section">
126
- <h2 class="section-title">Styling Tips</h2>
127
- <p style="color: var(--md-sys-color-on-surface-variant); line-height: 1.6;">
128
- The virtual list container needs a fixed height to calculate visible items.
129
- Set <code>height</code> or use CSS like <code>flex: 1</code> in a flex container.
130
- Items are positioned absolutely, so padding should be applied inside the
131
- <code>renderItem</code> template.
132
- </p>
133
- </div>
134
- </div>
135
-
136
- <div id="virtuallist-examples" class="doc-tab-content" style="display: none;">
137
- <mu-example title="Performance comparison">
138
- <div slot="demo">
139
- <mu-stack gap="md">
140
- <mu-card variant="outlined">
141
- <mu-stack direction="row" gap="md" align="center">
142
- <mu-icon name="check_circle" style="color: var(--md-sys-color-primary);"></mu-icon>
143
- <div>
144
- <strong>Virtual List (10,000 items)</strong>
145
- <div style="font-size: 12px; opacity: 0.7;">Only ~20 DOM nodes rendered</div>
146
- </div>
147
- </mu-stack>
148
- </mu-card>
149
- <mu-card variant="outlined">
150
- <mu-stack direction="row" gap="md" align="center">
151
- <mu-icon name="warning" style="color: var(--md-sys-color-error);"></mu-icon>
152
- <div>
153
- <strong>Regular DOM (10,000 items)</strong>
154
- <div style="font-size: 12px; opacity: 0.7;">10,000 DOM nodes = 💥 Performance hit</div>
155
- </div>
156
- </mu-stack>
157
- </mu-card>
158
- </mu-stack>
159
- </div>
160
- <div slot="code">// Virtual list: O(visible) DOM nodes
161
- // Regular list: O(n) DOM nodes
162
-
163
- // With 10,000 items and 50px item height:
164
- // Virtual: ~20 nodes (viewport height / item height)
165
- // Regular: 10,000 nodes</div>
166
- </mu-example>
167
-
168
- <mu-example title="Scroll to index">
169
- <div slot="demo">
170
- <mu-stack gap="md">
171
- <mu-stack direction="row" gap="sm">
172
- <mu-button onclick="document.getElementById('demo-virtual-list').scrollToIndex(0)">Go to
173
- Top</mu-button>
174
- <mu-button onclick="document.getElementById('demo-virtual-list').scrollToIndex(500)">Go to
175
- #500</mu-button>
176
- <mu-button onclick="document.getElementById('demo-virtual-list').scrollToIndex(999)">Go to
177
- Bottom</mu-button>
178
- </mu-stack>
179
- </mu-stack>
180
- </div>
181
- <div slot="code">const list = document.querySelector('mu-virtual-list');
182
- list.scrollToIndex(500); // Jump to item 500</div>
183
- </mu-example>
184
- </div>
185
- </div>
186
-
187
- <script>
188
- // Initialize demo virtual lists with sample data
189
- // Use customElements.whenDefined to ensure component is fully upgraded
190
- customElements.whenDefined('mu-virtual-list').then(() => {
191
- // Use setTimeout to ensure render() has completed
192
- setTimeout(() => {
193
- // Basic list with 1000 items
194
- const basicList = document.getElementById('demo-virtual-list');
195
- if (basicList) {
196
- const items = Array.from({ length: 1000 }, (_, i) => ({
197
- id: i,
198
- name: `Item ${i + 1}`
199
- }));
200
- basicList.renderItem = (item) => `
201
- <div style="padding: 12px 16px; border-bottom: 1px solid var(--md-sys-color-outline-variant); display: flex; align-items: center; gap: 12px;">
202
- <mu-icon name="fiber_manual_record" style="font-size: 8px; color: var(--md-sys-color-primary);"></mu-icon>
203
- <span>${item.name}</span>
204
- </div>
205
- `;
206
- basicList.items = items;
207
- }
208
-
209
- // Custom list with user cards
210
- const customList = document.getElementById('demo-virtual-list-custom');
211
- if (customList) {
212
- const users = Array.from({ length: 500 }, (_, i) => ({
213
- id: i,
214
- name: `User ${i + 1}`,
215
- email: `user${i + 1}@example.com`,
216
- initials: `U${i + 1}`
217
- }));
218
- customList.renderItem = (user) => `
219
- <div style="padding: 12px 16px; border-bottom: 1px solid var(--md-sys-color-outline-variant); display: flex; align-items: center; gap: 12px;">
220
- <div style="width: 40px; height: 40px; border-radius: 50%; background: var(--md-sys-color-primary-container); color: var(--md-sys-color-on-primary-container); display: flex; align-items: center; justify-content: center; font-weight: 500; font-size: 14px;">
221
- ${user.initials.substring(0, 2)}
222
- </div>
223
- <div>
224
- <strong>${user.name}</strong>
225
- <div style="font-size: 12px; color: var(--md-sys-color-on-surface-variant);">${user.email}</div>
226
- </div>
227
- </div>
228
- `;
229
- customList.items = users;
230
- }
231
- }, 0);
232
- });
233
- </script>
package/demo/favicon.ico DELETED
Binary file
package/demo/favicon.png DELETED
Binary file
package/demo/full.html DELETED
@@ -1,52 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>microUI - Full Bundle Variant</title>
8
- <link rel="stylesheet" href="/dist/microui.css">
9
- <style>
10
- body {
11
- font-family: var(--md-sys-typescale-font);
12
- background: var(--md-sys-color-background);
13
- color: var(--md-sys-color-on-background);
14
- margin: 0;
15
- padding: 20px;
16
- }
17
- </style>
18
- </head>
19
-
20
- <body>
21
- <mu-container size="md">
22
- <mu-stack gap="lg">
23
- <mu-card variant="outlined" padding="lg">
24
- <mu-stack gap="md">
25
- <h1>Variant 2: Full Bundle</h1>
26
- <p>This page loads the <b>Monolithic Bundle</b> (97KB). Check the Network tab!</p>
27
- <mu-code>
28
- &lt;script type="module" src="/dist/microui.esm.js"&gt;&lt;/script&gt;
29
- </mu-code>
30
- <mu-divider></mu-divider>
31
- <mu-grid cols="2" gap="md">
32
- <mu-button variant="filled">Filled Button</mu-button>
33
- <mu-button variant="outlined">Outlined Button</mu-button>
34
- </mu-grid>
35
- <mu-dropdown placeholder="Select Option">
36
- <mu-option value="1">Option 1</mu-option>
37
- <mu-option value="2">Option 2</mu-option>
38
- <mu-option value="3">Option 3</mu-option>
39
- </mu-dropdown>
40
- </mu-stack>
41
- </mu-card>
42
- <mu-card>
43
- <a href="/">Go to SOTA Variant (App Shell)</a>
44
- </mu-card>
45
- </mu-stack>
46
- </mu-container>
47
-
48
- <!-- Load Full Bundle -->
49
- <script type="module" src="/dist/microui.esm.js"></script>
50
- </body>
51
-
52
- </html>
package/demo/iife.html DELETED
@@ -1,46 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>microUI - IIFE Legacy Variant</title>
8
- <link rel="stylesheet" href="/dist/microui.css">
9
- <style>
10
- body {
11
- font-family: var(--md-sys-typescale-font);
12
- background: var(--md-sys-color-background);
13
- color: var(--md-sys-color-on-background);
14
- margin: 0;
15
- padding: 20px;
16
- }
17
- </style>
18
- </head>
19
-
20
- <body>
21
- <mu-container size="md">
22
- <mu-stack gap="lg">
23
- <mu-card variant="outlined" padding="lg">
24
- <mu-stack gap="md">
25
- <h1>Variant 3: IIFE (Legacy)</h1>
26
- <p>This loads <code>microui.min.js</code> (98KB) as a global script. Useful for non-module
27
- environments.</p>
28
- <mu-code>
29
- &lt;script src="/dist/microui.min.js"&gt;&lt;/script&gt;
30
- </mu-code>
31
- <mu-divider></mu-divider>
32
- <mu-button variant="filled" onclick="alert('Works!')">Click Me</mu-button>
33
- <mu-badge variant="error">Legacy Mode</mu-badge>
34
- </mu-stack>
35
- </mu-card>
36
- <mu-card>
37
- <a href="/">Go to SOTA Variant (App Shell)</a>
38
- </mu-card>
39
- </mu-stack>
40
- </mu-container>
41
-
42
- <!-- Load IIFE Bundle -->
43
- <script src="/dist/microui.min.js"></script>
44
- </body>
45
-
46
- </html>
@@ -1,34 +0,0 @@
1
- {
2
- "name": "microUI",
3
- "short_name": "microUI",
4
- "description": "AI-First Web Components Library with 40+ Material Design 3 components",
5
- "version": "0.1.0",
6
- "start_url": "/",
7
- "display": "standalone",
8
- "background_color": "#141218",
9
- "theme_color": "#6750A4",
10
- "orientation": "any",
11
- "icons": [
12
- {
13
- "src": "/favicon.png",
14
- "sizes": "64x64",
15
- "type": "image/png"
16
- },
17
- {
18
- "src": "/assets/logo-icon-64.webp",
19
- "sizes": "64x64",
20
- "type": "image/webp"
21
- },
22
- {
23
- "src": "/assets/logo-icon-64.jpg",
24
- "sizes": "64x64",
25
- "type": "image/jpeg"
26
- }
27
- ],
28
- "categories": [
29
- "development",
30
- "utilities"
31
- ],
32
- "lang": "en",
33
- "dir": "ltr"
34
- }
@@ -1,237 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
-
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>Data Table Demo - microUI</title>
8
- <link rel="stylesheet" href="../../dist/microui.css">
9
- <style>
10
- body {
11
- font-family: var(--md-sys-typescale-font);
12
- background: var(--md-sys-color-background);
13
- color: var(--md-sys-color-on-background);
14
- padding: 24px;
15
- margin: 0;
16
- }
17
-
18
- .container {
19
- max-width: 1200px;
20
- margin: 0 auto;
21
- }
22
-
23
- h1 {
24
- margin-bottom: 8px;
25
- }
26
-
27
- .subtitle {
28
- color: var(--md-sys-color-on-surface-variant);
29
- margin-bottom: 32px;
30
- }
31
-
32
- .section {
33
- margin-bottom: 48px;
34
- }
35
-
36
- .section h2 {
37
- margin-bottom: 16px;
38
- display: flex;
39
- align-items: center;
40
- gap: 8px;
41
- }
42
-
43
- .actions {
44
- margin-bottom: 16px;
45
- display: flex;
46
- gap: 8px;
47
- flex-wrap: wrap;
48
- }
49
-
50
- code {
51
- background: var(--md-sys-color-surface-container);
52
- padding: 2px 6px;
53
- border-radius: 4px;
54
- font-size: 13px;
55
- }
56
-
57
- pre {
58
- background: var(--md-sys-color-surface-container);
59
- padding: 16px;
60
- border-radius: 8px;
61
- overflow-x: auto;
62
- font-size: 13px;
63
- }
64
-
65
- .console-output {
66
- background: var(--md-sys-color-inverse-surface);
67
- color: var(--md-sys-color-inverse-on-surface);
68
- padding: 12px 16px;
69
- border-radius: 8px;
70
- font-family: monospace;
71
- font-size: 13px;
72
- margin-top: 16px;
73
- min-height: 40px;
74
- }
75
- </style>
76
- </head>
77
-
78
- <body>
79
- <div class="container">
80
- <h1>🗃️ mu-datatable</h1>
81
- <p class="subtitle">Smart Data Table with built-in sorting, pagination, and filtering</p>
82
-
83
- <!-- Basic Example -->
84
- <section class="section">
85
- <h2>📊 Basic Table</h2>
86
- <div class="actions">
87
- <mu-button id="btn-load" variant="filled">Load 50 Users</mu-button>
88
- <mu-button id="btn-load-100" variant="tonal">Load 100 Users</mu-button>
89
- <mu-button id="btn-clear" variant="outlined">Clear</mu-button>
90
- <mu-button id="btn-state" variant="text">Log State</mu-button>
91
- </div>
92
-
93
- <mu-datatable id="users-table" columns='[
94
- {"field": "id", "label": "#", "sortable": true},
95
- {"field": "name", "label": "Name", "sortable": true},
96
- {"field": "email", "label": "Email", "sortable": true},
97
- {"field": "role", "label": "Role", "sortable": true},
98
- {"field": "status", "label": "Status"}
99
- ]' page-size="10" sortable filterable selectable
100
- empty-message="Click 'Load Users' to populate the table">
101
- </mu-datatable>
102
-
103
- <div id="console" class="console-output">Console output will appear here...</div>
104
- </section>
105
-
106
- <!-- Usage Example -->
107
- <section class="section">
108
- <h2>💻 Usage</h2>
109
- <pre><code>&lt;mu-datatable
110
- id="my-table"
111
- columns='[
112
- {"field": "name", "label": "Name", "sortable": true},
113
- {"field": "email", "label": "Email"},
114
- {"field": "role", "label": "Role"}
115
- ]'
116
- page-size="10"
117
- sortable
118
- filterable
119
- selectable&gt;
120
- &lt;/mu-datatable&gt;
121
-
122
- &lt;script&gt;
123
- const table = document.getElementById('my-table');
124
-
125
- // Set data programmatically
126
- table.setData(usersArray);
127
-
128
- // Get current state
129
- console.log(table.getSortState()); // { field: 'name', direction: 'asc' }
130
- console.log(table.getSelectedRows()); // [...selected rows...]
131
- console.log(table.getPageInfo()); // { page: 1, totalPages: 5, ... }
132
-
133
- // Sort programmatically
134
- table.sortBy('name', 'desc');
135
-
136
- // Navigate pages
137
- table.goToPage(2);
138
-
139
- // Filter
140
- table.filter('admin');
141
- &lt;/script&gt;</code></pre>
142
- </section>
143
-
144
- <!-- API Reference -->
145
- <section class="section">
146
- <h2>📚 API</h2>
147
- <mu-datatable id="api-table" columns='[
148
- {"field": "method", "label": "Method"},
149
- {"field": "params", "label": "Parameters"},
150
- {"field": "description", "label": "Description"}
151
- ]' page-size="20">
152
- </mu-datatable>
153
- </section>
154
- </div>
155
-
156
- <script type="module">
157
- // Use the pre-built bundle (resolves signalbus dependency)
158
- import '../../dist/microui.esm.js';
159
-
160
- const table = document.getElementById('users-table');
161
- const consoleEl = document.getElementById('console');
162
-
163
- function log(msg) {
164
- consoleEl.textContent = typeof msg === 'object' ? JSON.stringify(msg, null, 2) : msg;
165
- }
166
-
167
- // Generate fake user data
168
- function generateUsers(count) {
169
- const roles = ['Admin', 'User', 'Moderator', 'Editor', 'Viewer'];
170
- const statuses = ['Active', 'Inactive', 'Pending'];
171
- const firstNames = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve', 'Frank', 'Grace', 'Henry', 'Ivy', 'Jack'];
172
- const lastNames = ['Smith', 'Johnson', 'Williams', 'Brown', 'Jones', 'Garcia', 'Miller', 'Davis', 'Rodriguez', 'Martinez'];
173
-
174
- return Array.from({ length: count }, (_, i) => ({
175
- id: i + 1,
176
- name: `${firstNames[Math.floor(Math.random() * firstNames.length)]} ${lastNames[Math.floor(Math.random() * lastNames.length)]}`,
177
- email: `user${i + 1}@example.com`,
178
- role: roles[Math.floor(Math.random() * roles.length)],
179
- status: statuses[Math.floor(Math.random() * statuses.length)]
180
- }));
181
- }
182
-
183
- // Button handlers
184
- document.getElementById('btn-load').addEventListener('click', () => {
185
- const users = generateUsers(50);
186
- table.setData(users);
187
- log(`Loaded ${users.length} users`);
188
- });
189
-
190
- document.getElementById('btn-load-100').addEventListener('click', () => {
191
- const users = generateUsers(100);
192
- table.setData(users);
193
- log(`Loaded ${users.length} users`);
194
- });
195
-
196
- document.getElementById('btn-clear').addEventListener('click', () => {
197
- table.setData([]);
198
- log('Table cleared');
199
- });
200
-
201
- document.getElementById('btn-state').addEventListener('click', () => {
202
- log({
203
- sort: table.getSortState(),
204
- page: table.getPageInfo(),
205
- selected: table.getSelectedRows().length + ' rows selected'
206
- });
207
- });
208
-
209
- // Event listeners
210
- table.addEventListener('mu-sort-change', (e) => {
211
- log(`Sort changed: ${e.detail.field} ${e.detail.direction}`);
212
- });
213
-
214
- table.addEventListener('mu-page-change', (e) => {
215
- log(`Page changed: ${e.detail.page} of ${e.detail.totalPages}`);
216
- });
217
-
218
- table.addEventListener('mu-selection-change', (e) => {
219
- log(`Selection changed: ${e.detail.selected.length} rows selected`);
220
- });
221
-
222
- // API table data
223
- const apiTable = document.getElementById('api-table');
224
- apiTable.setData([
225
- { method: 'setData(array)', params: 'Array<Object>', description: 'Set table data' },
226
- { method: 'getData()', params: '-', description: 'Get current data array' },
227
- { method: 'getSortState()', params: '-', description: 'Get current sort field and direction' },
228
- { method: 'getSelectedRows()', params: '-', description: 'Get selected row objects' },
229
- { method: 'getPageInfo()', params: '-', description: 'Get page, pageSize, totalPages, totalRows' },
230
- { method: 'sortBy(field, dir)', params: 'string, "asc"|"desc"', description: 'Sort by field programmatically' },
231
- { method: 'goToPage(num)', params: 'number', description: 'Navigate to specific page' },
232
- { method: 'filter(query)', params: 'string', description: 'Filter data by search query' }
233
- ]);
234
- </script>
235
- </body>
236
-
237
- </html>