juxscript 1.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 (61) hide show
  1. package/README.md +292 -0
  2. package/bin/cli.js +149 -0
  3. package/lib/adapters/base-adapter.js +35 -0
  4. package/lib/adapters/index.js +33 -0
  5. package/lib/adapters/mysql-adapter.js +65 -0
  6. package/lib/adapters/postgres-adapter.js +70 -0
  7. package/lib/adapters/sqlite-adapter.js +56 -0
  8. package/lib/components/app.ts +124 -0
  9. package/lib/components/button.ts +136 -0
  10. package/lib/components/card.ts +205 -0
  11. package/lib/components/chart.ts +125 -0
  12. package/lib/components/code.ts +242 -0
  13. package/lib/components/container.ts +282 -0
  14. package/lib/components/data.ts +105 -0
  15. package/lib/components/docs-data.json +1211 -0
  16. package/lib/components/error-handler.ts +285 -0
  17. package/lib/components/footer.ts +146 -0
  18. package/lib/components/header.ts +167 -0
  19. package/lib/components/hero.ts +170 -0
  20. package/lib/components/import.ts +430 -0
  21. package/lib/components/input.ts +175 -0
  22. package/lib/components/layout.ts +113 -0
  23. package/lib/components/list.ts +392 -0
  24. package/lib/components/main.ts +111 -0
  25. package/lib/components/menu.ts +170 -0
  26. package/lib/components/modal.ts +216 -0
  27. package/lib/components/nav.ts +136 -0
  28. package/lib/components/node.ts +200 -0
  29. package/lib/components/reactivity.js +104 -0
  30. package/lib/components/script.ts +152 -0
  31. package/lib/components/sidebar.ts +168 -0
  32. package/lib/components/style.ts +129 -0
  33. package/lib/components/table.ts +279 -0
  34. package/lib/components/tabs.ts +191 -0
  35. package/lib/components/theme.ts +97 -0
  36. package/lib/components/view.ts +174 -0
  37. package/lib/jux.ts +203 -0
  38. package/lib/layouts/default.css +260 -0
  39. package/lib/layouts/default.jux +8 -0
  40. package/lib/layouts/figma.css +334 -0
  41. package/lib/layouts/figma.jux +0 -0
  42. package/lib/layouts/notion.css +258 -0
  43. package/lib/styles/base-theme.css +186 -0
  44. package/lib/styles/dark-theme.css +144 -0
  45. package/lib/styles/global.css +1131 -0
  46. package/lib/styles/light-theme.css +144 -0
  47. package/lib/styles/tokens/dark.css +86 -0
  48. package/lib/styles/tokens/light.css +86 -0
  49. package/lib/themes/dark.css +86 -0
  50. package/lib/themes/light.css +86 -0
  51. package/lib/utils/path-resolver.js +23 -0
  52. package/machinery/compiler.js +262 -0
  53. package/machinery/doc-generator.js +160 -0
  54. package/machinery/generators/css.js +128 -0
  55. package/machinery/generators/html.js +108 -0
  56. package/machinery/imports.js +155 -0
  57. package/machinery/server.js +185 -0
  58. package/machinery/validators/file-validator.js +123 -0
  59. package/machinery/watcher.js +148 -0
  60. package/package.json +58 -0
  61. package/types/globals.d.ts +16 -0
@@ -0,0 +1,1131 @@
1
+ /**
2
+ * Global Styles
3
+ * Base + Components ONLY (NO layout styles)
4
+ * Layout grid structures are in lib/layouts/{layout}.jux
5
+ * Uses design tokens from tokens/{theme}.css
6
+ */
7
+
8
+ /* ===== BASE STYLES ===== */
9
+
10
+
11
+ * {
12
+ box-sizing: border-box;
13
+ margin: 0;
14
+ padding: 0;
15
+ }
16
+
17
+ body {
18
+ font-family: var(--font-family-base);
19
+ font-size: var(--font-size-base);
20
+ line-height: var(--line-height-normal);
21
+ color: var(--color-text-primary);
22
+ background: var(--color-background);
23
+ -webkit-font-smoothing: antialiased;
24
+ -moz-osx-font-smoothing: grayscale;
25
+ }
26
+
27
+ a {
28
+ color: var(--color-brand);
29
+ text-decoration: none;
30
+ transition: color var(--transition-fast);
31
+ }
32
+
33
+ a:hover {
34
+ color: var(--color-brand-hover);
35
+ text-decoration: underline;
36
+ }
37
+
38
+ button {
39
+ font-family: inherit;
40
+ font-size: inherit;
41
+ cursor: pointer;
42
+ border: none;
43
+ background: none;
44
+ }
45
+
46
+ input, textarea, select {
47
+ font-family: inherit;
48
+ font-size: inherit;
49
+ background: var(--color-surface-elevated);
50
+ color: var(--color-text-primary);
51
+ border: var(--border-width) solid var(--color-border);
52
+ border-radius: var(--border-radius-md);
53
+ padding: var(--space-sm) var(--space-md);
54
+ }
55
+
56
+ input:focus, textarea:focus, select:focus {
57
+ outline: none;
58
+ border-color: var(--color-border-focus);
59
+ box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.1);
60
+ }
61
+
62
+ h1, h2, h3, h4, h5, h6 {
63
+ font-weight: var(--font-weight-semibold);
64
+ line-height: var(--line-height-tight);
65
+ color: var(--color-text-primary);
66
+ }
67
+
68
+ h1 { font-size: var(--font-size-3xl); }
69
+ h2 { font-size: var(--font-size-2xl); }
70
+ h3 { font-size: var(--font-size-xl); }
71
+ h4 { font-size: var(--font-size-lg); }
72
+ h5 { font-size: var(--font-size-base); }
73
+ h6 { font-size: var(--font-size-sm); }
74
+
75
+ p {
76
+ margin-bottom: var(--space-md);
77
+ }
78
+
79
+
80
+ /* ===== COMPONENT STYLES ===== */
81
+
82
+ /* Header Component */
83
+ .jux-header {
84
+ display: flex;
85
+ align-items: center;
86
+ gap: var(--space-xl);
87
+ padding: var(--space-md) var(--space-xl);
88
+ height: 60px;
89
+ }
90
+
91
+ .jux-header-logo {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: var(--space-sm);
95
+ color: var(--color-brand);
96
+ font-weight: var(--font-weight-bold);
97
+ font-size: var(--font-size-xl);
98
+ }
99
+
100
+ .jux-header-title {
101
+ font-size: var(--font-size-2xl);
102
+ font-weight: var(--font-weight-semibold);
103
+ color: var(--color-text-primary);
104
+ margin: 0;
105
+ }
106
+
107
+ .jux-header-nav {
108
+ display: flex;
109
+ gap: var(--space-lg);
110
+ margin-left: auto;
111
+ align-items: center;
112
+ }
113
+
114
+ .jux-header-nav-link {
115
+ color: var(--color-text-secondary);
116
+ text-decoration: none;
117
+ transition: all var(--transition-fast);
118
+ padding: var(--space-sm) var(--space-md);
119
+ border-radius: var(--border-radius-md);
120
+ font-weight: var(--font-weight-medium);
121
+ }
122
+
123
+ .jux-header-nav-link:hover {
124
+ color: var(--color-brand);
125
+ background: var(--color-surface-hover);
126
+ text-decoration: none;
127
+ }
128
+
129
+ .jux-header-nav-link.active {
130
+ color: var(--color-brand);
131
+ background: rgba(10, 156, 165, 0.1);
132
+ }
133
+
134
+ /* Sidebar Component */
135
+ .jux-sidebar {
136
+ padding: var(--space-md);
137
+ height: 100%;
138
+ overflow-y: auto;
139
+ }
140
+
141
+ .jux-sidebar-toggle {
142
+ background: var(--color-surface-elevated);
143
+ border: var(--border-width) solid var(--color-border);
144
+ font-size: var(--font-size-xl);
145
+ cursor: pointer;
146
+ padding: var(--space-sm);
147
+ margin-bottom: var(--space-md);
148
+ color: var(--color-text-primary);
149
+ border-radius: var(--border-radius-md);
150
+ transition: all var(--transition-base);
151
+ width: 100%;
152
+ display: block;
153
+ font-weight: var(--font-weight-semibold);
154
+ }
155
+
156
+ .jux-sidebar-toggle:hover {
157
+ background: var(--color-brand);
158
+ color: var(--color-text-inverse);
159
+ border-color: var(--color-brand);
160
+ }
161
+
162
+ .jux-sidebar-heading {
163
+ font-size: var(--font-size-xs);
164
+ text-transform: uppercase;
165
+ color: var(--color-text-tertiary);
166
+ margin: var(--space-lg) 0 var(--space-sm);
167
+ font-weight: var(--font-weight-bold);
168
+ letter-spacing: 0.05em;
169
+ }
170
+
171
+ .jux-sidebar-link {
172
+ display: flex;
173
+ align-items: center;
174
+ gap: var(--space-md);
175
+ padding: var(--space-md);
176
+ color: var(--color-text-secondary);
177
+ text-decoration: none;
178
+ border-radius: var(--border-radius-md);
179
+ transition: all var(--transition-base);
180
+ margin-bottom: var(--space-xs);
181
+ font-weight: var(--font-weight-medium);
182
+ }
183
+
184
+ .jux-sidebar-link:hover {
185
+ background: var(--color-surface-elevated);
186
+ color: var(--color-text-primary);
187
+ transform: translateX(4px);
188
+ text-decoration: none;
189
+ }
190
+
191
+ .jux-sidebar-link.active {
192
+ background: var(--color-brand);
193
+ color: var(--color-text-inverse);
194
+ font-weight: var(--font-weight-semibold);
195
+ }
196
+
197
+ .jux-sidebar-icon {
198
+ font-size: var(--font-size-xl);
199
+ width: 1.5rem;
200
+ text-align: center;
201
+ flex-shrink: 0;
202
+ }
203
+
204
+ .jux-sidebar-divider {
205
+ border: none;
206
+ border-top: var(--border-width) solid var(--color-border);
207
+ margin: var(--space-md) 0;
208
+ }
209
+
210
+ /* Footer Component */
211
+ .jux-footer {
212
+ display: flex;
213
+ align-items: center;
214
+ justify-content: center;
215
+ padding: var(--space-lg) var(--space-xl);
216
+ min-height: 60px;
217
+ color: var(--color-text-secondary);
218
+ font-size: var(--font-size-sm);
219
+ }
220
+
221
+ .jux-footer-content {
222
+ text-align: center;
223
+ }
224
+
225
+ .jux-footer-left,
226
+ .jux-footer-center,
227
+ .jux-footer-right {
228
+ display: flex;
229
+ align-items: center;
230
+ gap: var(--space-md);
231
+ }
232
+
233
+ .jux-footer-link {
234
+ color: var(--color-text-secondary);
235
+ text-decoration: none;
236
+ transition: color var(--transition-fast);
237
+ padding: var(--space-xs) var(--space-sm);
238
+ border-radius: var(--border-radius-sm);
239
+ }
240
+
241
+ .jux-footer-link:hover {
242
+ color: var(--color-brand);
243
+ background: var(--color-surface-hover);
244
+ }
245
+
246
+ /* Hero Component */
247
+ .jux-hero {
248
+ text-align: left;
249
+ padding: var(--space-2xl) var(--space-xl);
250
+ background: var(--color-surface-elevated);
251
+ border: var(--border-width) solid var(--color-border);
252
+ border-radius: var(--border-radius-lg);
253
+ margin-bottom: var(--space-2xl);
254
+ transition: all var(--transition-base);
255
+ }
256
+
257
+ .jux-hero:hover {
258
+ box-shadow: var(--shadow-sm);
259
+ }
260
+
261
+ .jux-hero-title {
262
+ font-size: var(--font-size-2xl);
263
+ font-weight: var(--font-weight-bold);
264
+ margin-bottom: var(--space-sm);
265
+ color: var(--color-text-primary);
266
+ letter-spacing: -0.02em;
267
+ }
268
+
269
+ .jux-hero-subtitle {
270
+ font-size: var(--font-size-sm);
271
+ margin-bottom: var(--space-md);
272
+ color: var(--color-text-tertiary);
273
+ font-weight: var(--font-weight-medium);
274
+ font-family: var(--font-family-mono);
275
+ background: var(--color-surface-base);
276
+ padding: var(--space-xs) var(--space-sm);
277
+ border-radius: var(--border-radius-sm);
278
+ display: inline-block;
279
+ }
280
+
281
+ .jux-hero-description {
282
+ font-size: var(--font-size-base);
283
+ color: var(--color-text-secondary);
284
+ line-height: var(--line-height-relaxed);
285
+ white-space: pre-line;
286
+ font-family: var(--font-family-mono);
287
+ background: var(--color-surface-base);
288
+ padding: var(--space-md);
289
+ border-radius: var(--border-radius-sm);
290
+ border-left: 3px solid var(--color-brand);
291
+ }
292
+
293
+ /* Card Component */
294
+ .jux-card {
295
+ background: var(--color-surface-elevated);
296
+ border: var(--border-width) solid var(--color-border);
297
+ border-radius: var(--border-radius-xl);
298
+ padding: var(--space-lg);
299
+ box-shadow: var(--shadow-sm);
300
+ transition: all var(--transition-base);
301
+ }
302
+
303
+ .jux-card:hover {
304
+ box-shadow: var(--shadow-md);
305
+ transform: translateY(-2px);
306
+ }
307
+
308
+ .jux-card-title {
309
+ font-size: var(--font-size-xl);
310
+ font-weight: var(--font-weight-semibold);
311
+ margin: 0 0 var(--space-md) 0;
312
+ color: var(--color-text-primary);
313
+ }
314
+
315
+ .jux-card-body {
316
+ font-size: var(--font-size-base);
317
+ color: var(--color-text-secondary);
318
+ margin: 0 0 var(--space-md) 0;
319
+ line-height: var(--line-height-relaxed);
320
+ }
321
+
322
+ .jux-card-actions {
323
+ display: flex;
324
+ gap: var(--space-md);
325
+ align-items: center;
326
+ flex-wrap: wrap;
327
+ margin: var(--space-md) 0;
328
+ }
329
+
330
+ .jux-card-footer {
331
+ font-size: var(--font-size-sm);
332
+ color: var(--color-text-secondary);
333
+ margin: 0;
334
+ padding-top: var(--space-md);
335
+ border-top: var(--border-width) solid var(--color-border);
336
+ }
337
+
338
+ /* Button Component */
339
+ .jux-button {
340
+ padding: var(--space-sm) var(--space-lg);
341
+ border: var(--border-width) solid var(--color-border);
342
+ border-radius: var(--border-radius-md);
343
+ cursor: pointer;
344
+ font-size: var(--font-size-base);
345
+ background: var(--color-surface-elevated);
346
+ color: var(--color-text-primary);
347
+ font-weight: var(--font-weight-medium);
348
+ transition: all var(--transition-fast);
349
+ }
350
+
351
+ .jux-button-primary {
352
+ background: var(--color-brand);
353
+ color: var(--color-text-inverse);
354
+ border-color: var(--color-brand);
355
+ }
356
+
357
+ .jux-button:hover {
358
+ transform: translateY(-2px);
359
+ box-shadow: var(--shadow-md);
360
+ }
361
+
362
+ .jux-button-primary:hover {
363
+ background: var(--color-brand-hover);
364
+ }
365
+
366
+ .jux-button:disabled {
367
+ opacity: 0.5;
368
+ cursor: not-allowed;
369
+ transform: none;
370
+ }
371
+
372
+ /* Table Component */
373
+ .jux-table {
374
+ width: 100%;
375
+ border-collapse: collapse;
376
+ background: var(--color-surface-elevated);
377
+ border-radius: var(--border-radius-lg);
378
+ overflow: hidden;
379
+ }
380
+
381
+ .jux-table th {
382
+ background: var(--color-surface-base);
383
+ padding: var(--space-md);
384
+ text-align: left;
385
+ font-weight: var(--font-weight-semibold);
386
+ border-bottom: var(--border-width-thick) solid var(--color-border);
387
+ color: var(--color-text-primary);
388
+ }
389
+
390
+ .jux-table td {
391
+ padding: var(--space-md);
392
+ border-bottom: var(--border-width) solid var(--color-border);
393
+ color: var(--color-text-secondary);
394
+ }
395
+
396
+ .jux-table tr:hover {
397
+ background: var(--color-surface-hover);
398
+ }
399
+
400
+ .jux-table tr:last-child td {
401
+ border-bottom: none;
402
+ }
403
+
404
+ /* Grid Utility */
405
+ .jux-grid {
406
+ display: grid;
407
+ gap: var(--space-lg);
408
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
409
+ }
410
+
411
+ /* Stack Utility */
412
+ .jux-stack {
413
+ display: flex;
414
+ flex-direction: column;
415
+ gap: var(--space-md);
416
+ }
417
+
418
+ .jux-stack-horizontal {
419
+ flex-direction: row;
420
+ }
421
+
422
+ /* Tabs Component */
423
+ .jux-tabs-nav {
424
+ display: flex;
425
+ gap: var(--space-sm);
426
+ border-bottom: var(--border-width-thick) solid var(--color-border);
427
+ margin-bottom: var(--space-xl);
428
+ }
429
+
430
+ .jux-tabs-btn {
431
+ padding: var(--space-md) var(--space-lg);
432
+ background: none;
433
+ border: none;
434
+ color: var(--color-text-secondary);
435
+ cursor: pointer;
436
+ font-size: var(--font-size-base);
437
+ border-bottom: var(--border-width-thick) solid transparent;
438
+ margin-bottom: calc(var(--border-width-thick) * -1);
439
+ transition: all var(--transition-fast);
440
+ font-weight: var(--font-weight-medium);
441
+ }
442
+
443
+ .jux-tabs-btn:hover {
444
+ color: var(--color-text-primary);
445
+ }
446
+
447
+ .jux-tabs-btn.active {
448
+ color: var(--color-brand);
449
+ border-bottom-color: var(--color-brand);
450
+ }
451
+
452
+ .jux-tabs-panel {
453
+ display: none;
454
+ }
455
+
456
+ .jux-tabs-panel.active {
457
+ display: block;
458
+ }
459
+
460
+ /* Modal Component */
461
+ .jux-modal {
462
+ position: fixed;
463
+ top: 0;
464
+ left: 0;
465
+ right: 0;
466
+ bottom: 0;
467
+ z-index: 2000;
468
+ display: flex;
469
+ align-items: center;
470
+ justify-content: center;
471
+ }
472
+
473
+ .jux-modal-hidden {
474
+ display: none;
475
+ }
476
+
477
+ .jux-modal-overlay {
478
+ position: absolute;
479
+ top: 0;
480
+ left: 0;
481
+ right: 0;
482
+ bottom: 0;
483
+ background: rgba(0, 0, 0, 0.5);
484
+ backdrop-filter: blur(4px);
485
+ }
486
+
487
+ .jux-modal-dialog {
488
+ position: relative;
489
+ background: var(--color-surface-elevated);
490
+ border-radius: var(--border-radius-xl);
491
+ box-shadow: var(--shadow-xl);
492
+ max-width: 90vw;
493
+ max-height: 90vh;
494
+ overflow: auto;
495
+ }
496
+
497
+ .jux-modal-header {
498
+ display: flex;
499
+ align-items: center;
500
+ justify-content: space-between;
501
+ padding: var(--space-lg);
502
+ border-bottom: var(--border-width) solid var(--color-border);
503
+ }
504
+
505
+ .jux-modal-title {
506
+ font-size: var(--font-size-xl);
507
+ font-weight: var(--font-weight-semibold);
508
+ }
509
+
510
+ .jux-modal-close {
511
+ background: none;
512
+ border: none;
513
+ font-size: var(--font-size-2xl);
514
+ cursor: pointer;
515
+ color: var(--color-text-secondary);
516
+ line-height: 1;
517
+ }
518
+
519
+ .jux-modal-body {
520
+ padding: var(--space-lg);
521
+ }
522
+
523
+ .jux-modal-footer {
524
+ display: flex;
525
+ gap: var(--space-md);
526
+ justify-content: flex-end;
527
+ padding: var(--space-lg);
528
+ border-top: var(--border-width) solid var(--color-border);
529
+ }
530
+
531
+ /* Utility States */
532
+ .jux-loading {
533
+ display: flex;
534
+ align-items: center;
535
+ justify-content: center;
536
+ padding: var(--space-xl);
537
+ color: var(--color-text-secondary);
538
+ font-style: italic;
539
+ }
540
+
541
+ .jux-error {
542
+ background: rgba(239, 68, 68, 0.1);
543
+ border: var(--border-width) solid var(--color-danger);
544
+ border-radius: var(--border-radius-md);
545
+ padding: var(--space-md);
546
+ color: var(--color-danger);
547
+ margin: var(--space-md) 0;
548
+ }
549
+
550
+ /* List Component */
551
+ .jux-list-header {
552
+ font-size: var(--font-size-xl);
553
+ font-weight: var(--font-weight-semibold);
554
+ color: var(--color-text-primary);
555
+ margin-bottom: var(--space-lg);
556
+ padding-bottom: var(--space-sm);
557
+ border-bottom: var(--border-width-thick) solid var(--color-border);
558
+ }
559
+
560
+ .jux-list {
561
+ list-style: none;
562
+ padding: 0;
563
+ margin: 0;
564
+ display: flex;
565
+ flex-direction: column;
566
+ gap: var(--space-sm);
567
+ }
568
+
569
+ .jux-list-item {
570
+ display: flex;
571
+ align-items: flex-start;
572
+ gap: var(--space-md);
573
+ padding: var(--space-md);
574
+ background: var(--color-surface-elevated);
575
+ border: var(--border-width) solid var(--color-border);
576
+ border-radius: var(--border-radius-md);
577
+ transition: all var(--transition-base);
578
+ }
579
+
580
+ .jux-list-item:hover {
581
+ background: var(--color-surface-hover);
582
+ transform: translateX(4px);
583
+ box-shadow: var(--shadow-sm);
584
+ }
585
+
586
+ .jux-list-item-icon {
587
+ font-size: var(--font-size-2xl);
588
+ line-height: 1;
589
+ flex-shrink: 0;
590
+ width: 2rem;
591
+ text-align: center;
592
+ }
593
+
594
+ .jux-list-item-content {
595
+ flex: 1;
596
+ min-width: 0;
597
+ }
598
+
599
+ .jux-list-item-title {
600
+ font-size: var(--font-size-base);
601
+ font-weight: var(--font-weight-semibold);
602
+ color: var(--color-text-primary);
603
+ margin-bottom: var(--space-xs);
604
+ }
605
+
606
+ .jux-list-item-body {
607
+ font-size: var(--font-size-sm);
608
+ color: var(--color-text-secondary);
609
+ line-height: var(--line-height-normal);
610
+ }
611
+
612
+ .jux-list-item-metadata {
613
+ font-size: var(--font-size-sm);
614
+ color: var(--color-text-tertiary);
615
+ font-weight: var(--font-weight-medium);
616
+ white-space: nowrap;
617
+ align-self: center;
618
+ }
619
+
620
+ /* List Item Type Variants */
621
+ .jux-list-item-default {
622
+ border-left: 4px solid var(--color-border);
623
+ }
624
+
625
+ .jux-list-item-success {
626
+ border-left: 4px solid var(--color-success);
627
+ background: rgba(34, 197, 94, 0.05);
628
+ }
629
+
630
+ .jux-list-item-success .jux-list-item-icon {
631
+ color: var(--color-success);
632
+ }
633
+
634
+ .jux-list-item-warning {
635
+ border-left: 4px solid var(--color-warning);
636
+ background: rgba(251, 191, 36, 0.05);
637
+ }
638
+
639
+ .jux-list-item-warning .jux-list-item-icon {
640
+ color: var(--color-warning);
641
+ }
642
+
643
+ .jux-list-item-error {
644
+ border-left: 4px solid var(--color-danger);
645
+ background: rgba(239, 68, 68, 0.05);
646
+ }
647
+
648
+ .jux-list-item-error .jux-list-item-icon {
649
+ color: var(--color-danger);
650
+ }
651
+
652
+ .jux-list-item-info {
653
+ border-left: 4px solid var(--color-info);
654
+ background: rgba(59, 130, 246, 0.05);
655
+ }
656
+
657
+ .jux-list-item-info .jux-list-item-icon {
658
+ color: var(--color-info);
659
+ }
660
+
661
+ .jux-list-item-selectable {
662
+ cursor: pointer;
663
+ }
664
+
665
+ .jux-list-item-selectable:active {
666
+ transform: scale(0.98);
667
+ }
668
+
669
+ .jux-list-item-selected {
670
+ background: rgba(10, 156, 165, 0.15) !important;
671
+ border-color: var(--color-brand) !important;
672
+ box-shadow: 0 0 0 2px rgba(10, 156, 165, 0.2);
673
+ }
674
+
675
+ .jux-list-item-selected .jux-list-item-title {
676
+ color: var(--color-brand);
677
+ font-weight: var(--font-weight-bold);
678
+ }
679
+
680
+ /* Input Component */
681
+ .jux-input-wrapper {
682
+ display: flex;
683
+ flex-direction: column;
684
+ gap: var(--space-xs);
685
+ margin-bottom: var(--space-lg);
686
+ }
687
+
688
+ .jux-input-label {
689
+ font-size: var(--font-size-sm);
690
+ font-weight: var(--font-weight-semibold);
691
+ color: var(--color-text-primary);
692
+ display: block;
693
+ }
694
+
695
+ .jux-input-required {
696
+ color: var(--color-danger);
697
+ }
698
+
699
+ .jux-input {
700
+ width: 100%;
701
+ padding: var(--space-sm) var(--space-md);
702
+ font-size: var(--font-size-base);
703
+ background: var(--color-surface-elevated);
704
+ border: var(--border-width) solid var(--color-border);
705
+ border-radius: var(--border-radius-md);
706
+ color: var(--color-text-primary);
707
+ transition: all var(--transition-fast);
708
+ }
709
+
710
+ .jux-input:hover {
711
+ border-color: var(--color-border-focus);
712
+ }
713
+
714
+ .jux-input:focus {
715
+ outline: none;
716
+ border-color: var(--color-brand);
717
+ box-shadow: 0 0 0 3px rgba(10, 156, 165, 0.1);
718
+ }
719
+
720
+ .jux-input-focused .jux-input {
721
+ border-color: var(--color-brand);
722
+ box-shadow: 0 0 0 3px rgba(10, 156, 165, 0.1);
723
+ }
724
+
725
+ .jux-input-error .jux-input {
726
+ border-color: var(--color-danger);
727
+ }
728
+
729
+ .jux-input-error .jux-input:focus {
730
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
731
+ }
732
+
733
+ .jux-input-disabled .jux-input {
734
+ opacity: 0.6;
735
+ cursor: not-allowed;
736
+ background: var(--color-surface-base);
737
+ }
738
+
739
+ .jux-input-message {
740
+ font-size: var(--font-size-sm);
741
+ line-height: var(--line-height-tight);
742
+ }
743
+
744
+ .jux-input-message-helper {
745
+ color: var(--color-text-tertiary);
746
+ }
747
+
748
+ .jux-input-message-error {
749
+ color: var(--color-danger);
750
+ font-weight: var(--font-weight-medium);
751
+ }
752
+
753
+ /* Menu Component */
754
+ .jux-menu-dropdown {
755
+ position: relative;
756
+ background: var(--color-surface-elevated);
757
+ border: var(--border-width) solid var(--color-border);
758
+ border-radius: var(--border-radius-lg);
759
+ box-shadow: var(--shadow-lg);
760
+ min-width: 200px;
761
+ z-index: 1000;
762
+ }
763
+
764
+ .jux-menu-hidden {
765
+ display: none;
766
+ }
767
+
768
+ .jux-menu-list {
769
+ list-style: none;
770
+ padding: var(--space-xs);
771
+ margin: 0;
772
+ }
773
+
774
+ .jux-menu-item {
775
+ display: flex;
776
+ align-items: center;
777
+ gap: var(--space-md);
778
+ padding: var(--space-sm) var(--space-md);
779
+ cursor: pointer;
780
+ border-radius: var(--border-radius-sm);
781
+ transition: all var(--transition-fast);
782
+ color: var(--color-text-primary);
783
+ font-size: var(--font-size-base);
784
+ position: relative;
785
+ }
786
+
787
+ .jux-menu-item:hover {
788
+ background: var(--color-surface-hover);
789
+ }
790
+
791
+ .jux-menu-item-focused {
792
+ background: var(--color-surface-hover);
793
+ }
794
+
795
+ .jux-menu-item-disabled {
796
+ opacity: 0.5;
797
+ cursor: not-allowed;
798
+ }
799
+
800
+ .jux-menu-item-disabled:hover {
801
+ background: transparent;
802
+ }
803
+
804
+ .jux-menu-item-icon {
805
+ font-size: var(--font-size-lg);
806
+ width: 1.25rem;
807
+ text-align: center;
808
+ flex-shrink: 0;
809
+ }
810
+
811
+ .jux-menu-item-label {
812
+ flex: 1;
813
+ }
814
+
815
+ .jux-menu-item-shortcut {
816
+ font-size: var(--font-size-sm);
817
+ color: var(--color-text-tertiary);
818
+ font-family: var(--font-family-mono);
819
+ margin-left: auto;
820
+ }
821
+
822
+ .jux-menu-item-arrow {
823
+ font-size: var(--font-size-xs);
824
+ color: var(--color-text-tertiary);
825
+ margin-left: auto;
826
+ }
827
+
828
+ .jux-menu-divider {
829
+ height: 1px;
830
+ background: var(--color-border);
831
+ margin: var(--space-xs) 0;
832
+ }
833
+
834
+ .jux-menu-submenu {
835
+ position: absolute;
836
+ left: 100%;
837
+ top: 0;
838
+ margin-left: var(--space-xs);
839
+ background: var(--color-surface-elevated);
840
+ border: var(--border-width) solid var(--color-border);
841
+ border-radius: var(--border-radius-lg);
842
+ box-shadow: var(--shadow-lg);
843
+ min-width: 180px;
844
+ }
845
+
846
+ .jux-menu-submenu .jux-menu-list {
847
+ padding: var(--space-xs);
848
+ }
849
+
850
+ /* Menu positioning variants */
851
+ .jux-menu-bottom-left {
852
+ top: 100%;
853
+ left: 0;
854
+ margin-top: var(--space-xs);
855
+ }
856
+
857
+ .jux-menu-bottom-right {
858
+ top: 100%;
859
+ right: 0;
860
+ margin-top: var(--space-xs);
861
+ }
862
+
863
+ .jux-menu-top-left {
864
+ bottom: 100%;
865
+ left: 0;
866
+ margin-bottom: var(--space-xs);
867
+ }
868
+
869
+ .jux-menu-top-right {
870
+ bottom: 100%;
871
+ right: 0;
872
+ margin-bottom: var(--space-xs);
873
+ }
874
+
875
+ /* Nav Component */
876
+ .jux-nav {
877
+ display: flex;
878
+ }
879
+
880
+ .jux-nav-horizontal {
881
+ flex-direction: row;
882
+ }
883
+
884
+ .jux-nav-vertical {
885
+ flex-direction: column;
886
+ }
887
+
888
+ .jux-nav-list {
889
+ list-style: none;
890
+ padding: 0;
891
+ margin: 0;
892
+ display: flex;
893
+ gap: var(--space-xs);
894
+ }
895
+
896
+ .jux-nav-horizontal .jux-nav-list {
897
+ flex-direction: row;
898
+ }
899
+
900
+ .jux-nav-vertical .jux-nav-list {
901
+ flex-direction: column;
902
+ }
903
+
904
+ .jux-nav-item {
905
+ position: relative;
906
+ }
907
+
908
+ .jux-nav-link {
909
+ display: flex;
910
+ align-items: center;
911
+ gap: var(--space-sm);
912
+ padding: var(--space-sm) var(--space-md);
913
+ color: var(--color-text-secondary);
914
+ text-decoration: none;
915
+ border-radius: var(--border-radius-md);
916
+ transition: all var(--transition-fast);
917
+ font-weight: var(--font-weight-medium);
918
+ font-size: var(--font-size-base);
919
+ cursor: pointer;
920
+ background: none;
921
+ border: none;
922
+ width: 100%;
923
+ text-align: left;
924
+ }
925
+
926
+ .jux-nav-link:hover {
927
+ color: var(--color-text-primary);
928
+ background: var(--color-surface-hover);
929
+ text-decoration: none;
930
+ }
931
+
932
+ .jux-nav-item-active .jux-nav-link {
933
+ color: var(--color-brand);
934
+ background: rgba(10, 156, 165, 0.1);
935
+ font-weight: var(--font-weight-semibold);
936
+ }
937
+
938
+ .jux-nav-icon {
939
+ font-size: var(--font-size-lg);
940
+ width: 1.25rem;
941
+ text-align: center;
942
+ flex-shrink: 0;
943
+ }
944
+
945
+ .jux-nav-label {
946
+ flex: 1;
947
+ }
948
+
949
+ .jux-nav-badge {
950
+ font-size: var(--font-size-xs);
951
+ padding: var(--space-xs) var(--space-sm);
952
+ background: var(--color-danger);
953
+ color: var(--color-text-inverse);
954
+ border-radius: var(--border-radius-full);
955
+ font-weight: var(--font-weight-bold);
956
+ line-height: 1;
957
+ }
958
+
959
+ .jux-nav-arrow {
960
+ font-size: var(--font-size-xs);
961
+ color: var(--color-text-tertiary);
962
+ margin-left: auto;
963
+ transition: transform var(--transition-fast);
964
+ }
965
+
966
+ .jux-nav-item-expanded .jux-nav-arrow {
967
+ transform: rotate(90deg);
968
+ }
969
+
970
+ .jux-nav-divider {
971
+ height: 1px;
972
+ background: var(--color-border);
973
+ margin: var(--space-sm) 0;
974
+ }
975
+
976
+ .jux-nav-horizontal .jux-nav-divider {
977
+ width: 1px;
978
+ height: auto;
979
+ margin: 0 var(--space-sm);
980
+ }
981
+
982
+ .jux-nav-children {
983
+ list-style: none;
984
+ padding: var(--space-xs) 0 var(--space-xs) var(--space-lg);
985
+ margin: 0;
986
+ display: flex;
987
+ flex-direction: column;
988
+ gap: var(--space-xs);
989
+ }
990
+
991
+ .jux-nav-horizontal .jux-nav-children {
992
+ position: absolute;
993
+ top: 100%;
994
+ left: 0;
995
+ margin-top: var(--space-xs);
996
+ padding: var(--space-xs);
997
+ background: var(--color-surface-elevated);
998
+ border: var(--border-width) solid var(--color-border);
999
+ border-radius: var(--border-radius-lg);
1000
+ box-shadow: var(--shadow-lg);
1001
+ min-width: 200px;
1002
+ }
1003
+
1004
+
1005
+ /* Code Component */
1006
+ .jux-code-container {
1007
+ position: relative;
1008
+ background: #1e1e1e;
1009
+ border: var(--border-width) solid #333;
1010
+ border-radius: var(--border-radius-md);
1011
+ overflow: visible;
1012
+ margin: var(--space-md) 0;
1013
+ font-family: var(--font-family-mono);
1014
+ }
1015
+
1016
+ .jux-code-title-bar {
1017
+ display: flex;
1018
+ justify-content: space-between;
1019
+ align-items: center;
1020
+ padding: var(--space-xs) var(--space-md);
1021
+ background: #2d2d2d;
1022
+ border-bottom: var(--border-width) solid #333;
1023
+ }
1024
+
1025
+ .jux-code-title {
1026
+ font-size: var(--font-size-xs);
1027
+ font-weight: var(--font-weight-medium);
1028
+ color: #d4d4d4;
1029
+ font-family: var(--font-family-mono);
1030
+ }
1031
+
1032
+ .jux-code-language-badge {
1033
+ font-size: var(--font-size-xs);
1034
+ padding: 2px var(--space-sm);
1035
+ background: #007acc;
1036
+ color: #ffffff;
1037
+ border-radius: var(--border-radius-sm);
1038
+ text-transform: lowercase;
1039
+ font-weight: var(--font-weight-medium);
1040
+ font-family: var(--font-family-mono);
1041
+ }
1042
+
1043
+ .jux-code-wrapper {
1044
+ overflow-x: auto;
1045
+ overflow-y: visible;
1046
+ background: #1e1e1e;
1047
+ }
1048
+
1049
+ .jux-code-pre {
1050
+ margin: 0;
1051
+ padding: var(--space-lg);
1052
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;
1053
+ font-size: 13px;
1054
+ line-height: 1.6;
1055
+ color: #d4d4d4;
1056
+ background: transparent;
1057
+ overflow-x: auto;
1058
+ tab-size: 2;
1059
+ -moz-tab-size: 2;
1060
+ }
1061
+
1062
+ .jux-code-wrap {
1063
+ white-space: pre-wrap;
1064
+ word-break: break-all;
1065
+ overflow-wrap: break-word;
1066
+ }
1067
+
1068
+ .jux-code-block {
1069
+ display: block;
1070
+ color: #d4d4d4;
1071
+ }
1072
+
1073
+ .jux-code-numbered {
1074
+ display: flex;
1075
+ flex-direction: column;
1076
+ }
1077
+
1078
+ .jux-code-line {
1079
+ display: flex;
1080
+ min-height: 1.6em;
1081
+ }
1082
+
1083
+ .jux-code-line-highlighted {
1084
+ background: rgba(255, 255, 255, 0.1);
1085
+ border-left: 2px solid #007acc;
1086
+ margin-left: -2px;
1087
+ }
1088
+
1089
+ .jux-code-line-number {
1090
+ flex-shrink: 0;
1091
+ width: 2.5em;
1092
+ padding-right: var(--space-md);
1093
+ text-align: right;
1094
+ color: #858585;
1095
+ user-select: none;
1096
+ border-right: var(--border-width) solid #333;
1097
+ margin-right: var(--space-md);
1098
+ font-size: 12px;
1099
+ }
1100
+
1101
+ .jux-code-line-content {
1102
+ flex: 1;
1103
+ color: #d4d4d4;
1104
+ }
1105
+
1106
+ .jux-code-copy-btn {
1107
+ position: absolute;
1108
+ top: var(--space-xs);
1109
+ right: var(--space-xs);
1110
+ padding: 4px var(--space-sm);
1111
+ font-size: var(--font-size-xs);
1112
+ background: #2d2d2d;
1113
+ color: #d4d4d4;
1114
+ border: var(--border-width) solid #333;
1115
+ border-radius: var(--border-radius-sm);
1116
+ cursor: pointer;
1117
+ transition: all var(--transition-fast);
1118
+ font-family: var(--font-family-mono);
1119
+ opacity: 0.7;
1120
+ }
1121
+
1122
+ .jux-code-copy-btn:hover {
1123
+ background: #007acc;
1124
+ color: #ffffff;
1125
+ border-color: #007acc;
1126
+ opacity: 1;
1127
+ }
1128
+
1129
+ .jux-code-container:hover .jux-code-copy-btn {
1130
+ opacity: 1;
1131
+ }