uidex 0.2.1 → 0.3.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 +263 -263
  2. package/dist/cli/cli.cjs +3243 -0
  3. package/dist/cli/cli.cjs.map +1 -0
  4. package/dist/cloud/index.cjs +149 -0
  5. package/dist/cloud/index.cjs.map +1 -0
  6. package/dist/cloud/index.d.cts +108 -0
  7. package/dist/cloud/index.d.ts +108 -0
  8. package/dist/cloud/index.js +120 -0
  9. package/dist/cloud/index.js.map +1 -0
  10. package/dist/headless/index.cjs +3580 -0
  11. package/dist/headless/index.cjs.map +1 -0
  12. package/dist/headless/index.d.cts +214 -0
  13. package/dist/headless/index.d.ts +214 -0
  14. package/dist/headless/index.js +3562 -0
  15. package/dist/headless/index.js.map +1 -0
  16. package/dist/index.cjs +7977 -3301
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +898 -108
  19. package/dist/index.d.ts +898 -108
  20. package/dist/index.js +7934 -3270
  21. package/dist/index.js.map +1 -1
  22. package/dist/playwright/index.cjs +164 -24
  23. package/dist/playwright/index.cjs.map +1 -1
  24. package/dist/playwright/index.d.cts +32 -55
  25. package/dist/playwright/index.d.ts +32 -55
  26. package/dist/playwright/index.js +148 -21
  27. package/dist/playwright/index.js.map +1 -1
  28. package/dist/playwright/reporter.cjs +62 -28
  29. package/dist/playwright/reporter.cjs.map +1 -1
  30. package/dist/playwright/reporter.d.cts +24 -12
  31. package/dist/playwright/reporter.d.ts +24 -12
  32. package/dist/playwright/reporter.js +62 -28
  33. package/dist/playwright/reporter.js.map +1 -1
  34. package/dist/react/index.cjs +7970 -3267
  35. package/dist/react/index.cjs.map +1 -1
  36. package/dist/react/index.d.cts +670 -108
  37. package/dist/react/index.d.ts +670 -108
  38. package/dist/react/index.js +8016 -3274
  39. package/dist/react/index.js.map +1 -1
  40. package/dist/scan/index.cjs +3281 -0
  41. package/dist/scan/index.cjs.map +1 -0
  42. package/dist/scan/index.d.cts +373 -0
  43. package/dist/scan/index.d.ts +373 -0
  44. package/dist/scan/index.js +3224 -0
  45. package/dist/scan/index.js.map +1 -0
  46. package/package.json +74 -56
  47. package/templates/claude/audit.md +37 -0
  48. package/templates/claude/rules.md +212 -0
  49. package/claude/audit-command.md +0 -16
  50. package/claude/rules.md +0 -88
  51. package/dist/core/index.cjs +0 -3490
  52. package/dist/core/index.cjs.map +0 -1
  53. package/dist/core/index.d.cts +0 -441
  54. package/dist/core/index.d.ts +0 -441
  55. package/dist/core/index.global.js +0 -3469
  56. package/dist/core/index.global.js.map +0 -1
  57. package/dist/core/index.js +0 -3444
  58. package/dist/core/index.js.map +0 -1
  59. package/dist/core/style.css +0 -971
  60. package/dist/scripts/cli.cjs +0 -1168
  61. package/uidex.schema.json +0 -93
@@ -1,971 +0,0 @@
1
- /* Design tokens — :host targets the shadow root, :where(:root) for standalone use */
2
- /* Theme: shadcn lyra — monochromatic, sharp, monospace */
3
- :where(:host, :root) {
4
- /* Colors — dark theme (lyra neutral) */
5
- --uidex-color-primary: #e5e5e5;
6
- --uidex-color-primary-hover: #ffffff;
7
- --uidex-color-bg: #1c1c1c;
8
- --uidex-color-bg-elevated: #2e2e2e;
9
- --uidex-color-text: #f9f9f9;
10
- --uidex-color-text-strong: #ffffff;
11
- --uidex-color-text-muted: #ababab; /* chrome: labels, counts, placeholders */
12
- --uidex-color-text-secondary: #ababab; /* content: doc text, descriptions */
13
- --uidex-color-surface-hover: rgba(255, 255, 255, 0.08);
14
- --uidex-color-surface-active: rgba(255, 255, 255, 0.12);
15
- --uidex-color-border: rgba(255, 255, 255, 0.1);
16
- --uidex-color-border-light: rgba(255, 255, 255, 0.06);
17
- --uidex-color-backdrop: rgba(0, 0, 0, 0.6);
18
-
19
- /* Category colors */
20
- --uidex-color-pages: #60a5fa;
21
- --uidex-color-features: #a78bfa;
22
- --uidex-color-components: #34d399;
23
-
24
- /* Shadows — minimal, border-driven definition */
25
- --uidex-shadow-sm: none;
26
- --uidex-shadow-md: 0 0 0 1px var(--uidex-color-border);
27
- --uidex-shadow-lg: 0 0 0 1px var(--uidex-color-border);
28
-
29
- /* Border radius — lyra: none */
30
- --uidex-radius-sm: 0;
31
- --uidex-radius-md: 0;
32
- --uidex-radius-lg: 0;
33
- --uidex-radius-full: 0;
34
-
35
- /* Z-index — high enough to stay above app UI */
36
- --uidex-z-container: 2147483644;
37
- --uidex-z-overlay: 2147483645;
38
- --uidex-z-modal: 2147483646;
39
-
40
- /* Typography — mono-first (lyra). Both stacks are mono by default;
41
- consumers can override --uidex-font-sans to restore a proportional body font. */
42
- --uidex-font-sans: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
43
- --uidex-font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
44
- --uidex-font-size-xs: 11px;
45
- --uidex-font-size-sm: 12px;
46
- --uidex-font-size-md: 13px;
47
- --uidex-font-size-lg: 14px;
48
-
49
- /* Transitions */
50
- --uidex-transition-fast: 0.1s ease;
51
- --uidex-transition-normal: 0.15s ease;
52
- --uidex-transition-smooth: 0.2s ease;
53
- }
54
-
55
- /* ——— Container ——— */
56
- .uidex-container {
57
- position: fixed;
58
- z-index: var(--uidex-z-container);
59
- pointer-events: auto;
60
- font-family: var(--uidex-font-sans);
61
- -webkit-font-smoothing: antialiased;
62
- -moz-osx-font-smoothing: grayscale;
63
- }
64
-
65
- .uidex-bottom-right { bottom: 20px; right: 20px; }
66
- .uidex-bottom-left { bottom: 20px; left: 20px; }
67
- .uidex-top-right { top: 20px; right: 20px; }
68
- .uidex-top-left { top: 20px; left: 20px; }
69
-
70
- /* ——— Trigger button group ——— */
71
- .uidex-trigger-group {
72
- display: flex;
73
- align-items: center;
74
- border-radius: 0;
75
- background: var(--uidex-color-bg);
76
- border: 1px solid var(--uidex-color-border);
77
- overflow: hidden;
78
- user-select: none;
79
- height: 32px;
80
- }
81
-
82
- .uidex-trigger-group:hover {
83
- border-color: rgba(255, 255, 255, 0.16);
84
- }
85
-
86
- .uidex-trigger-btn {
87
- display: flex;
88
- align-items: center;
89
- justify-content: center;
90
- gap: 6px;
91
- height: 100%;
92
- padding: 0 10px;
93
- border: none;
94
- background: transparent;
95
- color: var(--uidex-color-text-muted);
96
- font-size: var(--uidex-font-size-sm);
97
- font-weight: 500;
98
- font-family: var(--uidex-font-mono);
99
- cursor: pointer;
100
- transition: background-color var(--uidex-transition-fast), color var(--uidex-transition-fast);
101
- }
102
-
103
- .uidex-trigger-btn:hover {
104
- background: var(--uidex-color-surface-hover);
105
- color: var(--uidex-color-text-strong);
106
- }
107
-
108
- .uidex-trigger-btn:active {
109
- background: var(--uidex-color-surface-active);
110
- transform: translateY(1px);
111
- }
112
-
113
- .uidex-trigger-btn--active {
114
- color: var(--uidex-color-text-strong);
115
- background: var(--uidex-color-surface-active);
116
- }
117
-
118
- .uidex-trigger-btn--active:hover {
119
- background: rgba(255, 255, 255, 0.16);
120
- }
121
-
122
- .uidex-trigger-divider {
123
- width: 1px;
124
- height: 16px;
125
- background: var(--uidex-color-border);
126
- flex-shrink: 0;
127
- }
128
-
129
- .uidex-trigger-icon {
130
- width: 14px;
131
- height: 14px;
132
- flex-shrink: 0;
133
- }
134
-
135
- /* ——— Draggable ——— */
136
- .uidex-container--dragging {
137
- transition: none !important;
138
- }
139
-
140
- .uidex-container--dragging .uidex-trigger-btn {
141
- cursor: grabbing !important;
142
- }
143
-
144
- /* ——— Inspect mode cursor ——— */
145
- body.uidex-inspecting,
146
- body.uidex-inspecting * {
147
- cursor: crosshair !important;
148
- }
149
-
150
- /* ——— Modal ——— */
151
- .uidex-modal-backdrop {
152
- position: fixed;
153
- inset: 0;
154
- z-index: var(--uidex-z-modal);
155
- pointer-events: auto;
156
- display: flex;
157
- align-items: center;
158
- justify-content: center;
159
- background: var(--uidex-color-backdrop);
160
- }
161
-
162
- .uidex-modal {
163
- background: var(--uidex-color-bg);
164
- border: 1px solid var(--uidex-color-border);
165
- border-radius: 0;
166
- max-width: calc(100vw - 32px);
167
- max-height: calc(100vh - 64px);
168
- font-family: var(--uidex-font-sans);
169
- }
170
-
171
- .uidex-modal-header {
172
- display: flex;
173
- align-items: center;
174
- gap: 12px;
175
- padding: 12px 16px;
176
- border-bottom: 1px solid var(--uidex-color-border);
177
- }
178
-
179
- .uidex-modal-title {
180
- margin: 0;
181
- font-size: var(--uidex-font-size-sm);
182
- font-weight: 600;
183
- color: var(--uidex-color-text-strong);
184
- font-family: var(--uidex-font-mono);
185
- text-transform: uppercase;
186
- letter-spacing: 0.05em;
187
- }
188
-
189
- .uidex-modal-close {
190
- display: flex;
191
- align-items: center;
192
- justify-content: center;
193
- width: 28px;
194
- height: 28px;
195
- border: 1px solid transparent;
196
- border-radius: 0;
197
- background: transparent;
198
- color: var(--uidex-color-text-muted);
199
- font-size: 18px;
200
- cursor: pointer;
201
- transition: background-color var(--uidex-transition-fast), color var(--uidex-transition-fast), border-color var(--uidex-transition-fast);
202
- }
203
-
204
- .uidex-modal-close:hover {
205
- background: var(--uidex-color-surface-hover);
206
- border-color: var(--uidex-color-border);
207
- color: var(--uidex-color-text-strong);
208
- }
209
-
210
- .uidex-modal-close:active {
211
- transform: translateY(1px);
212
- }
213
-
214
- .uidex-modal-body {
215
- padding: 12px 16px;
216
- }
217
-
218
- .uidex-modal-section {
219
- margin-bottom: 12px;
220
- }
221
-
222
- .uidex-modal-section:last-child {
223
- margin-bottom: 0;
224
- }
225
-
226
- .uidex-modal-label {
227
- font-size: var(--uidex-font-size-xs);
228
- font-weight: 600;
229
- text-transform: uppercase;
230
- letter-spacing: 0.06em;
231
- color: var(--uidex-color-text-muted);
232
- margin-bottom: 6px;
233
- }
234
-
235
- .uidex-modal-section--spaced {
236
- margin-top: 12px;
237
- }
238
-
239
- .uidex-modal-doc {
240
- margin: 0;
241
- font-size: var(--uidex-font-size-sm);
242
- line-height: 1.5;
243
- color: var(--uidex-color-text-secondary);
244
- }
245
-
246
- .uidex-modal-code {
247
- display: block;
248
- font-family: var(--uidex-font-mono);
249
- font-size: var(--uidex-font-size-sm);
250
- color: var(--uidex-color-text);
251
- background: var(--uidex-color-bg-elevated);
252
- padding: 6px 10px;
253
- border-radius: 0;
254
- border: 1px solid var(--uidex-color-border);
255
- word-break: break-all;
256
- }
257
-
258
- .uidex-modal-location {
259
- display: flex;
260
- align-items: center;
261
- gap: 8px;
262
- margin-bottom: 6px;
263
- }
264
-
265
- .uidex-modal-location:last-child {
266
- margin-bottom: 0;
267
- }
268
-
269
- .uidex-modal-location .uidex-modal-code {
270
- flex: 1;
271
- min-width: 0;
272
- }
273
-
274
- .uidex-modal-copy {
275
- flex-shrink: 0;
276
- padding: 4px 10px;
277
- border: 1px solid var(--uidex-color-border);
278
- border-radius: 0;
279
- background: var(--uidex-color-bg-elevated);
280
- color: var(--uidex-color-text-secondary);
281
- font-size: var(--uidex-font-size-sm);
282
- font-weight: 500;
283
- font-family: var(--uidex-font-mono);
284
- cursor: pointer;
285
- transition: background-color var(--uidex-transition-fast), color var(--uidex-transition-fast);
286
- white-space: nowrap;
287
- }
288
-
289
- .uidex-modal-copy:hover {
290
- background: var(--uidex-color-surface-hover);
291
- color: var(--uidex-color-text-strong);
292
- }
293
-
294
- .uidex-modal-copy:active {
295
- transform: translateY(1px);
296
- }
297
-
298
- .uidex-modal-env-item {
299
- font-size: var(--uidex-font-size-sm);
300
- color: var(--uidex-color-text-secondary);
301
- line-height: 1.6;
302
- }
303
-
304
- .uidex-empty-message {
305
- padding: 16px 12px;
306
- color: var(--uidex-color-text-muted);
307
- font-size: var(--uidex-font-size-sm);
308
- text-align: center;
309
- }
310
-
311
- /* ——— Panel layout (sidebar modal) ——— */
312
- .uidex-modal--panel {
313
- width: calc(100vw - 32px);
314
- max-width: 720px;
315
- height: calc(100vh - 64px);
316
- max-height: 600px;
317
- display: flex;
318
- flex-direction: column;
319
- overflow: hidden;
320
- }
321
-
322
- .uidex-panel-body {
323
- display: flex;
324
- flex: 1;
325
- min-height: 0;
326
- }
327
-
328
- .uidex-panel-sidebar {
329
- width: 200px;
330
- flex-shrink: 0;
331
- border-right: 1px solid var(--uidex-color-border);
332
- overflow-y: auto;
333
- padding: 0;
334
- scrollbar-width: thin;
335
- scrollbar-color: rgba(255, 255, 255, 0.1) transparent;
336
- }
337
-
338
- .uidex-panel-sidebar::-webkit-scrollbar {
339
- width: 6px;
340
- }
341
-
342
- .uidex-panel-sidebar::-webkit-scrollbar-track {
343
- background: transparent;
344
- }
345
-
346
- .uidex-panel-sidebar::-webkit-scrollbar-thumb {
347
- background: rgba(255, 255, 255, 0.1);
348
- border-radius: 0;
349
- }
350
-
351
- .uidex-panel-main {
352
- flex: 1;
353
- min-width: 0;
354
- overflow-y: auto;
355
- padding: 16px 20px;
356
- scrollbar-width: thin;
357
- scrollbar-color: rgba(255, 255, 255, 0.1) transparent;
358
- }
359
-
360
- .uidex-panel-main::-webkit-scrollbar {
361
- width: 6px;
362
- }
363
-
364
- .uidex-panel-main::-webkit-scrollbar-track {
365
- background: transparent;
366
- }
367
-
368
- .uidex-panel-main::-webkit-scrollbar-thumb {
369
- background: rgba(255, 255, 255, 0.1);
370
- border-radius: 0;
371
- }
372
-
373
- /* ——— Sidebar navigation ——— */
374
- .uidex-sidebar-back {
375
- display: flex;
376
- align-items: center;
377
- gap: 6px;
378
- padding: 6px 8px;
379
- margin: 0;
380
- border-bottom: 1px solid var(--uidex-color-border);
381
- font-size: var(--uidex-font-size-sm);
382
- font-weight: 600;
383
- color: var(--uidex-color-text-secondary);
384
- cursor: pointer;
385
- transition: color var(--uidex-transition-fast);
386
- position: sticky;
387
- top: 0;
388
- background: var(--uidex-color-bg);
389
- z-index: 1;
390
- }
391
-
392
- .uidex-sidebar-back:hover {
393
- color: var(--uidex-color-text-strong);
394
- }
395
-
396
- .uidex-sidebar-back-arrow {
397
- font-size: 16px;
398
- line-height: 1;
399
- }
400
-
401
- .uidex-sidebar-root-item {
402
- display: flex;
403
- align-items: center;
404
- gap: 6px;
405
- padding: 6px 10px;
406
- border-radius: 0;
407
- font-size: var(--uidex-font-size-sm);
408
- font-weight: 500;
409
- color: var(--uidex-color-text);
410
- cursor: pointer;
411
- transition: background-color var(--uidex-transition-fast);
412
- }
413
-
414
- .uidex-sidebar-root-item:hover {
415
- background: var(--uidex-color-surface-hover);
416
- }
417
-
418
- .uidex-sidebar-root-label {
419
- flex: 0 0 auto;
420
- }
421
-
422
- .uidex-sidebar-count {
423
- font-size: var(--uidex-font-size-xs);
424
- color: var(--uidex-color-text-muted);
425
- font-weight: 400;
426
- }
427
-
428
- .uidex-sidebar-chevron {
429
- margin-left: auto;
430
- font-size: 16px;
431
- line-height: 1;
432
- color: var(--uidex-color-text-muted);
433
- }
434
-
435
- .uidex-sidebar-item {
436
- padding: 4px 10px;
437
- border-radius: 0;
438
- font-size: var(--uidex-font-size-sm);
439
- color: var(--uidex-color-text);
440
- cursor: pointer;
441
- transition: background-color var(--uidex-transition-fast);
442
- white-space: nowrap;
443
- overflow: hidden;
444
- text-overflow: ellipsis;
445
- }
446
-
447
- .uidex-sidebar-item:hover {
448
- background: var(--uidex-color-surface-hover);
449
- }
450
-
451
- .uidex-sidebar-item--active {
452
- background: var(--uidex-color-surface-active);
453
- color: var(--uidex-color-text-strong);
454
- }
455
-
456
- .uidex-sidebar-item--active:hover {
457
- background: var(--uidex-color-surface-active);
458
- }
459
-
460
- .uidex-sidebar-item--dimmed {
461
- opacity: 0.5;
462
- }
463
-
464
- .uidex-sidebar-item--mono {
465
- font-family: var(--uidex-font-mono);
466
- }
467
-
468
- .uidex-sidebar-item--grouped {
469
- padding-left: 24px;
470
- }
471
-
472
- /* Sidebar category colors */
473
- .uidex-sidebar-item--pages.uidex-sidebar-item--active {
474
- color: var(--uidex-color-pages);
475
- }
476
-
477
- .uidex-sidebar-item--features.uidex-sidebar-item--active {
478
- color: var(--uidex-color-features);
479
- }
480
-
481
- .uidex-sidebar-item--components.uidex-sidebar-item--active {
482
- color: var(--uidex-color-components);
483
- }
484
-
485
- .uidex-sidebar-root-item--pages .uidex-sidebar-root-label {
486
- color: var(--uidex-color-pages);
487
- }
488
-
489
- .uidex-sidebar-root-item--features .uidex-sidebar-root-label {
490
- color: var(--uidex-color-features);
491
- }
492
-
493
- .uidex-sidebar-root-item--components .uidex-sidebar-root-label {
494
- color: var(--uidex-color-components);
495
- }
496
-
497
- /* ——— Sidebar component groups ——— */
498
- .uidex-sidebar-group-header {
499
- display: flex;
500
- align-items: center;
501
- gap: 4px;
502
- padding: 4px 10px;
503
- border-radius: 0;
504
- font-size: var(--uidex-font-size-sm);
505
- font-weight: 600;
506
- color: var(--uidex-color-text);
507
- cursor: pointer;
508
- transition: background-color var(--uidex-transition-fast);
509
- user-select: none;
510
- }
511
-
512
- .uidex-sidebar-group-header:hover {
513
- background: var(--uidex-color-surface-hover);
514
- }
515
-
516
- .uidex-sidebar-group-chevron {
517
- font-size: 14px;
518
- line-height: 1;
519
- color: var(--uidex-color-text-muted);
520
- width: 14px;
521
- text-align: center;
522
- flex-shrink: 0;
523
- transition: transform var(--uidex-transition-normal);
524
- transform: rotate(0deg);
525
- }
526
-
527
- .uidex-sidebar-group-header--expanded .uidex-sidebar-group-chevron {
528
- transform: rotate(90deg);
529
- }
530
-
531
- .uidex-sidebar-group-count {
532
- margin-left: auto;
533
- font-size: var(--uidex-font-size-xs);
534
- font-weight: 400;
535
- color: var(--uidex-color-text-muted);
536
- }
537
-
538
- /* ——— Search ——— */
539
- .uidex-search-input {
540
- flex: 1;
541
- min-width: 0;
542
- padding: 4px 8px;
543
- border: 1px solid var(--uidex-color-border);
544
- border-radius: 0;
545
- background: transparent;
546
- color: var(--uidex-color-text);
547
- font-size: var(--uidex-font-size-sm);
548
- font-family: var(--uidex-font-mono);
549
- outline: none;
550
- box-sizing: border-box;
551
- }
552
-
553
- .uidex-search-input::placeholder {
554
- color: var(--uidex-color-text-muted);
555
- }
556
-
557
- .uidex-search-input:focus {
558
- border-color: rgba(255, 255, 255, 0.3);
559
- }
560
-
561
- .uidex-search-group-label {
562
- padding: 8px 10px 2px;
563
- font-size: var(--uidex-font-size-xs);
564
- font-weight: 600;
565
- text-transform: uppercase;
566
- letter-spacing: 0.06em;
567
- color: var(--uidex-color-text-muted);
568
- }
569
-
570
- .uidex-search-group-label--pages { color: var(--uidex-color-pages); }
571
- .uidex-search-group-label--features { color: var(--uidex-color-features); }
572
- .uidex-search-group-label--components { color: var(--uidex-color-components); }
573
-
574
- .uidex-search-empty {
575
- padding: 20px 10px;
576
- font-size: var(--uidex-font-size-sm);
577
- color: var(--uidex-color-text-muted);
578
- text-align: center;
579
- }
580
-
581
- .uidex-sidebar-divider {
582
- height: 1px;
583
- background: var(--uidex-color-border);
584
- margin: 4px 10px;
585
- }
586
-
587
- .uidex-sidebar-root-item--active {
588
- background: var(--uidex-color-surface-active);
589
- }
590
-
591
- /* ——— Main content ——— */
592
- .uidex-main-title {
593
- margin: 0 0 8px;
594
- font-size: var(--uidex-font-size-lg);
595
- font-weight: 600;
596
- color: var(--uidex-color-text-strong);
597
- }
598
-
599
- .uidex-main-title--mono {
600
- font-family: var(--uidex-font-mono);
601
- color: var(--uidex-color-text-strong);
602
- }
603
-
604
- .uidex-main-divider {
605
- height: 1px;
606
- background: var(--uidex-color-border);
607
- margin: 16px 0;
608
- }
609
-
610
- .uidex-absent-notice {
611
- font-size: var(--uidex-font-size-sm);
612
- color: var(--uidex-color-text-muted);
613
- font-style: italic;
614
- margin-bottom: 12px;
615
- }
616
-
617
- /* ——— Page content in modal ——— */
618
- .uidex-page-content {
619
- font-size: var(--uidex-font-size-sm);
620
- line-height: 1.6;
621
- color: var(--uidex-color-text);
622
- }
623
-
624
- .uidex-page-content h2,
625
- .uidex-page-content h3,
626
- .uidex-page-content h4,
627
- .uidex-page-content h5,
628
- .uidex-page-content h6 {
629
- margin: 12px 0 6px;
630
- font-size: var(--uidex-font-size-sm);
631
- font-weight: 600;
632
- color: var(--uidex-color-text-strong);
633
- text-transform: uppercase;
634
- letter-spacing: 0.04em;
635
- }
636
-
637
- .uidex-page-content h2 {
638
- font-size: var(--uidex-font-size-md);
639
- }
640
-
641
- .uidex-page-content p {
642
- margin: 0 0 8px;
643
- }
644
-
645
- .uidex-checklist {
646
- list-style: none;
647
- margin: 0 0 8px;
648
- padding-left: 0;
649
- }
650
-
651
- .uidex-checklist-item {
652
- margin-bottom: 4px;
653
- }
654
-
655
- .uidex-checklist-label {
656
- display: flex;
657
- align-items: baseline;
658
- gap: 8px;
659
- cursor: pointer;
660
- }
661
-
662
- .uidex-checklist-checkbox {
663
- flex-shrink: 0;
664
- margin: 0;
665
- accent-color: var(--uidex-color-text-strong);
666
- }
667
-
668
- /* ——— Chips ——— */
669
- .uidex-chips {
670
- display: flex;
671
- flex-wrap: wrap;
672
- gap: 4px;
673
- }
674
-
675
- .uidex-chip {
676
- display: inline-block;
677
- padding: 2px 8px;
678
- border-radius: 0;
679
- background: transparent;
680
- border: 1px solid var(--uidex-color-border);
681
- font-family: var(--uidex-font-mono);
682
- font-size: var(--uidex-font-size-xs);
683
- color: var(--uidex-color-text);
684
- transition: background-color var(--uidex-transition-fast);
685
- }
686
-
687
- .uidex-chip:hover {
688
- background: var(--uidex-color-surface-hover);
689
- }
690
-
691
- .uidex-chip--absent {
692
- opacity: 0.4;
693
- }
694
-
695
- .uidex-chip--pages {
696
- color: var(--uidex-color-pages);
697
- border-color: color-mix(in srgb, var(--uidex-color-pages) 30%, transparent);
698
- }
699
-
700
- .uidex-chip--features {
701
- color: var(--uidex-color-features);
702
- border-color: color-mix(in srgb, var(--uidex-color-features) 30%, transparent);
703
- }
704
-
705
- .uidex-chip--components {
706
- color: var(--uidex-color-components);
707
- border-color: color-mix(in srgb, var(--uidex-color-components) 30%, transparent);
708
- }
709
-
710
- /* ——— Category badges ——— */
711
- .uidex-badge {
712
- display: inline-block;
713
- padding: 2px 8px;
714
- border-radius: 0;
715
- border: 1px solid var(--uidex-color-border);
716
- background: transparent;
717
- color: var(--uidex-color-text-muted);
718
- font-size: var(--uidex-font-size-xs);
719
- font-weight: 600;
720
- text-transform: uppercase;
721
- letter-spacing: 0.06em;
722
- margin-bottom: 12px;
723
- }
724
-
725
- .uidex-badge--pages {
726
- color: var(--uidex-color-pages);
727
- border-color: color-mix(in srgb, var(--uidex-color-pages) 30%, transparent);
728
- }
729
-
730
- .uidex-badge--features {
731
- color: var(--uidex-color-features);
732
- border-color: color-mix(in srgb, var(--uidex-color-features) 30%, transparent);
733
- }
734
-
735
- .uidex-badge--components {
736
- color: var(--uidex-color-components);
737
- border-color: color-mix(in srgb, var(--uidex-color-components) 30%, transparent);
738
- }
739
-
740
- /* ——— Feedback modal ——— */
741
- .uidex-modal--feedback {
742
- width: calc(100vw - 32px);
743
- max-width: 400px;
744
- }
745
-
746
- .uidex-modal-code--inline {
747
- border: none;
748
- background: none;
749
- padding: 0;
750
- }
751
-
752
- .uidex-header-spacer {
753
- flex: 1;
754
- }
755
-
756
- .uidex-chips--spaced {
757
- margin-bottom: 8px;
758
- }
759
-
760
- .uidex-modal-doc--spaced {
761
- margin-bottom: 12px;
762
- }
763
-
764
- /* ——— Feedback form ——— */
765
- .uidex-form {
766
- display: flex;
767
- flex-direction: column;
768
- gap: 12px;
769
- }
770
-
771
- .uidex-form-group {
772
- display: flex;
773
- flex-direction: column;
774
- gap: 4px;
775
- }
776
-
777
- .uidex-form-label {
778
- font-size: var(--uidex-font-size-xs);
779
- font-weight: 600;
780
- text-transform: uppercase;
781
- letter-spacing: 0.06em;
782
- color: var(--uidex-color-text-muted);
783
- }
784
-
785
- .uidex-form-select,
786
- .uidex-form-input,
787
- .uidex-form-textarea {
788
- border: 1px solid var(--uidex-color-border);
789
- border-radius: 0;
790
- background: transparent;
791
- color: var(--uidex-color-text);
792
- font-size: var(--uidex-font-size-sm);
793
- font-family: var(--uidex-font-mono);
794
- outline: none;
795
- }
796
-
797
- .uidex-form-select:focus,
798
- .uidex-form-input:focus,
799
- .uidex-form-textarea:focus {
800
- border-color: rgba(255, 255, 255, 0.3);
801
- }
802
-
803
- .uidex-form-input::placeholder,
804
- .uidex-form-textarea::placeholder {
805
- color: var(--uidex-color-text-muted);
806
- }
807
-
808
- .uidex-form-select {
809
- appearance: none;
810
- padding: 6px 10px;
811
- cursor: pointer;
812
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ababab' d='M3 5l3 3 3-3'/%3E%3C/svg%3E");
813
- background-repeat: no-repeat;
814
- background-position: right 8px center;
815
- padding-right: 26px;
816
- }
817
-
818
- .uidex-form-input {
819
- padding: 6px 10px;
820
- width: 100%;
821
- box-sizing: border-box;
822
- }
823
-
824
- .uidex-form-input + .uidex-form-input {
825
- margin-top: 6px;
826
- }
827
-
828
- .uidex-form-textarea {
829
- padding: 8px 10px;
830
- line-height: 1.5;
831
- resize: vertical;
832
- min-height: 80px;
833
- }
834
-
835
- .uidex-form-submit {
836
- padding: 6px 16px;
837
- border: 1px solid var(--uidex-color-border);
838
- border-radius: 0;
839
- background: var(--uidex-color-primary);
840
- color: var(--uidex-color-bg);
841
- font-size: var(--uidex-font-size-sm);
842
- font-weight: 600;
843
- font-family: var(--uidex-font-mono);
844
- cursor: pointer;
845
- transition: background-color var(--uidex-transition-fast);
846
- align-self: flex-end;
847
- }
848
-
849
- .uidex-form-submit:hover {
850
- background: var(--uidex-color-primary-hover);
851
- }
852
-
853
- .uidex-form-submit:not(:disabled):active {
854
- transform: translateY(1px);
855
- }
856
-
857
- .uidex-form-submit:disabled {
858
- opacity: 0.5;
859
- cursor: default;
860
- }
861
-
862
- /* ——— Form toggle ——— */
863
- .uidex-form-toggle {
864
- display: flex;
865
- align-items: center;
866
- gap: 8px;
867
- cursor: pointer;
868
- }
869
-
870
- .uidex-form-checkbox {
871
- flex-shrink: 0;
872
- margin: 0;
873
- accent-color: var(--uidex-color-text-strong);
874
- }
875
-
876
- .uidex-form-toggle-text {
877
- font-size: var(--uidex-font-size-sm);
878
- color: var(--uidex-color-text-secondary);
879
- }
880
-
881
- /* ——— Responsive ——— */
882
- @media (max-width: 600px) {
883
- .uidex-modal--panel {
884
- width: auto;
885
- }
886
-
887
- .uidex-panel-body {
888
- flex-direction: column;
889
- }
890
-
891
- .uidex-panel-sidebar {
892
- width: auto;
893
- max-height: 200px;
894
- border-right: none;
895
- border-bottom: 1px solid var(--uidex-color-border);
896
- }
897
- }
898
-
899
- /* ——— Graph ——— */
900
- .uidex-graph {
901
- margin-top: 8px;
902
- }
903
-
904
- .uidex-graph-svg {
905
- display: block;
906
- }
907
-
908
- .uidex-graph-header {
909
- font-size: 10px;
910
- font-weight: 600;
911
- letter-spacing: 0.08em;
912
- }
913
-
914
- .uidex-graph-header--pages { fill: var(--uidex-color-pages); }
915
- .uidex-graph-header--features { fill: var(--uidex-color-features); }
916
- .uidex-graph-header--components { fill: var(--uidex-color-components); }
917
-
918
- .uidex-graph-node {
919
- cursor: pointer;
920
- }
921
-
922
- .uidex-graph-node rect {
923
- fill: var(--uidex-color-bg-elevated);
924
- stroke: var(--uidex-color-border);
925
- stroke-width: 1;
926
- }
927
-
928
- .uidex-graph-node:hover rect {
929
- fill: var(--uidex-color-surface-hover);
930
- }
931
-
932
- .uidex-graph-node--page rect { stroke: color-mix(in srgb, var(--uidex-color-pages) 50%, transparent); }
933
- .uidex-graph-node--feature rect { stroke: color-mix(in srgb, var(--uidex-color-features) 50%, transparent); }
934
- .uidex-graph-node--component rect { stroke: color-mix(in srgb, var(--uidex-color-components) 50%, transparent); }
935
-
936
- .uidex-graph-label {
937
- font-size: 10px;
938
- font-family: var(--uidex-font-mono);
939
- fill: var(--uidex-color-text);
940
- }
941
-
942
- .uidex-graph-edge {
943
- fill: none;
944
- stroke-width: 1;
945
- opacity: 0.3;
946
- }
947
-
948
- .uidex-graph-edge--page { stroke: var(--uidex-color-pages); }
949
- .uidex-graph-edge--feature { stroke: var(--uidex-color-features); }
950
-
951
- .uidex-graph-svg.uidex-graph--hover .uidex-graph-edge { opacity: 0.08; }
952
- .uidex-graph-svg.uidex-graph--hover .uidex-graph-node { opacity: 0.3; }
953
- .uidex-graph-svg.uidex-graph--hover .uidex-graph-edge--highlighted { opacity: 0.6; stroke-width: 1.5; }
954
- .uidex-graph-svg.uidex-graph--hover .uidex-graph-node--highlighted { opacity: 1; }
955
-
956
- .uidex-graph-note {
957
- font-size: var(--uidex-font-size-sm);
958
- color: var(--uidex-color-text-muted);
959
- margin-top: 12px;
960
- font-style: italic;
961
- }
962
-
963
- /* ——— Overlay ———
964
- NOTE: The overlay renders in document.body (outside the Shadow DOM)
965
- so all its styles are set inline in overlay.ts. These CSS classes
966
- are retained only for consumers who import style.css standalone. */
967
- .uidex-overlay {
968
- position: fixed;
969
- pointer-events: none;
970
- z-index: 2147483645;
971
- }