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.
- package/AGENTS.md +71 -71
- package/CHANGELOG.md +1 -1
- package/README.md +14 -9
- package/dist/AGENTS.md +71 -71
- package/dist/README.md +14 -9
- package/dist/microui.css +1 -1
- package/dist/microui.esm.js.map +1 -1
- package/dist/microui.min.js.map +1 -1
- package/docs/getting-started.md +3 -3
- package/package.json +39 -11
- package/src/components/mu-schema-form.js +1 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -33
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -28
- package/.github/workflows/ci.yml +0 -42
- package/.github/workflows/deploy-pages.yml +0 -112
- package/CODE_OF_CONDUCT.md +0 -59
- package/CONTRIBUTING.md +0 -156
- package/SECURITY.md +0 -58
- package/app/.generated/routes/alerts.js +0 -8
- package/app/.generated/routes/avatars.js +0 -8
- package/app/.generated/routes/badges.js +0 -8
- package/app/.generated/routes/buttons.js +0 -10
- package/app/.generated/routes/cards.js +0 -10
- package/app/.generated/routes/checkboxes.js +0 -9
- package/app/.generated/routes/chips.js +0 -8
- package/app/.generated/routes/dropdowns.js +0 -9
- package/app/.generated/routes/home.js +0 -7
- package/app/.generated/routes/icons.js +0 -9
- package/app/.generated/routes/inputs.js +0 -10
- package/app/.generated/routes/installation.js +0 -7
- package/app/.generated/routes/layout.js +0 -9
- package/app/.generated/routes/modals.js +0 -9
- package/app/.generated/routes/navbar.js +0 -7
- package/app/.generated/routes/progress.js +0 -9
- package/app/.generated/routes/radios.js +0 -9
- package/app/.generated/routes/switches.js +0 -9
- package/app/.generated/routes/tabs.js +0 -8
- package/app/.generated/routes/toasts.js +0 -9
- package/app/index.html +0 -67
- package/app/pages/alerts.html +0 -23
- package/app/pages/avatars.html +0 -22
- package/app/pages/badges.html +0 -22
- package/app/pages/buttons.html +0 -71
- package/app/pages/cards.html +0 -54
- package/app/pages/checkboxes.html +0 -39
- package/app/pages/chips.html +0 -23
- package/app/pages/dropdowns.html +0 -41
- package/app/pages/home.html +0 -59
- package/app/pages/icons.html +0 -29
- package/app/pages/inputs.html +0 -66
- package/app/pages/installation.html +0 -34
- package/app/pages/layout.html +0 -30
- package/app/pages/modals.html +0 -21
- package/app/pages/navbar.html +0 -22
- package/app/pages/progress.html +0 -35
- package/app/pages/radios.html +0 -40
- package/app/pages/switches.html +0 -39
- package/app/pages/tabs.html +0 -30
- package/app/pages/toasts.html +0 -22
- package/app-dist/index.html +0 -67
- package/app-dist/pages/alerts.html +0 -23
- package/app-dist/pages/avatars.html +0 -22
- package/app-dist/pages/badges.html +0 -22
- package/app-dist/pages/buttons.html +0 -71
- package/app-dist/pages/cards.html +0 -54
- package/app-dist/pages/checkboxes.html +0 -39
- package/app-dist/pages/chips.html +0 -23
- package/app-dist/pages/dropdowns.html +0 -41
- package/app-dist/pages/home.html +0 -59
- package/app-dist/pages/icons.html +0 -29
- package/app-dist/pages/inputs.html +0 -66
- package/app-dist/pages/installation.html +0 -34
- package/app-dist/pages/layout.html +0 -30
- package/app-dist/pages/modals.html +0 -21
- package/app-dist/pages/navbar.html +0 -22
- package/app-dist/pages/progress.html +0 -35
- package/app-dist/pages/radios.html +0 -40
- package/app-dist/pages/switches.html +0 -39
- package/app-dist/pages/tabs.html +0 -30
- package/app-dist/pages/toasts.html +0 -22
- package/app-dist/pages.json +0 -217
- package/app-dist/routes/alerts.js +0 -5
- package/app-dist/routes/avatars.js +0 -1
- package/app-dist/routes/badges.js +0 -1
- package/app-dist/routes/buttons.js +0 -1
- package/app-dist/routes/cards.js +0 -1
- package/app-dist/routes/checkboxes.js +0 -9
- package/app-dist/routes/chips.js +0 -4
- package/app-dist/routes/chunk-019e5e2f.js +0 -5
- package/app-dist/routes/chunk-0m4j19yd.js +0 -2
- package/app-dist/routes/chunk-0tmmp5q0.js +0 -1
- package/app-dist/routes/chunk-10xn709r.js +0 -1
- package/app-dist/routes/chunk-15m2qcda.js +0 -2
- package/app-dist/routes/chunk-1bh8g23n.js +0 -1
- package/app-dist/routes/chunk-1vg0v937.js +0 -1
- package/app-dist/routes/chunk-1zvcgy3j.js +0 -1
- package/app-dist/routes/chunk-2afb0861.js +0 -1
- package/app-dist/routes/chunk-2c6ttpzt.js +0 -5
- package/app-dist/routes/chunk-3dy30fhs.js +0 -1
- package/app-dist/routes/chunk-426dnces.js +0 -13
- package/app-dist/routes/chunk-44kgxery.js +0 -1
- package/app-dist/routes/chunk-47fdnejd.js +0 -33
- package/app-dist/routes/chunk-49a6t2vq.js +0 -1
- package/app-dist/routes/chunk-4fe1rm5b.js +0 -1
- package/app-dist/routes/chunk-4ggmvkta.js +0 -33
- package/app-dist/routes/chunk-4vkz81q7.js +0 -33
- package/app-dist/routes/chunk-4w4tmj8f.js +0 -31
- package/app-dist/routes/chunk-532s62kr.js +0 -31
- package/app-dist/routes/chunk-5hm3bssy.js +0 -33
- package/app-dist/routes/chunk-5vrh24hc.js +0 -1
- package/app-dist/routes/chunk-61pcg25a.js +0 -1
- package/app-dist/routes/chunk-6nfhygvf.js +0 -1
- package/app-dist/routes/chunk-700e7je6.js +0 -33
- package/app-dist/routes/chunk-7fsn17kg.js +0 -1
- package/app-dist/routes/chunk-7k789b32.js +0 -1
- package/app-dist/routes/chunk-7r46q0ys.js +0 -36
- package/app-dist/routes/chunk-86fmc1fr.js +0 -5
- package/app-dist/routes/chunk-8qth37vw.js +0 -1
- package/app-dist/routes/chunk-924wv8n0.js +0 -1
- package/app-dist/routes/chunk-9mbhgxk9.js +0 -1
- package/app-dist/routes/chunk-a216hyd9.js +0 -1
- package/app-dist/routes/chunk-akzxykh9.js +0 -33
- package/app-dist/routes/chunk-b3dcvy8c.js +0 -1
- package/app-dist/routes/chunk-b74zahz5.js +0 -31
- package/app-dist/routes/chunk-bftj53p2.js +0 -5
- package/app-dist/routes/chunk-c01hnz3e.js +0 -1
- package/app-dist/routes/chunk-d8pvv5km.js +0 -1
- package/app-dist/routes/chunk-dev0aezr.js +0 -2
- package/app-dist/routes/chunk-dh6vnv0e.js +0 -1
- package/app-dist/routes/chunk-dn2cbpva.js +0 -36
- package/app-dist/routes/chunk-dvn0my90.js +0 -1
- package/app-dist/routes/chunk-dvq8mnve.js +0 -36
- package/app-dist/routes/chunk-e8c2gc4d.js +0 -5
- package/app-dist/routes/chunk-ejf9ak2x.js +0 -1
- package/app-dist/routes/chunk-f083m55s.js +0 -1
- package/app-dist/routes/chunk-fnrj28s1.js +0 -31
- package/app-dist/routes/chunk-fvg3yjdp.js +0 -31
- package/app-dist/routes/chunk-g7k381n1.js +0 -1
- package/app-dist/routes/chunk-h01kq2ae.js +0 -13
- package/app-dist/routes/chunk-h4dk761v.js +0 -5
- package/app-dist/routes/chunk-hmx91z2x.js +0 -5
- package/app-dist/routes/chunk-hxbg4m42.js +0 -36
- package/app-dist/routes/chunk-jbjnfp2b.js +0 -2
- package/app-dist/routes/chunk-jxtz5vv6.js +0 -36
- package/app-dist/routes/chunk-jxzcs0ey.js +0 -36
- package/app-dist/routes/chunk-kt7wwhcx.js +0 -1
- package/app-dist/routes/chunk-kzptszyc.js +0 -33
- package/app-dist/routes/chunk-mhgca4w4.js +0 -2
- package/app-dist/routes/chunk-mhswxa20.js +0 -1
- package/app-dist/routes/chunk-n8zfeex6.js +0 -1
- package/app-dist/routes/chunk-pee47b2r.js +0 -1
- package/app-dist/routes/chunk-pesmw829.js +0 -1
- package/app-dist/routes/chunk-pgc4c6f3.js +0 -36
- package/app-dist/routes/chunk-q8egegm1.js +0 -1
- package/app-dist/routes/chunk-q9mn2qyq.js +0 -36
- package/app-dist/routes/chunk-qh0rtaf3.js +0 -5
- package/app-dist/routes/chunk-qqhmk6ye.js +0 -2
- package/app-dist/routes/chunk-qrxygmf7.js +0 -33
- package/app-dist/routes/chunk-r46yzksx.js +0 -36
- package/app-dist/routes/chunk-rgpbw2w0.js +0 -5
- package/app-dist/routes/chunk-rnpzv3d8.js +0 -2
- package/app-dist/routes/chunk-s5v8cv05.js +0 -2
- package/app-dist/routes/chunk-sbwn5bpc.js +0 -1
- package/app-dist/routes/chunk-sqbg8jbt.js +0 -33
- package/app-dist/routes/chunk-sv8dqnf7.js +0 -1
- package/app-dist/routes/chunk-t67sw3za.js +0 -1
- package/app-dist/routes/chunk-tjdpqwdf.js +0 -31
- package/app-dist/routes/chunk-tq2mfghg.js +0 -1
- package/app-dist/routes/chunk-ttn10vt6.js +0 -1
- package/app-dist/routes/chunk-v2hzpjxr.js +0 -1
- package/app-dist/routes/chunk-wfjjkw9y.js +0 -1
- package/app-dist/routes/chunk-wt8cxzmf.js +0 -31
- package/app-dist/routes/chunk-x45d372k.js +0 -5
- package/app-dist/routes/chunk-y3wsazkt.js +0 -1
- package/app-dist/routes/chunk-y7pmgc7t.js +0 -33
- package/app-dist/routes/chunk-zefdt2q3.js +0 -31
- package/app-dist/routes/dropdowns.js +0 -6
- package/app-dist/routes/home.js +0 -1
- package/app-dist/routes/icons.js +0 -1
- package/app-dist/routes/inputs.js +0 -12
- package/app-dist/routes/installation.js +0 -1
- package/app-dist/routes/layout.js +0 -1
- package/app-dist/routes/modals.js +0 -7
- package/app-dist/routes/navbar.js +0 -1
- package/app-dist/routes/progress.js +0 -1
- package/app-dist/routes/radios.js +0 -6
- package/app-dist/routes/switches.js +0 -6
- package/app-dist/routes/tabs.js +0 -1
- package/app-dist/routes/toasts.js +0 -16
- package/assets/fonts/material-symbols-mini.woff2 +0 -0
- package/assets/fonts/material-symbols.woff2 +0 -0
- package/assets/fonts/roboto-400.woff2 +0 -0
- package/assets/fonts/roboto-500.woff2 +0 -0
- package/assets/fonts/roboto-700.woff2 +0 -0
- package/assets/logo-banner-400.jpg +0 -0
- package/assets/logo-banner-400.webp +0 -0
- package/assets/logo-banner-800.webp +0 -0
- package/assets/logo-banner.jpg +0 -0
- package/assets/logo-icon-64.jpg +0 -0
- package/assets/logo-icon-64.webp +0 -0
- package/assets/logo-icon.jpg +0 -0
- package/assets/logo-square.jpg +0 -0
- package/bun.lock +0 -312
- package/bunfig.toml +0 -4
- package/custom-elements.json +0 -1916
- package/demo/api/sample-data.json +0 -38
- package/demo/content/alerts.html +0 -115
- package/demo/content/avatars.html +0 -70
- package/demo/content/badges.html +0 -65
- package/demo/content/buttons.html +0 -188
- package/demo/content/callouts.html +0 -91
- package/demo/content/cards.html +0 -121
- package/demo/content/checkboxes.html +0 -178
- package/demo/content/chips.html +0 -67
- package/demo/content/codeblocks.html +0 -101
- package/demo/content/confirms.html +0 -115
- package/demo/content/datatables.html +0 -149
- package/demo/content/dividers.html +0 -119
- package/demo/content/dropdowns.html +0 -89
- package/demo/content/enterprise.html +0 -252
- package/demo/content/home.html +0 -149
- package/demo/content/icons.html +0 -89
- package/demo/content/inputs.html +0 -135
- package/demo/content/installation.html +0 -16
- package/demo/content/layout.html +0 -136
- package/demo/content/modals.html +0 -141
- package/demo/content/navbar.html +0 -70
- package/demo/content/progress.html +0 -119
- package/demo/content/radios.html +0 -88
- package/demo/content/skeletons.html +0 -109
- package/demo/content/spinners.html +0 -96
- package/demo/content/switches.html +0 -84
- package/demo/content/tables.html +0 -124
- package/demo/content/tabs.html +0 -85
- package/demo/content/toasts.html +0 -116
- package/demo/content/tooltips.html +0 -107
- package/demo/content/virtual-lists.html +0 -233
- package/demo/favicon.ico +0 -0
- package/demo/favicon.png +0 -0
- package/demo/full.html +0 -52
- package/demo/iife.html +0 -46
- package/demo/manifest.json +0 -34
- package/demo/pages/datatable-demo.html +0 -237
- package/demo/pages/prompt-ui-demo.html +0 -218
- package/demo/pages/responsive-demo.html +0 -122
- package/demo/pages/schema-form-demo.html +0 -270
- package/demo/robots.txt +0 -6
- package/demo/shell.html +0 -712
- package/demo/sw.js +0 -387
- package/lighthouse-audit.mjs +0 -113
- package/scripts/analyze-components.js +0 -105
- package/scripts/build-app.js +0 -193
- package/scripts/build-framework.js +0 -444
- package/scripts/build-utils.js +0 -101
- package/scripts/test-isolated.js +0 -151
- package/server.js +0 -256
- package/tests/agents/agent-integration.test.js +0 -76
- package/tests/benchmark.html +0 -296
- package/tests/build/scan-components.test.js +0 -173
- package/tests/components/all-components.test.js +0 -245
- package/tests/components/all-missing-components.test.js +0 -574
- package/tests/components/mu-alert.test.js +0 -113
- package/tests/components/mu-avatar.test.js +0 -148
- package/tests/components/mu-badge.test.js +0 -92
- package/tests/components/mu-button.test.js +0 -112
- package/tests/components/mu-card.test.js +0 -89
- package/tests/components/mu-checkbox.test.js +0 -158
- package/tests/components/mu-chip.test.js +0 -118
- package/tests/components/mu-container.test.js +0 -120
- package/tests/components/mu-divider.test.js +0 -98
- package/tests/components/mu-drawer-item.test.js +0 -199
- package/tests/components/mu-drawer.test.js +0 -96
- package/tests/components/mu-dropdown.test.js +0 -125
- package/tests/components/mu-form.test.js +0 -138
- package/tests/components/mu-grid.test.js +0 -135
- package/tests/components/mu-icon.test.js +0 -110
- package/tests/components/mu-input.test.js +0 -131
- package/tests/components/mu-lazy.test.js +0 -103
- package/tests/components/mu-modal.test.js +0 -275
- package/tests/components/mu-navbar.test.js +0 -101
- package/tests/components/mu-progress.test.js +0 -115
- package/tests/components/mu-radio.test.js +0 -114
- package/tests/components/mu-repeat.test.js +0 -106
- package/tests/components/mu-sidebar.test.js +0 -126
- package/tests/components/mu-skeleton.test.js +0 -162
- package/tests/components/mu-stack.test.js +0 -143
- package/tests/components/mu-switch.test.js +0 -292
- package/tests/components/mu-table.test.js +0 -124
- package/tests/components/mu-tabs.test.js +0 -104
- package/tests/components/mu-textarea.test.js +0 -115
- package/tests/components/mu-toast.test.js +0 -321
- package/tests/components/mu-tooltip.test.js +0 -133
- package/tests/components/mu-virtual-list.test.js +0 -109
- package/tests/core/MuElement.test.js +0 -120
- package/tests/core/agent-api.test.js +0 -125
- package/tests/core/all-core-modules.test.js +0 -442
- package/tests/core/bus.test.js +0 -364
- package/tests/core/component-schema.test.js +0 -160
- package/tests/core/feature-registry.test.js +0 -198
- package/tests/core/form-state.test.js +0 -167
- package/tests/core/http.test.js +0 -119
- package/tests/core/keyboard.test.js +0 -319
- package/tests/core/layers.test.js +0 -129
- package/tests/core/namespaced-stores.test.js +0 -114
- package/tests/core/render.test.js +0 -121
- package/tests/core/ripple.test.js +0 -131
- package/tests/core/router.test.js +0 -89
- package/tests/core/scheduler.test.js +0 -121
- package/tests/core/signals.test.js +0 -128
- package/tests/core/store.test.js +0 -171
- package/tests/core/transitions.test.js +0 -82
- package/tests/e2e/accessibility-harness.html +0 -58
- package/tests/e2e/accessibility.test.js +0 -401
- package/tests/e2e/agent-features.test.js +0 -372
- package/tests/e2e/card-spacing.test.js +0 -287
- package/tests/e2e/components.test.js +0 -439
- package/tests/e2e/demo-routes.test.js +0 -478
- package/tests/e2e/layout-css-fallback.test.js +0 -334
- package/tests/e2e/mu-alert.e2e.test.js +0 -111
- package/tests/e2e/mu-checkbox.test.js +0 -489
- package/tests/e2e/mu-chip.test.js +0 -347
- package/tests/e2e/mu-form.test.js +0 -499
- package/tests/e2e/mu-icon.test.js +0 -114
- package/tests/e2e/mu-radio.test.js +0 -113
- package/tests/e2e/mu-skeleton.test.js +0 -140
- package/tests/e2e/mu-switch.test.js +0 -415
- package/tests/e2e/mu-tabs.test.js +0 -494
- package/tests/e2e/mu-textarea.test.js +0 -242
- package/tests/e2e/mu-virtual-list.test.js +0 -427
- package/tests/e2e/perf-memory.test.js +0 -161
- package/tests/e2e/puppeteer-helper.js +0 -137
- package/tests/e2e/puppeteer.test.js +0 -226
- package/tests/e2e/pwa.test.js +0 -261
- package/tests/e2e/test-harness.html +0 -319
- package/tests/manual/test-components.html +0 -120
- package/tests/memory-test.html +0 -309
- package/tests/setup-dom.js +0 -93
- 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><mu-virtual-list></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"><mu-virtual-list
|
|
23
|
-
item-height="50"
|
|
24
|
-
.items="${largeArray}"
|
|
25
|
-
.renderItem="${(item) => `<div>${item.name}</div>`}">
|
|
26
|
-
</mu-virtual-list></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 (<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"><mu-virtual-list
|
|
72
|
-
item-height="72"
|
|
73
|
-
.items="${users}"
|
|
74
|
-
.renderItem="${(user) => `
|
|
75
|
-
<mu-stack direction="row" gap="md" align="center" style="padding: 12px 16px;">
|
|
76
|
-
<mu-avatar initials="${user.initials}"></mu-avatar>
|
|
77
|
-
<div>
|
|
78
|
-
<strong>${user.name}</strong>
|
|
79
|
-
<div style="font-size: 12px; opacity: 0.7;">${user.email}</div>
|
|
80
|
-
</div>
|
|
81
|
-
</mu-stack>
|
|
82
|
-
`}">
|
|
83
|
-
</mu-virtual-list></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
|
-
<script type="module" src="/dist/microui.esm.js"></script>
|
|
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
|
-
<script src="/dist/microui.min.js"></script>
|
|
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>
|
package/demo/manifest.json
DELETED
|
@@ -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><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>
|
|
120
|
-
</mu-datatable>
|
|
121
|
-
|
|
122
|
-
<script>
|
|
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
|
-
</script></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>
|