@likec4/diagram 1.2.2 → 1.4.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 (69) hide show
  1. package/dist/LikeC4Diagram.d.ts +1 -1
  2. package/dist/LikeC4Diagram.props.d.ts +27 -4
  3. package/dist/index.mjs +1543 -1346
  4. package/dist/state/DiagramContext.d.ts +2353 -264
  5. package/dist/state/diagramStore.d.ts +2360 -268
  6. package/dist/state/index.d.ts +0 -1
  7. package/dist/state/useDiagramStore.d.ts +3 -2534
  8. package/dist/state/useNavigationHistory.d.ts +5 -0
  9. package/dist/style.css +194 -131
  10. package/dist/theme.css.d.ts +5 -1
  11. package/dist/ui/BackwardForwardPanel.css.d.ts +1 -0
  12. package/dist/ui/BackwardForwardPanel.d.ts +1 -0
  13. package/dist/ui/DiagramTitlePanel.css.d.ts +1 -1
  14. package/dist/xyflow/XYFlow.d.ts +2 -1
  15. package/dist/xyflow/XYFlowEvents.d.ts +4 -4
  16. package/dist/xyflow/XYFlowInner.d.ts +2 -1
  17. package/dist/xyflow/const.d.ts +1 -1
  18. package/dist/xyflow/diagram-to-xyflow.d.ts +1 -1
  19. package/dist/xyflow/edges/RelationshipEdge.d.ts +4 -5
  20. package/dist/xyflow/edges/utils.d.ts +4 -2
  21. package/dist/xyflow/hooks/useXYFlow.d.ts +9 -9
  22. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +3 -1
  23. package/dist/xyflow/nodes/element/ElementNode.d.ts +1 -1
  24. package/dist/xyflow/nodes/element/element.css.d.ts +1 -0
  25. package/dist/xyflow/nodes/element/index.d.ts +1 -1
  26. package/dist/xyflow/types.d.ts +3 -3
  27. package/dist/xyflow/utils.d.ts +3 -0
  28. package/package.json +18 -17
  29. package/src/LikeC4Diagram.css.ts +15 -5
  30. package/src/LikeC4Diagram.props.ts +33 -5
  31. package/src/LikeC4Diagram.tsx +103 -32
  32. package/src/globals.css.ts +1 -2
  33. package/src/mantine/theme.ts +1 -0
  34. package/src/state/DiagramContext.tsx +3 -4
  35. package/src/state/diagramStore.ts +177 -103
  36. package/src/state/index.ts +0 -1
  37. package/src/state/useDiagramStore.ts +6 -13
  38. package/src/state/useNavigationHistory.ts +39 -0
  39. package/src/theme.css.ts +5 -1
  40. package/src/ui/BackwardForwardPanel.css.ts +22 -0
  41. package/src/ui/BackwardForwardPanel.tsx +59 -0
  42. package/src/ui/DiagramTitlePanel.css.ts +11 -5
  43. package/src/ui/DiagramTitlePanel.tsx +108 -96
  44. package/src/ui/DynamicViewWalkthrough.css.ts +3 -2
  45. package/src/ui/DynamicViewWalkthrough.tsx +36 -17
  46. package/src/ui/OptionsPanel.tsx +28 -19
  47. package/src/ui/options/NodeOptions.tsx +16 -19
  48. package/src/xyflow/FitviewOnDiagramChange.tsx +15 -23
  49. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +3 -6
  50. package/src/xyflow/SyncWithDiagram.tsx +21 -2
  51. package/src/xyflow/XYFlow.tsx +20 -23
  52. package/src/xyflow/XYFlowEvents.tsx +26 -8
  53. package/src/xyflow/XYFlowInner.tsx +10 -6
  54. package/src/xyflow/const.ts +1 -1
  55. package/src/xyflow/diagram-to-xyflow.ts +4 -41
  56. package/src/xyflow/edges/RelationshipEdge.tsx +160 -111
  57. package/src/xyflow/edges/edges.css.ts +41 -26
  58. package/src/xyflow/edges/utils.ts +5 -2
  59. package/src/xyflow/hooks/useLayoutConstraints.ts +19 -4
  60. package/src/xyflow/nodes/compound/CompoundNode.css.ts +45 -37
  61. package/src/xyflow/nodes/compound/CompoundNode.tsx +36 -26
  62. package/src/xyflow/nodes/element/ElementNode.tsx +27 -14
  63. package/src/xyflow/nodes/element/element.css.ts +31 -18
  64. package/src/xyflow/nodes/element/index.ts +1 -1
  65. package/src/xyflow/nodes/shared/NavigateToBtn.tsx +7 -3
  66. package/src/xyflow/types.ts +5 -2
  67. package/src/xyflow/utils.ts +48 -0
  68. package/dist/ui/index.d.ts +0 -2
  69. package/src/ui/index.ts +0 -3
@@ -0,0 +1,5 @@
1
+ export declare function useNavigationHistory(): {
2
+ hasBack: boolean;
3
+ hasForward: boolean;
4
+ ops: import('@mantine/hooks').UseStateHistoryHandlers<import('@likec4/core').ViewID>;
5
+ };
package/dist/style.css CHANGED
@@ -605,7 +605,6 @@ svg.react-flow__connectionline {
605
605
  --likec4-font-family: var(--likec4-default-font-family,'ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"');
606
606
  --likec4-background-color: var(--mantine-color-body);
607
607
  --likec4-background-pattern-color: var(--mantine-color-dimmed);
608
- --likec4-filter-dimmed: brightness(.6) grayscale(.8) opacity(.5) blur(1px);
609
608
  --likec4-compound-font-family: var(--likec4-font-family);
610
609
  --likec4-compound-title-color: var(--likec4-element-loContrast);
611
610
  --likec4-element-font-family: var(--likec4-font-family);
@@ -1268,9 +1267,6 @@ svg.react-flow__connectionline {
1268
1267
  --xy-background-color: var(--likec4-background-color);
1269
1268
  --xy-background-pattern-color: var(--likec4-background-pattern-color);
1270
1269
  }
1271
- .react-flow._2h8g8h1 .react-flow__viewport {
1272
- backface-visibility: hidden;
1273
- }
1274
1270
  .react-flow._2h8g8h1._2h8g8h3 {
1275
1271
  --likec4-background-color: transparent !important;
1276
1272
  --xy-background-color: transparent !important;
@@ -1278,6 +1274,11 @@ svg.react-flow__connectionline {
1278
1274
  }
1279
1275
  :where(._2h8g8h4, ._2h8g8h3) .react-flow__attribution {
1280
1276
  display: none;
1277
+ }
1278
+ @supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {
1279
+ ._2h8g8h1 {
1280
+ --likec4-safari-animation-hook: ;
1281
+ }
1281
1282
  }@keyframes bexn7q6 {
1282
1283
  from {
1283
1284
  stroke-dashoffset: 36;
@@ -1294,10 +1295,6 @@ svg.react-flow__connectionline {
1294
1295
  --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 35%);
1295
1296
  --xy-edge-stroke-width: 2.2px;
1296
1297
  }
1297
- svg:has(.bexn7q2) {
1298
- filter: var(--likec4-filter-dimmed);
1299
- transition: filter 800ms ease-out;
1300
- }
1301
1298
  :where([data-mantine-color-scheme="dark"]) .bexn7q1 {
1302
1299
  --bexn7q0: white;
1303
1300
  --xy-edge-label-color: var(--likec4-relation-labelColor);
@@ -1317,6 +1314,13 @@ svg:has(.bexn7q2) {
1317
1314
  .react-flow__edges > svg {
1318
1315
  mix-blend-mode: screen;
1319
1316
  }
1317
+ .react-flow__edges > svg:has(.bexn7q2) {
1318
+ opacity: 0.8;
1319
+ transition: opacity 600ms ease-in-out, filter 600ms ease-in-out;
1320
+ transition-delay: 200ms;
1321
+ filter: grayscale(0.85) var(--likec4-safari-animation-hook, blur(1px));
1322
+ will-change: opacity, filter;
1323
+ }
1320
1324
  .bexn7q3 {
1321
1325
  stroke-width: var(--xy-edge-stroke-width);
1322
1326
  stroke-opacity: 0.08;
@@ -1331,7 +1335,6 @@ svg:has(.bexn7q2) {
1331
1335
  .bexn7q4 {
1332
1336
  fill: var(--xy-edge-stroke);
1333
1337
  stroke: var(--xy-edge-stroke);
1334
- pointer-events: none;
1335
1338
  }
1336
1339
  .bexn7q5 {
1337
1340
  fill: var(--xy-edge-stroke);
@@ -1339,33 +1342,46 @@ svg:has(.bexn7q2) {
1339
1342
  fill-opacity: 0.75;
1340
1343
  stroke-width: 1;
1341
1344
  cursor: grab;
1342
- pointer-events: visible;
1345
+ pointer-events: auto;
1346
+ visibility: hidden;
1343
1347
  }
1344
- :where(.react-flow__edge.selected, [data-edge-active='true'], [data-edge-hovered='true']) .bexn7q5 {
1345
- transition: all 150ms ease-out;
1348
+ .bexn7q5:hover {
1349
+ stroke: var(--mantine-primary-color-filled-hover);
1350
+ stroke-width: 9;
1351
+ transition: stroke 100ms ease-out, stroke-width 100ms ease-out;
1352
+ }
1353
+ :where(.react-flow__edge.selected, [data-edge-hovered='true']) .bexn7q5 {
1354
+ visibility: visible;
1355
+ transition: fill-opacity 150ms ease-out, stroke 150ms ease-out, stroke-width 150ms ease-out;
1356
+ transition-delay: 50ms;
1346
1357
  fill-opacity: 1;
1347
- stroke-width: 3;
1358
+ stroke-width: 5;
1348
1359
  }
1349
1360
  .bexn7q7 {
1350
1361
  animation-duration: 800ms;
1351
1362
  animation-iteration-count: infinite;
1352
1363
  animation-timing-function: linear;
1364
+ animation-name: bexn7q6;
1365
+ animation-play-state: paused;
1353
1366
  }
1354
1367
  :where([data-edge-hovered='true']) .bexn7q7 {
1355
- animation-name: bexn7q6;
1368
+ animation-play-state: running;
1356
1369
  animation-delay: 350ms;
1357
- transition: all 130ms ease-out;
1370
+ transition: stroke 130ms ease-out,stroke-width 130ms ease-out;
1358
1371
  }
1359
1372
  :where(.react-flow__edge.selected, [data-edge-active='true']) .bexn7q7 {
1360
- animation-name: bexn7q6;
1373
+ animation-play-state: running;
1361
1374
  animation-delay: 0ms;
1362
- transition: all 130ms ease-out;
1375
+ transition: stroke 130ms ease-out,stroke-width 130ms ease-out;
1363
1376
  }
1364
1377
  :where([data-edge-dir='back']) .bexn7q7 {
1365
1378
  animation-direction: reverse;
1366
1379
  }
1380
+ .bexn7q2 .bexn7q7 {
1381
+ animation-play-state: paused;
1382
+ }
1367
1383
  .bexn7qb {
1368
- --bexn7qa: translate(var(--bexn7q8, 50%), var(--bexn7q9, 50%));
1384
+ --bexn7qa: translate(var(--bexn7q8, -50%), var(--bexn7q9, -50%));
1369
1385
  top: 0;
1370
1386
  left: 0;
1371
1387
  font-family: var(--likec4-font-family);
@@ -1384,8 +1400,11 @@ svg:has(.bexn7q2) {
1384
1400
  transform: var(--bexn7qa) scale(1.1);
1385
1401
  }
1386
1402
  .bexn7qb:is(.bexn7q2) {
1387
- transition: filter 800ms ease-out;
1388
- filter: var(--likec4-filter-dimmed);
1403
+ opacity: 0.6;
1404
+ transition: opacity 600ms ease-in-out, filter 600ms ease-in-out;
1405
+ transition-delay: 200ms;
1406
+ filter: grayscale(0.85) var(--likec4-safari-animation-hook, blur(1px));
1407
+ will-change: opacity, filter;
1389
1408
  }
1390
1409
  .bexn7qc {
1391
1410
  position: absolute;
@@ -1412,7 +1431,7 @@ svg:has(.bexn7q2) {
1412
1431
  text-align: left;
1413
1432
  font-size: calc(0.78125rem * var(--mantine-scale));
1414
1433
  line-height: 1.2;
1415
- }@keyframes lbtzdo8 {
1434
+ }@keyframes lbtzdo9 {
1416
1435
  from {
1417
1436
  opacity: 0.6;
1418
1437
  }
@@ -1427,46 +1446,59 @@ svg:has(.bexn7q2) {
1427
1446
  padding: 0;
1428
1447
  margin: 0;
1429
1448
  }
1430
- .lbtzdo1 {
1431
- filter: var(--likec4-filter-dimmed);
1432
- transition: filter 800ms ease-out;
1449
+ .react-flow__node-compound:has(.lbtzdo1) {
1450
+ opacity: 0.25;
1451
+ transition: opacity 600ms ease-in-out, filter 600ms ease-in-out;
1452
+ transition-delay: 200ms;
1453
+ filter: grayscale(0.85) var(--likec4-safari-animation-hook, blur(1px));
1454
+ will-change: opacity, filter;
1433
1455
  }
1434
- .lbtzdo3 {
1456
+ .lbtzdo4 {
1435
1457
  width: 100%;
1436
1458
  height: 100%;
1437
1459
  position: relative;
1438
1460
  border-radius: 6px;
1439
1461
  box-shadow: 0 4px 10px 0.5px rgba(0,0,0,0.1) , 0 2px 2px -1px rgba(0,0,0,0.4);
1440
1462
  padding: 8px;
1441
- background: var(--likec4-element-fill);
1442
1463
  transition: all 200ms ease-out;
1443
1464
  }
1444
- :where(.react-flow__node.selected) .lbtzdo3 {
1465
+ .lbtzdo4:before {
1466
+ content: " ";
1467
+ position: absolute;
1468
+ top: 0;
1469
+ left: 0;
1470
+ width: 100%;
1471
+ height: 100%;
1472
+ border-radius: 6px;
1473
+ pointer-events: none;
1474
+ transition: background 175ms ease-out, opacity 175ms ease-out;
1475
+ background: var(--likec4-element-fill);
1476
+ background-clip: padding-box;
1477
+ }
1478
+ :where(.react-flow__node.selected) .lbtzdo4 {
1445
1479
  box-shadow: none;
1446
1480
  }
1447
- :where(.react-flow__node:focus-visible) .lbtzdo3 {
1481
+ :where(.react-flow__node:focus-visible) .lbtzdo4 {
1448
1482
  transition-duration: 0ms;
1449
1483
  outline: 3px solid var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
1450
1484
  outline-offset: calc(0.09375rem * var(--mantine-scale));
1451
1485
  }
1452
1486
  .lbtzdo6 {
1453
- --lbtzdo4: calc(var(--lbtzdo2, 80%) - var(--lbtzdo5));
1454
- --lbtzdo5: 0%;
1487
+ --lbtzdo5: 0;
1455
1488
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1456
1489
  border-style: dashed;
1457
1490
  border-width: 3px;
1458
1491
  padding: 6px;
1459
- border-color: color-mix(in srgb , var(--likec4-element-stroke), transparent min(var(--lbtzdo4), 30%));
1460
- background: color-mix(in srgb , var(--likec4-element-fill), transparent var(--lbtzdo4));
1492
+ box-shadow: none;
1493
+ border-color: color-mix(in srgb , var(--likec4-element-stroke), transparent var(--lbtzdo3, 10%));
1461
1494
  background-clip: padding-box;
1462
1495
  }
1463
- :where(.react-flow__node.selected) .lbtzdo6 {
1464
- --lbtzdo5: 5%;
1465
- transition-delay: 50ms;
1496
+ .lbtzdo6:before {
1497
+ transition-delay: 200ms;
1498
+ opacity: calc(var(--lbtzdo2, 1) + var(--lbtzdo5));
1466
1499
  }
1467
1500
  :where([data-hovered]) .lbtzdo6 {
1468
- --lbtzdo5: 15%;
1469
- transition-delay: 175ms;
1501
+ --lbtzdo5: .07;
1470
1502
  }
1471
1503
  .lbtzdo7 {
1472
1504
  font-family: var(--likec4-compound-font-family);
@@ -1483,7 +1515,7 @@ svg:has(.bexn7q2) {
1483
1515
  color: var(--_compound-title-color,var(--likec4-compound-title-color));
1484
1516
  padding-left: 12px;
1485
1517
  }
1486
- :where([data-likec4-navigable='true']) .lbtzdo7 {
1518
+ .lbtzdo8 {
1487
1519
  padding-left: 26px;
1488
1520
  }
1489
1521
  :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) {
@@ -1492,9 +1524,9 @@ svg:has(.bexn7q2) {
1492
1524
  :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdo7 {
1493
1525
  opacity: 1;
1494
1526
  }
1495
- .lbtzdob {
1496
- --lbtzdo9: var(--likec4-element-loContrast);
1497
- --lbtzdoa: 6;
1527
+ .lbtzdoc {
1528
+ --lbtzdoa: var(--likec4-element-loContrast);
1529
+ --lbtzdob: 6;
1498
1530
  position: absolute;
1499
1531
  top: 0;
1500
1532
  left: 0;
@@ -1504,33 +1536,33 @@ svg:has(.bexn7q2) {
1504
1536
  overflow: visible;
1505
1537
  visibility: hidden;
1506
1538
  }
1507
- :where(.react-flow__node.selected:not(:focus-visible)) .lbtzdob {
1539
+ :where(.react-flow__node.selected:not(:focus-visible)) .lbtzdoc {
1508
1540
  visibility: visible;
1509
1541
  }
1510
- :where(.react-flow__node:focus-within:not(.selected)) .lbtzdob {
1511
- --lbtzdo9: color-mix(in srgb, var(--likec4-element-stroke) 30%, var(--likec4-element-loContrast));
1512
- --lbtzdoa: 8;
1542
+ :where(.react-flow__node:focus-within:not(.selected)) .lbtzdoc {
1543
+ --lbtzdoa: color-mix(in srgb, var(--likec4-element-stroke) 30%, var(--likec4-element-loContrast));
1544
+ --lbtzdob: 8;
1513
1545
  }
1514
- :where([data-mantine-color-scheme='light']) .lbtzdob {
1515
- --lbtzdo9: color-mix(in srgb, var(--likec4-element-stroke) 80%, #000);
1546
+ :where([data-mantine-color-scheme='light']) .lbtzdoc {
1547
+ --lbtzdoa: color-mix(in srgb, var(--likec4-element-stroke) 80%, #000);
1516
1548
  }
1517
- .lbtzdob rect {
1518
- stroke: var(--lbtzdo9);
1549
+ .lbtzdoc rect {
1550
+ stroke: var(--lbtzdoa);
1519
1551
  transform-origin: center center;
1520
- stroke-width: var(--lbtzdoa);
1552
+ stroke-width: var(--lbtzdob);
1521
1553
  animation-duration: 800ms;
1522
- animation-name: lbtzdo8;
1554
+ animation-name: lbtzdo9;
1523
1555
  animation-iteration-count: infinite;
1524
1556
  animation-direction: alternate;
1525
1557
  fill: none;
1526
1558
  }
1527
1559
  .lbtzdo0 {
1528
- --lbtzdoc: var(--likec4-element-loContrast);
1560
+ --lbtzdod: var(--likec4-element-loContrast);
1529
1561
  }
1530
1562
  :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) {
1531
- --lbtzdoc: var(--likec4-element-stroke);
1563
+ --lbtzdod: var(--likec4-element-stroke);
1532
1564
  }
1533
- .lbtzdod {
1565
+ .lbtzdoe {
1534
1566
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1535
1567
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
1536
1568
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
@@ -1539,41 +1571,41 @@ svg:has(.bexn7q2) {
1539
1571
  left: 3px;
1540
1572
  top: 7px;
1541
1573
  cursor: pointer;
1542
- color: var(--_compound-title-color,var(--lbtzdoc));
1574
+ color: var(--_compound-title-color,var(--lbtzdod));
1543
1575
  transform-origin: 90% 70%;
1544
1576
  opacity: 0.75;
1545
1577
  transition: all 150ms ease-out;
1546
1578
  transition-delay: 0ms;
1547
1579
  background-color: var(--ai-bg);
1548
1580
  }
1549
- .lbtzdod:hover {
1581
+ .lbtzdoe:hover {
1550
1582
  box-shadow: var(--mantine-shadow-lg);
1551
- transform: scale(1.466);
1583
+ transform: scale(1.42);
1552
1584
  opacity: 1;
1553
1585
  transition-delay: 0;
1554
1586
  }
1555
- .lbtzdod:active {
1587
+ .lbtzdoe:active {
1556
1588
  transform: scale(1.1);
1557
1589
  opacity: 1;
1558
1590
  transition-delay: 0;
1559
1591
  }
1560
- :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdod {
1592
+ :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdoe {
1561
1593
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 50%);
1562
1594
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 20%);
1563
1595
  opacity: 0.85;
1564
1596
  }
1565
- :where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdod:not(:hover) {
1597
+ :where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdoe:not(:hover) {
1566
1598
  --ai-bg: var(--ai-bg-hover);
1567
1599
  box-shadow: var(--mantine-shadow-lg);
1568
1600
  transform: scale(1.223);
1569
1601
  opacity: 1;
1570
1602
  transition-delay: 250ms;
1571
1603
  }
1572
- .lbtzdod svg.icon {
1604
+ .lbtzdoe svg.icon {
1573
1605
  width: 70%;
1574
1606
  height: 70%;
1575
1607
  stroke-width: 1.5;
1576
- }@keyframes _1b6tkn4 {
1608
+ }@keyframes _1b6tkn5 {
1577
1609
  from {
1578
1610
  opacity: 0.6;
1579
1611
  }
@@ -1583,49 +1615,65 @@ svg:has(.bexn7q2) {
1583
1615
  }
1584
1616
  ._1b6tkn2 {
1585
1617
  --_1b6tkn0: color-mix(in srgb, var(--likec4-element-stroke) 90%, var(--likec4-element-fill));
1586
- position: relative;
1587
1618
  width: 100%;
1588
1619
  height: 100%;
1589
1620
  padding: 0;
1590
1621
  margin: 0;
1591
- backface-visibility: hidden;
1622
+ display: flex;
1623
+ align-items: stretch;
1624
+ }
1625
+ :where(.react-flow__node.selected) ._1b6tkn2 {
1626
+ will-change: transform;
1627
+ }
1628
+ ._1b6tkn2[data-hovered="true"] {
1629
+ will-change: transform;
1630
+ }
1631
+ ._1b6tkn3 {
1632
+ will-change: transform;
1592
1633
  }
1593
- .react-flow__node:has(._1b6tkn3) {
1594
- filter: var(--likec4-filter-dimmed);
1595
- transition: filter 800ms ease-out;
1634
+ .react-flow__node-element:has(._1b6tkn4) {
1635
+ opacity: 0.25;
1636
+ transition: opacity 600ms ease-in-out, filter 600ms ease-in-out;
1637
+ transition-delay: 200ms;
1638
+ filter: grayscale(0.85) var(--likec4-safari-animation-hook, blur(2px));
1639
+ will-change: opacity, filter;
1596
1640
  }
1597
- ._1b6tkn5 {
1641
+ ._1b6tkn6 {
1598
1642
  stroke: var(--likec4-element-loContrast);
1599
1643
  transform-origin: center center;
1600
1644
  stroke-width: 6;
1601
1645
  animation-duration: 800ms;
1602
- animation-name: _1b6tkn4;
1603
1646
  animation-iteration-count: infinite;
1604
1647
  animation-direction: alternate;
1648
+ opacity: 0.6;
1605
1649
  visibility: hidden;
1606
1650
  }
1607
- :where(.react-flow__node.selected) ._1b6tkn5 {
1651
+ :where(.react-flow__node.selected) ._1b6tkn6 {
1608
1652
  visibility: visible;
1653
+ animation-name: var(--likec4-safari-animation-hook, _1b6tkn5);
1609
1654
  }
1610
- :where(.react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkn5 {
1611
- animation-name: none;
1655
+ :where(.react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkn6 {
1612
1656
  stroke-width: 10;
1613
1657
  stroke: var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
1614
1658
  visibility: visible;
1615
1659
  }
1616
- :where([data-likec4-shape="queue"], [data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tkn5 {
1660
+ :where([data-likec4-shape="queue"], [data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tkn6 {
1617
1661
  stroke-width: 10;
1618
1662
  }
1619
- ._1b6tkn6 {
1620
- fill: var(--likec4-element-fill);
1663
+ ._1b6tkn4 ._1b6tkn6 {
1664
+ visibility: hidden;
1665
+ display: none;
1621
1666
  }
1622
1667
  ._1b6tkn7 {
1623
- fill: var(--likec4-element-stroke);
1668
+ fill: var(--likec4-element-fill);
1624
1669
  }
1625
1670
  ._1b6tkn8 {
1626
- fill: var(--_1b6tkn0);
1671
+ fill: var(--likec4-element-stroke);
1627
1672
  }
1628
1673
  ._1b6tkn9 {
1674
+ fill: var(--_1b6tkn0);
1675
+ }
1676
+ ._1b6tkna {
1629
1677
  flex: 0 0 auto;
1630
1678
  font-family: var(--likec4-element-font-family);
1631
1679
  font-optical-sizing: auto;
@@ -1637,7 +1685,7 @@ svg:has(.bexn7q2) {
1637
1685
  text-wrap: balance;
1638
1686
  color: var(--likec4-element-hiContrast);
1639
1687
  }
1640
- ._1b6tkna {
1688
+ ._1b6tknb {
1641
1689
  flex: 0 1 auto;
1642
1690
  font-family: var(--likec4-element-font-family);
1643
1691
  font-optical-sizing: auto;
@@ -1652,7 +1700,7 @@ svg:has(.bexn7q2) {
1652
1700
  text-overflow: ellipsis;
1653
1701
  overflow: hidden;
1654
1702
  }
1655
- ._1b6tknb {
1703
+ ._1b6tknc {
1656
1704
  flex: 0 0 auto;
1657
1705
  font-family: var(--likec4-element-font-family);
1658
1706
  font-optical-sizing: auto;
@@ -1665,14 +1713,12 @@ svg:has(.bexn7q2) {
1665
1713
  opacity: 0.92;
1666
1714
  color: var(--likec4-element-loContrast);
1667
1715
  }
1668
- ._1b6tkn2:hover ._1b6tknb {
1716
+ ._1b6tkn2:hover ._1b6tknc {
1669
1717
  opacity: 1;
1670
1718
  }
1671
- ._1b6tknc {
1719
+ ._1b6tknd {
1672
1720
  --_1b6tkn1: calc(1.5rem * var(--mantine-scale));
1673
- position: relative;
1674
- width: 100%;
1675
- height: 100%;
1721
+ flex: 1;
1676
1722
  padding: var(--_1b6tkn1);
1677
1723
  display: flex;
1678
1724
  flex-direction: column;
@@ -1681,24 +1727,24 @@ svg:has(.bexn7q2) {
1681
1727
  overflow: hidden;
1682
1728
  gap: calc(0.5rem * var(--mantine-scale));
1683
1729
  }
1684
- ._1b6tknc:has(._1b6tkna):has(._1b6tknb) {
1730
+ ._1b6tknd:has(._1b6tknb):has(._1b6tknc) {
1685
1731
  gap: calc(0.375rem * var(--mantine-scale));
1686
1732
  }
1687
- :where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) ._1b6tknc {
1733
+ :where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) ._1b6tknd {
1688
1734
  padding-left: calc(2.5rem * var(--mantine-scale));
1689
1735
  padding-right: calc(1.25rem * var(--mantine-scale));
1690
1736
  }
1691
- :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tknc {
1737
+ :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tknd {
1692
1738
  padding-top: calc(2.125rem * var(--mantine-scale));
1693
1739
  }
1694
- :where([data-likec4-shape="browser"]) ._1b6tknc {
1740
+ :where([data-likec4-shape="browser"]) ._1b6tknd {
1695
1741
  padding-top: calc(2rem * var(--mantine-scale));
1696
1742
  padding-bottom: calc(1.75rem * var(--mantine-scale));
1697
1743
  }
1698
- ._1b6tkne {
1699
- --_1b6tknd: 30px;
1700
- flex: 0 1 var(--_1b6tknd);
1701
- max-height: var(--_1b6tknd);
1744
+ ._1b6tknf {
1745
+ --_1b6tkne: 30px;
1746
+ flex: 0 1 var(--_1b6tkne);
1747
+ max-height: var(--_1b6tkne);
1702
1748
  margin-top: -8px;
1703
1749
  position: relative;
1704
1750
  user-select: none;
@@ -1706,17 +1752,17 @@ svg:has(.bexn7q2) {
1706
1752
  overflow: visible;
1707
1753
  mix-blend-mode: hard-light;
1708
1754
  }
1709
- ._1b6tkne img {
1755
+ ._1b6tknf img {
1710
1756
  position: absolute;
1711
1757
  left: 0;
1712
1758
  bottom: 0;
1713
1759
  width: 100%;
1714
1760
  height: auto;
1715
1761
  object-fit: contain;
1716
- max-height: calc(var(--_1b6tknd) + 16px);
1762
+ max-height: calc(var(--_1b6tkne) + 16px);
1717
1763
  }
1718
- ._1b6tknh {
1719
- --_1b6tknf:
1764
+ ._1b6tkni {
1765
+ --_1b6tkng:
1720
1766
  drop-shadow(0 2px 1px rgba(0, 0, 0, 0.21))
1721
1767
  drop-shadow(0 1px 1px color-mix(in srgb, var(--likec4-element-stroke) 40%, transparent))
1722
1768
  drop-shadow(0 5px 3px rgba(0, 0, 0, 0.1))
@@ -1728,14 +1774,15 @@ svg:has(.bexn7q2) {
1728
1774
  fill: var(--likec4-element-fill);
1729
1775
  stroke: var(--likec4-element-stroke);
1730
1776
  overflow: visible;
1731
- filter: var(--_1b6tkng, var(--_1b6tknf));
1777
+ filter: var(--_1b6tknh, var(--_1b6tkng));
1732
1778
  transition: filter 300ms ease-out;
1733
1779
  transition-delay: 0ms;
1780
+ z-index: -1;
1734
1781
  }
1735
- :where(.react-flow__node.selected, .react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tknh {
1782
+ :where(.react-flow__node.selected, .react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkni {
1736
1783
  filter: none;
1737
1784
  }
1738
- ._1b6tkni {
1785
+ ._1b6tknj {
1739
1786
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1740
1787
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
1741
1788
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
@@ -1753,28 +1800,28 @@ svg:has(.bexn7q2) {
1753
1800
  transition-delay: 0ms;
1754
1801
  background-color: var(--ai-bg);
1755
1802
  }
1756
- ._1b6tkni:hover {
1803
+ ._1b6tknj:hover {
1757
1804
  box-shadow: var(--mantine-shadow-lg);
1758
1805
  transform: translate(-50%, 0) scale(1.35);
1759
1806
  opacity: 1;
1760
1807
  transition-delay: 0;
1761
1808
  }
1762
- ._1b6tkni:active {
1809
+ ._1b6tknj:active {
1763
1810
  transform: translate(-50%, 0) scale(1.02);
1764
1811
  opacity: 1;
1765
1812
  transition-delay: 0;
1766
1813
  }
1767
- :where([data-likec4-shape='browser']) ._1b6tkni {
1814
+ :where([data-likec4-shape='browser']) ._1b6tknj {
1768
1815
  bottom: 3px;
1769
1816
  }
1770
- :where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tkni:not(:hover) {
1817
+ :where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tknj:not(:hover) {
1771
1818
  --ai-bg: var(--ai-bg-hover);
1772
1819
  box-shadow: var(--mantine-shadow-lg);
1773
1820
  transform: translate(-50%, 0) scale(1.185);
1774
1821
  opacity: 1;
1775
1822
  transition-delay: 250ms;
1776
1823
  }
1777
- ._1b6tkni svg.icon {
1824
+ ._1b6tknj svg.icon {
1778
1825
  width: 65%;
1779
1826
  height: 65%;
1780
1827
  stroke-width: 1.5;
@@ -1829,6 +1876,46 @@ svg:has(.bexn7q2) {
1829
1876
  }
1830
1877
  ._4ysv0o2 {
1831
1878
  text-align: left;
1879
+ }._19mimxc0 {
1880
+ top: var(--likec4-navigation-panel-top, 1rem);
1881
+ left: var(--likec4-navigation-panel-left, 1rem);
1882
+ margin: 0;
1883
+ }
1884
+ ._19mimxc0 .mantine-ActionIcon-root {
1885
+ --ai-size: var(--ai-size-md);
1886
+ }
1887
+ @media (min-width: 62em) {
1888
+ ._19mimxc0 .mantine-ActionIcon-root {
1889
+ --ai-size: var(--ai-size-lg);
1890
+ }
1891
+ }.hbkbtj0 {
1892
+ bottom: 0;
1893
+ left: 0;
1894
+ padding: 8px;
1895
+ margin: 0;
1896
+ }
1897
+ .hbkbtj1 {
1898
+ cursor: default;
1899
+ min-width: 150px;
1900
+ max-width: calc(100vw - 16px);
1901
+ background-color: color-mix(in srgb, var(--mantine-color-body), transparent 20%);
1902
+ -webkit-backdrop-filter: var(--likec4-safari-animation-hook, blur(8px));
1903
+ backdrop-filter: var(--likec4-safari-animation-hook, blur(8px));
1904
+ }
1905
+ :where([data-mantine-color-scheme='dark']) .hbkbtj1 {
1906
+ background-color: color-mix(in srgb, var(--mantine-color-dark-6), transparent 20%);
1907
+ }
1908
+ .hbkbtj3 {
1909
+ white-space-collapse: preserve-breaks;
1910
+ color: var(--mantine-color-gray-7);
1911
+ }
1912
+ :where([data-mantine-color-scheme="dark"]) .hbkbtj3 {
1913
+ color: var(--mantine-color-gray-5);
1914
+ }
1915
+ @media (min-width: 62em) {
1916
+ .hbkbtj1 {
1917
+ max-width: 45vw;
1918
+ }
1832
1919
  }._2jkb2y0 {
1833
1920
  position: absolute;
1834
1921
  bottom: 0.5rem;
@@ -1859,36 +1946,12 @@ svg:has(.bexn7q2) {
1859
1946
  [data-mantine-color-scheme="light"] ._2jkb2y3 {
1860
1947
  --_2jkb2y2: 15%;
1861
1948
  }
1862
- ._2jkb2y3 .tabler-icon {
1863
- width: 80%;
1949
+ :where(._2jkb2y1, ._2jkb2y3) .tabler-icon {
1950
+ width: 0.85em;
1951
+ height: 0.85em;
1864
1952
  }._1lmzt1h0 {
1865
1953
  top: var(--likec4-options-panel-top, 1rem);
1866
1954
  right: var(--likec4-options-panel-right, 1rem);
1867
1955
  margin: 0;
1868
1956
  box-shadow: var(--mantine-shadow-xl);
1869
- }.hbkbtj0 {
1870
- bottom: 0;
1871
- left: 0;
1872
- padding: 8px;
1873
- margin: 0;
1874
- }
1875
- .hbkbtj1 {
1876
- cursor: default;
1877
- min-width: 100px;
1878
- max-width: calc(100vw - 16px);
1879
- background-color: color-mix(in srgb, var(--mantine-color-body), transparent 20%);
1880
- -webkit-backdrop-filter: blur(8px);
1881
- backdrop-filter: blur(8px);
1882
- }
1883
- .hbkbtj3 {
1884
- white-space-collapse: preserve-breaks;
1885
- color: var(--mantine-color-gray-7);
1886
- }
1887
- :where([data-mantine-color-scheme="dark"]) .hbkbtj3 {
1888
- color: var(--mantine-color-gray-5);
1889
- }
1890
- @media (min-width: 62em) {
1891
- .hbkbtj1 {
1892
- max-width: 45vw;
1893
- }
1894
1957
  }
@@ -1,8 +1,8 @@
1
1
  export declare const vars: {
2
+ safariAnimationHook: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
2
3
  default: {
3
4
  font: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
4
5
  };
5
- filterDimmed: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
6
6
  likec4: {
7
7
  font: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
8
8
  background: {
@@ -32,6 +32,10 @@ export declare const vars: {
32
32
  top: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
33
33
  right: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
34
34
  };
35
+ navigationPanel: {
36
+ top: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
37
+ left: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
38
+ };
35
39
  };
36
40
  export declare const xyvars: {
37
41
  background: {
@@ -0,0 +1 @@
1
+ export declare const panel: string;
@@ -0,0 +1 @@
1
+ export declare function BackwardForwardPanel(): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,4 @@
1
1
  export declare const container: string;
2
- export declare const paper: string;
2
+ export declare const card: string;
3
3
  export declare const title: string;
4
4
  export declare const description: string;