@likec4/diagram 1.4.0 → 1.5.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 (83) hide show
  1. package/dist/LikeC4Diagram.css.d.ts +0 -1
  2. package/dist/LikeC4Diagram.props.d.ts +1 -1
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.mjs +1398 -1114
  5. package/dist/state/DiagramContext.d.ts +86 -4159
  6. package/dist/state/diagramStore.d.ts +88 -4162
  7. package/dist/state/hooks.d.ts +4 -0
  8. package/dist/state/index.d.ts +1 -2
  9. package/dist/style.css +182 -156
  10. package/dist/ui/options/EdgeOptions.d.ts +19 -0
  11. package/dist/ui/options/NodeOptions.d.ts +2 -2
  12. package/dist/xyflow/EdgeMarkers.d.ts +11 -0
  13. package/dist/xyflow/XYFlowEvents.d.ts +8 -5
  14. package/dist/xyflow/const.d.ts +3 -3
  15. package/dist/xyflow/diagram-to-xyflow.d.ts +1 -1
  16. package/dist/xyflow/edges/RelationshipEdge.d.ts +3 -2
  17. package/dist/xyflow/edges/edges.css.d.ts +1 -0
  18. package/dist/xyflow/edges/utils.d.ts +1 -0
  19. package/dist/xyflow/hooks/index.d.ts +3 -2
  20. package/dist/xyflow/hooks/useXYFlow.d.ts +13 -12
  21. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +1 -0
  22. package/dist/xyflow/nodes/element/ElementIcon.d.ts +1 -4
  23. package/dist/xyflow/nodes/element/element.css.d.ts +2 -1
  24. package/dist/xyflow/types.d.ts +2 -32
  25. package/package.json +19 -19
  26. package/src/LikeC4Diagram.css.ts +0 -8
  27. package/src/LikeC4Diagram.props.ts +2 -2
  28. package/src/LikeC4Diagram.tsx +14 -20
  29. package/src/globals.css.ts +10 -3
  30. package/src/index.ts +1 -1
  31. package/src/mantine.css.ts +2 -2
  32. package/src/state/DiagramContext.tsx +44 -13
  33. package/src/state/diagramStore.ts +64 -52
  34. package/src/state/hooks.ts +5 -0
  35. package/src/state/index.ts +1 -2
  36. package/src/ui/BackwardForwardPanel.css.ts +9 -9
  37. package/src/ui/BackwardForwardPanel.tsx +1 -1
  38. package/src/ui/DiagramTitlePanel.css.ts +7 -2
  39. package/src/ui/DiagramTitlePanel.tsx +5 -3
  40. package/src/ui/DynamicViewWalkthrough.tsx +6 -4
  41. package/src/ui/OptionsPanel.tsx +37 -27
  42. package/src/ui/options/EdgeOptions.tsx +157 -0
  43. package/src/ui/options/NodeOptions.tsx +37 -29
  44. package/src/xyflow/EdgeMarkers.tsx +148 -0
  45. package/src/xyflow/FitviewOnDiagramChange.tsx +8 -4
  46. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +59 -55
  47. package/src/xyflow/SyncWithDiagram.tsx +13 -20
  48. package/src/xyflow/XYFlow.tsx +2 -4
  49. package/src/xyflow/XYFlowEvents.tsx +48 -33
  50. package/src/xyflow/XYFlowInner.tsx +1 -1
  51. package/src/xyflow/const.ts +3 -3
  52. package/src/xyflow/diagram-to-xyflow.ts +17 -41
  53. package/src/xyflow/edges/RelationshipEdge.tsx +207 -118
  54. package/src/xyflow/edges/edges.css.ts +36 -22
  55. package/src/xyflow/edges/utils.ts +10 -0
  56. package/src/xyflow/hooks/index.ts +4 -2
  57. package/src/xyflow/hooks/useLayoutConstraints.ts +3 -4
  58. package/src/xyflow/hooks/useXYFlow.ts +28 -1
  59. package/src/xyflow/nodes/compound/CompoundNode.css.ts +34 -24
  60. package/src/xyflow/nodes/compound/CompoundNode.tsx +52 -53
  61. package/src/xyflow/nodes/element/ElementIcon.tsx +11 -22
  62. package/src/xyflow/nodes/element/ElementLink.tsx +11 -16
  63. package/src/xyflow/nodes/element/ElementNode.tsx +64 -108
  64. package/src/xyflow/nodes/element/element.css.ts +30 -10
  65. package/src/xyflow/nodes/shared/NavigateToBtn.tsx +1 -1
  66. package/src/xyflow/types.ts +2 -4
  67. package/src/xyflow/utils.ts +3 -6
  68. package/dist/KeepAspectRatioContainer.d.ts +0 -9
  69. package/dist/icons/Clipboard.d.ts +0 -3
  70. package/dist/icons/Link.d.ts +0 -3
  71. package/dist/icons/ZoomIn.d.ts +0 -3
  72. package/dist/icons/index.d.ts +0 -3
  73. package/dist/mantine/theme.d.ts +0 -3
  74. package/dist/state/WhenInitialized.d.ts +0 -3
  75. package/dist/ui/Camera.d.ts +0 -3
  76. package/src/KeepAspectRatioContainer.tsx +0 -36
  77. package/src/icons/Clipboard.tsx +0 -24
  78. package/src/icons/Link.tsx +0 -23
  79. package/src/icons/ZoomIn.tsx +0 -25
  80. package/src/icons/index.ts +0 -3
  81. package/src/mantine/theme.ts +0 -20
  82. package/src/state/WhenInitialized.tsx +0 -24
  83. package/src/ui/Camera.tsx +0 -174
package/dist/style.css CHANGED
@@ -598,13 +598,20 @@ svg.react-flow__connectionline {
598
598
  fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));
599
599
  }
600
600
  .likec4-diagram-root {
601
+ overflow: hidden;
602
+ position: relative;
603
+ width: 100%;
604
+ height: 100%;
605
+ padding: 0;
606
+ margin: 0;
607
+ box-sizing: border-box;
601
608
  -webkit-font-smoothing: var(--mantine-webkit-font-smoothing);
602
609
  -moz-osx-font-smoothing: var(--mantine-moz-font-smoothing);
603
610
  }
604
611
  .likec4-diagram-root {
605
612
  --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
613
  --likec4-background-color: var(--mantine-color-body);
607
- --likec4-background-pattern-color: var(--mantine-color-dimmed);
614
+ --likec4-background-pattern-color: var(--mantine-color-dark-3);
608
615
  --likec4-compound-font-family: var(--likec4-font-family);
609
616
  --likec4-compound-title-color: var(--likec4-element-loContrast);
610
617
  --likec4-element-font-family: var(--likec4-font-family);
@@ -617,7 +624,7 @@ svg.react-flow__connectionline {
617
624
  --likec4-relation-labelColor: #cbd5e1;
618
625
  }
619
626
  :where([data-mantine-color-scheme='light']) .likec4-diagram-root {
620
- --likec4-background-pattern-color: var(--mantine-color-dark-3);
627
+ --likec4-background-pattern-color: var(--mantine-color-gray-6);
621
628
  }
622
629
  :where([data-likec4-color='primary']) {
623
630
  --likec4-element-fill: #3b82f6;
@@ -1256,35 +1263,28 @@ svg.react-flow__connectionline {
1256
1263
  :where([data-mantine-color-scheme='light']) :where([data-likec4-color='indigo'][data-compound-depth='6']) {
1257
1264
  --likec4-element-fill: #34369f;
1258
1265
  --likec4-element-stroke: #373287;
1259
- }._2h8g8h0 {
1260
- overflow: hidden;
1261
- position: relative;
1262
- width: 100%;
1263
- height: 100%;
1264
- padding: 0;
1265
- }
1266
- .react-flow._2h8g8h1 {
1266
+ }.react-flow._2h8g8h0 {
1267
1267
  --xy-background-color: var(--likec4-background-color);
1268
1268
  --xy-background-pattern-color: var(--likec4-background-pattern-color);
1269
1269
  }
1270
- .react-flow._2h8g8h1._2h8g8h3 {
1270
+ .react-flow._2h8g8h0._2h8g8h2 {
1271
1271
  --likec4-background-color: transparent !important;
1272
1272
  --xy-background-color: transparent !important;
1273
1273
  background-color: transparent !important;
1274
1274
  }
1275
- :where(._2h8g8h4, ._2h8g8h3) .react-flow__attribution {
1275
+ :where(._2h8g8h3, ._2h8g8h2) .react-flow__attribution {
1276
1276
  display: none;
1277
1277
  }
1278
1278
  @supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {
1279
- ._2h8g8h1 {
1279
+ ._2h8g8h0 {
1280
1280
  --likec4-safari-animation-hook: ;
1281
1281
  }
1282
- }@keyframes bexn7q6 {
1282
+ }@keyframes bexn7q7 {
1283
1283
  from {
1284
- stroke-dashoffset: 36;
1284
+ stroke-dashoffset: 46;
1285
1285
  }
1286
1286
  to {
1287
- stroke-dashoffset: 1;
1287
+ stroke-dashoffset: 10;
1288
1288
  }
1289
1289
  }
1290
1290
  .bexn7q1 {
@@ -1292,24 +1292,24 @@ svg.react-flow__connectionline {
1292
1292
  --xy-edge-stroke: var(--likec4-relation-lineColor);
1293
1293
  --xy-edge-stroke-selected: color-mix(in srgb, var(--likec4-relation-lineColor), var(--bexn7q0) 35%);
1294
1294
  --xy-edge-label-color: color-mix(in srgb, var(--likec4-relation-labelColor), rgba(255 255 255 / 0.85) 20%);
1295
- --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 35%);
1296
- --xy-edge-stroke-width: 2.2px;
1295
+ --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 40%);
1296
+ --xy-edge-stroke-width: 3;
1297
1297
  }
1298
1298
  :where([data-mantine-color-scheme="dark"]) .bexn7q1 {
1299
1299
  --bexn7q0: white;
1300
1300
  --xy-edge-label-color: var(--likec4-relation-labelColor);
1301
- --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 55%);
1301
+ --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 50%);
1302
1302
  }
1303
1303
  :where(.react-flow__edge.selected) .bexn7q1 {
1304
1304
  --xy-edge-stroke: var(--xy-edge-stroke-selected);
1305
- --xy-edge-stroke-width: 3px;
1305
+ --xy-edge-stroke-width: 3;
1306
1306
  }
1307
1307
  .bexn7q1:is([data-edge-hovered='true'],[data-edge-active='true']) {
1308
1308
  --xy-edge-stroke: var(--xy-edge-stroke-selected);
1309
- --xy-edge-stroke-width: 3px;
1309
+ --xy-edge-stroke-width: 3;
1310
1310
  }
1311
1311
  :where(.react-flow__edge.selected) .bexn7q1[data-edge-hovered='true'] {
1312
- --xy-edge-stroke-width: 3.6px;
1312
+ --xy-edge-stroke-width: 4;
1313
1313
  }
1314
1314
  .react-flow__edges > svg {
1315
1315
  mix-blend-mode: screen;
@@ -1322,14 +1322,13 @@ svg.react-flow__connectionline {
1322
1322
  will-change: opacity, filter;
1323
1323
  }
1324
1324
  .bexn7q3 {
1325
- stroke-width: var(--xy-edge-stroke-width);
1326
1325
  stroke-opacity: 0.08;
1327
1326
  transition-property: stroke-width, stroke-opacity;
1328
1327
  transition-duration: 155ms;
1329
1328
  transition-timing-function: ease-out;
1330
1329
  }
1331
1330
  :where(.react-flow__edge.selected, [data-edge-active='true'], [data-edge-hovered='true']) .bexn7q3 {
1332
- stroke-width: calc(var(--xy-edge-stroke-width) + 8px);
1331
+ stroke-width: calc(var(--xy-edge-stroke-width) + 8);
1333
1332
  stroke-opacity: 0.15;
1334
1333
  }
1335
1334
  .bexn7q4 {
@@ -1341,7 +1340,7 @@ svg.react-flow__connectionline {
1341
1340
  stroke: var(--xy-edge-stroke);
1342
1341
  fill-opacity: 0.75;
1343
1342
  stroke-width: 1;
1344
- cursor: grab;
1343
+ cursor: default;
1345
1344
  pointer-events: auto;
1346
1345
  visibility: hidden;
1347
1346
  }
@@ -1357,56 +1356,64 @@ svg.react-flow__connectionline {
1357
1356
  fill-opacity: 1;
1358
1357
  stroke-width: 5;
1359
1358
  }
1360
- .bexn7q7 {
1359
+ .bexn7q6 {
1360
+ cursor: grabbing;
1361
+ }
1362
+ .bexn7q6 * {
1363
+ cursor: grabbing;
1364
+ }
1365
+ .bexn7q8 {
1361
1366
  animation-duration: 800ms;
1362
1367
  animation-iteration-count: infinite;
1363
1368
  animation-timing-function: linear;
1364
- animation-name: bexn7q6;
1365
- animation-play-state: paused;
1369
+ animation-fill-mode: both;
1370
+ stroke-dashoffset: 10;
1366
1371
  }
1367
- :where([data-edge-hovered='true']) .bexn7q7 {
1368
- animation-play-state: running;
1369
- animation-delay: 350ms;
1372
+ :where([data-edge-hovered='true']) .bexn7q8 {
1373
+ animation-name: bexn7q7;
1374
+ animation-delay: 450ms;
1370
1375
  transition: stroke 130ms ease-out,stroke-width 130ms ease-out;
1371
1376
  }
1372
- :where(.react-flow__edge.selected, [data-edge-active='true']) .bexn7q7 {
1373
- animation-play-state: running;
1377
+ :where(.react-flow__edge.selected, [data-edge-active='true']) .bexn7q8 {
1378
+ animation-name: bexn7q7;
1374
1379
  animation-delay: 0ms;
1375
1380
  transition: stroke 130ms ease-out,stroke-width 130ms ease-out;
1376
1381
  }
1377
- :where([data-edge-dir='back']) .bexn7q7 {
1382
+ :where([data-edge-dir='back']) .bexn7q8 {
1378
1383
  animation-direction: reverse;
1379
1384
  }
1380
- .bexn7q2 .bexn7q7 {
1385
+ .bexn7q2 .bexn7q8 {
1381
1386
  animation-play-state: paused;
1382
1387
  }
1383
- .bexn7qb {
1384
- --bexn7qa: translate(var(--bexn7q8, -50%), var(--bexn7q9, -50%));
1388
+ .bexn7qc {
1389
+ --bexn7qb: translate(var(--bexn7q9, -50%), var(--bexn7qa, -50%));
1385
1390
  top: 0;
1386
1391
  left: 0;
1392
+ padding: 2px 4px 4px 4px;
1387
1393
  font-family: var(--likec4-font-family);
1388
1394
  position: absolute;
1389
1395
  pointer-events: all;
1390
1396
  cursor: pointer;
1397
+ width: fit-content;
1391
1398
  transform-origin: 50% 50%;
1392
1399
  mix-blend-mode: screen;
1393
1400
  color: var(--xy-edge-label-color);
1394
1401
  background-color: var(--xy-edge-label-background-color);
1395
1402
  border-radius: 3px;
1396
- transform: var(--bexn7qa);
1403
+ transform: var(--bexn7qb);
1397
1404
  }
1398
- .bexn7qb[data-edge-hovered="true"] {
1399
- transition: all 140ms ease-out;
1400
- transform: var(--bexn7qa) scale(1.1);
1405
+ .bexn7qc[data-edge-hovered="true"] {
1406
+ transition: all 140ms ease-in-out;
1407
+ transform: var(--bexn7qb) scale(1.12);
1401
1408
  }
1402
- .bexn7qb:is(.bexn7q2) {
1409
+ .bexn7qc:is(.bexn7q2) {
1403
1410
  opacity: 0.6;
1404
1411
  transition: opacity 600ms ease-in-out, filter 600ms ease-in-out;
1405
1412
  transition-delay: 200ms;
1406
1413
  filter: grayscale(0.85) var(--likec4-safari-animation-hook, blur(1px));
1407
1414
  will-change: opacity, filter;
1408
1415
  }
1409
- .bexn7qc {
1416
+ .bexn7qd {
1410
1417
  position: absolute;
1411
1418
  top: -2px;
1412
1419
  left: -2px;
@@ -1422,16 +1429,16 @@ svg.react-flow__connectionline {
1422
1429
  transform: translateX(-100%);
1423
1430
  font-variant-numeric: tabular-nums;
1424
1431
  }
1425
- :where([data-edge-hovered="true"],[data-edge-active="true"]) .bexn7qc {
1432
+ :where([data-edge-hovered="true"],[data-edge-active="true"]) .bexn7qd {
1426
1433
  font-weight: 600;
1427
1434
  background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 5%);
1428
1435
  }
1429
- .bexn7qd {
1430
- padding: 2px 6px 4px 6px;
1436
+ .bexn7qe {
1431
1437
  text-align: left;
1432
- font-size: calc(0.78125rem * var(--mantine-scale));
1433
- line-height: 1.2;
1434
- }@keyframes lbtzdo9 {
1438
+ white-space-collapse: preserve-breaks;
1439
+ font-size: calc(0.875rem * var(--mantine-scale));
1440
+ line-height: 1.185;
1441
+ }@keyframes lbtzdoa {
1435
1442
  from {
1436
1443
  opacity: 0.6;
1437
1444
  }
@@ -1446,87 +1453,95 @@ svg.react-flow__connectionline {
1446
1453
  padding: 0;
1447
1454
  margin: 0;
1448
1455
  }
1449
- .react-flow__node-compound:has(.lbtzdo1) {
1456
+ .lbtzdo1 {
1457
+ top: 50%;
1458
+ left: 50%;
1459
+ visibility: hidden;
1460
+ }
1461
+ .react-flow__node-compound:has(.lbtzdo2) {
1450
1462
  opacity: 0.25;
1451
1463
  transition: opacity 600ms ease-in-out, filter 600ms ease-in-out;
1452
1464
  transition-delay: 200ms;
1453
1465
  filter: grayscale(0.85) var(--likec4-safari-animation-hook, blur(1px));
1454
1466
  will-change: opacity, filter;
1455
1467
  }
1456
- .lbtzdo4 {
1468
+ .lbtzdo5 {
1457
1469
  width: 100%;
1458
1470
  height: 100%;
1459
1471
  position: relative;
1460
1472
  border-radius: 6px;
1461
1473
  box-shadow: 0 4px 10px 0.5px rgba(0,0,0,0.1) , 0 2px 2px -1px rgba(0,0,0,0.4);
1462
- padding: 8px;
1474
+ padding: 0;
1475
+ margin: 0;
1463
1476
  transition: all 200ms ease-out;
1477
+ background-clip: padding-box;
1478
+ overflow: hidden;
1479
+ cursor: default;
1464
1480
  }
1465
- .lbtzdo4:before {
1481
+ .lbtzdo5:before {
1466
1482
  content: " ";
1467
1483
  position: absolute;
1468
1484
  top: 0;
1469
1485
  left: 0;
1470
1486
  width: 100%;
1471
1487
  height: 100%;
1472
- border-radius: 6px;
1473
1488
  pointer-events: none;
1474
1489
  transition: background 175ms ease-out, opacity 175ms ease-out;
1475
1490
  background: var(--likec4-element-fill);
1476
- background-clip: padding-box;
1477
1491
  }
1478
- :where(.react-flow__node.selected) .lbtzdo4 {
1492
+ :where(.react-flow__node.selected) .lbtzdo5 {
1479
1493
  box-shadow: none;
1480
1494
  }
1481
- :where(.react-flow__node:focus-visible) .lbtzdo4 {
1495
+ :where(.react-flow__node:focus-visible) .lbtzdo5 {
1482
1496
  transition-duration: 0ms;
1483
1497
  outline: 3px solid var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
1484
1498
  outline-offset: calc(0.09375rem * var(--mantine-scale));
1485
1499
  }
1486
- .lbtzdo6 {
1487
- --lbtzdo5: 0;
1500
+ .lbtzdo7 {
1501
+ --lbtzdo6: 0;
1488
1502
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1489
1503
  border-style: dashed;
1490
1504
  border-width: 3px;
1491
- padding: 6px;
1492
1505
  box-shadow: none;
1493
- border-color: color-mix(in srgb , var(--likec4-element-stroke), transparent var(--lbtzdo3, 10%));
1494
- background-clip: padding-box;
1506
+ border-color: color-mix(in srgb , var(--likec4-element-stroke), transparent var(--lbtzdo4, 10%));
1495
1507
  }
1496
- .lbtzdo6:before {
1497
- transition-delay: 200ms;
1498
- opacity: calc(var(--lbtzdo2, 1) + var(--lbtzdo5));
1508
+ .lbtzdo7:before {
1509
+ border-radius: unset;
1510
+ transition-delay: 100ms;
1511
+ opacity: calc(var(--lbtzdo3, 1) + var(--lbtzdo6));
1499
1512
  }
1500
- :where([data-hovered]) .lbtzdo6 {
1501
- --lbtzdo5: .07;
1513
+ :where([data-hovered]) .lbtzdo7 {
1514
+ --lbtzdo6: .08;
1502
1515
  }
1503
- .lbtzdo7 {
1516
+ .lbtzdo8 {
1504
1517
  font-family: var(--likec4-compound-font-family);
1505
- font-optical-sizing: auto;
1506
- font-style: normal;
1507
1518
  text-align: left;
1508
- display: inline-block;
1509
1519
  font-weight: 600;
1510
- font-size: 14px;
1520
+ font-size: calc(0.9375rem * var(--mantine-scale));
1511
1521
  text-transform: uppercase;
1512
1522
  letter-spacing: 0.2px;
1513
1523
  line-height: 1;
1514
- opacity: 0.75;
1515
1524
  color: var(--_compound-title-color,var(--likec4-compound-title-color));
1516
- padding-left: 12px;
1525
+ padding-left: 14px;
1526
+ padding-top: 13px;
1527
+ padding-bottom: 6px;
1528
+ mix-blend-mode: screen;
1517
1529
  }
1518
- .lbtzdo8 {
1519
- padding-left: 26px;
1530
+ :where(.react-flow__node.draggable) .lbtzdo8 {
1531
+ cursor: grab;
1532
+ }
1533
+ :where(.likec4-compound-transparent) .lbtzdo8 {
1534
+ padding-top: 10px;
1535
+ }
1536
+ .lbtzdo9 {
1537
+ padding-left: 32px;
1520
1538
  }
1521
1539
  :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) {
1522
1540
  --_compound-title-color: var(--likec4-element-stroke);
1523
1541
  }
1524
- :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdo7 {
1525
- opacity: 1;
1526
- }
1527
- .lbtzdoc {
1528
- --lbtzdoa: var(--likec4-element-loContrast);
1529
- --lbtzdob: 6;
1542
+ .lbtzdod {
1543
+ --lbtzdob: var(--likec4-element-loContrast);
1544
+ --lbtzdoc: 6;
1530
1545
  position: absolute;
1531
1546
  top: 0;
1532
1547
  left: 0;
@@ -1536,76 +1551,76 @@ svg.react-flow__connectionline {
1536
1551
  overflow: visible;
1537
1552
  visibility: hidden;
1538
1553
  }
1539
- :where(.react-flow__node.selected:not(:focus-visible)) .lbtzdoc {
1554
+ :where(.react-flow__node.selected:not(:focus-visible)) .lbtzdod {
1540
1555
  visibility: visible;
1541
1556
  }
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;
1557
+ :where(.react-flow__node:focus-within:not(.selected)) .lbtzdod {
1558
+ --lbtzdob: color-mix(in srgb, var(--likec4-element-stroke) 30%, var(--likec4-element-loContrast));
1559
+ --lbtzdoc: 8;
1545
1560
  }
1546
- :where([data-mantine-color-scheme='light']) .lbtzdoc {
1547
- --lbtzdoa: color-mix(in srgb, var(--likec4-element-stroke) 80%, #000);
1561
+ :where([data-mantine-color-scheme='light']) .lbtzdod {
1562
+ --lbtzdob: color-mix(in srgb, var(--likec4-element-stroke) 80%, #000);
1548
1563
  }
1549
- .lbtzdoc rect {
1550
- stroke: var(--lbtzdoa);
1564
+ .lbtzdod rect {
1565
+ stroke: var(--lbtzdob);
1551
1566
  transform-origin: center center;
1552
- stroke-width: var(--lbtzdob);
1567
+ stroke-width: var(--lbtzdoc);
1553
1568
  animation-duration: 800ms;
1554
- animation-name: lbtzdo9;
1569
+ animation-name: lbtzdoa;
1555
1570
  animation-iteration-count: infinite;
1556
1571
  animation-direction: alternate;
1557
1572
  fill: none;
1558
1573
  }
1559
1574
  .lbtzdo0 {
1560
- --lbtzdod: var(--likec4-element-loContrast);
1575
+ --lbtzdoe: var(--likec4-element-loContrast);
1561
1576
  }
1562
1577
  :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) {
1563
- --lbtzdod: var(--likec4-element-stroke);
1578
+ --lbtzdoe: var(--likec4-element-stroke);
1564
1579
  }
1565
- .lbtzdoe {
1580
+ .lbtzdof {
1566
1581
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1567
1582
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
1568
1583
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
1569
1584
  position: absolute;
1570
1585
  pointer-events: all;
1571
1586
  left: 3px;
1572
- top: 7px;
1587
+ top: 6px;
1573
1588
  cursor: pointer;
1574
- color: var(--_compound-title-color,var(--lbtzdod));
1575
- transform-origin: 90% 70%;
1589
+ color: var(--_compound-title-color,var(--lbtzdoe));
1590
+ transform-origin: 90% 50%;
1576
1591
  opacity: 0.75;
1577
1592
  transition: all 150ms ease-out;
1578
1593
  transition-delay: 0ms;
1579
1594
  background-color: var(--ai-bg);
1580
1595
  }
1581
- .lbtzdoe:hover {
1596
+ .lbtzdof:hover {
1582
1597
  box-shadow: var(--mantine-shadow-lg);
1583
1598
  transform: scale(1.42);
1584
1599
  opacity: 1;
1585
1600
  transition-delay: 0;
1586
1601
  }
1587
- .lbtzdoe:active {
1602
+ .lbtzdof:active {
1588
1603
  transform: scale(1.1);
1589
1604
  opacity: 1;
1590
1605
  transition-delay: 0;
1591
1606
  }
1592
- :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdoe {
1593
- --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 50%);
1607
+ :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdof {
1608
+ --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 60%);
1594
1609
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 20%);
1595
1610
  opacity: 0.85;
1596
1611
  }
1597
- :where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdoe:not(:hover) {
1612
+ :where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdof:not(:hover) {
1598
1613
  --ai-bg: var(--ai-bg-hover);
1599
1614
  box-shadow: var(--mantine-shadow-lg);
1600
1615
  transform: scale(1.223);
1601
1616
  opacity: 1;
1602
1617
  transition-delay: 250ms;
1603
1618
  }
1604
- .lbtzdoe svg.icon {
1605
- width: 70%;
1606
- height: 70%;
1619
+ .lbtzdof svg.icon {
1620
+ width: 75%;
1621
+ height: 75%;
1607
1622
  stroke-width: 1.5;
1608
- }@keyframes _1b6tkn5 {
1623
+ }@keyframes _1b6tkn6 {
1609
1624
  from {
1610
1625
  opacity: 0.6;
1611
1626
  }
@@ -1629,17 +1644,24 @@ svg.react-flow__connectionline {
1629
1644
  will-change: transform;
1630
1645
  }
1631
1646
  ._1b6tkn3 {
1647
+ top: 50%;
1648
+ left: 50%;
1649
+ visibility: hidden;
1650
+ }
1651
+ ._1b6tkn4 {
1632
1652
  will-change: transform;
1633
1653
  }
1634
- .react-flow__node-element:has(._1b6tkn4) {
1654
+ .react-flow__node-element:has(._1b6tkn5) {
1635
1655
  opacity: 0.25;
1636
1656
  transition: opacity 600ms ease-in-out, filter 600ms ease-in-out;
1637
1657
  transition-delay: 200ms;
1638
1658
  filter: grayscale(0.85) var(--likec4-safari-animation-hook, blur(2px));
1639
1659
  will-change: opacity, filter;
1640
1660
  }
1641
- ._1b6tkn6 {
1642
- stroke: var(--likec4-element-loContrast);
1661
+ ._1b6tkn8 {
1662
+ --_1b6tkn7: var(--likec4-element-loContrast);
1663
+ stroke: var(--_1b6tkn7);
1664
+ fill: none;
1643
1665
  transform-origin: center center;
1644
1666
  stroke-width: 6;
1645
1667
  animation-duration: 800ms;
@@ -1648,44 +1670,47 @@ svg.react-flow__connectionline {
1648
1670
  opacity: 0.6;
1649
1671
  visibility: hidden;
1650
1672
  }
1651
- :where(.react-flow__node.selected) ._1b6tkn6 {
1673
+ :where(.react-flow__node.selected) ._1b6tkn8 {
1652
1674
  visibility: visible;
1653
- animation-name: var(--likec4-safari-animation-hook, _1b6tkn5);
1675
+ animation-name: var(--likec4-safari-animation-hook, _1b6tkn6);
1654
1676
  }
1655
- :where(.react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkn6 {
1677
+ :where(.react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkn8 {
1656
1678
  stroke-width: 10;
1657
1679
  stroke: var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
1658
1680
  visibility: visible;
1659
1681
  }
1660
- :where([data-likec4-shape="queue"], [data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tkn6 {
1682
+ :where([data-likec4-shape="queue"], [data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tkn8 {
1661
1683
  stroke-width: 10;
1662
1684
  }
1663
- ._1b6tkn4 ._1b6tkn6 {
1685
+ :where([data-mantine-color-scheme='light']) ._1b6tkn8 {
1686
+ --_1b6tkn7: color-mix(in srgb, var(--likec4-element-fill) 60%, var(--likec4-element-loContrast));
1687
+ }
1688
+ ._1b6tkn5 ._1b6tkn8 {
1664
1689
  visibility: hidden;
1665
1690
  display: none;
1666
1691
  }
1667
- ._1b6tkn7 {
1692
+ ._1b6tkn9 {
1668
1693
  fill: var(--likec4-element-fill);
1669
1694
  }
1670
- ._1b6tkn8 {
1695
+ ._1b6tkna {
1671
1696
  fill: var(--likec4-element-stroke);
1672
1697
  }
1673
- ._1b6tkn9 {
1698
+ ._1b6tknb {
1674
1699
  fill: var(--_1b6tkn0);
1675
1700
  }
1676
- ._1b6tkna {
1701
+ ._1b6tknc {
1677
1702
  flex: 0 0 auto;
1678
1703
  font-family: var(--likec4-element-font-family);
1679
1704
  font-optical-sizing: auto;
1680
1705
  font-style: normal;
1681
1706
  text-align: center;
1682
1707
  font-weight: 500;
1683
- font-size: calc(1.1875rem * var(--mantine-scale));
1708
+ font-size: calc(1.21875rem * var(--mantine-scale));
1684
1709
  line-height: 1.2;
1685
1710
  text-wrap: balance;
1686
1711
  color: var(--likec4-element-hiContrast);
1687
1712
  }
1688
- ._1b6tknb {
1713
+ ._1b6tknd {
1689
1714
  flex: 0 1 auto;
1690
1715
  font-family: var(--likec4-element-font-family);
1691
1716
  font-optical-sizing: auto;
@@ -1700,7 +1725,7 @@ svg.react-flow__connectionline {
1700
1725
  text-overflow: ellipsis;
1701
1726
  overflow: hidden;
1702
1727
  }
1703
- ._1b6tknc {
1728
+ ._1b6tkne {
1704
1729
  flex: 0 0 auto;
1705
1730
  font-family: var(--likec4-element-font-family);
1706
1731
  font-optical-sizing: auto;
@@ -1713,10 +1738,10 @@ svg.react-flow__connectionline {
1713
1738
  opacity: 0.92;
1714
1739
  color: var(--likec4-element-loContrast);
1715
1740
  }
1716
- ._1b6tkn2:hover ._1b6tknc {
1741
+ ._1b6tkn2:hover ._1b6tkne {
1717
1742
  opacity: 1;
1718
1743
  }
1719
- ._1b6tknd {
1744
+ ._1b6tknf {
1720
1745
  --_1b6tkn1: calc(1.5rem * var(--mantine-scale));
1721
1746
  flex: 1;
1722
1747
  padding: var(--_1b6tkn1);
@@ -1727,42 +1752,41 @@ svg.react-flow__connectionline {
1727
1752
  overflow: hidden;
1728
1753
  gap: calc(0.5rem * var(--mantine-scale));
1729
1754
  }
1730
- ._1b6tknd:has(._1b6tknb):has(._1b6tknc) {
1755
+ ._1b6tknf:has(._1b6tknd):has(._1b6tkne) {
1731
1756
  gap: calc(0.375rem * var(--mantine-scale));
1732
1757
  }
1733
- :where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) ._1b6tknd {
1758
+ :where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) ._1b6tknf {
1734
1759
  padding-left: calc(2.5rem * var(--mantine-scale));
1735
1760
  padding-right: calc(1.25rem * var(--mantine-scale));
1736
1761
  }
1737
- :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tknd {
1762
+ :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tknf {
1738
1763
  padding-top: calc(2.125rem * var(--mantine-scale));
1739
1764
  }
1740
- :where([data-likec4-shape="browser"]) ._1b6tknd {
1765
+ :where([data-likec4-shape="browser"]) ._1b6tknf {
1741
1766
  padding-top: calc(2rem * var(--mantine-scale));
1742
1767
  padding-bottom: calc(1.75rem * var(--mantine-scale));
1743
1768
  }
1744
- ._1b6tknf {
1745
- --_1b6tkne: 30px;
1746
- flex: 0 1 var(--_1b6tkne);
1747
- max-height: var(--_1b6tkne);
1748
- margin-top: -8px;
1769
+ ._1b6tkni {
1770
+ --_1b6tknh: calc(var(--_1b6tkng) - 12px);
1771
+ flex: 0 1 var(--_1b6tknh);
1772
+ max-height: var(--_1b6tknh);
1749
1773
  position: relative;
1750
1774
  user-select: none;
1751
1775
  pointer-events: none;
1752
1776
  overflow: visible;
1753
1777
  mix-blend-mode: hard-light;
1754
1778
  }
1755
- ._1b6tknf img {
1779
+ ._1b6tkni img {
1756
1780
  position: absolute;
1757
1781
  left: 0;
1758
- bottom: 0;
1782
+ bottom: 4px;
1759
1783
  width: 100%;
1760
1784
  height: auto;
1761
1785
  object-fit: contain;
1762
- max-height: calc(var(--_1b6tkne) + 16px);
1786
+ max-height: var(--_1b6tkng);
1763
1787
  }
1764
- ._1b6tkni {
1765
- --_1b6tkng:
1788
+ ._1b6tknk {
1789
+ --_1b6tknj:
1766
1790
  drop-shadow(0 2px 1px rgba(0, 0, 0, 0.21))
1767
1791
  drop-shadow(0 1px 1px color-mix(in srgb, var(--likec4-element-stroke) 40%, transparent))
1768
1792
  drop-shadow(0 5px 3px rgba(0, 0, 0, 0.1))
@@ -1774,15 +1798,15 @@ svg.react-flow__connectionline {
1774
1798
  fill: var(--likec4-element-fill);
1775
1799
  stroke: var(--likec4-element-stroke);
1776
1800
  overflow: visible;
1777
- filter: var(--_1b6tknh, var(--_1b6tkng));
1801
+ filter: var(--_1b6tknj);
1778
1802
  transition: filter 300ms ease-out;
1779
1803
  transition-delay: 0ms;
1780
1804
  z-index: -1;
1781
1805
  }
1782
- :where(.react-flow__node.selected, .react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkni {
1783
- filter: none;
1806
+ :where(.react-flow__node.selected, .react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tknk {
1807
+ --_1b6tknj: none;
1784
1808
  }
1785
- ._1b6tknj {
1809
+ ._1b6tknl {
1786
1810
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1787
1811
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
1788
1812
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
@@ -1800,28 +1824,28 @@ svg.react-flow__connectionline {
1800
1824
  transition-delay: 0ms;
1801
1825
  background-color: var(--ai-bg);
1802
1826
  }
1803
- ._1b6tknj:hover {
1827
+ ._1b6tknl:hover {
1804
1828
  box-shadow: var(--mantine-shadow-lg);
1805
1829
  transform: translate(-50%, 0) scale(1.35);
1806
1830
  opacity: 1;
1807
1831
  transition-delay: 0;
1808
1832
  }
1809
- ._1b6tknj:active {
1833
+ ._1b6tknl:active {
1810
1834
  transform: translate(-50%, 0) scale(1.02);
1811
1835
  opacity: 1;
1812
1836
  transition-delay: 0;
1813
1837
  }
1814
- :where([data-likec4-shape='browser']) ._1b6tknj {
1838
+ :where([data-likec4-shape='browser']) ._1b6tknl {
1815
1839
  bottom: 3px;
1816
1840
  }
1817
- :where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tknj:not(:hover) {
1841
+ :where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tknl:not(:hover) {
1818
1842
  --ai-bg: var(--ai-bg-hover);
1819
1843
  box-shadow: var(--mantine-shadow-lg);
1820
1844
  transform: translate(-50%, 0) scale(1.185);
1821
1845
  opacity: 1;
1822
1846
  transition-delay: 250ms;
1823
1847
  }
1824
- ._1b6tknj svg.icon {
1848
+ ._1b6tknl svg.icon {
1825
1849
  width: 65%;
1826
1850
  height: 65%;
1827
1851
  stroke-width: 1.5;
@@ -1877,17 +1901,12 @@ svg.react-flow__connectionline {
1877
1901
  ._4ysv0o2 {
1878
1902
  text-align: left;
1879
1903
  }._19mimxc0 {
1880
- top: var(--likec4-navigation-panel-top, 1rem);
1904
+ top: var(--likec4-navigation-panel-top, 0.8rem);
1881
1905
  left: var(--likec4-navigation-panel-left, 1rem);
1882
1906
  margin: 0;
1883
1907
  }
1884
1908
  ._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
- }
1909
+ --ai-size: var(--ai-size-lg);
1891
1910
  }.hbkbtj0 {
1892
1911
  bottom: 0;
1893
1912
  left: 0;
@@ -1896,7 +1915,7 @@ svg.react-flow__connectionline {
1896
1915
  }
1897
1916
  .hbkbtj1 {
1898
1917
  cursor: default;
1899
- min-width: 150px;
1918
+ min-width: 200px;
1900
1919
  max-width: calc(100vw - 16px);
1901
1920
  background-color: color-mix(in srgb, var(--mantine-color-body), transparent 20%);
1902
1921
  -webkit-backdrop-filter: var(--likec4-safari-animation-hook, blur(8px));
@@ -1912,9 +1931,16 @@ svg.react-flow__connectionline {
1912
1931
  :where([data-mantine-color-scheme="dark"]) .hbkbtj3 {
1913
1932
  color: var(--mantine-color-gray-5);
1914
1933
  }
1934
+ @media (min-width: 48em) {
1935
+ .hbkbtj1 {
1936
+ min-width: 300px;
1937
+ max-width: 90vw;
1938
+ }
1939
+ }
1915
1940
  @media (min-width: 62em) {
1916
1941
  .hbkbtj1 {
1917
- max-width: 45vw;
1942
+ min-width: 400px;
1943
+ max-width: 70vw;
1918
1944
  }
1919
1945
  }._2jkb2y0 {
1920
1946
  position: absolute;