@pipelex/mthds-ui 0.18.0 → 0.20.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.
@@ -1279,353 +1279,6 @@ button.node-validation-badge {
1279
1279
  }
1280
1280
  }
1281
1281
 
1282
- /* ─── StuffViewer component styles ────────────────────────────────────────── */
1283
- /* StuffViewer is also exported standalone (used outside GraphViewer — e.g.
1284
- * docs pages, embedded previews). The theme tokens are normally applied to
1285
- * the GraphViewer container, but when this component is rendered on its own
1286
- * those tokens may not be set. The fallbacks below match the dark palette
1287
- * from `graphConfig.ts` (DARK_PALETTE_COLORS) so the component always
1288
- * renders with valid colors and fonts. */
1289
-
1290
- .stuff-viewer {
1291
- --sv-bg: var(--surface-page, #0a0a0a);
1292
- --sv-surface: var(--surface-panel, #111118);
1293
- --sv-surface-hover: var(--surface-elevated, rgba(255, 255, 255, 0.06));
1294
- --sv-border: var(--border-default, rgba(255, 255, 255, 0.1));
1295
- --sv-text: var(--text-default, #e2e8f0);
1296
- --sv-text-muted: var(--text-muted, #94a3b8);
1297
- --sv-accent: var(--color-accent, #8be9fd);
1298
- --sv-success: var(--color-success, #50fa7b);
1299
- --sv-success-bg: var(--color-success-bg, rgba(80, 250, 123, 0.15));
1300
- --sv-radius: 4px;
1301
- --sv-font-sans: var(
1302
- --font-sans,
1303
- "Inter",
1304
- -apple-system,
1305
- BlinkMacSystemFont,
1306
- "Segoe UI",
1307
- sans-serif
1308
- );
1309
- --sv-font-mono: var(--font-mono, "JetBrains Mono", "Monaco", "Menlo", monospace);
1310
-
1311
- font-family: var(--sv-font-sans);
1312
- color: var(--sv-text);
1313
- display: flex;
1314
- flex-direction: column;
1315
- height: 100%;
1316
- }
1317
-
1318
- /* ─── Header ─────────────────────────────────────────────────────────────── */
1319
-
1320
- .stuff-viewer-header {
1321
- display: flex;
1322
- flex-direction: column;
1323
- gap: 2px;
1324
- padding: 12px 16px 8px;
1325
- border-bottom: 1px solid var(--sv-border);
1326
- flex-shrink: 0;
1327
- }
1328
-
1329
- .stuff-viewer-title {
1330
- font-size: 14px;
1331
- font-weight: 600;
1332
- color: var(--sv-text);
1333
- margin: 0;
1334
- }
1335
-
1336
- .stuff-viewer-subtitle {
1337
- font-size: 12px;
1338
- color: var(--sv-text-muted);
1339
- margin: 0;
1340
- }
1341
-
1342
- /* ─── Toolbar: tabs + action buttons ─────────────────────────────────────── */
1343
-
1344
- .stuff-viewer-toolbar {
1345
- display: flex;
1346
- justify-content: space-between;
1347
- align-items: center;
1348
- padding: 8px 16px;
1349
- gap: 8px;
1350
- flex-shrink: 0;
1351
- }
1352
-
1353
- .stuff-viewer-tabs {
1354
- display: flex;
1355
- gap: 4px;
1356
- }
1357
-
1358
- .stuff-viewer-tab {
1359
- padding: 5px 10px;
1360
- border-radius: var(--sv-radius);
1361
- cursor: pointer;
1362
- font-size: 12px;
1363
- font-weight: 500;
1364
- background: var(--sv-surface-hover);
1365
- color: var(--sv-text-muted);
1366
- border: none;
1367
- transition:
1368
- background 0.15s,
1369
- color 0.15s;
1370
- }
1371
-
1372
- .stuff-viewer-tab:hover {
1373
- background: var(--sv-border);
1374
- color: var(--sv-text);
1375
- }
1376
-
1377
- .stuff-viewer-tab--active {
1378
- background: var(--sv-accent);
1379
- color: var(--text-on-accent, #0e0e0e);
1380
- }
1381
-
1382
- /* ─── Action buttons ─────────────────────────────────────────────────────── */
1383
-
1384
- .stuff-viewer-actions {
1385
- display: flex;
1386
- gap: 4px;
1387
- }
1388
-
1389
- .stuff-viewer-action-btn {
1390
- display: flex;
1391
- align-items: center;
1392
- justify-content: center;
1393
- width: 28px;
1394
- height: 28px;
1395
- border-radius: var(--sv-radius);
1396
- cursor: pointer;
1397
- background: var(--sv-surface-hover);
1398
- color: var(--sv-text-muted);
1399
- border: none;
1400
- transition:
1401
- background 0.15s,
1402
- color 0.15s;
1403
- }
1404
-
1405
- .stuff-viewer-action-btn:hover {
1406
- background: var(--sv-border);
1407
- color: var(--sv-text);
1408
- }
1409
-
1410
- .stuff-viewer-action-btn--copied {
1411
- background: var(--sv-success-bg);
1412
- color: var(--sv-success);
1413
- }
1414
-
1415
- .stuff-viewer-action-btn svg {
1416
- width: 14px;
1417
- height: 14px;
1418
- fill: currentColor;
1419
- }
1420
-
1421
- /* ─── Content area ───────────────────────────────────────────────────────── */
1422
-
1423
- .stuff-viewer-content {
1424
- flex: 1;
1425
- overflow: auto;
1426
- padding: 12px 16px 16px;
1427
- min-height: 0;
1428
- }
1429
-
1430
- /* Pre-formatted text (JSON and Pretty tabs) */
1431
- .stuff-viewer-pre {
1432
- font-family: var(--sv-font-mono);
1433
- font-size: 11px;
1434
- line-height: 1.5;
1435
- white-space: pre-wrap;
1436
- word-wrap: break-word;
1437
- margin: 0;
1438
- color: var(--sv-text-muted);
1439
- }
1440
-
1441
- .stuff-viewer-pre--nowrap {
1442
- white-space: pre;
1443
- word-wrap: normal;
1444
- line-height: 1;
1445
- overflow-x: auto;
1446
- padding-right: 20px;
1447
- }
1448
-
1449
- /* HTML content */
1450
- .stuff-viewer-html {
1451
- font-family: var(--sv-font-sans);
1452
- font-size: 11px;
1453
- color: var(--sv-text-muted);
1454
- line-height: 1.5;
1455
- }
1456
-
1457
- .stuff-viewer-html table {
1458
- border-collapse: collapse;
1459
- width: 100%;
1460
- }
1461
-
1462
- .stuff-viewer-html th,
1463
- .stuff-viewer-html td {
1464
- border: 1px solid var(--sv-border);
1465
- padding: 8px 12px;
1466
- text-align: left;
1467
- }
1468
-
1469
- .stuff-viewer-html th {
1470
- background: var(--sv-surface-hover);
1471
- color: var(--sv-text);
1472
- font-weight: 600;
1473
- }
1474
-
1475
- .stuff-viewer-html tr:hover {
1476
- background: var(--sv-surface-hover);
1477
- }
1478
-
1479
- .stuff-viewer-html a {
1480
- color: var(--sv-accent);
1481
- text-decoration: none;
1482
- }
1483
-
1484
- .stuff-viewer-html a:hover {
1485
- text-decoration: underline;
1486
- }
1487
-
1488
- .stuff-viewer-html ul {
1489
- list-style: none;
1490
- padding-left: 0;
1491
- margin: 0;
1492
- }
1493
-
1494
- /* Native `Html` concept — rendered in a sandboxed iframe so the document's own
1495
- <style>/layout is faithful and isolated from the host. White backdrop because
1496
- these documents (invoices, quotes, reports) are authored for print/light. */
1497
- .stuff-viewer-html-frame {
1498
- width: 100%;
1499
- height: 100%;
1500
- min-height: 480px;
1501
- border: none;
1502
- border-radius: var(--sv-radius);
1503
- background: #fff;
1504
- }
1505
-
1506
- /* PDF embed */
1507
- .stuff-viewer-pdf {
1508
- min-height: 400px;
1509
- height: 100%;
1510
- }
1511
-
1512
- .stuff-viewer-pdf embed {
1513
- width: 100%;
1514
- height: 100%;
1515
- min-height: 500px;
1516
- border: none;
1517
- }
1518
-
1519
- /* Image content */
1520
- .stuff-viewer-image {
1521
- display: flex;
1522
- justify-content: center;
1523
- align-items: center;
1524
- min-height: 200px;
1525
- }
1526
-
1527
- .stuff-viewer-image img {
1528
- max-width: 100%;
1529
- max-height: 70vh;
1530
- object-fit: contain;
1531
- }
1532
-
1533
- /* Local file fallback (file:// URLs that can't render inline) */
1534
- .stuff-viewer-local-file {
1535
- display: flex;
1536
- align-items: center;
1537
- gap: 12px;
1538
- padding: 16px;
1539
- border-radius: 6px;
1540
- background: var(--sv-surface);
1541
- border: 1px solid var(--sv-border);
1542
- }
1543
-
1544
- /* Clickable variant — used when an open-externally action is bound (e.g. PDF
1545
- fallback in hosts that can't render <embed type="application/pdf">). */
1546
- button.stuff-viewer-local-file--button {
1547
- width: 100%;
1548
- text-align: left;
1549
- font: inherit;
1550
- color: inherit;
1551
- cursor: pointer;
1552
- transition:
1553
- background 0.15s ease,
1554
- border-color 0.15s ease;
1555
- }
1556
-
1557
- button.stuff-viewer-local-file--button:hover {
1558
- background: var(--sv-surface-hover, var(--sv-surface));
1559
- border-color: var(--sv-accent, var(--sv-border));
1560
- }
1561
-
1562
- button.stuff-viewer-local-file--button:focus-visible {
1563
- outline: 2px solid var(--sv-accent, var(--sv-border));
1564
- outline-offset: 2px;
1565
- }
1566
-
1567
- .stuff-viewer-local-file-icon {
1568
- flex-shrink: 0;
1569
- width: 32px;
1570
- height: 32px;
1571
- color: var(--sv-text-muted);
1572
- }
1573
-
1574
- .stuff-viewer-local-file-icon svg {
1575
- width: 100%;
1576
- height: 100%;
1577
- fill: currentColor;
1578
- }
1579
-
1580
- .stuff-viewer-local-file-info {
1581
- flex: 1;
1582
- min-width: 0;
1583
- }
1584
-
1585
- .stuff-viewer-local-file-name {
1586
- font-family: var(--sv-font-mono);
1587
- font-size: 12px;
1588
- color: var(--sv-text);
1589
- overflow: hidden;
1590
- text-overflow: ellipsis;
1591
- white-space: nowrap;
1592
- }
1593
-
1594
- .stuff-viewer-local-file-hint {
1595
- font-size: 11px;
1596
- color: var(--sv-text-muted);
1597
- margin-top: 2px;
1598
- }
1599
-
1600
- /* Placeholder for missing data */
1601
- .stuff-viewer-placeholder {
1602
- color: var(--sv-text-muted);
1603
- font-style: italic;
1604
- font-size: 13px;
1605
- }
1606
-
1607
- .stuff-viewer-error {
1608
- border: 1px solid var(--color-status-failed, #ff5555);
1609
- border-radius: 6px;
1610
- padding: 12px;
1611
- background: rgba(255, 85, 85, 0.08);
1612
- }
1613
-
1614
- .stuff-viewer-error-title {
1615
- color: var(--color-status-failed, #ff5555);
1616
- font-weight: 600;
1617
- font-size: 13px;
1618
- margin-bottom: 4px;
1619
- }
1620
-
1621
- .stuff-viewer-error-detail {
1622
- color: var(--sv-text-muted);
1623
- font-family: var(--font-mono, monospace);
1624
- font-size: 12px;
1625
- white-space: pre-wrap;
1626
- word-break: break-word;
1627
- }
1628
-
1629
1282
  /* ─── Detail Panel — sliding side panel for node inspection ─────────────── */
1630
1283
  /* Token-only — all colors come from the active theme palette on the */
1631
1284
  /* container. See `graphConfig.ts` for token definitions. */