microui-wc 0.1.1 → 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 (339) 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 +71 -71
  5. package/dist/README.md +14 -9
  6. package/dist/microui.css +1 -1
  7. package/dist/microui.esm.js.map +1 -1
  8. package/dist/microui.min.js.map +1 -1
  9. package/docs/getting-started.md +3 -3
  10. package/package.json +39 -11
  11. package/src/components/mu-schema-form.js +1 -1
  12. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  13. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -33
  14. package/.github/PULL_REQUEST_TEMPLATE.md +0 -28
  15. package/.github/workflows/ci.yml +0 -42
  16. package/.github/workflows/deploy-pages.yml +0 -112
  17. package/CODE_OF_CONDUCT.md +0 -59
  18. package/CONTRIBUTING.md +0 -156
  19. package/SECURITY.md +0 -58
  20. package/app/.generated/routes/alerts.js +0 -8
  21. package/app/.generated/routes/avatars.js +0 -8
  22. package/app/.generated/routes/badges.js +0 -8
  23. package/app/.generated/routes/buttons.js +0 -10
  24. package/app/.generated/routes/cards.js +0 -10
  25. package/app/.generated/routes/checkboxes.js +0 -9
  26. package/app/.generated/routes/chips.js +0 -8
  27. package/app/.generated/routes/dropdowns.js +0 -9
  28. package/app/.generated/routes/home.js +0 -7
  29. package/app/.generated/routes/icons.js +0 -9
  30. package/app/.generated/routes/inputs.js +0 -10
  31. package/app/.generated/routes/installation.js +0 -7
  32. package/app/.generated/routes/layout.js +0 -9
  33. package/app/.generated/routes/modals.js +0 -9
  34. package/app/.generated/routes/navbar.js +0 -7
  35. package/app/.generated/routes/progress.js +0 -9
  36. package/app/.generated/routes/radios.js +0 -9
  37. package/app/.generated/routes/switches.js +0 -9
  38. package/app/.generated/routes/tabs.js +0 -8
  39. package/app/.generated/routes/toasts.js +0 -9
  40. package/app/index.html +0 -67
  41. package/app/pages/alerts.html +0 -23
  42. package/app/pages/avatars.html +0 -22
  43. package/app/pages/badges.html +0 -22
  44. package/app/pages/buttons.html +0 -71
  45. package/app/pages/cards.html +0 -54
  46. package/app/pages/checkboxes.html +0 -39
  47. package/app/pages/chips.html +0 -23
  48. package/app/pages/dropdowns.html +0 -41
  49. package/app/pages/home.html +0 -59
  50. package/app/pages/icons.html +0 -29
  51. package/app/pages/inputs.html +0 -66
  52. package/app/pages/installation.html +0 -34
  53. package/app/pages/layout.html +0 -30
  54. package/app/pages/modals.html +0 -21
  55. package/app/pages/navbar.html +0 -22
  56. package/app/pages/progress.html +0 -35
  57. package/app/pages/radios.html +0 -40
  58. package/app/pages/switches.html +0 -39
  59. package/app/pages/tabs.html +0 -30
  60. package/app/pages/toasts.html +0 -22
  61. package/app-dist/index.html +0 -67
  62. package/app-dist/pages/alerts.html +0 -23
  63. package/app-dist/pages/avatars.html +0 -22
  64. package/app-dist/pages/badges.html +0 -22
  65. package/app-dist/pages/buttons.html +0 -71
  66. package/app-dist/pages/cards.html +0 -54
  67. package/app-dist/pages/checkboxes.html +0 -39
  68. package/app-dist/pages/chips.html +0 -23
  69. package/app-dist/pages/dropdowns.html +0 -41
  70. package/app-dist/pages/home.html +0 -59
  71. package/app-dist/pages/icons.html +0 -29
  72. package/app-dist/pages/inputs.html +0 -66
  73. package/app-dist/pages/installation.html +0 -34
  74. package/app-dist/pages/layout.html +0 -30
  75. package/app-dist/pages/modals.html +0 -21
  76. package/app-dist/pages/navbar.html +0 -22
  77. package/app-dist/pages/progress.html +0 -35
  78. package/app-dist/pages/radios.html +0 -40
  79. package/app-dist/pages/switches.html +0 -39
  80. package/app-dist/pages/tabs.html +0 -30
  81. package/app-dist/pages/toasts.html +0 -22
  82. package/app-dist/pages.json +0 -217
  83. package/app-dist/routes/alerts.js +0 -5
  84. package/app-dist/routes/avatars.js +0 -1
  85. package/app-dist/routes/badges.js +0 -1
  86. package/app-dist/routes/buttons.js +0 -1
  87. package/app-dist/routes/cards.js +0 -1
  88. package/app-dist/routes/checkboxes.js +0 -9
  89. package/app-dist/routes/chips.js +0 -4
  90. package/app-dist/routes/chunk-019e5e2f.js +0 -5
  91. package/app-dist/routes/chunk-0m4j19yd.js +0 -2
  92. package/app-dist/routes/chunk-0tmmp5q0.js +0 -1
  93. package/app-dist/routes/chunk-10xn709r.js +0 -1
  94. package/app-dist/routes/chunk-15m2qcda.js +0 -2
  95. package/app-dist/routes/chunk-1bh8g23n.js +0 -1
  96. package/app-dist/routes/chunk-1vg0v937.js +0 -1
  97. package/app-dist/routes/chunk-1zvcgy3j.js +0 -1
  98. package/app-dist/routes/chunk-2afb0861.js +0 -1
  99. package/app-dist/routes/chunk-2c6ttpzt.js +0 -5
  100. package/app-dist/routes/chunk-3dy30fhs.js +0 -1
  101. package/app-dist/routes/chunk-426dnces.js +0 -13
  102. package/app-dist/routes/chunk-44kgxery.js +0 -1
  103. package/app-dist/routes/chunk-47fdnejd.js +0 -33
  104. package/app-dist/routes/chunk-49a6t2vq.js +0 -1
  105. package/app-dist/routes/chunk-4fe1rm5b.js +0 -1
  106. package/app-dist/routes/chunk-4ggmvkta.js +0 -33
  107. package/app-dist/routes/chunk-4vkz81q7.js +0 -33
  108. package/app-dist/routes/chunk-4w4tmj8f.js +0 -31
  109. package/app-dist/routes/chunk-532s62kr.js +0 -31
  110. package/app-dist/routes/chunk-5hm3bssy.js +0 -33
  111. package/app-dist/routes/chunk-5vrh24hc.js +0 -1
  112. package/app-dist/routes/chunk-61pcg25a.js +0 -1
  113. package/app-dist/routes/chunk-6nfhygvf.js +0 -1
  114. package/app-dist/routes/chunk-700e7je6.js +0 -33
  115. package/app-dist/routes/chunk-7fsn17kg.js +0 -1
  116. package/app-dist/routes/chunk-7k789b32.js +0 -1
  117. package/app-dist/routes/chunk-7r46q0ys.js +0 -36
  118. package/app-dist/routes/chunk-86fmc1fr.js +0 -5
  119. package/app-dist/routes/chunk-8qth37vw.js +0 -1
  120. package/app-dist/routes/chunk-924wv8n0.js +0 -1
  121. package/app-dist/routes/chunk-9mbhgxk9.js +0 -1
  122. package/app-dist/routes/chunk-a216hyd9.js +0 -1
  123. package/app-dist/routes/chunk-akzxykh9.js +0 -33
  124. package/app-dist/routes/chunk-b3dcvy8c.js +0 -1
  125. package/app-dist/routes/chunk-b74zahz5.js +0 -31
  126. package/app-dist/routes/chunk-bftj53p2.js +0 -5
  127. package/app-dist/routes/chunk-c01hnz3e.js +0 -1
  128. package/app-dist/routes/chunk-d8pvv5km.js +0 -1
  129. package/app-dist/routes/chunk-dev0aezr.js +0 -2
  130. package/app-dist/routes/chunk-dh6vnv0e.js +0 -1
  131. package/app-dist/routes/chunk-dn2cbpva.js +0 -36
  132. package/app-dist/routes/chunk-dvn0my90.js +0 -1
  133. package/app-dist/routes/chunk-dvq8mnve.js +0 -36
  134. package/app-dist/routes/chunk-e8c2gc4d.js +0 -5
  135. package/app-dist/routes/chunk-ejf9ak2x.js +0 -1
  136. package/app-dist/routes/chunk-f083m55s.js +0 -1
  137. package/app-dist/routes/chunk-fnrj28s1.js +0 -31
  138. package/app-dist/routes/chunk-fvg3yjdp.js +0 -31
  139. package/app-dist/routes/chunk-g7k381n1.js +0 -1
  140. package/app-dist/routes/chunk-h01kq2ae.js +0 -13
  141. package/app-dist/routes/chunk-h4dk761v.js +0 -5
  142. package/app-dist/routes/chunk-hmx91z2x.js +0 -5
  143. package/app-dist/routes/chunk-hxbg4m42.js +0 -36
  144. package/app-dist/routes/chunk-jbjnfp2b.js +0 -2
  145. package/app-dist/routes/chunk-jxtz5vv6.js +0 -36
  146. package/app-dist/routes/chunk-jxzcs0ey.js +0 -36
  147. package/app-dist/routes/chunk-kt7wwhcx.js +0 -1
  148. package/app-dist/routes/chunk-kzptszyc.js +0 -33
  149. package/app-dist/routes/chunk-mhgca4w4.js +0 -2
  150. package/app-dist/routes/chunk-mhswxa20.js +0 -1
  151. package/app-dist/routes/chunk-n8zfeex6.js +0 -1
  152. package/app-dist/routes/chunk-pee47b2r.js +0 -1
  153. package/app-dist/routes/chunk-pesmw829.js +0 -1
  154. package/app-dist/routes/chunk-pgc4c6f3.js +0 -36
  155. package/app-dist/routes/chunk-q8egegm1.js +0 -1
  156. package/app-dist/routes/chunk-q9mn2qyq.js +0 -36
  157. package/app-dist/routes/chunk-qh0rtaf3.js +0 -5
  158. package/app-dist/routes/chunk-qqhmk6ye.js +0 -2
  159. package/app-dist/routes/chunk-qrxygmf7.js +0 -33
  160. package/app-dist/routes/chunk-r46yzksx.js +0 -36
  161. package/app-dist/routes/chunk-rgpbw2w0.js +0 -5
  162. package/app-dist/routes/chunk-rnpzv3d8.js +0 -2
  163. package/app-dist/routes/chunk-s5v8cv05.js +0 -2
  164. package/app-dist/routes/chunk-sbwn5bpc.js +0 -1
  165. package/app-dist/routes/chunk-sqbg8jbt.js +0 -33
  166. package/app-dist/routes/chunk-sv8dqnf7.js +0 -1
  167. package/app-dist/routes/chunk-t67sw3za.js +0 -1
  168. package/app-dist/routes/chunk-tjdpqwdf.js +0 -31
  169. package/app-dist/routes/chunk-tq2mfghg.js +0 -1
  170. package/app-dist/routes/chunk-ttn10vt6.js +0 -1
  171. package/app-dist/routes/chunk-v2hzpjxr.js +0 -1
  172. package/app-dist/routes/chunk-wfjjkw9y.js +0 -1
  173. package/app-dist/routes/chunk-wt8cxzmf.js +0 -31
  174. package/app-dist/routes/chunk-x45d372k.js +0 -5
  175. package/app-dist/routes/chunk-y3wsazkt.js +0 -1
  176. package/app-dist/routes/chunk-y7pmgc7t.js +0 -33
  177. package/app-dist/routes/chunk-zefdt2q3.js +0 -31
  178. package/app-dist/routes/dropdowns.js +0 -6
  179. package/app-dist/routes/home.js +0 -1
  180. package/app-dist/routes/icons.js +0 -1
  181. package/app-dist/routes/inputs.js +0 -12
  182. package/app-dist/routes/installation.js +0 -1
  183. package/app-dist/routes/layout.js +0 -1
  184. package/app-dist/routes/modals.js +0 -7
  185. package/app-dist/routes/navbar.js +0 -1
  186. package/app-dist/routes/progress.js +0 -1
  187. package/app-dist/routes/radios.js +0 -6
  188. package/app-dist/routes/switches.js +0 -6
  189. package/app-dist/routes/tabs.js +0 -1
  190. package/app-dist/routes/toasts.js +0 -16
  191. package/assets/fonts/material-symbols-mini.woff2 +0 -0
  192. package/assets/fonts/material-symbols.woff2 +0 -0
  193. package/assets/fonts/roboto-400.woff2 +0 -0
  194. package/assets/fonts/roboto-500.woff2 +0 -0
  195. package/assets/fonts/roboto-700.woff2 +0 -0
  196. package/assets/logo-banner-400.jpg +0 -0
  197. package/assets/logo-banner-400.webp +0 -0
  198. package/assets/logo-banner-800.webp +0 -0
  199. package/assets/logo-banner.jpg +0 -0
  200. package/assets/logo-icon-64.jpg +0 -0
  201. package/assets/logo-icon-64.webp +0 -0
  202. package/assets/logo-icon.jpg +0 -0
  203. package/assets/logo-square.jpg +0 -0
  204. package/bun.lock +0 -312
  205. package/bunfig.toml +0 -4
  206. package/custom-elements.json +0 -1916
  207. package/demo/api/sample-data.json +0 -38
  208. package/demo/content/alerts.html +0 -115
  209. package/demo/content/avatars.html +0 -70
  210. package/demo/content/badges.html +0 -65
  211. package/demo/content/buttons.html +0 -188
  212. package/demo/content/callouts.html +0 -91
  213. package/demo/content/cards.html +0 -121
  214. package/demo/content/checkboxes.html +0 -178
  215. package/demo/content/chips.html +0 -67
  216. package/demo/content/codeblocks.html +0 -101
  217. package/demo/content/confirms.html +0 -115
  218. package/demo/content/datatables.html +0 -149
  219. package/demo/content/dividers.html +0 -119
  220. package/demo/content/dropdowns.html +0 -89
  221. package/demo/content/enterprise.html +0 -252
  222. package/demo/content/home.html +0 -149
  223. package/demo/content/icons.html +0 -89
  224. package/demo/content/inputs.html +0 -135
  225. package/demo/content/installation.html +0 -16
  226. package/demo/content/layout.html +0 -136
  227. package/demo/content/modals.html +0 -141
  228. package/demo/content/navbar.html +0 -70
  229. package/demo/content/progress.html +0 -119
  230. package/demo/content/radios.html +0 -88
  231. package/demo/content/skeletons.html +0 -109
  232. package/demo/content/spinners.html +0 -96
  233. package/demo/content/switches.html +0 -84
  234. package/demo/content/tables.html +0 -124
  235. package/demo/content/tabs.html +0 -85
  236. package/demo/content/toasts.html +0 -116
  237. package/demo/content/tooltips.html +0 -107
  238. package/demo/content/virtual-lists.html +0 -233
  239. package/demo/favicon.ico +0 -0
  240. package/demo/favicon.png +0 -0
  241. package/demo/full.html +0 -52
  242. package/demo/iife.html +0 -46
  243. package/demo/manifest.json +0 -34
  244. package/demo/pages/datatable-demo.html +0 -237
  245. package/demo/pages/prompt-ui-demo.html +0 -218
  246. package/demo/pages/responsive-demo.html +0 -122
  247. package/demo/pages/schema-form-demo.html +0 -270
  248. package/demo/robots.txt +0 -6
  249. package/demo/shell.html +0 -712
  250. package/demo/sw.js +0 -387
  251. package/lighthouse-audit.mjs +0 -113
  252. package/scripts/analyze-components.js +0 -105
  253. package/scripts/build-app.js +0 -193
  254. package/scripts/build-framework.js +0 -444
  255. package/scripts/build-utils.js +0 -101
  256. package/scripts/test-isolated.js +0 -151
  257. package/server.js +0 -256
  258. package/tests/agents/agent-integration.test.js +0 -76
  259. package/tests/benchmark.html +0 -296
  260. package/tests/build/scan-components.test.js +0 -173
  261. package/tests/components/all-components.test.js +0 -245
  262. package/tests/components/all-missing-components.test.js +0 -574
  263. package/tests/components/mu-alert.test.js +0 -113
  264. package/tests/components/mu-avatar.test.js +0 -148
  265. package/tests/components/mu-badge.test.js +0 -92
  266. package/tests/components/mu-button.test.js +0 -112
  267. package/tests/components/mu-card.test.js +0 -89
  268. package/tests/components/mu-checkbox.test.js +0 -158
  269. package/tests/components/mu-chip.test.js +0 -118
  270. package/tests/components/mu-container.test.js +0 -120
  271. package/tests/components/mu-divider.test.js +0 -98
  272. package/tests/components/mu-drawer-item.test.js +0 -199
  273. package/tests/components/mu-drawer.test.js +0 -96
  274. package/tests/components/mu-dropdown.test.js +0 -125
  275. package/tests/components/mu-form.test.js +0 -138
  276. package/tests/components/mu-grid.test.js +0 -135
  277. package/tests/components/mu-icon.test.js +0 -110
  278. package/tests/components/mu-input.test.js +0 -131
  279. package/tests/components/mu-lazy.test.js +0 -103
  280. package/tests/components/mu-modal.test.js +0 -275
  281. package/tests/components/mu-navbar.test.js +0 -101
  282. package/tests/components/mu-progress.test.js +0 -115
  283. package/tests/components/mu-radio.test.js +0 -114
  284. package/tests/components/mu-repeat.test.js +0 -106
  285. package/tests/components/mu-sidebar.test.js +0 -126
  286. package/tests/components/mu-skeleton.test.js +0 -162
  287. package/tests/components/mu-stack.test.js +0 -143
  288. package/tests/components/mu-switch.test.js +0 -292
  289. package/tests/components/mu-table.test.js +0 -124
  290. package/tests/components/mu-tabs.test.js +0 -104
  291. package/tests/components/mu-textarea.test.js +0 -115
  292. package/tests/components/mu-toast.test.js +0 -321
  293. package/tests/components/mu-tooltip.test.js +0 -133
  294. package/tests/components/mu-virtual-list.test.js +0 -109
  295. package/tests/core/MuElement.test.js +0 -120
  296. package/tests/core/agent-api.test.js +0 -125
  297. package/tests/core/all-core-modules.test.js +0 -442
  298. package/tests/core/bus.test.js +0 -364
  299. package/tests/core/component-schema.test.js +0 -160
  300. package/tests/core/feature-registry.test.js +0 -198
  301. package/tests/core/form-state.test.js +0 -167
  302. package/tests/core/http.test.js +0 -119
  303. package/tests/core/keyboard.test.js +0 -319
  304. package/tests/core/layers.test.js +0 -129
  305. package/tests/core/namespaced-stores.test.js +0 -114
  306. package/tests/core/render.test.js +0 -121
  307. package/tests/core/ripple.test.js +0 -131
  308. package/tests/core/router.test.js +0 -89
  309. package/tests/core/scheduler.test.js +0 -121
  310. package/tests/core/signals.test.js +0 -128
  311. package/tests/core/store.test.js +0 -171
  312. package/tests/core/transitions.test.js +0 -82
  313. package/tests/e2e/accessibility-harness.html +0 -58
  314. package/tests/e2e/accessibility.test.js +0 -401
  315. package/tests/e2e/agent-features.test.js +0 -372
  316. package/tests/e2e/card-spacing.test.js +0 -287
  317. package/tests/e2e/components.test.js +0 -439
  318. package/tests/e2e/demo-routes.test.js +0 -478
  319. package/tests/e2e/layout-css-fallback.test.js +0 -334
  320. package/tests/e2e/mu-alert.e2e.test.js +0 -111
  321. package/tests/e2e/mu-checkbox.test.js +0 -489
  322. package/tests/e2e/mu-chip.test.js +0 -347
  323. package/tests/e2e/mu-form.test.js +0 -499
  324. package/tests/e2e/mu-icon.test.js +0 -114
  325. package/tests/e2e/mu-radio.test.js +0 -113
  326. package/tests/e2e/mu-skeleton.test.js +0 -140
  327. package/tests/e2e/mu-switch.test.js +0 -415
  328. package/tests/e2e/mu-tabs.test.js +0 -494
  329. package/tests/e2e/mu-textarea.test.js +0 -242
  330. package/tests/e2e/mu-virtual-list.test.js +0 -427
  331. package/tests/e2e/perf-memory.test.js +0 -161
  332. package/tests/e2e/puppeteer-helper.js +0 -137
  333. package/tests/e2e/puppeteer.test.js +0 -226
  334. package/tests/e2e/pwa.test.js +0 -261
  335. package/tests/e2e/test-harness.html +0 -319
  336. package/tests/manual/test-components.html +0 -120
  337. package/tests/memory-test.html +0 -309
  338. package/tests/setup-dom.js +0 -93
  339. 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>