@pipelex/mthds-ui 0.6.4 → 0.7.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.
@@ -1,4 +1,6 @@
1
1
  /* ─── Detail Panel — sliding side panel for node inspection ─────────────── */
2
+ /* Token-only — all colors come from the active theme palette on the */
3
+ /* container. See `graphConfig.ts` for token definitions. */
2
4
 
3
5
  .detail-panel {
4
6
  position: absolute;
@@ -6,13 +8,13 @@
6
8
  right: 0;
7
9
  width: 380px;
8
10
  height: 100%;
9
- background: #111118;
10
- border-left: 1px solid rgba(255, 255, 255, 0.1);
11
+ background: var(--surface-panel);
12
+ border-left: 1px solid var(--border-default);
11
13
  z-index: 10;
12
14
  display: flex;
13
15
  flex-direction: column;
14
- font-family: "Inter", -apple-system, sans-serif;
15
- color: #e2e8f0;
16
+ font-family: var(--font-sans);
17
+ color: var(--text-default);
16
18
  overflow: hidden;
17
19
  transition: transform 0.2s ease;
18
20
  }
@@ -49,7 +51,8 @@
49
51
 
50
52
  .detail-panel-resize-handle:hover::before,
51
53
  .detail-panel--dragging .detail-panel-resize-handle::before {
52
- background: rgba(59, 130, 246, 0.5);
54
+ background: var(--color-accent);
55
+ opacity: 0.6;
53
56
  }
54
57
 
55
58
  /* Grip indicator — visible on hover */
@@ -68,7 +71,7 @@
68
71
 
69
72
  .detail-panel-resize-handle:hover::after,
70
73
  .detail-panel--dragging .detail-panel-resize-handle::after {
71
- background: rgba(59, 130, 246, 0.8);
74
+ background: var(--color-accent);
72
75
  }
73
76
 
74
77
  /* Disable transition during drag for smooth resizing */
@@ -80,33 +83,48 @@
80
83
  pointer-events: none;
81
84
  }
82
85
 
86
+ /* ─── Close row — scrolls away with the content (intentionally NOT pinned) ─ */
87
+ /* The close button is part of the content's top, not panel chrome: it
88
+ * scrolls out of view with the content, and closing the panel means
89
+ * scrolling back up. The negative margin tucks the following section up
90
+ * beside it so the row doesn't cost a full line of vertical space. */
91
+
92
+ .detail-panel-close-row {
93
+ display: flex;
94
+ justify-content: flex-end;
95
+ /* Pull the next section up by exactly this row's height + the column
96
+ * gap, so the close button sits ON the first content line (concept /
97
+ * pipe header), right-aligned — not on its own line above it. */
98
+ margin-bottom: -40px;
99
+ }
100
+
83
101
  .detail-panel-close {
84
102
  all: unset;
85
103
  cursor: pointer;
86
- position: absolute;
87
- top: 12px;
88
- right: 12px;
89
104
  width: 24px;
90
105
  height: 24px;
91
106
  display: flex;
92
107
  align-items: center;
93
108
  justify-content: center;
94
109
  border-radius: 4px;
95
- color: #64748b;
110
+ color: var(--text-dim);
96
111
  font-size: 18px;
97
112
  line-height: 1;
98
- z-index: 3;
113
+ /* Above the sticky pipe header (z 1) so the X is visible at rest while
114
+ * sharing its line; on scroll it briefly slides over the stuck header's
115
+ * empty right side before leaving the viewport. */
116
+ z-index: 2;
99
117
  }
100
118
 
101
119
  .detail-panel-close:hover {
102
- color: #94a3b8;
103
- background: rgba(255, 255, 255, 0.06);
120
+ color: var(--text-muted);
121
+ background: var(--surface-elevated);
104
122
  }
105
123
 
106
124
  .detail-panel-content {
107
125
  flex: 1;
108
126
  overflow-y: auto;
109
- padding: 20px 16px;
127
+ padding: 12px 16px 20px;
110
128
  display: flex;
111
129
  flex-direction: column;
112
130
  gap: 16px;
@@ -116,11 +134,11 @@
116
134
 
117
135
  .detail-sticky-header {
118
136
  position: sticky;
119
- top: -20px;
137
+ top: -12px; /* must mirror .detail-panel-content's top padding */
120
138
  z-index: 1;
121
- background: #111118;
122
- padding-top: 20px;
123
- margin-top: -20px;
139
+ background: var(--surface-panel);
140
+ padding-top: 12px;
141
+ margin-top: -12px;
124
142
  display: flex;
125
143
  flex-direction: column;
126
144
  gap: 16px;
@@ -133,7 +151,7 @@
133
151
  font-weight: 700;
134
152
  text-transform: uppercase;
135
153
  letter-spacing: 0.06em;
136
- color: #64748b;
154
+ color: var(--text-dim);
137
155
  margin-bottom: 6px;
138
156
  }
139
157
 
@@ -154,24 +172,24 @@
154
172
  }
155
173
 
156
174
  .detail-badge--operator {
157
- background: #ff6b6b;
158
- color: #0e0e0e;
175
+ background: var(--color-pipe);
176
+ color: var(--text-on-accent);
159
177
  }
160
178
 
161
179
  .detail-badge--controller {
162
- background: #bd93f9;
163
- color: #0e0e0e;
180
+ background: var(--color-batch-item);
181
+ color: var(--text-on-accent);
164
182
  }
165
183
 
166
184
  .detail-pipe-code {
167
- font-family: "JetBrains Mono", "Monaco", monospace;
185
+ font-family: var(--font-mono);
168
186
  font-size: 14px;
169
187
  font-weight: 600;
170
- color: #ff6b6b;
188
+ color: var(--color-pipe);
171
189
  }
172
190
 
173
191
  .detail-pipe-code--controller {
174
- color: #bd93f9;
192
+ color: var(--color-batch-item);
175
193
  }
176
194
 
177
195
  .detail-status {
@@ -195,13 +213,13 @@
195
213
 
196
214
  .detail-duration {
197
215
  font-size: 11px;
198
- color: #64748b;
199
- font-family: "JetBrains Mono", "Monaco", monospace;
216
+ color: var(--text-dim);
217
+ font-family: var(--font-mono);
200
218
  }
201
219
 
202
220
  .detail-description {
203
221
  font-size: 12px;
204
- color: #94a3b8;
222
+ color: var(--text-muted);
205
223
  line-height: 1.5;
206
224
  }
207
225
 
@@ -214,17 +232,17 @@
214
232
  font-size: 11px;
215
233
  padding: 3px 8px;
216
234
  border-radius: 4px;
217
- background: rgba(255, 255, 255, 0.04);
218
- border: 1px solid rgba(255, 255, 255, 0.06);
235
+ background: var(--surface-sunken);
236
+ border: 1px solid var(--border-subtle);
219
237
  }
220
238
 
221
239
  .detail-io-name {
222
- font-family: "JetBrains Mono", "Monaco", monospace;
223
- color: #e2e8f0;
240
+ font-family: var(--font-mono);
241
+ color: var(--text-default);
224
242
  }
225
243
 
226
244
  .detail-io-concept {
227
- color: #64748b;
245
+ color: var(--text-dim);
228
246
  font-size: 10px;
229
247
  }
230
248
 
@@ -237,11 +255,11 @@
237
255
  /* ─── Blueprint-specific sections ───────────────────────────────────────── */
238
256
 
239
257
  .detail-prompt-block {
240
- font-family: "JetBrains Mono", "Monaco", monospace;
258
+ font-family: var(--font-mono);
241
259
  font-size: 11px;
242
- color: #94a3b8;
243
- background: rgba(255, 255, 255, 0.03);
244
- border: 1px solid rgba(255, 255, 255, 0.06);
260
+ color: var(--text-muted);
261
+ background: var(--surface-sunken);
262
+ border: 1px solid var(--border-subtle);
245
263
  border-radius: 6px;
246
264
  padding: 10px 12px;
247
265
  white-space: pre-wrap;
@@ -266,16 +284,16 @@
266
284
  align-items: center;
267
285
  gap: 4px;
268
286
  font-size: 9px;
269
- color: #64748b;
287
+ color: var(--text-dim);
270
288
  padding: 2px 6px;
271
289
  border-radius: 3px;
272
- background: rgba(255, 255, 255, 0.04);
273
- border: 1px solid rgba(255, 255, 255, 0.06);
290
+ background: var(--surface-sunken);
291
+ border: 1px solid var(--border-subtle);
274
292
  transition: color 0.15s;
275
293
  }
276
294
 
277
295
  .detail-prompt-expand-btn:hover {
278
- color: #94a3b8;
296
+ color: var(--text-muted);
279
297
  }
280
298
 
281
299
  .detail-kv-row {
@@ -288,13 +306,13 @@
288
306
  }
289
307
 
290
308
  .detail-kv-key {
291
- color: #64748b;
309
+ color: var(--text-dim);
292
310
  flex-shrink: 0; /* label stays at its natural width */
293
311
  }
294
312
 
295
313
  .detail-kv-value {
296
- font-family: "JetBrains Mono", "Monaco", monospace;
297
- color: #e2e8f0;
314
+ font-family: var(--font-mono);
315
+ color: var(--text-default);
298
316
  flex: 1 1 0;
299
317
  min-width: 0;
300
318
  text-align: right;
@@ -311,17 +329,17 @@
311
329
  }
312
330
 
313
331
  .detail-field-block-label {
314
- font-family: "JetBrains Mono", "Monaco", monospace;
332
+ font-family: var(--font-mono);
315
333
  font-size: 10px;
316
- color: #64748b;
334
+ color: var(--text-dim);
317
335
  }
318
336
 
319
337
  .detail-field-block-value {
320
- font-family: "JetBrains Mono", "Monaco", monospace;
338
+ font-family: var(--font-mono);
321
339
  font-size: 11px;
322
- color: #e2e8f0;
323
- background: rgba(255, 255, 255, 0.03);
324
- border: 1px solid rgba(255, 255, 255, 0.06);
340
+ color: var(--text-default);
341
+ background: var(--surface-sunken);
342
+ border: 1px solid var(--border-subtle);
325
343
  border-radius: 6px;
326
344
  padding: 8px 10px;
327
345
  white-space: pre-wrap;
@@ -345,20 +363,20 @@
345
363
  margin-top: 6px;
346
364
  margin-bottom: 4px;
347
365
  padding: 4px 0 4px 8px;
348
- border-left: 2px solid rgba(80, 250, 123, 0.35);
366
+ border-left: 2px solid var(--color-success);
349
367
  }
350
368
 
351
369
  .detail-nested-header-name {
352
- font-family: "JetBrains Mono", "Monaco", monospace;
370
+ font-family: var(--font-mono);
353
371
  font-size: 11px;
354
372
  font-weight: 600;
355
- color: #e2e8f0;
373
+ color: var(--text-default);
356
374
  }
357
375
 
358
376
  .detail-nested-header-meta {
359
- font-family: "JetBrains Mono", "Monaco", monospace;
377
+ font-family: var(--font-mono);
360
378
  font-size: 9px;
361
- color: #64748b;
379
+ color: var(--text-dim);
362
380
  text-transform: uppercase;
363
381
  letter-spacing: 0.04em;
364
382
  }
@@ -374,39 +392,39 @@
374
392
  .detail-schema-table th {
375
393
  text-align: left;
376
394
  font-weight: 700;
377
- color: #64748b;
395
+ color: var(--text-dim);
378
396
  font-size: 9px;
379
397
  text-transform: uppercase;
380
398
  letter-spacing: 0.06em;
381
399
  padding: 4px 6px;
382
- border-bottom: 1px solid rgba(255, 255, 255, 0.08);
400
+ border-bottom: 1px solid var(--border-default);
383
401
  }
384
402
 
385
403
  .detail-schema-table td {
386
404
  padding: 4px 6px;
387
- border-bottom: 1px solid rgba(255, 255, 255, 0.04);
388
- color: #94a3b8;
405
+ border-bottom: 1px solid var(--border-subtle);
406
+ color: var(--text-muted);
389
407
  }
390
408
 
391
409
  .detail-schema-field {
392
- font-family: "JetBrains Mono", "Monaco", monospace;
393
- color: #e2e8f0;
410
+ font-family: var(--font-mono);
411
+ color: var(--text-default);
394
412
  }
395
413
 
396
414
  .detail-schema-type {
397
- color: #8be9fd;
415
+ color: var(--color-accent);
398
416
  }
399
417
 
400
418
  .detail-schema-required {
401
- color: #ff6b6b;
419
+ color: var(--color-pipe);
402
420
  font-size: 9px;
403
421
  }
404
422
 
405
423
  /* ─── Error section ─────────────────────────────────────────────────────── */
406
424
 
407
425
  .detail-error {
408
- background: rgba(255, 85, 85, 0.08);
409
- border: 1px solid rgba(255, 85, 85, 0.2);
426
+ background: var(--color-error-bg);
427
+ border: 1px solid var(--color-error-border);
410
428
  border-radius: 6px;
411
429
  padding: 10px 12px;
412
430
  }
@@ -414,20 +432,20 @@
414
432
  .detail-error-type {
415
433
  font-size: 12px;
416
434
  font-weight: 600;
417
- color: #ff5555;
435
+ color: var(--color-error);
418
436
  margin-bottom: 4px;
419
437
  }
420
438
 
421
439
  .detail-error-message {
422
440
  font-size: 11px;
423
- color: #94a3b8;
441
+ color: var(--text-muted);
424
442
  line-height: 1.5;
425
443
  }
426
444
 
427
445
  .detail-error-stack {
428
- font-family: "JetBrains Mono", "Monaco", monospace;
446
+ font-family: var(--font-mono);
429
447
  font-size: 10px;
430
- color: #64748b;
448
+ color: var(--text-dim);
431
449
  margin-top: 8px;
432
450
  max-height: 150px;
433
451
  overflow-y: auto;
@@ -450,20 +468,20 @@
450
468
  font-size: 11px;
451
469
  padding: 4px 8px;
452
470
  border-radius: 4px;
453
- background: rgba(255, 255, 255, 0.03);
454
- border: 1px solid rgba(255, 255, 255, 0.06);
471
+ background: var(--surface-sunken);
472
+ border: 1px solid var(--border-subtle);
455
473
  }
456
474
 
457
475
  .detail-step-index {
458
- color: #64748b;
476
+ color: var(--text-dim);
459
477
  font-size: 10px;
460
478
  font-weight: 700;
461
479
  min-width: 16px;
462
480
  }
463
481
 
464
482
  .detail-step-code {
465
- font-family: "JetBrains Mono", "Monaco", monospace;
466
- color: #e2e8f0;
483
+ font-family: var(--font-mono);
484
+ color: var(--text-default);
467
485
  }
468
486
 
469
487
  /* ─── Tags/Metrics ──────────────────────────────────────────────────────── */
@@ -478,48 +496,89 @@
478
496
  font-size: 10px;
479
497
  padding: 2px 6px;
480
498
  border-radius: 3px;
481
- background: rgba(255, 255, 255, 0.04);
482
- border: 1px solid rgba(255, 255, 255, 0.06);
499
+ background: var(--surface-sunken);
500
+ border: 1px solid var(--border-subtle);
483
501
  }
484
502
 
485
503
  .detail-tag-key {
486
- color: #64748b;
504
+ color: var(--text-dim);
487
505
  }
488
506
 
489
507
  .detail-tag-value {
490
- color: #e2e8f0;
491
- font-family: "JetBrains Mono", "Monaco", monospace;
508
+ color: var(--text-default);
509
+ font-family: var(--font-mono);
510
+ }
511
+
512
+ /* ─── Detail tabs (Data / Structure) ────────────────────────────────────── */
513
+
514
+ .detail-tabs {
515
+ display: flex;
516
+ gap: 2px;
517
+ border-bottom: 1px solid var(--border-default);
518
+ }
519
+
520
+ .detail-tab {
521
+ all: unset;
522
+ cursor: pointer;
523
+ font-size: 11px;
524
+ font-weight: 600;
525
+ color: var(--text-dim);
526
+ padding: 5px 10px;
527
+ border-radius: 4px 4px 0 0;
528
+ border-bottom: 2px solid transparent;
529
+ margin-bottom: -1px;
530
+ transition:
531
+ color 0.15s,
532
+ border-color 0.15s;
533
+ }
534
+
535
+ .detail-tab:hover {
536
+ color: var(--text-muted);
537
+ }
538
+
539
+ .detail-tab--active {
540
+ color: var(--text-default);
541
+ border-bottom-color: var(--color-accent);
542
+ }
543
+
544
+ /* `all: unset` strips the UA focus ring — restore a visible indicator for
545
+ * keyboard users (WCAG 2.4.7) on every unset button in the panel. */
546
+ .detail-tab:focus-visible,
547
+ .detail-panel-close:focus-visible,
548
+ .detail-prompt-expand-btn:focus-visible {
549
+ outline: 2px solid var(--color-accent);
550
+ outline-offset: 2px;
492
551
  }
493
552
 
494
553
  /* ─── Concept panel header ──────────────────────────────────────────────── */
495
554
 
496
555
  .detail-concept-code {
497
- font-family: "JetBrains Mono", "Monaco", monospace;
556
+ font-family: var(--font-mono);
498
557
  font-size: 14px;
499
558
  font-weight: 600;
500
- color: #50fa7b;
559
+ color: var(--color-success);
501
560
  }
502
561
 
503
562
  .detail-concept-domain {
504
563
  font-size: 11px;
505
- color: #64748b;
564
+ color: var(--text-dim);
506
565
  }
507
566
 
508
567
  .detail-refines {
509
568
  font-size: 11px;
510
- color: #94a3b8;
569
+ color: var(--text-muted);
511
570
  }
512
571
 
513
572
  .detail-refines-code {
514
- font-family: "JetBrains Mono", "Monaco", monospace;
515
- color: #8be9fd;
573
+ font-family: var(--font-mono);
574
+ color: var(--color-accent);
516
575
  }
517
576
 
518
577
  /* ─── Not available fallback ────────────────────────────────────────────── */
519
578
 
520
579
  .detail-not-available {
521
580
  font-size: 12px;
522
- color: #64748b;
581
+ color: var(--text-dim);
523
582
  font-style: italic;
524
583
  padding: 8px 0;
525
584
  }