lightview 1.8.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/workflows/daisyui-component-migration.md +155 -0
- package/.codacy/cli.sh +149 -0
- package/.codacy/codacy.yaml +15 -0
- package/.github/instructions/codacy.instructions.md +72 -0
- package/.wranglerignore +21 -0
- package/README.md +1330 -19
- package/_headers +4 -0
- package/build.js +70 -0
- package/components/actions/button.js +151 -0
- package/components/actions/dropdown.js +120 -0
- package/components/actions/modal.js +146 -0
- package/components/actions/swap.js +118 -0
- package/components/daisyui.js +288 -0
- package/components/data-display/accordion.js +128 -0
- package/components/data-display/alert.js +112 -0
- package/components/data-display/avatar.js +170 -0
- package/components/data-display/badge.js +82 -0
- package/components/data-display/card.js +151 -0
- package/components/data-display/carousel.js +94 -0
- package/components/data-display/chart.js +220 -0
- package/components/data-display/chat.js +128 -0
- package/components/data-display/collapse.js +103 -0
- package/components/data-display/countdown.js +69 -0
- package/components/data-display/diff.js +111 -0
- package/components/data-display/kbd.js +65 -0
- package/components/data-display/loading.js +75 -0
- package/components/data-display/progress.js +79 -0
- package/components/data-display/radial-progress.js +88 -0
- package/components/data-display/skeleton.js +66 -0
- package/components/data-display/stats.js +159 -0
- package/components/data-display/table.js +146 -0
- package/components/data-display/timeline.js +146 -0
- package/components/data-display/toast.js +72 -0
- package/components/data-display/tooltip.js +74 -0
- package/components/data-input/checkbox.js +253 -0
- package/components/data-input/file-input.js +224 -0
- package/components/data-input/input.js +264 -0
- package/components/data-input/radio.js +338 -0
- package/components/data-input/range.js +204 -0
- package/components/data-input/rating.js +219 -0
- package/components/data-input/select.js +287 -0
- package/components/data-input/textarea.js +287 -0
- package/components/data-input/toggle.js +201 -0
- package/components/index.js +137 -0
- package/components/layout/divider.js +72 -0
- package/components/layout/drawer.js +142 -0
- package/components/layout/footer.js +100 -0
- package/components/layout/hero.js +109 -0
- package/components/layout/indicator.js +90 -0
- package/components/layout/join.js +78 -0
- package/components/layout/navbar.js +110 -0
- package/components/navigation/breadcrumbs.js +91 -0
- package/components/navigation/dock.js +103 -0
- package/components/navigation/menu.js +126 -0
- package/components/navigation/pagination.js +105 -0
- package/components/navigation/steps.js +89 -0
- package/components/navigation/tabs.css +177 -0
- package/components/navigation/tabs.js +123 -0
- package/components/theme/theme-switch.css +65 -0
- package/components/theme/theme-switch.js +177 -0
- package/docs/about.html +164 -0
- package/docs/api/computed.html +184 -0
- package/docs/api/effects.html +173 -0
- package/docs/api/elements.html +180 -0
- package/docs/api/enhance.html +225 -0
- package/docs/api/hypermedia.html +165 -0
- package/docs/api/index.html +178 -0
- package/docs/api/nav.html +18 -0
- package/docs/api/signals.html +136 -0
- package/docs/api/state.html +217 -0
- package/docs/assets/images/logo-favicon.svg +42 -0
- package/docs/assets/images/logo-static.svg +40 -0
- package/docs/assets/images/logo.svg +66 -0
- package/docs/assets/js/examplify.js +395 -0
- package/docs/assets/styles/site.css +1102 -0
- package/docs/assets/styles/themes.css +236 -0
- package/docs/components/accordion.html +439 -0
- package/docs/components/alert.html +528 -0
- package/docs/components/avatar.html +586 -0
- package/docs/components/badge.html +531 -0
- package/docs/components/breadcrumbs.html +278 -0
- package/docs/components/button.html +579 -0
- package/docs/components/card.html +561 -0
- package/docs/components/carousel.html +286 -0
- package/docs/components/chart-area.html +702 -0
- package/docs/components/chart-bar.html +782 -0
- package/docs/components/chart-column.html +735 -0
- package/docs/components/chart-line.html +794 -0
- package/docs/components/chart-pie.html +823 -0
- package/docs/components/chart.html +610 -15
- package/docs/components/chat.html +547 -0
- package/docs/components/checkbox.html +641 -0
- package/docs/components/collapse.html +536 -0
- package/docs/components/component-nav.html +53 -0
- package/docs/components/countdown.html +470 -0
- package/docs/components/diff.html +245 -0
- package/docs/components/divider.html +240 -0
- package/docs/components/dock.html +277 -0
- package/docs/components/drawer.html +515 -0
- package/docs/components/dropdown.html +479 -0
- package/docs/components/file-input.html +591 -0
- package/docs/components/footer.html +301 -0
- package/docs/components/gallery.html +504 -0
- package/docs/components/hero.html +264 -0
- package/docs/components/index.css +840 -0
- package/docs/components/index.html +735 -0
- package/docs/components/indicator.html +342 -0
- package/docs/components/input.html +644 -0
- package/docs/components/join.html +285 -0
- package/docs/components/kbd.html +322 -0
- package/docs/components/loading.html +521 -0
- package/docs/components/menu.html +461 -0
- package/docs/components/modal.html +639 -0
- package/docs/components/navbar.html +321 -0
- package/docs/components/pagination.html +279 -0
- package/docs/components/progress.html +514 -0
- package/docs/components/radial-progress.html +434 -0
- package/docs/components/radio.html +655 -0
- package/docs/components/range.html +611 -0
- package/docs/components/rating.html +642 -0
- package/docs/components/select.html +696 -0
- package/docs/components/sidebar-setup.js +93 -0
- package/docs/components/skeleton.html +447 -0
- package/docs/components/spinner.html +68 -0
- package/docs/components/stats.html +486 -0
- package/docs/components/steps.html +356 -0
- package/docs/components/swap.html +517 -0
- package/docs/components/switch.html +68 -0
- package/docs/components/table.html +668 -0
- package/docs/components/tabs.html +506 -0
- package/docs/components/text-input.html +68 -0
- package/docs/components/textarea.html +603 -0
- package/docs/components/timeline.html +485 -42
- package/docs/components/toast.html +474 -0
- package/docs/components/toggle.html +564 -0
- package/docs/components/tooltip.html +423 -0
- package/docs/examples/getting-started-example.html +40 -0
- package/docs/examples/index.html +93 -0
- package/docs/getting-started/index.html +739 -0
- package/docs/getting-started/reviews.html +23 -0
- package/docs/getting-started/reviews.odom +108 -0
- package/docs/getting-started/reviews.vdom +84 -0
- package/docs/index.html +132 -42
- package/docs/playground.html +416 -0
- package/docs/router.html +285 -0
- package/docs/styles/index.html +190 -0
- package/functions/_middleware.js +32 -0
- package/index.html +309 -0
- package/lightview-router.js +364 -0
- package/lightview-x.js +1577 -0
- package/lightview.js +659 -1200
- package/lightview.js.backup +793 -0
- package/middleware/locale.js +25 -0
- package/middleware/markdown.js +44 -0
- package/middleware/notFound.js +37 -0
- package/package.json +27 -41
- package/watch.js +92 -0
- package/wrangler.toml +12 -0
- package/.idea/lightview.iml +0 -12
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- package/LICENSE +0 -21
- package/codepen-no-tabs-embed.css +0 -2
- package/docs/CNAME +0 -1
- package/docs/api.html +0 -674
- package/docs/blank.html +0 -10
- package/docs/comparedto.html +0 -89
- package/docs/components/chart-repl.html +0 -69
- package/docs/components/components.js +0 -113
- package/docs/components/contents.html +0 -17
- package/docs/components/gantt-repl.html +0 -61
- package/docs/components/gantt.html +0 -42
- package/docs/components/gauge-repl.html +0 -66
- package/docs/components/gauge.html +0 -20
- package/docs/components/orgchart-repl.html +0 -64
- package/docs/components/orgchart.html +0 -41
- package/docs/components/repl-as-src.html +0 -17
- package/docs/components/repl-repl.html +0 -95
- package/docs/components/repl.html +0 -527
- package/docs/components/timeline-repl.html +0 -72
- package/docs/components.html +0 -14
- package/docs/css/highlightjs.min.css +0 -9
- package/docs/css/tutorial.css +0 -35
- package/docs/examples/anchor.html +0 -11
- package/docs/examples/chart.html +0 -34
- package/docs/examples/counter.html +0 -26
- package/docs/examples/counter.test.mjs +0 -47
- package/docs/examples/counter2.html +0 -26
- package/docs/examples/directives.html +0 -79
- package/docs/examples/foreign.html +0 -50
- package/docs/examples/forgeinform.html +0 -98
- package/docs/examples/form.html +0 -61
- package/docs/examples/gauge.html +0 -18
- package/docs/examples/invalid-template-literals.html +0 -44
- package/docs/examples/medium/remote.html +0 -60
- package/docs/examples/message.html +0 -18
- package/docs/examples/nested.html +0 -11
- package/docs/examples/object-bound-form.html +0 -34
- package/docs/examples/remote-server.js +0 -51
- package/docs/examples/remote.html +0 -34
- package/docs/examples/remote.json +0 -1
- package/docs/examples/scratch.html +0 -69
- package/docs/examples/sensors/index.html +0 -44
- package/docs/examples/sensors/sensor-server.js +0 -30
- package/docs/examples/shared.html +0 -41
- package/docs/examples/template.html +0 -33
- package/docs/examples/timeline.html +0 -21
- package/docs/examples/todo.html +0 -40
- package/docs/examples/top.html +0 -10
- package/docs/examples/types.html +0 -94
- package/docs/examples/xor.html +0 -62
- package/docs/examples.html +0 -25
- package/docs/javascript/codejar.min.js +0 -8
- package/docs/javascript/highlightjs.min.js +0 -1173
- package/docs/javascript/isomorphic-git.js +0 -9
- package/docs/javascript/json5.min.js +0 -1
- package/docs/javascript/lightning-fs.js +0 -1
- package/docs/javascript/lightview.js +0 -1285
- package/docs/javascript/marked.min.js +0 -6
- package/docs/javascript/peerjs.min.js +0 -70
- package/docs/javascript/turndown.js +0 -973
- package/docs/javascript/types.js +0 -606
- package/docs/javascript/utils.js +0 -45
- package/docs/lightview.html +0 -63
- package/docs/old_index.html +0 -965
- package/docs/old_index.md +0 -1132
- package/docs/slidein.html +0 -51
- package/docs/tutorial/0-getting-started.html +0 -67
- package/docs/tutorial/1-intro-to-variables.html +0 -103
- package/docs/tutorial/10-template-components.html +0 -80
- package/docs/tutorial/11-linked-components.html +0 -76
- package/docs/tutorial/12-imported-components.html +0 -67
- package/docs/tutorial/13-input-binding.html +0 -94
- package/docs/tutorial/14-automatic-variable-creation.html +0 -74
- package/docs/tutorial/15-form-binding.html +0 -110
- package/docs/tutorial/16-if-directive.html +0 -60
- package/docs/tutorial/17-loop-directives.html +0 -83
- package/docs/tutorial/18-sanitizing-and-escaping-input.html +0 -79
- package/docs/tutorial/2-imported-and-exported-variables.html +0 -80
- package/docs/tutorial/3-data-types.html +0 -89
- package/docs/tutorial/4-extended-data-types.html +0 -83
- package/docs/tutorial/5-extended-functional-types.html +0 -96
- package/docs/tutorial/5.1-extended-functional-types.html +0 -79
- package/docs/tutorial/5.2-extended-functional-types.html +0 -70
- package/docs/tutorial/6-conventional-javascript.html +0 -75
- package/docs/tutorial/7-monitoring-with-observers.html +0 -107
- package/docs/tutorial/8-event-listeners.html +0 -65
- package/docs/tutorial/9-intro-to-components.html +0 -91
- package/docs/tutorial/contents.html +0 -32
- package/docs/tutorial/my-component.html +0 -29
- package/docs/tutorial/remote-value.json +0 -4
- package/docs/websiterepl.html +0 -46
- package/jest-puppeteer.config.js +0 -5
- package/jest.config.json +0 -12
- package/lightview.min.js +0 -1
- package/lightview_good.js +0 -1267
- package/lightview_optimized.js +0 -1274
- package/repl_hold.html +0 -320
- package/test/basic.html +0 -104
- package/test/basic.test.mjs +0 -315
- package/test/extended.html +0 -29
- package/test/extended.test.mjs +0 -448
- package/types.js +0 -607
- package/unsplash.key +0 -1
|
@@ -0,0 +1,641 @@
|
|
|
1
|
+
<!-- SEO-friendly SPA Shim -->
|
|
2
|
+
<script src="/lightview-router.js"></script>
|
|
3
|
+
<script>
|
|
4
|
+
if (window.LightviewRouter) {
|
|
5
|
+
LightviewRouter.base('/index.html');
|
|
6
|
+
}
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<!-- Load the page-specific stylesheet -->
|
|
10
|
+
<link rel="stylesheet" href="./index.css">
|
|
11
|
+
|
|
12
|
+
<!-- Gallery Structure -->
|
|
13
|
+
<div class="gallery-page">
|
|
14
|
+
<div class="gallery-layout">
|
|
15
|
+
<!-- Sidebar Overlay -->
|
|
16
|
+
<div id="sidebar-overlay" class="sidebar-overlay"></div>
|
|
17
|
+
|
|
18
|
+
<!-- Sidebar -->
|
|
19
|
+
<div id="gallery-sidebar" class="gallery-sidebar" style="visibility: hidden" src="./component-nav.html"></div>
|
|
20
|
+
|
|
21
|
+
<!-- Main Content -->
|
|
22
|
+
<div id="gallery-main" class="gallery-main">
|
|
23
|
+
<!-- Header Container -->
|
|
24
|
+
<div
|
|
25
|
+
style="position: sticky; top: 0; z-index: 30; background: var(--gallery-surface); border-bottom: 1px solid var(--gallery-border); backdrop-filter: blur(8px);">
|
|
26
|
+
<!-- Breadcrumbs Row -->
|
|
27
|
+
<div style="padding: 0.75rem 1.5rem 0;">
|
|
28
|
+
<script>
|
|
29
|
+
(() => {
|
|
30
|
+
const { Breadcrumbs } = Lightview.tags;
|
|
31
|
+
const breadcrumbs = Breadcrumbs({
|
|
32
|
+
id: 'page-breadcrumbs',
|
|
33
|
+
items: [
|
|
34
|
+
{ label: 'Components', href: '/docs/components' },
|
|
35
|
+
{ label: 'Checkbox' }
|
|
36
|
+
]
|
|
37
|
+
});
|
|
38
|
+
document.currentScript.replaceWith(breadcrumbs.domEl);
|
|
39
|
+
})();
|
|
40
|
+
</script>
|
|
41
|
+
</div>
|
|
42
|
+
<!-- Title Row -->
|
|
43
|
+
<div class="gallery-header"
|
|
44
|
+
style="border-bottom: none; height: auto; padding-top: 0.5rem; padding-bottom: 0.75rem;">
|
|
45
|
+
<button id="toggle-btn" class="toggle-btn" aria-label="Toggle Sidebar">
|
|
46
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="toggle-icon"
|
|
47
|
+
style="stroke: currentColor; stroke-width: 2;">
|
|
48
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7" />
|
|
49
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M11 19l-7-7 7-7" />
|
|
50
|
+
</svg>
|
|
51
|
+
</button>
|
|
52
|
+
<h1 class="gallery-title">Checkbox</h1>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<!-- Content -->
|
|
57
|
+
<div class="gallery-content">
|
|
58
|
+
<div class="section-content" style="max-width: 1000px;">
|
|
59
|
+
<p class="text-lg" style="opacity: 0.7; margin-bottom: 1.5rem;">
|
|
60
|
+
Checkbox allows the user to select one or multiple items from a set.
|
|
61
|
+
Supports labels, descriptions, validation, and reactive state binding.
|
|
62
|
+
</p>
|
|
63
|
+
|
|
64
|
+
<!-- Basic Examples -->
|
|
65
|
+
<div class="card bg-base-200" style="margin-bottom: 2rem;">
|
|
66
|
+
<div class="card-body">
|
|
67
|
+
<h2 class="card-title">Basic Examples</h2>
|
|
68
|
+
<p class="text-sm" style="opacity: 0.7; margin-bottom: 1rem;">Simple checkboxes with various
|
|
69
|
+
configurations</p>
|
|
70
|
+
|
|
71
|
+
<!-- Tabs -->
|
|
72
|
+
<script>
|
|
73
|
+
window.switchSyntaxTab = (tabId) => {
|
|
74
|
+
const tabs = ['tagged', 'vdom', 'object', 'html'];
|
|
75
|
+
tabs.forEach(t => {
|
|
76
|
+
const tabEl = document.getElementById(`tab-btn-${t}`);
|
|
77
|
+
const contentEl = document.getElementById(`syntax-${t}`);
|
|
78
|
+
if (t === tabId) {
|
|
79
|
+
tabEl.classList.add('syntax-tab-active');
|
|
80
|
+
contentEl.style.display = 'block';
|
|
81
|
+
} else {
|
|
82
|
+
tabEl.classList.remove('syntax-tab-active');
|
|
83
|
+
contentEl.style.display = 'none';
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
</script>
|
|
88
|
+
<div role="tablist" class="syntax-tabs" style="margin-bottom: 1rem;">
|
|
89
|
+
<button id="tab-btn-tagged" role="tab" class="syntax-tab syntax-tab-active"
|
|
90
|
+
onclick="switchSyntaxTab('tagged')">Tagged</button>
|
|
91
|
+
<button id="tab-btn-vdom" role="tab" class="syntax-tab"
|
|
92
|
+
onclick="switchSyntaxTab('vdom')">vDOM</button>
|
|
93
|
+
<button id="tab-btn-object" role="tab" class="syntax-tab"
|
|
94
|
+
onclick="switchSyntaxTab('object')">Object
|
|
95
|
+
DOM</button>
|
|
96
|
+
<button id="tab-btn-html" role="tab" class="syntax-tab"
|
|
97
|
+
onclick="switchSyntaxTab('html')">HTML</button>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<!-- Tagged Syntax -->
|
|
101
|
+
<div id="syntax-tagged">
|
|
102
|
+
<pre><script>
|
|
103
|
+
examplify(document.currentScript.nextElementSibling, {
|
|
104
|
+
at: document.currentScript.parentElement,
|
|
105
|
+
scripts: ['/lightview.js', '/lightview-x.js'],
|
|
106
|
+
styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
|
|
107
|
+
type: 'module',
|
|
108
|
+
minHeight: 100,
|
|
109
|
+
autoRun: true
|
|
110
|
+
});
|
|
111
|
+
</script><code contenteditable="true">await import('/components/data-input/checkbox.js');
|
|
112
|
+
const { tags, $ } = Lightview;
|
|
113
|
+
const { div, Checkbox } = tags;
|
|
114
|
+
|
|
115
|
+
// 1. Basic checkbox
|
|
116
|
+
const basic = Checkbox({
|
|
117
|
+
label: 'Remember me'
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// 2. Checkbox with description
|
|
121
|
+
const withDesc = Checkbox({
|
|
122
|
+
label: 'Subscribe to newsletter',
|
|
123
|
+
description: 'Get weekly updates on new features',
|
|
124
|
+
color: 'primary'
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// 3. Required checkbox
|
|
128
|
+
const required = Checkbox({
|
|
129
|
+
label: 'I agree to the terms and conditions',
|
|
130
|
+
required: true
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// 4. Pre-checked disabled checkbox
|
|
134
|
+
const disabled = Checkbox({
|
|
135
|
+
label: 'This option is locked',
|
|
136
|
+
defaultChecked: true,
|
|
137
|
+
disabled: true
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
// Insert all examples
|
|
141
|
+
$('#example').content(
|
|
142
|
+
div({ style: 'display: flex; flex-direction: column; gap: 1rem;' }, basic, withDesc, required, disabled)
|
|
143
|
+
);</code></pre>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<!-- vDOM Syntax -->
|
|
147
|
+
<div id="syntax-vdom" style="display: none;">
|
|
148
|
+
<pre><script>
|
|
149
|
+
examplify(document.currentScript.nextElementSibling, {
|
|
150
|
+
at: document.currentScript.parentElement,
|
|
151
|
+
scripts: ['/lightview.js', '/lightview-x.js'],
|
|
152
|
+
styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
|
|
153
|
+
type: 'module',
|
|
154
|
+
minHeight: 100
|
|
155
|
+
});
|
|
156
|
+
</script><code contenteditable="true">await import('/components/data-input/checkbox.js');
|
|
157
|
+
const { $, tags } = Lightview;
|
|
158
|
+
const { Checkbox, div } = tags;
|
|
159
|
+
|
|
160
|
+
const basic = {
|
|
161
|
+
tag: Checkbox,
|
|
162
|
+
attributes: { label: 'Remember me' }
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
const withDesc = {
|
|
166
|
+
tag: Checkbox,
|
|
167
|
+
attributes: {
|
|
168
|
+
label: 'Subscribe to newsletter',
|
|
169
|
+
description: 'Get weekly updates on new features',
|
|
170
|
+
color: 'primary'
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
const required = {
|
|
175
|
+
tag: Checkbox,
|
|
176
|
+
attributes: {
|
|
177
|
+
label: 'I agree to the terms and conditions',
|
|
178
|
+
required: true
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const disabled = {
|
|
183
|
+
tag: Checkbox,
|
|
184
|
+
attributes: {
|
|
185
|
+
label: 'This option is locked',
|
|
186
|
+
defaultChecked: true,
|
|
187
|
+
disabled: true
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
$('#example').content({
|
|
192
|
+
tag: div,
|
|
193
|
+
attributes: { style: 'display: flex; flex-direction: column; gap: 1rem;' },
|
|
194
|
+
children: [basic, withDesc, required, disabled]
|
|
195
|
+
});</code></pre>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
<!-- Object DOM Syntax -->
|
|
199
|
+
<div id="syntax-object" style="display: none;">
|
|
200
|
+
<pre><script>
|
|
201
|
+
examplify(document.currentScript.nextElementSibling, {
|
|
202
|
+
at: document.currentScript.parentElement,
|
|
203
|
+
scripts: ['/lightview.js', '/lightview-x.js'],
|
|
204
|
+
styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
|
|
205
|
+
type: 'module',
|
|
206
|
+
minHeight: 100
|
|
207
|
+
});
|
|
208
|
+
</script><code contenteditable="true">await import('/components/data-input/checkbox.js');
|
|
209
|
+
const { tags, $ } = Lightview;
|
|
210
|
+
|
|
211
|
+
$('#example').content({
|
|
212
|
+
div: {
|
|
213
|
+
style: 'display: flex; flex-direction: column; gap: 1rem;',
|
|
214
|
+
children: [
|
|
215
|
+
{ Checkbox: { label: 'Remember me' } },
|
|
216
|
+
{
|
|
217
|
+
Checkbox: {
|
|
218
|
+
label: 'Subscribe to newsletter',
|
|
219
|
+
description: 'Get weekly updates on new features',
|
|
220
|
+
color: 'primary'
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
Checkbox: {
|
|
225
|
+
label: 'I agree to the terms and conditions',
|
|
226
|
+
required: true
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
Checkbox: {
|
|
231
|
+
label: 'This option is locked',
|
|
232
|
+
defaultChecked: true,
|
|
233
|
+
disabled: true
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
]
|
|
237
|
+
}
|
|
238
|
+
});</code></pre>
|
|
239
|
+
</div>
|
|
240
|
+
|
|
241
|
+
<!-- HTML Syntax -->
|
|
242
|
+
<div id="syntax-html" style="display: none;">
|
|
243
|
+
<pre><script>
|
|
244
|
+
examplify(document.currentScript.nextElementSibling, {
|
|
245
|
+
at: document.currentScript.parentElement,
|
|
246
|
+
scripts: ['/lightview.js', '/lightview-x.js'],
|
|
247
|
+
styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
|
|
248
|
+
type: 'module',
|
|
249
|
+
language: 'html',
|
|
250
|
+
minHeight: 100
|
|
251
|
+
});
|
|
252
|
+
</script><code contenteditable="true" class="language-html"><!-- Import the component (registers lv-checkbox) -->
|
|
253
|
+
<script type="module" src="/components/data-input/checkbox.js"></script>
|
|
254
|
+
|
|
255
|
+
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
256
|
+
<lv-checkbox label="Remember me"></lv-checkbox>
|
|
257
|
+
<lv-checkbox label="Subscribe to newsletter" description="Get weekly updates on new features" color="primary"></lv-checkbox>
|
|
258
|
+
<lv-checkbox label="I agree to the terms and conditions" required></lv-checkbox>
|
|
259
|
+
<lv-checkbox label="This option is locked" default-checked disabled></lv-checkbox>
|
|
260
|
+
</div></code></pre>
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
|
|
265
|
+
<!-- Reactive Example -->
|
|
266
|
+
<div
|
|
267
|
+
style="background-color: oklch(var(--b2)); border-radius: var(--rounded-box, 1rem); box-shadow: var(--shadow-2, 0 25px 50px -12px rgba(0,0,0,0.25)); margin-bottom: 2rem;">
|
|
268
|
+
<div style="padding: var(--padding-card, 2rem);">
|
|
269
|
+
<h2 style="font-size: 1.5rem; font-weight: 600; line-height: 2rem; margin-bottom: 0.5rem;">
|
|
270
|
+
Reactive Example</h2>
|
|
271
|
+
<p style="font-size: 0.875rem; opacity: 0.7; margin-bottom: 1rem;">Two-way binding with
|
|
272
|
+
signals
|
|
273
|
+
and live
|
|
274
|
+
validation</p>
|
|
275
|
+
|
|
276
|
+
<!-- Tabs -->
|
|
277
|
+
<script>
|
|
278
|
+
window.switchReactiveSyntaxTab = (tabId) => {
|
|
279
|
+
const tabs = ['tagged', 'vdom', 'object'];
|
|
280
|
+
tabs.forEach(t => {
|
|
281
|
+
const tabEl = document.getElementById(`reactive-tab-btn-${t}`);
|
|
282
|
+
const contentEl = document.getElementById(`reactive-syntax-${t}`);
|
|
283
|
+
if (t === tabId) {
|
|
284
|
+
tabEl.classList.add('syntax-tab-active');
|
|
285
|
+
contentEl.style.display = 'block';
|
|
286
|
+
} else {
|
|
287
|
+
tabEl.classList.remove('syntax-tab-active');
|
|
288
|
+
contentEl.style.display = 'none';
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
};
|
|
292
|
+
</script>
|
|
293
|
+
<div role="tablist" class="syntax-tabs" style="margin-bottom: 1rem;">
|
|
294
|
+
<button id="reactive-tab-btn-tagged" role="tab" class="syntax-tab syntax-tab-active"
|
|
295
|
+
onclick="switchReactiveSyntaxTab('tagged')">Tagged</button>
|
|
296
|
+
<button id="reactive-tab-btn-vdom" role="tab" class="syntax-tab"
|
|
297
|
+
onclick="switchReactiveSyntaxTab('vdom')">vDOM</button>
|
|
298
|
+
<button id="reactive-tab-btn-object" role="tab" class="syntax-tab"
|
|
299
|
+
onclick="switchReactiveSyntaxTab('object')">Object DOM</button>
|
|
300
|
+
</div>
|
|
301
|
+
|
|
302
|
+
<!-- Tagged Syntax -->
|
|
303
|
+
<div id="reactive-syntax-tagged">
|
|
304
|
+
<pre><script>
|
|
305
|
+
examplify(document.currentScript.nextElementSibling, {
|
|
306
|
+
at: document.currentScript.parentElement,
|
|
307
|
+
scripts: ['/lightview.js', '/lightview-x.js'],
|
|
308
|
+
styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
|
|
309
|
+
type: 'module',
|
|
310
|
+
minHeight: 320
|
|
311
|
+
});
|
|
312
|
+
</script><code contenteditable="true">await import('/components/data-input/checkbox.js');
|
|
313
|
+
const { signal, tags, $ } = Lightview;
|
|
314
|
+
const { div, p, span, button, Checkbox } = tags;
|
|
315
|
+
|
|
316
|
+
// Signals for checkboxes
|
|
317
|
+
const notifications = signal(true);
|
|
318
|
+
const marketing = signal(false);
|
|
319
|
+
const termsAccepted = signal(false);
|
|
320
|
+
|
|
321
|
+
// Reactive demo
|
|
322
|
+
const reactiveDemo = div({ style: 'display: flex; flex-direction: column; gap: 1rem; max-width: 28rem;' },
|
|
323
|
+
Checkbox({
|
|
324
|
+
label: 'Email Notifications',
|
|
325
|
+
description: 'Receive important updates via email',
|
|
326
|
+
checked: notifications,
|
|
327
|
+
color: 'primary'
|
|
328
|
+
}),
|
|
329
|
+
Checkbox({
|
|
330
|
+
label: 'Marketing Emails',
|
|
331
|
+
description: 'Promotional content and offers',
|
|
332
|
+
checked: marketing,
|
|
333
|
+
color: 'secondary'
|
|
334
|
+
}),
|
|
335
|
+
Checkbox({
|
|
336
|
+
label: 'Accept Terms & Conditions',
|
|
337
|
+
checked: termsAccepted,
|
|
338
|
+
required: true,
|
|
339
|
+
color: 'accent',
|
|
340
|
+
validate: (checked) => !checked ? 'You must accept the terms' : null
|
|
341
|
+
}),
|
|
342
|
+
div({ style: 'padding-top: 1rem; border-top: 1px solid oklch(var(--b3));' },
|
|
343
|
+
p({ style: 'font-size: 0.875rem; font-family: monospace;' },
|
|
344
|
+
() => `Notifications: ${notifications.value}, Marketing: ${marketing.value}`
|
|
345
|
+
),
|
|
346
|
+
button({
|
|
347
|
+
class: 'btn btn-primary',
|
|
348
|
+
style: () => `margin-top: 0.5rem; ${termsAccepted.value ? '' : 'opacity: 0.5; pointer-events: none;'}`,
|
|
349
|
+
disabled: () => !termsAccepted.value
|
|
350
|
+
}, 'Submit')
|
|
351
|
+
)
|
|
352
|
+
);
|
|
353
|
+
|
|
354
|
+
$('#example').content(reactiveDemo);</code></pre>
|
|
355
|
+
</div>
|
|
356
|
+
|
|
357
|
+
<!-- vDOM Syntax -->
|
|
358
|
+
<div id="reactive-syntax-vdom" style="display: none;">
|
|
359
|
+
<pre><script>
|
|
360
|
+
examplify(document.currentScript.nextElementSibling, {
|
|
361
|
+
at: document.currentScript.parentElement,
|
|
362
|
+
scripts: ['/lightview.js', '/lightview-x.js'],
|
|
363
|
+
styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
|
|
364
|
+
type: 'module',
|
|
365
|
+
minHeight: 320
|
|
366
|
+
});
|
|
367
|
+
</script><code contenteditable="true">await import('/components/data-input/checkbox.js');
|
|
368
|
+
const { signal, $, tags } = Lightview;
|
|
369
|
+
const { Checkbox, div, p, button } = tags;
|
|
370
|
+
|
|
371
|
+
const notifications = signal(true);
|
|
372
|
+
const marketing = signal(false);
|
|
373
|
+
const termsAccepted = signal(false);
|
|
374
|
+
|
|
375
|
+
const reactiveDemo = {
|
|
376
|
+
tag: div,
|
|
377
|
+
attributes: { style: 'display: flex; flex-direction: column; gap: 1rem; max-width: 28rem;' },
|
|
378
|
+
children: [
|
|
379
|
+
{
|
|
380
|
+
tag: Checkbox,
|
|
381
|
+
attributes: {
|
|
382
|
+
label: 'Email Notifications',
|
|
383
|
+
description: 'Receive important updates via email',
|
|
384
|
+
checked: notifications,
|
|
385
|
+
color: 'primary'
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
tag: Checkbox,
|
|
390
|
+
attributes: {
|
|
391
|
+
label: 'Marketing Emails',
|
|
392
|
+
description: 'Promotional content and offers',
|
|
393
|
+
checked: marketing,
|
|
394
|
+
color: 'secondary'
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
tag: Checkbox,
|
|
399
|
+
attributes: {
|
|
400
|
+
label: 'Accept Terms & Conditions',
|
|
401
|
+
checked: termsAccepted,
|
|
402
|
+
required: true,
|
|
403
|
+
color: 'accent',
|
|
404
|
+
validate: (checked) => !checked ? 'You must accept the terms' : null
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
tag: div,
|
|
409
|
+
attributes: { style: 'padding-top: 1rem; border-top: 1px solid oklch(var(--b3));' },
|
|
410
|
+
children: [
|
|
411
|
+
{
|
|
412
|
+
tag: p,
|
|
413
|
+
attributes: { style: 'font-size: 0.875rem; font-family: monospace;' },
|
|
414
|
+
children: [
|
|
415
|
+
() => `Notifications: ${notifications.value}, Marketing: ${marketing.value}`
|
|
416
|
+
]
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
tag: button,
|
|
420
|
+
attributes: {
|
|
421
|
+
class: 'btn btn-primary',
|
|
422
|
+
style: () => `margin-top: 0.5rem; ${termsAccepted.value ? '' : 'opacity: 0.5; pointer-events: none;'}`,
|
|
423
|
+
disabled: () => !termsAccepted.value
|
|
424
|
+
},
|
|
425
|
+
children: ['Submit']
|
|
426
|
+
}
|
|
427
|
+
]
|
|
428
|
+
}
|
|
429
|
+
]
|
|
430
|
+
};
|
|
431
|
+
|
|
432
|
+
$('#example').content(reactiveDemo);</code></pre>
|
|
433
|
+
</div>
|
|
434
|
+
|
|
435
|
+
<!-- Object DOM Syntax -->
|
|
436
|
+
<div id="reactive-syntax-object" style="display: none;">
|
|
437
|
+
<pre><script>
|
|
438
|
+
examplify(document.currentScript.nextElementSibling, {
|
|
439
|
+
at: document.currentScript.parentElement,
|
|
440
|
+
scripts: ['/lightview.js', '/lightview-x.js'],
|
|
441
|
+
styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
|
|
442
|
+
type: 'module',
|
|
443
|
+
minHeight: 320
|
|
444
|
+
});
|
|
445
|
+
</script><code contenteditable="true">await import('/components/data-input/checkbox.js');
|
|
446
|
+
const { signal, tags, $ } = Lightview;
|
|
447
|
+
|
|
448
|
+
const notifications = signal(true);
|
|
449
|
+
const marketing = signal(false);
|
|
450
|
+
const termsAccepted = signal(false);
|
|
451
|
+
|
|
452
|
+
const reactiveDemo = {
|
|
453
|
+
div: {
|
|
454
|
+
style: 'display: flex; flex-direction: column; gap: 1rem; max-width: 28rem;',
|
|
455
|
+
children: [
|
|
456
|
+
{
|
|
457
|
+
Checkbox: {
|
|
458
|
+
label: 'Email Notifications',
|
|
459
|
+
description: 'Receive important updates via email',
|
|
460
|
+
checked: notifications,
|
|
461
|
+
color: 'primary'
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
Checkbox: {
|
|
466
|
+
label: 'Marketing Emails',
|
|
467
|
+
description: 'Promotional content and offers',
|
|
468
|
+
checked: marketing,
|
|
469
|
+
color: 'secondary'
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
Checkbox: {
|
|
474
|
+
label: 'Accept Terms & Conditions',
|
|
475
|
+
checked: termsAccepted,
|
|
476
|
+
required: true,
|
|
477
|
+
color: 'accent',
|
|
478
|
+
validate: (checked) => !checked ? 'You must accept the terms' : null
|
|
479
|
+
}
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
div: {
|
|
483
|
+
style: 'padding-top: 1rem; border-top: 1px solid oklch(var(--b3));',
|
|
484
|
+
children: [
|
|
485
|
+
{
|
|
486
|
+
p: {
|
|
487
|
+
style: 'font-size: 0.875rem; font-family: monospace;',
|
|
488
|
+
text: () => `Notifications: ${notifications.value}, Marketing: ${marketing.value}`
|
|
489
|
+
}
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
button: {
|
|
493
|
+
class: 'btn btn-primary',
|
|
494
|
+
style: () => `margin-top: 0.5rem; ${termsAccepted.value ? '' : 'opacity: 0.5; pointer-events: none;'}`,
|
|
495
|
+
disabled: () => !termsAccepted.value,
|
|
496
|
+
text: 'Submit'
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
]
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
]
|
|
503
|
+
}
|
|
504
|
+
};
|
|
505
|
+
|
|
506
|
+
$('#example').content(reactiveDemo);</code></pre>
|
|
507
|
+
</div>
|
|
508
|
+
</div>
|
|
509
|
+
</div>
|
|
510
|
+
|
|
511
|
+
<!-- Props Table -->
|
|
512
|
+
<h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Props</h2>
|
|
513
|
+
<div style="overflow-x: auto; margin-bottom: 2rem;">
|
|
514
|
+
<table class="table table-zebra">
|
|
515
|
+
<thead>
|
|
516
|
+
<tr>
|
|
517
|
+
<th>Prop</th>
|
|
518
|
+
<th>Type</th>
|
|
519
|
+
<th>Default</th>
|
|
520
|
+
<th>Description</th>
|
|
521
|
+
</tr>
|
|
522
|
+
</thead>
|
|
523
|
+
<tbody>
|
|
524
|
+
<tr>
|
|
525
|
+
<td><code>checked</code></td>
|
|
526
|
+
<td>boolean | signal</td>
|
|
527
|
+
<td>-</td>
|
|
528
|
+
<td>Checked state (reactive with signals)</td>
|
|
529
|
+
</tr>
|
|
530
|
+
<tr>
|
|
531
|
+
<td><code>defaultChecked</code></td>
|
|
532
|
+
<td>boolean</td>
|
|
533
|
+
<td>false</td>
|
|
534
|
+
<td>Default checked state for uncontrolled mode</td>
|
|
535
|
+
</tr>
|
|
536
|
+
<tr>
|
|
537
|
+
<td><code>indeterminate</code></td>
|
|
538
|
+
<td>boolean</td>
|
|
539
|
+
<td>false</td>
|
|
540
|
+
<td>Indeterminate (partial) state</td>
|
|
541
|
+
</tr>
|
|
542
|
+
<tr>
|
|
543
|
+
<td><code>label</code></td>
|
|
544
|
+
<td>string</td>
|
|
545
|
+
<td>-</td>
|
|
546
|
+
<td>Label text displayed next to checkbox</td>
|
|
547
|
+
</tr>
|
|
548
|
+
<tr>
|
|
549
|
+
<td><code>description</code></td>
|
|
550
|
+
<td>string</td>
|
|
551
|
+
<td>-</td>
|
|
552
|
+
<td>Description text below the label</td>
|
|
553
|
+
</tr>
|
|
554
|
+
<tr>
|
|
555
|
+
<td><code>error</code></td>
|
|
556
|
+
<td>string | function</td>
|
|
557
|
+
<td>-</td>
|
|
558
|
+
<td>Error message or reactive error function</td>
|
|
559
|
+
</tr>
|
|
560
|
+
<tr>
|
|
561
|
+
<td><code>validate</code></td>
|
|
562
|
+
<td>function</td>
|
|
563
|
+
<td>-</td>
|
|
564
|
+
<td>Validation function: <code>(checked) => errorMessage | null</code></td>
|
|
565
|
+
</tr>
|
|
566
|
+
<tr>
|
|
567
|
+
<td><code>color</code></td>
|
|
568
|
+
<td>string</td>
|
|
569
|
+
<td>-</td>
|
|
570
|
+
<td>'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'
|
|
571
|
+
</td>
|
|
572
|
+
</tr>
|
|
573
|
+
<tr>
|
|
574
|
+
<td><code>size</code></td>
|
|
575
|
+
<td>string</td>
|
|
576
|
+
<td>'md'</td>
|
|
577
|
+
<td>'xs' | 'sm' | 'md' | 'lg'</td>
|
|
578
|
+
</tr>
|
|
579
|
+
<tr>
|
|
580
|
+
<td><code>disabled</code></td>
|
|
581
|
+
<td>boolean</td>
|
|
582
|
+
<td>false</td>
|
|
583
|
+
<td>Disable the checkbox</td>
|
|
584
|
+
</tr>
|
|
585
|
+
<tr>
|
|
586
|
+
<td><code>required</code></td>
|
|
587
|
+
<td>boolean</td>
|
|
588
|
+
<td>false</td>
|
|
589
|
+
<td>Mark as required field (shows asterisk)</td>
|
|
590
|
+
</tr>
|
|
591
|
+
<tr>
|
|
592
|
+
<td><code>onChange</code></td>
|
|
593
|
+
<td>function</td>
|
|
594
|
+
<td>-</td>
|
|
595
|
+
<td>Callback when value changes: <code>(checked, event) => void</code></td>
|
|
596
|
+
</tr>
|
|
597
|
+
<tr>
|
|
598
|
+
<td><code>useShadow</code></td>
|
|
599
|
+
<td>boolean</td>
|
|
600
|
+
<td>*</td>
|
|
601
|
+
<td>Render in Shadow DOM. *Follows global <code>initComponents()</code> setting</td>
|
|
602
|
+
</tr>
|
|
603
|
+
</tbody>
|
|
604
|
+
</table>
|
|
605
|
+
</div>
|
|
606
|
+
|
|
607
|
+
<!-- Colors Example -->
|
|
608
|
+
<h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Colors</h2>
|
|
609
|
+
<div style="display: flex; gap: 0.5rem; margin-bottom: 2rem;">
|
|
610
|
+
<input type="checkbox" class="checkbox" checked />
|
|
611
|
+
<input type="checkbox" class="checkbox checkbox-primary" checked />
|
|
612
|
+
<input type="checkbox" class="checkbox checkbox-secondary" checked />
|
|
613
|
+
<input type="checkbox" class="checkbox checkbox-accent" checked />
|
|
614
|
+
<input type="checkbox" class="checkbox checkbox-success" checked />
|
|
615
|
+
<input type="checkbox" class="checkbox checkbox-warning" checked />
|
|
616
|
+
<input type="checkbox" class="checkbox checkbox-info" checked />
|
|
617
|
+
<input type="checkbox" class="checkbox checkbox-error" checked />
|
|
618
|
+
</div>
|
|
619
|
+
|
|
620
|
+
<!-- Sizes Example -->
|
|
621
|
+
<h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Sizes</h2>
|
|
622
|
+
<div style="display: flex; align-items: center; gap: 1rem; margin-bottom: 2rem;">
|
|
623
|
+
<input type="checkbox" class="checkbox checkbox-xs" checked />
|
|
624
|
+
<input type="checkbox" class="checkbox checkbox-sm" checked />
|
|
625
|
+
<input type="checkbox" class="checkbox checkbox-md" checked />
|
|
626
|
+
<input type="checkbox" class="checkbox checkbox-lg" checked />
|
|
627
|
+
</div>
|
|
628
|
+
|
|
629
|
+
<!-- With Label -->
|
|
630
|
+
<h2 class="text-xl font-bold" style="margin-bottom: 1rem;">With Label</h2>
|
|
631
|
+
<div style="display: flex; flex-direction: column; width: 13rem; margin-bottom: 2rem;">
|
|
632
|
+
<label
|
|
633
|
+
style="display: flex; align-items: center; justify-content: space-between; cursor: pointer; padding: 0.5rem 0;">
|
|
634
|
+
<span style="font-size: 0.875rem;">Remember me</span>
|
|
635
|
+
<input type="checkbox" class="checkbox checkbox-primary" />
|
|
636
|
+
</label>
|
|
637
|
+
</div>
|
|
638
|
+
</div>
|
|
639
|
+
</div>
|
|
640
|
+
</div>
|
|
641
|
+
</div>
|