lightview 1.8.2 → 2.0.1

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 (262) hide show
  1. package/.codacy/cli.sh +149 -0
  2. package/.codacy/codacy.yaml +15 -0
  3. package/.github/instructions/codacy.instructions.md +72 -0
  4. package/.wranglerignore +21 -0
  5. package/README.md +1330 -19
  6. package/_headers +4 -0
  7. package/build.js +70 -0
  8. package/components/actions/button.js +151 -0
  9. package/components/actions/dropdown.js +120 -0
  10. package/components/actions/modal.js +146 -0
  11. package/components/actions/swap.js +118 -0
  12. package/components/daisyui.js +288 -0
  13. package/components/data-display/accordion.js +128 -0
  14. package/components/data-display/alert.js +112 -0
  15. package/components/data-display/avatar.js +170 -0
  16. package/components/data-display/badge.js +82 -0
  17. package/components/data-display/card.js +151 -0
  18. package/components/data-display/carousel.js +94 -0
  19. package/components/data-display/chart.js +220 -0
  20. package/components/data-display/chat.js +128 -0
  21. package/components/data-display/collapse.js +103 -0
  22. package/components/data-display/countdown.js +69 -0
  23. package/components/data-display/diff.js +111 -0
  24. package/components/data-display/kbd.js +65 -0
  25. package/components/data-display/loading.js +75 -0
  26. package/components/data-display/progress.js +79 -0
  27. package/components/data-display/radial-progress.js +88 -0
  28. package/components/data-display/skeleton.js +66 -0
  29. package/components/data-display/stats.js +159 -0
  30. package/components/data-display/table.js +146 -0
  31. package/components/data-display/timeline.js +146 -0
  32. package/components/data-display/toast.js +72 -0
  33. package/components/data-display/tooltip.js +74 -0
  34. package/components/data-input/checkbox.js +253 -0
  35. package/components/data-input/file-input.js +224 -0
  36. package/components/data-input/input.js +264 -0
  37. package/components/data-input/radio.js +338 -0
  38. package/components/data-input/range.js +204 -0
  39. package/components/data-input/rating.js +219 -0
  40. package/components/data-input/select.js +287 -0
  41. package/components/data-input/textarea.js +287 -0
  42. package/components/data-input/toggle.js +201 -0
  43. package/components/index.js +137 -0
  44. package/components/layout/divider.js +72 -0
  45. package/components/layout/drawer.js +142 -0
  46. package/components/layout/footer.js +100 -0
  47. package/components/layout/hero.js +109 -0
  48. package/components/layout/indicator.js +90 -0
  49. package/components/layout/join.js +78 -0
  50. package/components/layout/navbar.js +110 -0
  51. package/components/navigation/breadcrumbs.js +91 -0
  52. package/components/navigation/dock.js +103 -0
  53. package/components/navigation/menu.js +126 -0
  54. package/components/navigation/pagination.js +105 -0
  55. package/components/navigation/steps.js +89 -0
  56. package/components/navigation/tabs.css +177 -0
  57. package/components/navigation/tabs.js +123 -0
  58. package/components/theme/theme-switch.css +65 -0
  59. package/components/theme/theme-switch.js +177 -0
  60. package/docs/about.html +164 -0
  61. package/docs/api/computed.html +184 -0
  62. package/docs/api/effects.html +173 -0
  63. package/docs/api/elements.html +180 -0
  64. package/docs/api/enhance.html +225 -0
  65. package/docs/api/hypermedia.html +165 -0
  66. package/docs/api/index.html +178 -0
  67. package/docs/api/nav.html +18 -0
  68. package/docs/api/signals.html +136 -0
  69. package/docs/api/state.html +217 -0
  70. package/docs/assets/images/logo-favicon.svg +42 -0
  71. package/docs/assets/images/logo-static.svg +40 -0
  72. package/docs/assets/images/logo.svg +66 -0
  73. package/docs/assets/js/examplify.js +395 -0
  74. package/docs/assets/styles/site.css +1102 -0
  75. package/docs/assets/styles/themes.css +236 -0
  76. package/docs/components/accordion.html +439 -0
  77. package/docs/components/alert.html +528 -0
  78. package/docs/components/avatar.html +586 -0
  79. package/docs/components/badge.html +531 -0
  80. package/docs/components/breadcrumbs.html +278 -0
  81. package/docs/components/button.html +579 -0
  82. package/docs/components/card.html +561 -0
  83. package/docs/components/carousel.html +286 -0
  84. package/docs/components/chart-area.html +702 -0
  85. package/docs/components/chart-bar.html +782 -0
  86. package/docs/components/chart-column.html +735 -0
  87. package/docs/components/chart-line.html +794 -0
  88. package/docs/components/chart-pie.html +823 -0
  89. package/docs/components/chart.html +610 -15
  90. package/docs/components/chat.html +547 -0
  91. package/docs/components/checkbox.html +641 -0
  92. package/docs/components/collapse.html +536 -0
  93. package/docs/components/component-nav.html +53 -0
  94. package/docs/components/countdown.html +470 -0
  95. package/docs/components/diff.html +245 -0
  96. package/docs/components/divider.html +240 -0
  97. package/docs/components/dock.html +277 -0
  98. package/docs/components/drawer.html +515 -0
  99. package/docs/components/dropdown.html +479 -0
  100. package/docs/components/file-input.html +591 -0
  101. package/docs/components/footer.html +301 -0
  102. package/docs/components/gallery.html +504 -0
  103. package/docs/components/hero.html +264 -0
  104. package/docs/components/index.css +840 -0
  105. package/docs/components/index.html +735 -0
  106. package/docs/components/indicator.html +342 -0
  107. package/docs/components/input.html +644 -0
  108. package/docs/components/join.html +285 -0
  109. package/docs/components/kbd.html +322 -0
  110. package/docs/components/loading.html +521 -0
  111. package/docs/components/menu.html +461 -0
  112. package/docs/components/modal.html +639 -0
  113. package/docs/components/navbar.html +321 -0
  114. package/docs/components/pagination.html +279 -0
  115. package/docs/components/progress.html +514 -0
  116. package/docs/components/radial-progress.html +434 -0
  117. package/docs/components/radio.html +655 -0
  118. package/docs/components/range.html +611 -0
  119. package/docs/components/rating.html +642 -0
  120. package/docs/components/select.html +696 -0
  121. package/docs/components/sidebar-setup.js +93 -0
  122. package/docs/components/skeleton.html +447 -0
  123. package/docs/components/spinner.html +68 -0
  124. package/docs/components/stats.html +486 -0
  125. package/docs/components/steps.html +356 -0
  126. package/docs/components/swap.html +517 -0
  127. package/docs/components/switch.html +68 -0
  128. package/docs/components/table.html +668 -0
  129. package/docs/components/tabs.html +506 -0
  130. package/docs/components/text-input.html +68 -0
  131. package/docs/components/textarea.html +603 -0
  132. package/docs/components/timeline.html +485 -42
  133. package/docs/components/toast.html +474 -0
  134. package/docs/components/toggle.html +564 -0
  135. package/docs/components/tooltip.html +423 -0
  136. package/docs/examples/getting-started-example.html +40 -0
  137. package/docs/examples/index.html +93 -0
  138. package/docs/getting-started/index.html +739 -0
  139. package/docs/getting-started/reviews.html +23 -0
  140. package/docs/getting-started/reviews.odom +108 -0
  141. package/docs/getting-started/reviews.vdom +84 -0
  142. package/docs/index.html +132 -42
  143. package/docs/playground.html +416 -0
  144. package/docs/router.html +285 -0
  145. package/docs/styles/index.html +190 -0
  146. package/functions/_middleware.js +32 -0
  147. package/index.html +309 -0
  148. package/lightview-router.js +364 -0
  149. package/lightview-x.js +1577 -0
  150. package/lightview.js +659 -1200
  151. package/middleware/locale.js +25 -0
  152. package/middleware/markdown.js +44 -0
  153. package/middleware/notFound.js +37 -0
  154. package/package.json +27 -41
  155. package/watch.js +92 -0
  156. package/wrangler.toml +12 -0
  157. package/.idea/lightview.iml +0 -12
  158. package/.idea/modules.xml +0 -8
  159. package/.idea/vcs.xml +0 -6
  160. package/LICENSE +0 -21
  161. package/codepen-no-tabs-embed.css +0 -2
  162. package/docs/CNAME +0 -1
  163. package/docs/api.html +0 -674
  164. package/docs/blank.html +0 -10
  165. package/docs/comparedto.html +0 -89
  166. package/docs/components/chart-repl.html +0 -69
  167. package/docs/components/components.js +0 -113
  168. package/docs/components/contents.html +0 -17
  169. package/docs/components/gantt-repl.html +0 -61
  170. package/docs/components/gantt.html +0 -42
  171. package/docs/components/gauge-repl.html +0 -66
  172. package/docs/components/gauge.html +0 -20
  173. package/docs/components/orgchart-repl.html +0 -64
  174. package/docs/components/orgchart.html +0 -41
  175. package/docs/components/repl-as-src.html +0 -17
  176. package/docs/components/repl-repl.html +0 -95
  177. package/docs/components/repl.html +0 -527
  178. package/docs/components/timeline-repl.html +0 -72
  179. package/docs/components.html +0 -14
  180. package/docs/css/highlightjs.min.css +0 -9
  181. package/docs/css/tutorial.css +0 -35
  182. package/docs/examples/anchor.html +0 -11
  183. package/docs/examples/chart.html +0 -34
  184. package/docs/examples/counter.html +0 -26
  185. package/docs/examples/counter.test.mjs +0 -47
  186. package/docs/examples/counter2.html +0 -26
  187. package/docs/examples/directives.html +0 -79
  188. package/docs/examples/foreign.html +0 -50
  189. package/docs/examples/forgeinform.html +0 -98
  190. package/docs/examples/form.html +0 -61
  191. package/docs/examples/gauge.html +0 -18
  192. package/docs/examples/invalid-template-literals.html +0 -44
  193. package/docs/examples/medium/remote.html +0 -60
  194. package/docs/examples/message.html +0 -18
  195. package/docs/examples/nested.html +0 -11
  196. package/docs/examples/object-bound-form.html +0 -34
  197. package/docs/examples/remote-server.js +0 -51
  198. package/docs/examples/remote.html +0 -34
  199. package/docs/examples/remote.json +0 -1
  200. package/docs/examples/scratch.html +0 -69
  201. package/docs/examples/sensors/index.html +0 -44
  202. package/docs/examples/sensors/sensor-server.js +0 -30
  203. package/docs/examples/shared.html +0 -41
  204. package/docs/examples/template.html +0 -33
  205. package/docs/examples/timeline.html +0 -21
  206. package/docs/examples/todo.html +0 -40
  207. package/docs/examples/top.html +0 -10
  208. package/docs/examples/types.html +0 -94
  209. package/docs/examples/xor.html +0 -62
  210. package/docs/examples.html +0 -25
  211. package/docs/javascript/codejar.min.js +0 -8
  212. package/docs/javascript/highlightjs.min.js +0 -1173
  213. package/docs/javascript/isomorphic-git.js +0 -9
  214. package/docs/javascript/json5.min.js +0 -1
  215. package/docs/javascript/lightning-fs.js +0 -1
  216. package/docs/javascript/lightview.js +0 -1285
  217. package/docs/javascript/marked.min.js +0 -6
  218. package/docs/javascript/peerjs.min.js +0 -70
  219. package/docs/javascript/turndown.js +0 -973
  220. package/docs/javascript/types.js +0 -606
  221. package/docs/javascript/utils.js +0 -45
  222. package/docs/lightview.html +0 -63
  223. package/docs/old_index.html +0 -965
  224. package/docs/old_index.md +0 -1132
  225. package/docs/slidein.html +0 -51
  226. package/docs/tutorial/0-getting-started.html +0 -67
  227. package/docs/tutorial/1-intro-to-variables.html +0 -103
  228. package/docs/tutorial/10-template-components.html +0 -80
  229. package/docs/tutorial/11-linked-components.html +0 -76
  230. package/docs/tutorial/12-imported-components.html +0 -67
  231. package/docs/tutorial/13-input-binding.html +0 -94
  232. package/docs/tutorial/14-automatic-variable-creation.html +0 -74
  233. package/docs/tutorial/15-form-binding.html +0 -110
  234. package/docs/tutorial/16-if-directive.html +0 -60
  235. package/docs/tutorial/17-loop-directives.html +0 -83
  236. package/docs/tutorial/18-sanitizing-and-escaping-input.html +0 -79
  237. package/docs/tutorial/2-imported-and-exported-variables.html +0 -80
  238. package/docs/tutorial/3-data-types.html +0 -89
  239. package/docs/tutorial/4-extended-data-types.html +0 -83
  240. package/docs/tutorial/5-extended-functional-types.html +0 -96
  241. package/docs/tutorial/5.1-extended-functional-types.html +0 -79
  242. package/docs/tutorial/5.2-extended-functional-types.html +0 -70
  243. package/docs/tutorial/6-conventional-javascript.html +0 -75
  244. package/docs/tutorial/7-monitoring-with-observers.html +0 -107
  245. package/docs/tutorial/8-event-listeners.html +0 -65
  246. package/docs/tutorial/9-intro-to-components.html +0 -91
  247. package/docs/tutorial/contents.html +0 -32
  248. package/docs/tutorial/my-component.html +0 -29
  249. package/docs/tutorial/remote-value.json +0 -4
  250. package/docs/websiterepl.html +0 -46
  251. package/jest-puppeteer.config.js +0 -5
  252. package/jest.config.json +0 -12
  253. package/lightview.min.js +0 -1
  254. package/lightview_good.js +0 -1267
  255. package/lightview_optimized.js +0 -1274
  256. package/repl_hold.html +0 -320
  257. package/test/basic.html +0 -104
  258. package/test/basic.test.mjs +0 -315
  259. package/test/extended.html +0 -29
  260. package/test/extended.test.mjs +0 -448
  261. package/types.js +0 -607
  262. package/unsplash.key +0 -1
@@ -0,0 +1,840 @@
1
+ /* ========================================
2
+ Components Gallery Styles
3
+ Conventional CSS - No Tailwind
4
+ ======================================== */
5
+
6
+ /* ============= CSS Variables ============= */
7
+ :root {
8
+ /* Colors - Light Theme */
9
+ --gallery-bg: #fafafa;
10
+ --gallery-bg-alt: #f1f5f9;
11
+ --gallery-surface: #ffffff;
12
+ --gallery-text: #1e293b;
13
+ --gallery-text-secondary: #64748b;
14
+ --gallery-text-muted: #94a3b8;
15
+ --gallery-border: #e2e8f0;
16
+ --gallery-border-hover: #cbd5e1;
17
+ --gallery-primary: #6366f1;
18
+ --gallery-primary-hover: #4f46e5;
19
+ --gallery-primary-light: #e0e7ff;
20
+ --gallery-accent: #f59e0b;
21
+ --gallery-success: #10b981;
22
+ --gallery-info: #06b6d4;
23
+
24
+ /* Shadows */
25
+ --gallery-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
26
+ --gallery-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
27
+ --gallery-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
28
+
29
+ /* Spacing */
30
+ --gallery-sidebar-width: 480px;
31
+ --gallery-header-height: 64px;
32
+
33
+ /* Transitions */
34
+ --gallery-transition: 0.2s ease;
35
+ --gallery-transition-slow: 0.3s ease;
36
+
37
+ /* Typography */
38
+ --gallery-font: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
39
+ --gallery-font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
40
+
41
+ /* Border Radius */
42
+ --gallery-radius: 8px;
43
+ --gallery-radius-lg: 12px;
44
+ }
45
+
46
+ /* Dark Theme */
47
+ [data-theme="dark"] {
48
+ --gallery-bg: #0f172a;
49
+ --gallery-bg-alt: #1e293b;
50
+ --gallery-surface: #1e293b;
51
+ --gallery-text: #f1f5f9;
52
+ --gallery-text-secondary: #94a3b8;
53
+ --gallery-text-muted: #64748b;
54
+ --gallery-border: #334155;
55
+ --gallery-border-hover: #475569;
56
+ --gallery-primary: #818cf8;
57
+ --gallery-primary-hover: #a5b4fc;
58
+ --gallery-primary-light: #312e81;
59
+ }
60
+
61
+ /* ============= Base Styles ============= */
62
+ * {
63
+ box-sizing: border-box;
64
+ }
65
+
66
+ .gallery-page {
67
+ font-family: var(--gallery-font);
68
+ background-color: var(--gallery-bg);
69
+ color: var(--gallery-text);
70
+ min-height: 100vh;
71
+ }
72
+
73
+ /* ============= Main Layout ============= */
74
+ .gallery-layout {
75
+ display: flex;
76
+ min-height: 100vh;
77
+ }
78
+
79
+ /* ============= Sidebar ============= */
80
+ /* Hide sidebar initially until JS is ready - prevents FOUC/flicker */
81
+ .gallery-sidebar {
82
+ width: var(--gallery-sidebar-width);
83
+ background: var(--gallery-bg-alt);
84
+ border-right: 1px solid var(--gallery-border);
85
+ padding: 1rem;
86
+ height: 100vh;
87
+ position: fixed;
88
+ left: 0;
89
+ top: 0;
90
+ overflow-y: auto;
91
+ z-index: 40;
92
+ transform: translateX(-100%);
93
+ transition: transform var(--gallery-transition-slow);
94
+ visibility: hidden;
95
+ }
96
+
97
+ /* Once JS is ready, allow normal visibility transitions */
98
+ .gallery-layout.js-ready .gallery-sidebar {
99
+ visibility: visible;
100
+ }
101
+
102
+ .gallery-layout.js-ready .gallery-sidebar.open {
103
+ transform: translateX(0);
104
+ }
105
+
106
+ .gallery-sidebar.closed {
107
+ transform: translateX(-100%);
108
+ }
109
+
110
+ .sidebar-header {
111
+ padding: 0 0.5rem 1rem;
112
+ border-bottom: 1px solid var(--gallery-border);
113
+ margin-bottom: 1rem;
114
+ }
115
+
116
+ .sidebar-title {
117
+ font-size: 1.125rem;
118
+ font-weight: 700;
119
+ margin: 0 0 0.25rem;
120
+ }
121
+
122
+ .sidebar-subtitle {
123
+ font-size: 0.75rem;
124
+ color: var(--gallery-text-muted);
125
+ margin: 0;
126
+ }
127
+
128
+ .sidebar-nav {
129
+ list-style: none;
130
+ padding: 0;
131
+ margin: 0;
132
+ display: flex;
133
+ flex-direction: column;
134
+ gap: 0.125rem;
135
+ overflow-y: auto;
136
+ max-height: calc(100vh - 120px);
137
+ }
138
+
139
+ .sidebar-nav li {
140
+ margin: 0;
141
+ }
142
+
143
+ .sidebar-nav a {
144
+ display: block;
145
+ padding: 0.5rem 0.75rem;
146
+ color: var(--gallery-text-secondary);
147
+ text-decoration: none;
148
+ border-radius: var(--gallery-radius);
149
+ font-size: 0.9375rem;
150
+ transition: all var(--gallery-transition);
151
+ }
152
+
153
+ .sidebar-nav a:hover {
154
+ color: var(--gallery-text);
155
+ background: var(--gallery-surface);
156
+ }
157
+
158
+ .sidebar-overlay {
159
+ display: none;
160
+ position: fixed;
161
+ inset: 0;
162
+ background: rgba(0, 0, 0, 0.5);
163
+ z-index: 35;
164
+ }
165
+
166
+ /* ============= Main Content ============= */
167
+ .gallery-main {
168
+ flex: 1;
169
+ margin-left: var(--gallery-sidebar-width);
170
+ transition: margin-left var(--gallery-transition-slow);
171
+ }
172
+
173
+ .gallery-main.sidebar-closed {
174
+ margin-left: 0;
175
+ }
176
+
177
+ /* ============= Header ============= */
178
+ .gallery-header {
179
+ position: sticky;
180
+ top: 0;
181
+ z-index: 30;
182
+ background: var(--gallery-surface);
183
+ border-bottom: 1px solid var(--gallery-border);
184
+ padding: 0 1.5rem;
185
+ height: var(--gallery-header-height);
186
+ display: flex;
187
+ align-items: center;
188
+ gap: 1rem;
189
+ backdrop-filter: blur(8px);
190
+ background: rgba(255, 255, 255, 0.9);
191
+ }
192
+
193
+ [data-theme="dark"] .gallery-header {
194
+ background: rgba(15, 23, 42, 0.9);
195
+ }
196
+
197
+ .toggle-btn {
198
+ width: 40px;
199
+ height: 40px;
200
+ display: flex;
201
+ align-items: center;
202
+ justify-content: center;
203
+ background: none;
204
+ border: none;
205
+ border-radius: 50%;
206
+ cursor: pointer;
207
+ color: var(--gallery-text);
208
+ transition: background-color var(--gallery-transition);
209
+ }
210
+
211
+ .toggle-btn:hover {
212
+ background: var(--gallery-bg-alt);
213
+ }
214
+
215
+ .toggle-icon {
216
+ width: 24px;
217
+ height: 24px;
218
+ transition: transform var(--gallery-transition-slow);
219
+ }
220
+
221
+ .toggle-icon.rotated {
222
+ transform: rotate(180deg);
223
+ }
224
+
225
+ .gallery-title {
226
+ font-size: 1.75rem;
227
+ font-weight: 700;
228
+ margin: 0;
229
+ }
230
+
231
+ /* ============= Content Area ============= */
232
+ .gallery-content {
233
+ padding: 2rem;
234
+ max-width: 1200px;
235
+ margin: 0 auto;
236
+ }
237
+
238
+ .gallery-intro {
239
+ margin-bottom: 2.5rem;
240
+ }
241
+
242
+ .gallery-intro p {
243
+ font-size: 1.125rem;
244
+ color: var(--gallery-text-secondary);
245
+ margin: 0;
246
+ line-height: 1.6;
247
+ }
248
+
249
+ /* ============= Section Styles ============= */
250
+ .gallery-section {
251
+ margin-bottom: 3rem;
252
+ scroll-margin-top: calc(var(--gallery-header-height) + 1rem);
253
+ }
254
+
255
+ .section-header {
256
+ display: flex;
257
+ align-items: center;
258
+ gap: 0.5rem;
259
+ margin-bottom: 1.5rem;
260
+ }
261
+
262
+ .section-badge {
263
+ display: inline-block;
264
+ padding: 0.375rem 0.875rem;
265
+ background: var(--gallery-primary);
266
+ color: white;
267
+ font-size: 0.875rem;
268
+ font-weight: 600;
269
+ border-radius: 9999px;
270
+ }
271
+
272
+ .section-badge.accent {
273
+ background: var(--gallery-accent);
274
+ color: #1e293b;
275
+ }
276
+
277
+ .section-badge.success {
278
+ background: var(--gallery-success);
279
+ }
280
+
281
+ .section-badge.info {
282
+ background: var(--gallery-info);
283
+ }
284
+
285
+ .section-badge.secondary {
286
+ background: #a855f7;
287
+ }
288
+
289
+ .section-badge.neutral {
290
+ background: #374151;
291
+ }
292
+
293
+ .info-link {
294
+ display: inline-flex;
295
+ align-items: center;
296
+ justify-content: center;
297
+ width: 24px;
298
+ height: 24px;
299
+ color: var(--gallery-text-secondary);
300
+ transition: color var(--gallery-transition);
301
+ }
302
+
303
+ .info-link:hover {
304
+ color: var(--gallery-primary);
305
+ }
306
+
307
+ .info-icon {
308
+ width: 20px;
309
+ height: 20px;
310
+ }
311
+
312
+ /* ============= Card Styles ============= */
313
+ .gallery-card {
314
+ background: var(--gallery-surface);
315
+ border: 1px solid var(--gallery-border);
316
+ border-radius: var(--gallery-radius-lg);
317
+ overflow: hidden;
318
+ }
319
+
320
+ .card-body {
321
+ padding: 1.5rem;
322
+ }
323
+
324
+ .card-title {
325
+ font-size: 1.25rem;
326
+ font-weight: 700;
327
+ margin: 0 0 1rem;
328
+ }
329
+
330
+ /* ============= Component Showcase ============= */
331
+ .component-row {
332
+ display: flex;
333
+ flex-wrap: wrap;
334
+ gap: 0.5rem;
335
+ margin-bottom: 1rem;
336
+ }
337
+
338
+ .component-row:last-child {
339
+ margin-bottom: 0;
340
+ }
341
+
342
+ .component-row.centered {
343
+ align-items: center;
344
+ }
345
+
346
+ .component-label {
347
+ font-size: 0.75rem;
348
+ font-weight: 600;
349
+ text-transform: uppercase;
350
+ color: var(--gallery-text-muted);
351
+ margin-bottom: 0.5rem;
352
+ }
353
+
354
+ .component-grid {
355
+ display: grid;
356
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
357
+ gap: 1.5rem;
358
+ }
359
+
360
+ .component-grid-2 {
361
+ display: grid;
362
+ grid-template-columns: repeat(2, 1fr);
363
+ gap: 1.5rem;
364
+ }
365
+
366
+ .component-grid-3 {
367
+ display: grid;
368
+ grid-template-columns: repeat(3, 1fr);
369
+ gap: 1.5rem;
370
+ }
371
+
372
+ /* ============= Form Controls ============= */
373
+ .form-group {
374
+ margin-bottom: 1rem;
375
+ }
376
+
377
+ .form-group:last-child {
378
+ margin-bottom: 0;
379
+ }
380
+
381
+ .form-label {
382
+ display: flex;
383
+ align-items: center;
384
+ justify-content: space-between;
385
+ margin-bottom: 0.375rem;
386
+ }
387
+
388
+ .label-text {
389
+ font-size: 0.875rem;
390
+ font-weight: 500;
391
+ color: var(--gallery-text);
392
+ }
393
+
394
+ /* ============= Divider ============= */
395
+ .gallery-divider {
396
+ display: flex;
397
+ align-items: center;
398
+ margin: 1.5rem 0;
399
+ color: var(--gallery-text-muted);
400
+ font-size: 0.875rem;
401
+ }
402
+
403
+ .gallery-divider::before,
404
+ .gallery-divider::after {
405
+ content: '';
406
+ flex: 1;
407
+ height: 1px;
408
+ background: var(--gallery-border);
409
+ }
410
+
411
+ .gallery-divider::before {
412
+ margin-right: 1rem;
413
+ }
414
+
415
+ .gallery-divider::after {
416
+ margin-left: 1rem;
417
+ }
418
+
419
+ /* ============= Toggle Controls ============= */
420
+ .toggle-group {
421
+ display: flex;
422
+ flex-wrap: wrap;
423
+ gap: 1.5rem;
424
+ }
425
+
426
+ .toggle-item {
427
+ display: flex;
428
+ align-items: center;
429
+ gap: 0.5rem;
430
+ cursor: pointer;
431
+ }
432
+
433
+ /* ============= Code Block ============= */
434
+ .code-block {
435
+ background: var(--gallery-bg-alt);
436
+ border-radius: var(--gallery-radius);
437
+ padding: 1rem;
438
+ overflow-x: auto;
439
+ }
440
+
441
+ .code-block code {
442
+ font-family: var(--gallery-font-mono);
443
+ font-size: 0.875rem;
444
+ line-height: 1.6;
445
+ color: var(--gallery-text);
446
+ }
447
+
448
+ /* ============= Using Components Section ============= */
449
+ .usage-grid {
450
+ display: grid;
451
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
452
+ gap: 1.5rem;
453
+ }
454
+
455
+ .usage-item h3 {
456
+ font-size: 1rem;
457
+ font-weight: 600;
458
+ margin: 0 0 0.75rem;
459
+ }
460
+
461
+ /* ============= Stats Display ============= */
462
+ .stats-container {
463
+ display: flex;
464
+ background: var(--gallery-surface);
465
+ border-radius: var(--gallery-radius-lg);
466
+ box-shadow: var(--gallery-shadow);
467
+ overflow: hidden;
468
+ }
469
+
470
+ .stat-item {
471
+ flex: 1;
472
+ padding: 1.5rem;
473
+ text-align: center;
474
+ border-right: 1px solid var(--gallery-border);
475
+ }
476
+
477
+ .stat-item:last-child {
478
+ border-right: none;
479
+ }
480
+
481
+ .stat-figure {
482
+ margin-bottom: 0.5rem;
483
+ }
484
+
485
+ .stat-figure svg {
486
+ width: 32px;
487
+ height: 32px;
488
+ }
489
+
490
+ .stat-title {
491
+ font-size: 0.875rem;
492
+ color: var(--gallery-text-muted);
493
+ margin-bottom: 0.25rem;
494
+ }
495
+
496
+ .stat-value {
497
+ font-size: 1.75rem;
498
+ font-weight: 700;
499
+ color: var(--gallery-primary);
500
+ }
501
+
502
+ .stat-desc {
503
+ font-size: 0.75rem;
504
+ color: var(--gallery-text-muted);
505
+ margin-top: 0.25rem;
506
+ }
507
+
508
+ /* ============= Mockup Window ============= */
509
+ .mockup-window {
510
+ background: var(--gallery-bg-alt);
511
+ border: 1px solid var(--gallery-border);
512
+ border-radius: var(--gallery-radius-lg);
513
+ overflow: hidden;
514
+ }
515
+
516
+ .mockup-header {
517
+ padding: 0.75rem 1rem;
518
+ display: flex;
519
+ gap: 0.5rem;
520
+ border-bottom: 1px solid var(--gallery-border);
521
+ }
522
+
523
+ .mockup-dot {
524
+ width: 12px;
525
+ height: 12px;
526
+ border-radius: 50%;
527
+ background: var(--gallery-border);
528
+ }
529
+
530
+ .mockup-content {
531
+ padding: 1rem;
532
+ }
533
+
534
+ /* ============= Table ============= */
535
+ .gallery-table {
536
+ width: 100%;
537
+ border-collapse: collapse;
538
+ background: var(--gallery-surface);
539
+ }
540
+
541
+ .gallery-table th,
542
+ .gallery-table td {
543
+ padding: 0.75rem 1rem;
544
+ text-align: left;
545
+ border-bottom: 1px solid var(--gallery-border);
546
+ }
547
+
548
+ .gallery-table th {
549
+ font-weight: 600;
550
+ font-size: 0.875rem;
551
+ color: var(--gallery-text-muted);
552
+ text-transform: uppercase;
553
+ letter-spacing: 0.05em;
554
+ }
555
+
556
+ .gallery-table tr:hover {
557
+ background: var(--gallery-bg-alt);
558
+ }
559
+
560
+ /* ============= Steps Display ============= */
561
+ .steps-container {
562
+ display: flex;
563
+ justify-content: space-between;
564
+ overflow-x: auto;
565
+ padding: 1rem 0;
566
+ }
567
+
568
+ /* ============= Responsive ============= */
569
+ @media (max-width: 1024px) {
570
+ .gallery-sidebar {
571
+ transform: translateX(-100%);
572
+ }
573
+
574
+ .gallery-sidebar.open {
575
+ transform: translateX(0);
576
+ }
577
+
578
+ .sidebar-overlay.active {
579
+ display: block;
580
+ }
581
+
582
+ .gallery-main {
583
+ margin-left: 0;
584
+ }
585
+ }
586
+
587
+ @media (max-width: 768px) {
588
+ .gallery-content {
589
+ padding: 1rem;
590
+ }
591
+
592
+ .gallery-title {
593
+ font-size: 1.5rem;
594
+ }
595
+
596
+ .component-grid-2,
597
+ .component-grid-3 {
598
+ grid-template-columns: 1fr;
599
+ }
600
+
601
+ .stats-container {
602
+ flex-direction: column;
603
+ }
604
+
605
+ .stat-item {
606
+ border-right: none;
607
+ border-bottom: 1px solid var(--gallery-border);
608
+ }
609
+
610
+ .stat-item:last-child {
611
+ border-bottom: none;
612
+ }
613
+ }
614
+
615
+ /* ============= Component Demo Containers ============= */
616
+ .demo-container {
617
+ padding: 1rem;
618
+ background: var(--gallery-bg-alt);
619
+ border-radius: var(--gallery-radius);
620
+ margin-bottom: 1rem;
621
+ }
622
+
623
+ .demo-container:last-child {
624
+ margin-bottom: 0;
625
+ }
626
+
627
+ /* ============= Avatar Group ============= */
628
+ .avatar-group {
629
+ display: flex;
630
+ gap: 1rem;
631
+ }
632
+
633
+ /* ============= Badge Group ============= */
634
+ .badge-group {
635
+ display: flex;
636
+ flex-wrap: wrap;
637
+ gap: 0.5rem;
638
+ }
639
+
640
+ /* ============= Alert Stack ============= */
641
+ .alert-stack {
642
+ display: flex;
643
+ flex-direction: column;
644
+ gap: 1rem;
645
+ }
646
+
647
+ /* Card Grid for multiple cards */
648
+ .card-grid {
649
+ display: grid;
650
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
651
+ gap: 1.5rem;
652
+ }
653
+
654
+ /* Progress Stack */
655
+ .progress-stack {
656
+ display: flex;
657
+ flex-direction: column;
658
+ gap: 1rem;
659
+ max-width: 300px;
660
+ }
661
+
662
+ /* Loading indicators row */
663
+ .loading-row {
664
+ display: flex;
665
+ align-items: center;
666
+ gap: 2rem;
667
+ }
668
+
669
+ /* Timeline container */
670
+ .timeline-container {
671
+ overflow-x: auto;
672
+ padding: 1rem 0;
673
+ }
674
+
675
+ /* Chat container */
676
+ .chat-container {
677
+ padding: 1rem;
678
+ }
679
+
680
+ /* Chat avatar image fix */
681
+ .chat-container .chat-image img {
682
+ width: 100%;
683
+ height: 100%;
684
+ object-fit: cover;
685
+ border-radius: 50%;
686
+ }
687
+
688
+ /* Inputs section layouts */
689
+ .inputs-2col {
690
+ display: grid;
691
+ grid-template-columns: repeat(2, 1fr);
692
+ gap: 1.5rem;
693
+ }
694
+
695
+ .inputs-3col {
696
+ display: grid;
697
+ grid-template-columns: repeat(3, 1fr);
698
+ gap: 1.5rem;
699
+ }
700
+
701
+ @media (max-width: 600px) {
702
+
703
+ .inputs-2col,
704
+ .inputs-3col {
705
+ grid-template-columns: 1fr;
706
+ }
707
+ }
708
+
709
+ /* ============= Common Component Example Layouts ============= */
710
+ /* Flex row with gap and wrap */
711
+ .example-flex {
712
+ display: flex;
713
+ flex-wrap: wrap;
714
+ gap: 0.5rem;
715
+ }
716
+
717
+ .example-flex-centered {
718
+ display: flex;
719
+ flex-wrap: wrap;
720
+ gap: 0.5rem;
721
+ align-items: center;
722
+ }
723
+
724
+ /* Vertical stack with spacing */
725
+ .example-stack {
726
+ display: flex;
727
+ flex-direction: column;
728
+ gap: 1rem;
729
+ }
730
+
731
+ .example-stack-sm {
732
+ display: flex;
733
+ flex-direction: column;
734
+ gap: 0.5rem;
735
+ }
736
+
737
+ /* Icon sizing for SVGs */
738
+ .icon-sm {
739
+ width: 1.5rem;
740
+ height: 1.5rem;
741
+ flex-shrink: 0;
742
+ }
743
+
744
+ /* Responsive 2-column grid */
745
+ .example-grid-responsive {
746
+ display: grid;
747
+ grid-template-columns: 1fr;
748
+ gap: 1rem;
749
+ }
750
+
751
+ @media (min-width: 768px) {
752
+ .example-grid-responsive {
753
+ grid-template-columns: repeat(2, 1fr);
754
+ }
755
+ }
756
+
757
+ /* ============= Utility Classes ============= */
758
+ /* Text sizes */
759
+ .text-sm {
760
+ font-size: 0.875rem;
761
+ line-height: 1.25rem;
762
+ }
763
+
764
+ .text-lg {
765
+ font-size: 1.125rem;
766
+ line-height: 1.75rem;
767
+ }
768
+
769
+ .text-xl {
770
+ font-size: 1.25rem;
771
+ line-height: 1.75rem;
772
+ }
773
+
774
+ /* Font weights */
775
+ .font-bold {
776
+ font-weight: 700;
777
+ }
778
+
779
+ .font-semibold {
780
+ font-weight: 600;
781
+ }
782
+
783
+ /* ============= Syntax Tabs ============= */
784
+ /* Distinct tab styling for code syntax selection */
785
+ .syntax-tabs {
786
+ display: inline-flex;
787
+ gap: 0.25rem;
788
+ padding: 0.25rem;
789
+ background: var(--gallery-bg-alt);
790
+ border-radius: var(--gallery-radius);
791
+ border: 1px solid var(--gallery-border);
792
+ }
793
+
794
+ .syntax-tab {
795
+ position: relative;
796
+ padding: 0.5rem 1rem;
797
+ font-size: 0.875rem;
798
+ font-weight: 500;
799
+ color: var(--gallery-text-secondary);
800
+ background: transparent;
801
+ border: none;
802
+ border-radius: calc(var(--gallery-radius) - 2px);
803
+ cursor: pointer;
804
+ transition: all var(--gallery-transition);
805
+ text-decoration: none;
806
+ display: inline-flex;
807
+ align-items: center;
808
+ gap: 0.375rem;
809
+ }
810
+
811
+ .syntax-tab:hover:not(.syntax-tab-active) {
812
+ color: var(--gallery-text);
813
+ background: var(--gallery-surface);
814
+ }
815
+
816
+ .syntax-tab-active {
817
+ color: var(--gallery-text);
818
+ font-weight: 600;
819
+ background: var(--gallery-surface);
820
+ box-shadow: var(--gallery-shadow-sm);
821
+ }
822
+
823
+ /* Tab indicator dot for active state */
824
+ .syntax-tab-active::before {
825
+ content: '';
826
+ width: 6px;
827
+ height: 6px;
828
+ border-radius: 50%;
829
+ background: var(--gallery-primary);
830
+ }
831
+
832
+ /* Dark theme adjustments */
833
+ [data-theme="dark"] .syntax-tabs {
834
+ background: rgba(0, 0, 0, 0.2);
835
+ border-color: var(--gallery-border);
836
+ }
837
+
838
+ [data-theme="dark"] .syntax-tab-active {
839
+ background: var(--gallery-surface);
840
+ }