@likec4/diagram 1.1.1 → 1.2.1

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 (80) hide show
  1. package/dist/KeepAspectRatioContainer.d.ts +1 -1
  2. package/dist/LikeC4Diagram.d.ts +1 -1
  3. package/dist/LikeC4Diagram.props.d.ts +10 -5
  4. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  5. package/dist/hooks/useUpdateEffect.d.ts +1 -1
  6. package/dist/icons/Clipboard.d.ts +1 -1
  7. package/dist/icons/Link.d.ts +1 -1
  8. package/dist/icons/ZoomIn.d.ts +1 -1
  9. package/dist/index.d.ts +0 -1
  10. package/dist/index.mjs +2604 -1502
  11. package/dist/mantine/EnsureMantine.d.ts +1 -1
  12. package/dist/state/DiagramContext.d.ts +2307 -192
  13. package/dist/state/WhenInitialized.d.ts +1 -1
  14. package/dist/state/diagramStore.d.ts +2220 -97
  15. package/dist/state/useDiagramStore.d.ts +2124 -9
  16. package/dist/style.css +210 -136
  17. package/dist/theme.css.d.ts +1 -0
  18. package/dist/ui/DiagramTitlePanel.d.ts +1 -2
  19. package/dist/ui/DynamicViewWalkthrough.css.d.ts +3 -0
  20. package/dist/ui/DynamicViewWalkthrough.d.ts +1 -0
  21. package/dist/ui/OptionsPanel.d.ts +1 -2
  22. package/dist/ui/index.d.ts +1 -0
  23. package/dist/ui/options/NodeOptions.d.ts +1 -2
  24. package/dist/xyflow/FitviewOnDiagramChange.d.ts +4 -2
  25. package/dist/xyflow/SyncWithDiagram.d.ts +1 -2
  26. package/dist/xyflow/XYFlow.d.ts +5 -8
  27. package/dist/xyflow/XYFlowBackground.d.ts +6 -5
  28. package/dist/xyflow/XYFlowEvents.d.ts +60 -66
  29. package/dist/xyflow/XYFlowInner.d.ts +11 -0
  30. package/dist/xyflow/diagram-to-xyflow.d.ts +2 -2
  31. package/dist/xyflow/edges/RelationshipEdge.d.ts +17 -17
  32. package/dist/xyflow/edges/edges.css.d.ts +4 -2
  33. package/dist/xyflow/edges/utils.d.ts +3 -1
  34. package/dist/xyflow/hooks/useLayoutConstraints.d.ts +1 -1
  35. package/dist/xyflow/hooks/useXYFlow.d.ts +162 -162
  36. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +1 -0
  37. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +1 -1
  38. package/dist/xyflow/nodes/element/ElementIcon.d.ts +1 -1
  39. package/dist/xyflow/nodes/element/ElementLink.d.ts +1 -1
  40. package/dist/xyflow/nodes/element/ElementNode.d.ts +2 -2
  41. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +2 -2
  42. package/dist/xyflow/nodes/element/element.css.d.ts +2 -1
  43. package/dist/xyflow/nodes/shared/NavigateToBtn.d.ts +1 -2
  44. package/dist/xyflow/types.d.ts +23 -23
  45. package/package.json +23 -21
  46. package/src/KeepAspectRatioContainer.tsx +1 -1
  47. package/src/LikeC4Diagram.css.ts +2 -0
  48. package/src/LikeC4Diagram.props.ts +9 -4
  49. package/src/LikeC4Diagram.tsx +17 -11
  50. package/src/StaticLikeC4Diagram.tsx +1 -0
  51. package/src/globals.css.ts +1 -0
  52. package/src/index.ts +0 -3
  53. package/src/state/DiagramContext.tsx +21 -12
  54. package/src/state/diagramStore.ts +177 -38
  55. package/src/theme.css.ts +1 -0
  56. package/src/ui/DiagramTitlePanel.css.ts +2 -1
  57. package/src/ui/DiagramTitlePanel.tsx +3 -4
  58. package/src/ui/DynamicViewWalkthrough.css.ts +46 -0
  59. package/src/ui/DynamicViewWalkthrough.tsx +86 -0
  60. package/src/ui/OptionsPanel.tsx +5 -3
  61. package/src/ui/index.ts +1 -0
  62. package/src/ui/options/NodeOptions.tsx +23 -24
  63. package/src/xyflow/FitviewOnDiagramChange.tsx +89 -69
  64. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +57 -39
  65. package/src/xyflow/SyncWithDiagram.tsx +55 -107
  66. package/src/xyflow/XYFlow.tsx +51 -35
  67. package/src/xyflow/XYFlowBackground.tsx +7 -5
  68. package/src/xyflow/XYFlowEvents.tsx +100 -95
  69. package/src/xyflow/XYFlowInner.tsx +50 -0
  70. package/src/xyflow/diagram-to-xyflow.ts +16 -21
  71. package/src/xyflow/edges/RelationshipEdge.tsx +70 -34
  72. package/src/xyflow/edges/edges.css.ts +68 -34
  73. package/src/xyflow/edges/utils.ts +31 -0
  74. package/src/xyflow/nodes/compound/CompoundNode.css.ts +6 -2
  75. package/src/xyflow/nodes/compound/CompoundNode.tsx +6 -3
  76. package/src/xyflow/nodes/element/ElementLink.tsx +13 -3
  77. package/src/xyflow/nodes/element/ElementNode.tsx +24 -19
  78. package/src/xyflow/nodes/element/element.css.ts +9 -2
  79. package/src/xyflow/nodes/shared/NavigateToBtn.tsx +1 -0
  80. package/src/xyflow/types.ts +7 -8
package/dist/style.css CHANGED
@@ -605,6 +605,7 @@ 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);
608
609
  --likec4-compound-font-family: var(--likec4-font-family);
609
610
  --likec4-compound-title-color: var(--likec4-element-loContrast);
610
611
  --likec4-element-font-family: var(--likec4-font-family);
@@ -1257,6 +1258,8 @@ svg.react-flow__connectionline {
1257
1258
  --likec4-element-fill: #34369f;
1258
1259
  --likec4-element-stroke: #373287;
1259
1260
  }._2h8g8h0 {
1261
+ overflow: hidden;
1262
+ position: relative;
1260
1263
  width: 100%;
1261
1264
  height: 100%;
1262
1265
  padding: 0;
@@ -1275,36 +1278,7 @@ svg.react-flow__connectionline {
1275
1278
  }
1276
1279
  :where(._2h8g8h4, ._2h8g8h3) .react-flow__attribution {
1277
1280
  display: none;
1278
- }.hbkbtj0 {
1279
- bottom: 0;
1280
- left: 0;
1281
- padding: 8px;
1282
- margin: 0;
1283
- }
1284
- .hbkbtj1 {
1285
- cursor: default;
1286
- min-width: 200px;
1287
- max-width: calc(100vw - 16px);
1288
- background-color: color-mix(in srgb, var(--mantine-color-body), transparent 20%);
1289
- backdrop-filter: blur(8px);
1290
- }
1291
- .hbkbtj3 {
1292
- white-space-collapse: preserve-breaks;
1293
- color: var(--mantine-color-gray-7);
1294
- }
1295
- :where([data-mantine-color-scheme="dark"]) .hbkbtj3 {
1296
- color: var(--mantine-color-gray-5);
1297
- }
1298
- @media (min-width: 62em) {
1299
- .hbkbtj1 {
1300
- max-width: 45vw;
1301
- }
1302
- }._1lmzt1h0 {
1303
- top: var(--likec4-options-panel-top, 1rem);
1304
- right: var(--likec4-options-panel-right, 1rem);
1305
- margin: 0;
1306
- box-shadow: var(--mantine-shadow-xl);
1307
- }@keyframes bexn7q5 {
1281
+ }@keyframes bexn7q6 {
1308
1282
  from {
1309
1283
  stroke-dashoffset: 36;
1310
1284
  }
@@ -1320,6 +1294,10 @@ svg.react-flow__connectionline {
1320
1294
  --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 35%);
1321
1295
  --xy-edge-stroke-width: 2.2px;
1322
1296
  }
1297
+ svg:has(.bexn7q2) {
1298
+ filter: var(--likec4-filter-dimmed);
1299
+ transition: filter 800ms ease-out;
1300
+ }
1323
1301
  :where([data-mantine-color-scheme="dark"]) .bexn7q1 {
1324
1302
  --bexn7q0: white;
1325
1303
  --xy-edge-label-color: var(--likec4-relation-labelColor);
@@ -1329,7 +1307,7 @@ svg.react-flow__connectionline {
1329
1307
  --xy-edge-stroke: var(--xy-edge-stroke-selected);
1330
1308
  --xy-edge-stroke-width: 3px;
1331
1309
  }
1332
- .bexn7q1[data-edge-hovered='true'] {
1310
+ .bexn7q1:is([data-edge-hovered='true'],[data-edge-active='true']) {
1333
1311
  --xy-edge-stroke: var(--xy-edge-stroke-selected);
1334
1312
  --xy-edge-stroke-width: 3px;
1335
1313
  }
@@ -1339,50 +1317,55 @@ svg.react-flow__connectionline {
1339
1317
  .react-flow__edges > svg {
1340
1318
  mix-blend-mode: screen;
1341
1319
  }
1342
- :where([data-mantine-color-scheme="dark"]) .react-flow__edges > svg {
1343
- mix-blend-mode: lighten;
1344
- }
1345
- .bexn7q2 {
1320
+ .bexn7q3 {
1346
1321
  stroke-width: var(--xy-edge-stroke-width);
1347
- stroke-opacity: 0.05;
1322
+ stroke-opacity: 0.08;
1348
1323
  transition-property: stroke-width, stroke-opacity;
1349
1324
  transition-duration: 155ms;
1350
1325
  transition-timing-function: ease-out;
1351
1326
  }
1352
- :where(.react-flow__edge.selected, [data-edge-hovered='true']) .bexn7q2 {
1327
+ :where(.react-flow__edge.selected, [data-edge-active='true'], [data-edge-hovered='true']) .bexn7q3 {
1353
1328
  stroke-width: calc(var(--xy-edge-stroke-width) + 8px);
1354
- stroke-opacity: 0.11;
1329
+ stroke-opacity: 0.15;
1355
1330
  }
1356
- .bexn7q3 {
1331
+ .bexn7q4 {
1357
1332
  fill: var(--xy-edge-stroke);
1358
1333
  stroke: var(--xy-edge-stroke);
1334
+ pointer-events: none;
1359
1335
  }
1360
- .bexn7q4 {
1336
+ .bexn7q5 {
1361
1337
  fill: var(--xy-edge-stroke);
1362
1338
  stroke: var(--xy-edge-stroke);
1339
+ fill-opacity: 0.75;
1340
+ stroke-width: 1;
1341
+ cursor: grab;
1342
+ pointer-events: visible;
1363
1343
  }
1364
- :where(.react-flow__edge.selected) .bexn7q3 {
1365
- --xy-edge-stroke: var(--xy-edge-stroke-selected);
1344
+ :where(.react-flow__edge.selected, [data-edge-active='true'], [data-edge-hovered='true']) .bexn7q5 {
1345
+ transition: all 150ms ease-out;
1346
+ fill-opacity: 1;
1347
+ stroke-width: 3;
1366
1348
  }
1367
- .bexn7q6 {
1349
+ .bexn7q7 {
1368
1350
  animation-duration: 800ms;
1369
1351
  animation-iteration-count: infinite;
1370
1352
  animation-timing-function: linear;
1371
1353
  }
1372
- :where([data-edge-hovered='true']) .bexn7q6 {
1373
- animation-name: bexn7q5;
1374
- animation-delay: 500ms;
1354
+ :where([data-edge-hovered='true']) .bexn7q7 {
1355
+ animation-name: bexn7q6;
1356
+ animation-delay: 350ms;
1375
1357
  transition: all 130ms ease-out;
1376
1358
  }
1377
- :where(.react-flow__edge.selected) .bexn7q6 {
1378
- animation-name: bexn7q5;
1359
+ :where(.react-flow__edge.selected, [data-edge-active='true']) .bexn7q7 {
1360
+ animation-name: bexn7q6;
1379
1361
  animation-delay: 0ms;
1380
1362
  transition: all 130ms ease-out;
1381
1363
  }
1382
- .bexn7qa {
1383
- --bexn7q9: translate(var(--bexn7q7), var(--bexn7q8));
1384
- --bexn7q7: 50%;
1385
- --bexn7q8: 50%;
1364
+ :where([data-edge-dir='back']) .bexn7q7 {
1365
+ animation-direction: reverse;
1366
+ }
1367
+ .bexn7qb {
1368
+ --bexn7qa: translate(var(--bexn7q8, 50%), var(--bexn7q9, 50%));
1386
1369
  top: 0;
1387
1370
  left: 0;
1388
1371
  font-family: var(--likec4-font-family);
@@ -1390,25 +1373,46 @@ svg.react-flow__connectionline {
1390
1373
  pointer-events: all;
1391
1374
  cursor: pointer;
1392
1375
  transform-origin: 50% 50%;
1393
- text-align: left;
1394
1376
  mix-blend-mode: screen;
1395
- padding: 2px 6px 4px 6px;
1396
- width: max-content;
1377
+ color: var(--xy-edge-label-color);
1397
1378
  background-color: var(--xy-edge-label-background-color);
1398
1379
  border-radius: 3px;
1399
- transform: var(--bexn7q9);
1400
- backface-visibility: hidden;
1380
+ transform: var(--bexn7qa);
1401
1381
  }
1402
- .bexn7qa[data-edge-hovered="true"] {
1382
+ .bexn7qb[data-edge-hovered="true"] {
1403
1383
  transition: all 140ms ease-out;
1404
- transform: var(--bexn7q9) scale(1.1);
1384
+ transform: var(--bexn7qa) scale(1.1);
1405
1385
  }
1406
- .bexn7qb {
1407
- color: var(--xy-edge-label-color);
1386
+ .bexn7qb:is(.bexn7q2) {
1387
+ transition: filter 800ms ease-out;
1388
+ filter: var(--likec4-filter-dimmed);
1389
+ }
1390
+ .bexn7qc {
1391
+ position: absolute;
1392
+ top: -2px;
1393
+ left: -2px;
1394
+ font-weight: 500;
1395
+ font-size: calc(1rem * var(--mantine-scale));
1396
+ line-height: 0.9;
1397
+ padding: 4px 6px;
1398
+ border-radius: 99999px;
1399
+ text-align: center;
1400
+ min-width: 22px;
1401
+ background-color: var(--xy-edge-label-background-color);
1402
+ transition: all 120ms ease-out;
1403
+ transform: translateX(-100%);
1404
+ font-variant-numeric: tabular-nums;
1405
+ }
1406
+ :where([data-edge-hovered="true"],[data-edge-active="true"]) .bexn7qc {
1407
+ font-weight: 600;
1408
+ background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 5%);
1409
+ }
1410
+ .bexn7qd {
1411
+ padding: 2px 6px 4px 6px;
1412
+ text-align: left;
1408
1413
  font-size: calc(0.78125rem * var(--mantine-scale));
1409
- line-height: 1.12;
1410
- transition: color 120ms ease-out;
1411
- }@keyframes lbtzdo7 {
1414
+ line-height: 1.2;
1415
+ }@keyframes lbtzdo8 {
1412
1416
  from {
1413
1417
  opacity: 0.6;
1414
1418
  }
@@ -1423,7 +1427,11 @@ svg.react-flow__connectionline {
1423
1427
  padding: 0;
1424
1428
  margin: 0;
1425
1429
  }
1426
- .lbtzdo2 {
1430
+ .lbtzdo1 {
1431
+ filter: var(--likec4-filter-dimmed);
1432
+ transition: filter 800ms ease-out;
1433
+ }
1434
+ .lbtzdo3 {
1427
1435
  width: 100%;
1428
1436
  height: 100%;
1429
1437
  position: relative;
@@ -1433,34 +1441,34 @@ svg.react-flow__connectionline {
1433
1441
  background: var(--likec4-element-fill);
1434
1442
  transition: all 200ms ease-out;
1435
1443
  }
1436
- :where(.react-flow__node.selected) .lbtzdo2 {
1444
+ :where(.react-flow__node.selected) .lbtzdo3 {
1437
1445
  box-shadow: none;
1438
1446
  }
1439
- :where(.react-flow__node:focus-visible) .lbtzdo2 {
1447
+ :where(.react-flow__node:focus-visible) .lbtzdo3 {
1440
1448
  transition-duration: 0ms;
1441
1449
  outline: 3px solid var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
1442
1450
  outline-offset: calc(0.09375rem * var(--mantine-scale));
1443
1451
  }
1444
- .lbtzdo5 {
1445
- --lbtzdo3: calc(var(--lbtzdo1, 80%) - var(--lbtzdo4));
1446
- --lbtzdo4: 0%;
1452
+ .lbtzdo6 {
1453
+ --lbtzdo4: calc(var(--lbtzdo2, 80%) - var(--lbtzdo5));
1454
+ --lbtzdo5: 0%;
1447
1455
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1448
1456
  border-style: dashed;
1449
1457
  border-width: 3px;
1450
1458
  padding: 6px;
1451
- border-color: color-mix(in srgb , var(--likec4-element-stroke), transparent min(var(--lbtzdo3), 30%));
1452
- background: color-mix(in srgb , var(--likec4-element-fill), transparent var(--lbtzdo3));
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));
1453
1461
  background-clip: padding-box;
1454
1462
  }
1455
- :where(.react-flow__node.selected) .lbtzdo5 {
1456
- --lbtzdo4: 5%;
1463
+ :where(.react-flow__node.selected) .lbtzdo6 {
1464
+ --lbtzdo5: 5%;
1457
1465
  transition-delay: 50ms;
1458
1466
  }
1459
- :where([data-hovered]) .lbtzdo5 {
1460
- --lbtzdo4: 15%;
1467
+ :where([data-hovered]) .lbtzdo6 {
1468
+ --lbtzdo5: 15%;
1461
1469
  transition-delay: 175ms;
1462
1470
  }
1463
- .lbtzdo6 {
1471
+ .lbtzdo7 {
1464
1472
  font-family: var(--likec4-compound-font-family);
1465
1473
  font-optical-sizing: auto;
1466
1474
  font-style: normal;
@@ -1475,18 +1483,18 @@ svg.react-flow__connectionline {
1475
1483
  color: var(--_compound-title-color,var(--likec4-compound-title-color));
1476
1484
  padding-left: 12px;
1477
1485
  }
1478
- :where([data-likec4-navigable='true']) .lbtzdo6 {
1486
+ :where([data-likec4-navigable='true']) .lbtzdo7 {
1479
1487
  padding-left: 26px;
1480
1488
  }
1481
1489
  :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) {
1482
1490
  --_compound-title-color: var(--likec4-element-stroke);
1483
1491
  }
1484
- :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdo6 {
1492
+ :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdo7 {
1485
1493
  opacity: 1;
1486
1494
  }
1487
- .lbtzdoa {
1488
- --lbtzdo8: var(--likec4-element-loContrast);
1489
- --lbtzdo9: 6;
1495
+ .lbtzdob {
1496
+ --lbtzdo9: var(--likec4-element-loContrast);
1497
+ --lbtzdoa: 6;
1490
1498
  position: absolute;
1491
1499
  top: 0;
1492
1500
  left: 0;
@@ -1496,33 +1504,33 @@ svg.react-flow__connectionline {
1496
1504
  overflow: visible;
1497
1505
  visibility: hidden;
1498
1506
  }
1499
- :where(.react-flow__node.selected:not(:focus-visible)) .lbtzdoa {
1507
+ :where(.react-flow__node.selected:not(:focus-visible)) .lbtzdob {
1500
1508
  visibility: visible;
1501
1509
  }
1502
- :where(.react-flow__node:focus-within:not(.selected)) .lbtzdoa {
1503
- --lbtzdo8: color-mix(in srgb, var(--likec4-element-stroke) 30%, var(--likec4-element-loContrast));
1504
- --lbtzdo9: 8;
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;
1505
1513
  }
1506
- :where([data-mantine-color-scheme='light']) .lbtzdoa {
1507
- --lbtzdo8: color-mix(in srgb, var(--likec4-element-stroke) 80%, #000);
1514
+ :where([data-mantine-color-scheme='light']) .lbtzdob {
1515
+ --lbtzdo9: color-mix(in srgb, var(--likec4-element-stroke) 80%, #000);
1508
1516
  }
1509
- .lbtzdoa rect {
1510
- stroke: var(--lbtzdo8);
1517
+ .lbtzdob rect {
1518
+ stroke: var(--lbtzdo9);
1511
1519
  transform-origin: center center;
1512
- stroke-width: var(--lbtzdo9);
1520
+ stroke-width: var(--lbtzdoa);
1513
1521
  animation-duration: 800ms;
1514
- animation-name: lbtzdo7;
1522
+ animation-name: lbtzdo8;
1515
1523
  animation-iteration-count: infinite;
1516
1524
  animation-direction: alternate;
1517
1525
  fill: none;
1518
1526
  }
1519
1527
  .lbtzdo0 {
1520
- --lbtzdob: var(--likec4-element-loContrast);
1528
+ --lbtzdoc: var(--likec4-element-loContrast);
1521
1529
  }
1522
1530
  :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) {
1523
- --lbtzdob: var(--likec4-element-stroke);
1531
+ --lbtzdoc: var(--likec4-element-stroke);
1524
1532
  }
1525
- .lbtzdoc {
1533
+ .lbtzdod {
1526
1534
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1527
1535
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
1528
1536
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
@@ -1531,41 +1539,41 @@ svg.react-flow__connectionline {
1531
1539
  left: 3px;
1532
1540
  top: 7px;
1533
1541
  cursor: pointer;
1534
- color: var(--_compound-title-color,var(--lbtzdob));
1542
+ color: var(--_compound-title-color,var(--lbtzdoc));
1535
1543
  transform-origin: 90% 70%;
1536
1544
  opacity: 0.75;
1537
1545
  transition: all 150ms ease-out;
1538
1546
  transition-delay: 0ms;
1539
1547
  background-color: var(--ai-bg);
1540
1548
  }
1541
- .lbtzdoc:hover {
1549
+ .lbtzdod:hover {
1542
1550
  box-shadow: var(--mantine-shadow-lg);
1543
1551
  transform: scale(1.466);
1544
1552
  opacity: 1;
1545
1553
  transition-delay: 0;
1546
1554
  }
1547
- .lbtzdoc:active {
1555
+ .lbtzdod:active {
1548
1556
  transform: scale(1.1);
1549
1557
  opacity: 1;
1550
1558
  transition-delay: 0;
1551
1559
  }
1552
- :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdoc {
1560
+ :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdod {
1553
1561
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 50%);
1554
1562
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 20%);
1555
1563
  opacity: 0.85;
1556
1564
  }
1557
- :where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdoc:not(:hover) {
1565
+ :where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdod:not(:hover) {
1558
1566
  --ai-bg: var(--ai-bg-hover);
1559
1567
  box-shadow: var(--mantine-shadow-lg);
1560
1568
  transform: scale(1.223);
1561
1569
  opacity: 1;
1562
1570
  transition-delay: 250ms;
1563
1571
  }
1564
- .lbtzdoc svg.icon {
1572
+ .lbtzdod svg.icon {
1565
1573
  width: 70%;
1566
1574
  height: 70%;
1567
1575
  stroke-width: 1.5;
1568
- }@keyframes _1b6tkn3 {
1576
+ }@keyframes _1b6tkn4 {
1569
1577
  from {
1570
1578
  opacity: 0.6;
1571
1579
  }
@@ -1582,38 +1590,42 @@ svg.react-flow__connectionline {
1582
1590
  margin: 0;
1583
1591
  backface-visibility: hidden;
1584
1592
  }
1585
- ._1b6tkn4 {
1593
+ .react-flow__node:has(._1b6tkn3) {
1594
+ filter: var(--likec4-filter-dimmed);
1595
+ transition: filter 800ms ease-out;
1596
+ }
1597
+ ._1b6tkn5 {
1586
1598
  stroke: var(--likec4-element-loContrast);
1587
1599
  transform-origin: center center;
1588
1600
  stroke-width: 6;
1589
1601
  animation-duration: 800ms;
1590
- animation-name: _1b6tkn3;
1602
+ animation-name: _1b6tkn4;
1591
1603
  animation-iteration-count: infinite;
1592
1604
  animation-direction: alternate;
1593
1605
  visibility: hidden;
1594
1606
  }
1595
- :where(.react-flow__node.selected) ._1b6tkn4 {
1607
+ :where(.react-flow__node.selected) ._1b6tkn5 {
1596
1608
  visibility: visible;
1597
1609
  }
1598
- :where(.react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkn4 {
1610
+ :where(.react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkn5 {
1599
1611
  animation-name: none;
1600
1612
  stroke-width: 10;
1601
1613
  stroke: var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
1602
1614
  visibility: visible;
1603
1615
  }
1604
- :where([data-likec4-shape="queue"], [data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tkn4 {
1616
+ :where([data-likec4-shape="queue"], [data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tkn5 {
1605
1617
  stroke-width: 10;
1606
1618
  }
1607
- ._1b6tkn5 {
1619
+ ._1b6tkn6 {
1608
1620
  fill: var(--likec4-element-fill);
1609
1621
  }
1610
- ._1b6tkn6 {
1622
+ ._1b6tkn7 {
1611
1623
  fill: var(--likec4-element-stroke);
1612
1624
  }
1613
- ._1b6tkn7 {
1625
+ ._1b6tkn8 {
1614
1626
  fill: var(--_1b6tkn0);
1615
1627
  }
1616
- ._1b6tkn8 {
1628
+ ._1b6tkn9 {
1617
1629
  flex: 0 0 auto;
1618
1630
  font-family: var(--likec4-element-font-family);
1619
1631
  font-optical-sizing: auto;
@@ -1625,14 +1637,14 @@ svg.react-flow__connectionline {
1625
1637
  text-wrap: balance;
1626
1638
  color: var(--likec4-element-hiContrast);
1627
1639
  }
1628
- ._1b6tkn9 {
1640
+ ._1b6tkna {
1629
1641
  flex: 0 1 auto;
1630
1642
  font-family: var(--likec4-element-font-family);
1631
1643
  font-optical-sizing: auto;
1632
1644
  font-style: normal;
1633
1645
  font-weight: 400;
1634
1646
  font-size: calc(0.875rem * var(--mantine-scale));
1635
- line-height: 1.125;
1647
+ line-height: 1.25;
1636
1648
  text-align: center;
1637
1649
  text-wrap: pretty;
1638
1650
  color: var(--likec4-element-loContrast);
@@ -1640,7 +1652,7 @@ svg.react-flow__connectionline {
1640
1652
  text-overflow: ellipsis;
1641
1653
  overflow: hidden;
1642
1654
  }
1643
- ._1b6tkna {
1655
+ ._1b6tknb {
1644
1656
  flex: 0 0 auto;
1645
1657
  font-family: var(--likec4-element-font-family);
1646
1658
  font-optical-sizing: auto;
@@ -1653,10 +1665,10 @@ svg.react-flow__connectionline {
1653
1665
  opacity: 0.92;
1654
1666
  color: var(--likec4-element-loContrast);
1655
1667
  }
1656
- ._1b6tkn2:hover ._1b6tkna {
1668
+ ._1b6tkn2:hover ._1b6tknb {
1657
1669
  opacity: 1;
1658
1670
  }
1659
- ._1b6tknb {
1671
+ ._1b6tknc {
1660
1672
  --_1b6tkn1: calc(1.5rem * var(--mantine-scale));
1661
1673
  position: relative;
1662
1674
  width: 100%;
@@ -1669,24 +1681,24 @@ svg.react-flow__connectionline {
1669
1681
  overflow: hidden;
1670
1682
  gap: calc(0.5rem * var(--mantine-scale));
1671
1683
  }
1672
- ._1b6tknb:has(._1b6tkn9):has(._1b6tkna) {
1684
+ ._1b6tknc:has(._1b6tkna):has(._1b6tknb) {
1673
1685
  gap: calc(0.375rem * var(--mantine-scale));
1674
1686
  }
1675
- :where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) ._1b6tknb {
1687
+ :where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) ._1b6tknc {
1676
1688
  padding-left: calc(2.5rem * var(--mantine-scale));
1677
1689
  padding-right: calc(1.25rem * var(--mantine-scale));
1678
1690
  }
1679
- :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tknb {
1691
+ :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tknc {
1680
1692
  padding-top: calc(2.125rem * var(--mantine-scale));
1681
1693
  }
1682
- :where([data-likec4-shape="browser"]) ._1b6tknb {
1694
+ :where([data-likec4-shape="browser"]) ._1b6tknc {
1683
1695
  padding-top: calc(2rem * var(--mantine-scale));
1684
1696
  padding-bottom: calc(1.75rem * var(--mantine-scale));
1685
1697
  }
1686
- ._1b6tknd {
1687
- --_1b6tknc: 30px;
1688
- flex: 0 1 var(--_1b6tknc);
1689
- max-height: var(--_1b6tknc);
1698
+ ._1b6tkne {
1699
+ --_1b6tknd: 30px;
1700
+ flex: 0 1 var(--_1b6tknd);
1701
+ max-height: var(--_1b6tknd);
1690
1702
  margin-top: -8px;
1691
1703
  position: relative;
1692
1704
  user-select: none;
@@ -1694,17 +1706,17 @@ svg.react-flow__connectionline {
1694
1706
  overflow: visible;
1695
1707
  mix-blend-mode: hard-light;
1696
1708
  }
1697
- ._1b6tknd img {
1709
+ ._1b6tkne img {
1698
1710
  position: absolute;
1699
1711
  left: 0;
1700
1712
  bottom: 0;
1701
1713
  width: 100%;
1702
1714
  height: auto;
1703
1715
  object-fit: contain;
1704
- max-height: calc(var(--_1b6tknc) + 16px);
1716
+ max-height: calc(var(--_1b6tknd) + 16px);
1705
1717
  }
1706
- ._1b6tkng {
1707
- --_1b6tkne:
1718
+ ._1b6tknh {
1719
+ --_1b6tknf:
1708
1720
  drop-shadow(0 2px 1px rgba(0, 0, 0, 0.21))
1709
1721
  drop-shadow(0 1px 1px color-mix(in srgb, var(--likec4-element-stroke) 40%, transparent))
1710
1722
  drop-shadow(0 5px 3px rgba(0, 0, 0, 0.1))
@@ -1716,14 +1728,14 @@ svg.react-flow__connectionline {
1716
1728
  fill: var(--likec4-element-fill);
1717
1729
  stroke: var(--likec4-element-stroke);
1718
1730
  overflow: visible;
1719
- filter: var(--_1b6tknf, var(--_1b6tkne));
1731
+ filter: var(--_1b6tkng, var(--_1b6tknf));
1720
1732
  transition: filter 300ms ease-out;
1721
1733
  transition-delay: 0ms;
1722
1734
  }
1723
- :where(.react-flow__node.selected, .react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkng {
1735
+ :where(.react-flow__node.selected, .react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tknh {
1724
1736
  filter: none;
1725
1737
  }
1726
- ._1b6tknh {
1738
+ ._1b6tkni {
1727
1739
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1728
1740
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
1729
1741
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
@@ -1741,28 +1753,28 @@ svg.react-flow__connectionline {
1741
1753
  transition-delay: 0ms;
1742
1754
  background-color: var(--ai-bg);
1743
1755
  }
1744
- ._1b6tknh:hover {
1756
+ ._1b6tkni:hover {
1745
1757
  box-shadow: var(--mantine-shadow-lg);
1746
1758
  transform: translate(-50%, 0) scale(1.35);
1747
1759
  opacity: 1;
1748
1760
  transition-delay: 0;
1749
1761
  }
1750
- ._1b6tknh:active {
1762
+ ._1b6tkni:active {
1751
1763
  transform: translate(-50%, 0) scale(1.02);
1752
1764
  opacity: 1;
1753
1765
  transition-delay: 0;
1754
1766
  }
1755
- :where([data-likec4-shape='browser']) ._1b6tknh {
1767
+ :where([data-likec4-shape='browser']) ._1b6tkni {
1756
1768
  bottom: 3px;
1757
1769
  }
1758
- :where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tknh:not(:hover) {
1770
+ :where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tkni:not(:hover) {
1759
1771
  --ai-bg: var(--ai-bg-hover);
1760
1772
  box-shadow: var(--mantine-shadow-lg);
1761
1773
  transform: translate(-50%, 0) scale(1.185);
1762
1774
  opacity: 1;
1763
1775
  transition-delay: 250ms;
1764
1776
  }
1765
- ._1b6tknh svg.icon {
1777
+ ._1b6tkni svg.icon {
1766
1778
  width: 65%;
1767
1779
  height: 65%;
1768
1780
  stroke-width: 1.5;
@@ -1817,4 +1829,66 @@ svg.react-flow__connectionline {
1817
1829
  }
1818
1830
  ._4ysv0o2 {
1819
1831
  text-align: left;
1832
+ }._2jkb2y0 {
1833
+ position: absolute;
1834
+ bottom: 0.5rem;
1835
+ left: 50%;
1836
+ transform: translateX(-50%);
1837
+ padding: 0;
1838
+ margin: 0;
1839
+ }
1840
+ ._2jkb2y1 {
1841
+ backdrop-filter: blur(8px);
1842
+ transition: all 175ms ease-in;
1843
+ }
1844
+ ._2jkb2y1:hover {
1845
+ transition-timing-function: ease-out;
1846
+ transform: scale(1.1);
1847
+ }
1848
+ ._2jkb2y1:active {
1849
+ transition-duration: 100ms;
1850
+ transform: scale(0.98) translateY(3px);
1851
+ }
1852
+ ._2jkb2y3 {
1853
+ --_2jkb2y2: 35%;
1854
+ --button-bg: color-mix(in srgb, var(--mantine-primary-color-filled), transparent var(--_2jkb2y2));
1855
+ --button-hover: color-mix(in srgb, var(--mantine-primary-color-filled-hover), transparent var(--_2jkb2y2));
1856
+ transition: all 175ms ease-in;
1857
+ background-color: var(--button-bg);
1858
+ }
1859
+ [data-mantine-color-scheme="light"] ._2jkb2y3 {
1860
+ --_2jkb2y2: 15%;
1861
+ }
1862
+ ._2jkb2y3 .tabler-icon {
1863
+ width: 80%;
1864
+ }._1lmzt1h0 {
1865
+ top: var(--likec4-options-panel-top, 1rem);
1866
+ right: var(--likec4-options-panel-right, 1rem);
1867
+ margin: 0;
1868
+ 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
+ }
1820
1894
  }
@@ -2,6 +2,7 @@ export declare const vars: {
2
2
  default: {
3
3
  font: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
4
4
  };
5
+ filterDimmed: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
5
6
  likec4: {
6
7
  font: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
7
8
  background: {
@@ -1,2 +1 @@
1
- /// <reference types="react" />
2
- export default function DiagramTitlePanel(): JSX.Element;
1
+ export default function DiagramTitlePanel(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ export declare const container: string;
2
+ export declare const buttons: string;
3
+ export declare const btn: string;
@@ -0,0 +1 @@
1
+ export declare function DynamicViewWalkthrough(): import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1 @@
1
- /// <reference types="react" />
2
- export default function OptionsPanel(): JSX.Element;
1
+ export default function OptionsPanel(): import("react/jsx-runtime").JSX.Element;
@@ -1 +1,2 @@
1
+ export * from './DynamicViewWalkthrough';
1
2
  export { default as OptionsPanel } from './OptionsPanel';