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.
Files changed (264) hide show
  1. package/.agent/workflows/daisyui-component-migration.md +155 -0
  2. package/.codacy/cli.sh +149 -0
  3. package/.codacy/codacy.yaml +15 -0
  4. package/.github/instructions/codacy.instructions.md +72 -0
  5. package/.wranglerignore +21 -0
  6. package/README.md +1330 -19
  7. package/_headers +4 -0
  8. package/build.js +70 -0
  9. package/components/actions/button.js +151 -0
  10. package/components/actions/dropdown.js +120 -0
  11. package/components/actions/modal.js +146 -0
  12. package/components/actions/swap.js +118 -0
  13. package/components/daisyui.js +288 -0
  14. package/components/data-display/accordion.js +128 -0
  15. package/components/data-display/alert.js +112 -0
  16. package/components/data-display/avatar.js +170 -0
  17. package/components/data-display/badge.js +82 -0
  18. package/components/data-display/card.js +151 -0
  19. package/components/data-display/carousel.js +94 -0
  20. package/components/data-display/chart.js +220 -0
  21. package/components/data-display/chat.js +128 -0
  22. package/components/data-display/collapse.js +103 -0
  23. package/components/data-display/countdown.js +69 -0
  24. package/components/data-display/diff.js +111 -0
  25. package/components/data-display/kbd.js +65 -0
  26. package/components/data-display/loading.js +75 -0
  27. package/components/data-display/progress.js +79 -0
  28. package/components/data-display/radial-progress.js +88 -0
  29. package/components/data-display/skeleton.js +66 -0
  30. package/components/data-display/stats.js +159 -0
  31. package/components/data-display/table.js +146 -0
  32. package/components/data-display/timeline.js +146 -0
  33. package/components/data-display/toast.js +72 -0
  34. package/components/data-display/tooltip.js +74 -0
  35. package/components/data-input/checkbox.js +253 -0
  36. package/components/data-input/file-input.js +224 -0
  37. package/components/data-input/input.js +264 -0
  38. package/components/data-input/radio.js +338 -0
  39. package/components/data-input/range.js +204 -0
  40. package/components/data-input/rating.js +219 -0
  41. package/components/data-input/select.js +287 -0
  42. package/components/data-input/textarea.js +287 -0
  43. package/components/data-input/toggle.js +201 -0
  44. package/components/index.js +137 -0
  45. package/components/layout/divider.js +72 -0
  46. package/components/layout/drawer.js +142 -0
  47. package/components/layout/footer.js +100 -0
  48. package/components/layout/hero.js +109 -0
  49. package/components/layout/indicator.js +90 -0
  50. package/components/layout/join.js +78 -0
  51. package/components/layout/navbar.js +110 -0
  52. package/components/navigation/breadcrumbs.js +91 -0
  53. package/components/navigation/dock.js +103 -0
  54. package/components/navigation/menu.js +126 -0
  55. package/components/navigation/pagination.js +105 -0
  56. package/components/navigation/steps.js +89 -0
  57. package/components/navigation/tabs.css +177 -0
  58. package/components/navigation/tabs.js +123 -0
  59. package/components/theme/theme-switch.css +65 -0
  60. package/components/theme/theme-switch.js +177 -0
  61. package/docs/about.html +164 -0
  62. package/docs/api/computed.html +184 -0
  63. package/docs/api/effects.html +173 -0
  64. package/docs/api/elements.html +180 -0
  65. package/docs/api/enhance.html +225 -0
  66. package/docs/api/hypermedia.html +165 -0
  67. package/docs/api/index.html +178 -0
  68. package/docs/api/nav.html +18 -0
  69. package/docs/api/signals.html +136 -0
  70. package/docs/api/state.html +217 -0
  71. package/docs/assets/images/logo-favicon.svg +42 -0
  72. package/docs/assets/images/logo-static.svg +40 -0
  73. package/docs/assets/images/logo.svg +66 -0
  74. package/docs/assets/js/examplify.js +395 -0
  75. package/docs/assets/styles/site.css +1102 -0
  76. package/docs/assets/styles/themes.css +236 -0
  77. package/docs/components/accordion.html +439 -0
  78. package/docs/components/alert.html +528 -0
  79. package/docs/components/avatar.html +586 -0
  80. package/docs/components/badge.html +531 -0
  81. package/docs/components/breadcrumbs.html +278 -0
  82. package/docs/components/button.html +579 -0
  83. package/docs/components/card.html +561 -0
  84. package/docs/components/carousel.html +286 -0
  85. package/docs/components/chart-area.html +702 -0
  86. package/docs/components/chart-bar.html +782 -0
  87. package/docs/components/chart-column.html +735 -0
  88. package/docs/components/chart-line.html +794 -0
  89. package/docs/components/chart-pie.html +823 -0
  90. package/docs/components/chart.html +610 -15
  91. package/docs/components/chat.html +547 -0
  92. package/docs/components/checkbox.html +641 -0
  93. package/docs/components/collapse.html +536 -0
  94. package/docs/components/component-nav.html +53 -0
  95. package/docs/components/countdown.html +470 -0
  96. package/docs/components/diff.html +245 -0
  97. package/docs/components/divider.html +240 -0
  98. package/docs/components/dock.html +277 -0
  99. package/docs/components/drawer.html +515 -0
  100. package/docs/components/dropdown.html +479 -0
  101. package/docs/components/file-input.html +591 -0
  102. package/docs/components/footer.html +301 -0
  103. package/docs/components/gallery.html +504 -0
  104. package/docs/components/hero.html +264 -0
  105. package/docs/components/index.css +840 -0
  106. package/docs/components/index.html +735 -0
  107. package/docs/components/indicator.html +342 -0
  108. package/docs/components/input.html +644 -0
  109. package/docs/components/join.html +285 -0
  110. package/docs/components/kbd.html +322 -0
  111. package/docs/components/loading.html +521 -0
  112. package/docs/components/menu.html +461 -0
  113. package/docs/components/modal.html +639 -0
  114. package/docs/components/navbar.html +321 -0
  115. package/docs/components/pagination.html +279 -0
  116. package/docs/components/progress.html +514 -0
  117. package/docs/components/radial-progress.html +434 -0
  118. package/docs/components/radio.html +655 -0
  119. package/docs/components/range.html +611 -0
  120. package/docs/components/rating.html +642 -0
  121. package/docs/components/select.html +696 -0
  122. package/docs/components/sidebar-setup.js +93 -0
  123. package/docs/components/skeleton.html +447 -0
  124. package/docs/components/spinner.html +68 -0
  125. package/docs/components/stats.html +486 -0
  126. package/docs/components/steps.html +356 -0
  127. package/docs/components/swap.html +517 -0
  128. package/docs/components/switch.html +68 -0
  129. package/docs/components/table.html +668 -0
  130. package/docs/components/tabs.html +506 -0
  131. package/docs/components/text-input.html +68 -0
  132. package/docs/components/textarea.html +603 -0
  133. package/docs/components/timeline.html +485 -42
  134. package/docs/components/toast.html +474 -0
  135. package/docs/components/toggle.html +564 -0
  136. package/docs/components/tooltip.html +423 -0
  137. package/docs/examples/getting-started-example.html +40 -0
  138. package/docs/examples/index.html +93 -0
  139. package/docs/getting-started/index.html +739 -0
  140. package/docs/getting-started/reviews.html +23 -0
  141. package/docs/getting-started/reviews.odom +108 -0
  142. package/docs/getting-started/reviews.vdom +84 -0
  143. package/docs/index.html +132 -42
  144. package/docs/playground.html +416 -0
  145. package/docs/router.html +285 -0
  146. package/docs/styles/index.html +190 -0
  147. package/functions/_middleware.js +32 -0
  148. package/index.html +309 -0
  149. package/lightview-router.js +364 -0
  150. package/lightview-x.js +1577 -0
  151. package/lightview.js +659 -1200
  152. package/lightview.js.backup +793 -0
  153. package/middleware/locale.js +25 -0
  154. package/middleware/markdown.js +44 -0
  155. package/middleware/notFound.js +37 -0
  156. package/package.json +27 -41
  157. package/watch.js +92 -0
  158. package/wrangler.toml +12 -0
  159. package/.idea/lightview.iml +0 -12
  160. package/.idea/modules.xml +0 -8
  161. package/.idea/vcs.xml +0 -6
  162. package/LICENSE +0 -21
  163. package/codepen-no-tabs-embed.css +0 -2
  164. package/docs/CNAME +0 -1
  165. package/docs/api.html +0 -674
  166. package/docs/blank.html +0 -10
  167. package/docs/comparedto.html +0 -89
  168. package/docs/components/chart-repl.html +0 -69
  169. package/docs/components/components.js +0 -113
  170. package/docs/components/contents.html +0 -17
  171. package/docs/components/gantt-repl.html +0 -61
  172. package/docs/components/gantt.html +0 -42
  173. package/docs/components/gauge-repl.html +0 -66
  174. package/docs/components/gauge.html +0 -20
  175. package/docs/components/orgchart-repl.html +0 -64
  176. package/docs/components/orgchart.html +0 -41
  177. package/docs/components/repl-as-src.html +0 -17
  178. package/docs/components/repl-repl.html +0 -95
  179. package/docs/components/repl.html +0 -527
  180. package/docs/components/timeline-repl.html +0 -72
  181. package/docs/components.html +0 -14
  182. package/docs/css/highlightjs.min.css +0 -9
  183. package/docs/css/tutorial.css +0 -35
  184. package/docs/examples/anchor.html +0 -11
  185. package/docs/examples/chart.html +0 -34
  186. package/docs/examples/counter.html +0 -26
  187. package/docs/examples/counter.test.mjs +0 -47
  188. package/docs/examples/counter2.html +0 -26
  189. package/docs/examples/directives.html +0 -79
  190. package/docs/examples/foreign.html +0 -50
  191. package/docs/examples/forgeinform.html +0 -98
  192. package/docs/examples/form.html +0 -61
  193. package/docs/examples/gauge.html +0 -18
  194. package/docs/examples/invalid-template-literals.html +0 -44
  195. package/docs/examples/medium/remote.html +0 -60
  196. package/docs/examples/message.html +0 -18
  197. package/docs/examples/nested.html +0 -11
  198. package/docs/examples/object-bound-form.html +0 -34
  199. package/docs/examples/remote-server.js +0 -51
  200. package/docs/examples/remote.html +0 -34
  201. package/docs/examples/remote.json +0 -1
  202. package/docs/examples/scratch.html +0 -69
  203. package/docs/examples/sensors/index.html +0 -44
  204. package/docs/examples/sensors/sensor-server.js +0 -30
  205. package/docs/examples/shared.html +0 -41
  206. package/docs/examples/template.html +0 -33
  207. package/docs/examples/timeline.html +0 -21
  208. package/docs/examples/todo.html +0 -40
  209. package/docs/examples/top.html +0 -10
  210. package/docs/examples/types.html +0 -94
  211. package/docs/examples/xor.html +0 -62
  212. package/docs/examples.html +0 -25
  213. package/docs/javascript/codejar.min.js +0 -8
  214. package/docs/javascript/highlightjs.min.js +0 -1173
  215. package/docs/javascript/isomorphic-git.js +0 -9
  216. package/docs/javascript/json5.min.js +0 -1
  217. package/docs/javascript/lightning-fs.js +0 -1
  218. package/docs/javascript/lightview.js +0 -1285
  219. package/docs/javascript/marked.min.js +0 -6
  220. package/docs/javascript/peerjs.min.js +0 -70
  221. package/docs/javascript/turndown.js +0 -973
  222. package/docs/javascript/types.js +0 -606
  223. package/docs/javascript/utils.js +0 -45
  224. package/docs/lightview.html +0 -63
  225. package/docs/old_index.html +0 -965
  226. package/docs/old_index.md +0 -1132
  227. package/docs/slidein.html +0 -51
  228. package/docs/tutorial/0-getting-started.html +0 -67
  229. package/docs/tutorial/1-intro-to-variables.html +0 -103
  230. package/docs/tutorial/10-template-components.html +0 -80
  231. package/docs/tutorial/11-linked-components.html +0 -76
  232. package/docs/tutorial/12-imported-components.html +0 -67
  233. package/docs/tutorial/13-input-binding.html +0 -94
  234. package/docs/tutorial/14-automatic-variable-creation.html +0 -74
  235. package/docs/tutorial/15-form-binding.html +0 -110
  236. package/docs/tutorial/16-if-directive.html +0 -60
  237. package/docs/tutorial/17-loop-directives.html +0 -83
  238. package/docs/tutorial/18-sanitizing-and-escaping-input.html +0 -79
  239. package/docs/tutorial/2-imported-and-exported-variables.html +0 -80
  240. package/docs/tutorial/3-data-types.html +0 -89
  241. package/docs/tutorial/4-extended-data-types.html +0 -83
  242. package/docs/tutorial/5-extended-functional-types.html +0 -96
  243. package/docs/tutorial/5.1-extended-functional-types.html +0 -79
  244. package/docs/tutorial/5.2-extended-functional-types.html +0 -70
  245. package/docs/tutorial/6-conventional-javascript.html +0 -75
  246. package/docs/tutorial/7-monitoring-with-observers.html +0 -107
  247. package/docs/tutorial/8-event-listeners.html +0 -65
  248. package/docs/tutorial/9-intro-to-components.html +0 -91
  249. package/docs/tutorial/contents.html +0 -32
  250. package/docs/tutorial/my-component.html +0 -29
  251. package/docs/tutorial/remote-value.json +0 -4
  252. package/docs/websiterepl.html +0 -46
  253. package/jest-puppeteer.config.js +0 -5
  254. package/jest.config.json +0 -12
  255. package/lightview.min.js +0 -1
  256. package/lightview_good.js +0 -1267
  257. package/lightview_optimized.js +0 -1274
  258. package/repl_hold.html +0 -320
  259. package/test/basic.html +0 -104
  260. package/test/basic.test.mjs +0 -315
  261. package/test/extended.html +0 -29
  262. package/test/extended.test.mjs +0 -448
  263. package/types.js +0 -607
  264. package/unsplash.key +0 -1
@@ -0,0 +1,245 @@
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: 'Diff' }
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">Diff</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
+ Diff component shows a side-by-side or before/after comparison.
61
+ Perfect for image comparisons and visual changes.
62
+ </p>
63
+
64
+ <!-- Basic Example with Examplify -->
65
+ <div class="card bg-base-200" style="margin-bottom: 2rem;">
66
+ <div class="card-body">
67
+ <h2 class="card-title">Basic Example</h2>
68
+ <p class="text-sm" style="opacity: 0.7; margin-bottom: 1rem;">Image comparison with drag
69
+ resizer</p>
70
+
71
+ <!-- Tabs -->
72
+ <script>
73
+ window.switchSyntaxTab = (tabId) => {
74
+ const tabs = ['tagged', 'vdom', 'object'];
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
+ </div>
97
+
98
+ <!-- Tagged Syntax -->
99
+ <div id="syntax-tagged">
100
+ <pre><script>
101
+ examplify(document.currentScript.nextElementSibling, {
102
+ at: document.currentScript.parentElement,
103
+ scripts: ['/lightview.js', '/lightview-x.js'],
104
+ type: 'module',
105
+ minHeight: 300,
106
+ autoRun: true
107
+ });
108
+ </script><code contenteditable="true">const { default: Diff } = await import('/components/data-display/diff.js');
109
+ const { tags, $ } = Lightview;
110
+
111
+ const diff = Diff({ class: 'aspect-16/9', style: 'max-width: 500px;' },
112
+ Diff.Item1({ src: 'https://picsum.photos/600/400?grayscale', alt: 'Before (Grayscale)' }),
113
+ Diff.Item2({ src: 'https://picsum.photos/600/400', alt: 'After (Color)' }),
114
+ Diff.Resizer({})
115
+ );
116
+
117
+ $('#example').content(diff);</code></pre>
118
+ </div>
119
+
120
+ <!-- vDOM Syntax -->
121
+ <div id="syntax-vdom" style="display: none;">
122
+ <pre><script>
123
+ examplify(document.currentScript.nextElementSibling, {
124
+ at: document.currentScript.parentElement,
125
+ scripts: ['/lightview.js', '/lightview-x.js'],
126
+ type: 'module',
127
+ minHeight: 300
128
+ });
129
+ </script><code contenteditable="true">const { default: Diff } = await import('/components/data-display/diff.js');
130
+ const { $ } = Lightview;
131
+
132
+ const diff = {
133
+ tag: Diff,
134
+ attributes: { class: 'aspect-16/9', style: 'max-width: 500px;' },
135
+ children: [
136
+ { tag: Diff.Item1, attributes: { src: 'https://picsum.photos/600/400?grayscale', alt: 'Before (Grayscale)' } },
137
+ { tag: Diff.Item2, attributes: { src: 'https://picsum.photos/600/400', alt: 'After (Color)' } },
138
+ { tag: Diff.Resizer }
139
+ ]
140
+ };
141
+
142
+ $('#example').content(diff);</code></pre>
143
+ </div>
144
+
145
+ <!-- Object DOM Syntax -->
146
+ <div id="syntax-object" style="display: none;">
147
+ <pre><script>
148
+ examplify(document.currentScript.nextElementSibling, {
149
+ at: document.currentScript.parentElement,
150
+ scripts: ['/lightview.js', '/lightview-x.js'],
151
+ type: 'module',
152
+ minHeight: 300
153
+ });
154
+ </script><code contenteditable="true">const { default: Diff } = await import('/components/data-display/diff.js');
155
+ const { tags, $ } = Lightview;
156
+ tags.Diff = Diff;
157
+ tags['Diff.Item1'] = Diff.Item1;
158
+ tags['Diff.Item2'] = Diff.Item2;
159
+ tags['Diff.Resizer'] = Diff.Resizer;
160
+
161
+ const diff = {
162
+ Diff: {
163
+ class: 'aspect-16/9',
164
+ style: 'max-width: 500px;',
165
+ children: [
166
+ { 'Diff.Item1': { src: 'https://picsum.photos/600/400?grayscale', alt: 'Before (Grayscale)' } },
167
+ { 'Diff.Item2': { src: 'https://picsum.photos/600/400', alt: 'After (Color)' } },
168
+ { 'Diff.Resizer': {} }
169
+ ]
170
+ }
171
+ };
172
+
173
+ $('#example').content(diff);</code></pre>
174
+ </div>
175
+ </div>
176
+ </div>
177
+
178
+ <!-- Props Table -->
179
+ <h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Props</h2>
180
+ <div style="overflow-x: auto; margin-bottom: 2rem;">
181
+ <table class="table table-zebra">
182
+ <thead>
183
+ <tr>
184
+ <th>Prop</th>
185
+ <th>Type</th>
186
+ <th>Default</th>
187
+ <th>Description</th>
188
+ </tr>
189
+ </thead>
190
+ <tbody>
191
+ <tr>
192
+ <td><code>class</code></td>
193
+ <td>string</td>
194
+ <td>-</td>
195
+ <td>Aspect ratio class (aspect-16/9, aspect-square, etc.)</td>
196
+ </tr>
197
+ </tbody>
198
+ </table>
199
+ </div>
200
+
201
+ <!-- Sub-components -->
202
+ <h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Sub-components</h2>
203
+ <div style="overflow-x: auto; margin-bottom: 2rem;">
204
+ <table class="table table-zebra">
205
+ <thead>
206
+ <tr>
207
+ <th>Component</th>
208
+ <th>Props</th>
209
+ <th>Description</th>
210
+ </tr>
211
+ </thead>
212
+ <tbody>
213
+ <tr>
214
+ <td><code>Diff.Item1</code></td>
215
+ <td>src, alt</td>
216
+ <td>First comparison item (before)</td>
217
+ </tr>
218
+ <tr>
219
+ <td><code>Diff.Item2</code></td>
220
+ <td>src, alt</td>
221
+ <td>Second comparison item (after)</td>
222
+ </tr>
223
+ <tr>
224
+ <td><code>Diff.Resizer</code></td>
225
+ <td>-</td>
226
+ <td>Drag handle for resizing</td>
227
+ </tr>
228
+ </tbody>
229
+ </table>
230
+ </div>
231
+
232
+ <!-- Static Example -->
233
+ <h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Interactive Demo</h2>
234
+ <p class="text-sm" style="opacity: 0.7; margin-bottom: 0.5rem;">Drag the divider to compare images:
235
+ </p>
236
+ <div class="diff aspect-16/9" style="max-width: 600px; margin-bottom: 2rem;">
237
+ <div class="diff-item-1"><img src="https://picsum.photos/600/400?grayscale" alt="Before" />
238
+ </div>
239
+ <div class="diff-item-2"><img src="https://picsum.photos/600/400" alt="After" /></div>
240
+ <div class="diff-resizer"></div>
241
+ </div>
242
+ </div>
243
+ </div>
244
+ </div>
245
+ </div>
@@ -0,0 +1,240 @@
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: 'Divider' }
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">Divider</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
+ Divider separates content with a horizontal or vertical line.
61
+ Supports text labels and colors.
62
+ </p>
63
+
64
+ <!-- Basic Example with Examplify -->
65
+ <div class="card bg-base-200" style="margin-bottom: 2rem;">
66
+ <div class="card-body">
67
+ <h2 class="card-title">Basic Example</h2>
68
+ <p class="text-sm" style="opacity: 0.7; margin-bottom: 1rem;">Divider with text and colors
69
+ </p>
70
+
71
+ <!-- Tabs -->
72
+ <script>
73
+ window.switchSyntaxTab = (tabId) => {
74
+ const tabs = ['tagged', 'vdom', 'object'];
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
+ </div>
97
+
98
+ <!-- Tagged Syntax -->
99
+ <div id="syntax-tagged">
100
+ <pre><script>
101
+ examplify(document.currentScript.nextElementSibling, {
102
+ at: document.currentScript.parentElement,
103
+ scripts: ['/lightview.js', '/lightview-x.js'],
104
+ styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
105
+ type: 'module',
106
+ minHeight: 240,
107
+ autoRun: true
108
+ });
109
+ </script><code contenteditable="true">await import('/components/layout/divider.js');
110
+ const { tags, $ } = Lightview;
111
+ const { div, Divider } = tags;
112
+
113
+ const demo = div({ class: 'flex flex-col w-full' },
114
+ div({ class: 'card bg-base-300 p-4 rounded-box' }, 'Content above'),
115
+ Divider({}, 'OR'),
116
+ div({ class: 'card bg-base-300 p-4 rounded-box' }, 'Content below'),
117
+ Divider({ color: 'primary' }, 'Primary'),
118
+ div({ class: 'card bg-base-300 p-4 rounded-box' }, 'More content')
119
+ );
120
+
121
+ $('#example').content(demo);</code></pre>
122
+ </div>
123
+
124
+ <!-- vDOM Syntax -->
125
+ <div id="syntax-vdom" style="display: none;">
126
+ <pre><script>
127
+ examplify(document.currentScript.nextElementSibling, {
128
+ at: document.currentScript.parentElement,
129
+ scripts: ['/lightview.js', '/lightview-x.js'],
130
+ styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
131
+ type: 'module',
132
+ minHeight: 240
133
+ });
134
+ </script><code contenteditable="true">await import('/components/layout/divider.js');
135
+ const { $, tags } = Lightview;
136
+ const { Divider, div } = tags;
137
+
138
+ const demo = {
139
+ tag: div,
140
+ attributes: { class: 'flex flex-col w-full' },
141
+ children: [
142
+ { tag: div, attributes: { class: 'card bg-base-300 p-4 rounded-box' }, children: ['Content above'] },
143
+ { tag: Divider, children: ['OR'] },
144
+ { tag: div, attributes: { class: 'card bg-base-300 p-4 rounded-box' }, children: ['Content below'] },
145
+ { tag: Divider, attributes: { color: 'primary' }, children: ['Primary'] },
146
+ { tag: div, attributes: { class: 'card bg-base-300 p-4 rounded-box' }, children: ['More content'] }
147
+ ]
148
+ };
149
+
150
+ $('#example').content(demo);</code></pre>
151
+ </div>
152
+
153
+ <!-- Object DOM Syntax -->
154
+ <div id="syntax-object" style="display: none;">
155
+ <pre><script>
156
+ examplify(document.currentScript.nextElementSibling, {
157
+ at: document.currentScript.parentElement,
158
+ scripts: ['/lightview.js', '/lightview-x.js'],
159
+ styles: ['https://cdn.jsdelivr.net/npm/daisyui@3.9.4/dist/full.min.css'],
160
+ type: 'module',
161
+ minHeight: 240
162
+ });
163
+ </script><code contenteditable="true">await import('/components/layout/divider.js');
164
+ const { $ } = Lightview;
165
+
166
+ const demo = {
167
+ div: {
168
+ class: 'flex flex-col w-full',
169
+ children: [
170
+ { div: { class: 'card bg-base-300 p-4 rounded-box', text: 'Content above' } },
171
+ { Divider: { text: 'OR' } },
172
+ { div: { class: 'card bg-base-300 p-4 rounded-box', text: 'Content below' } },
173
+ { Divider: { color: 'primary', text: 'Primary' } },
174
+ { div: { class: 'card bg-base-300 p-4 rounded-box', text: 'More content' } }
175
+ ]
176
+ }
177
+ };
178
+
179
+ $('#example').content(demo);</code></pre>
180
+ </div>
181
+ </div>
182
+ </div>
183
+
184
+ <!-- Props Table -->
185
+ <h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Props</h2>
186
+ <div style="overflow-x: auto; margin-bottom: 2rem;">
187
+ <table class="table table-zebra">
188
+ <thead>
189
+ <tr>
190
+ <th>Prop</th>
191
+ <th>Type</th>
192
+ <th>Default</th>
193
+ <th>Description</th>
194
+ </tr>
195
+ </thead>
196
+ <tbody>
197
+ <tr>
198
+ <td><code>horizontal</code></td>
199
+ <td>boolean</td>
200
+ <td>false</td>
201
+ <td>Vertical divider (use in flex row)</td>
202
+ </tr>
203
+ <tr>
204
+ <td><code>color</code></td>
205
+ <td>string</td>
206
+ <td>-</td>
207
+ <td>'primary' | 'secondary' | 'accent' | 'success' | 'warning' | 'error'</td>
208
+ </tr>
209
+ </tbody>
210
+ </table>
211
+ </div>
212
+
213
+ <!-- Static Examples -->
214
+ <h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Without Text</h2>
215
+ <div style="display: flex; width: 100%; flex-direction: column; margin-bottom: 2rem;">
216
+ <div class="card bg-base-300 rounded-box p-4">Content</div>
217
+ <div class="divider"></div>
218
+ <div class="card bg-base-300 rounded-box p-4">Content</div>
219
+ </div>
220
+
221
+ <h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Vertical</h2>
222
+ <div style="display: flex; width: 100%; margin-bottom: 2rem;">
223
+ <div class="card bg-base-300 rounded-box p-4 flex-grow">Left</div>
224
+ <div class="divider divider-horizontal">OR</div>
225
+ <div class="card bg-base-300 rounded-box p-4 flex-grow">Right</div>
226
+ </div>
227
+
228
+ <h2 class="text-xl font-bold" style="margin-bottom: 1rem;">Colors</h2>
229
+ <div style="display: flex; width: 100%; flex-direction: column; gap: 0.5rem; margin-bottom: 2rem;">
230
+ <div class="divider divider-primary">Primary</div>
231
+ <div class="divider divider-secondary">Secondary</div>
232
+ <div class="divider divider-accent">Accent</div>
233
+ <div class="divider divider-success">Success</div>
234
+ <div class="divider divider-warning">Warning</div>
235
+ <div class="divider divider-error">Error</div>
236
+ </div>
237
+ </div>
238
+ </div>
239
+ </div>
240
+ </div>