@likec4/diagram 1.1.0 → 1.2.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 (76) 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 +22 -12
  4. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  5. package/dist/index.d.ts +0 -1
  6. package/dist/index.mjs +2209 -706
  7. package/dist/mantine/EnsureMantine.d.ts +1 -1
  8. package/dist/state/DiagramContext.d.ts +2143 -19
  9. package/dist/state/WhenInitialized.d.ts +1 -1
  10. package/dist/state/diagramStore.d.ts +2152 -19
  11. package/dist/state/useDiagramStore.d.ts +2142 -18
  12. package/dist/style.css +256 -118
  13. package/dist/theme.css.d.ts +1 -0
  14. package/dist/ui/DiagramTitlePanel.css.d.ts +4 -0
  15. package/dist/ui/DiagramTitlePanel.d.ts +1 -0
  16. package/dist/ui/DynamicViewWalkthrough.css.d.ts +3 -0
  17. package/dist/ui/DynamicViewWalkthrough.d.ts +1 -0
  18. package/dist/ui/OptionsPanel.d.ts +1 -3
  19. package/dist/ui/index.d.ts +1 -0
  20. package/dist/ui/options/NodeOptions.d.ts +1 -2
  21. package/dist/xyflow/FitviewOnDiagramChange.d.ts +4 -2
  22. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +1 -0
  23. package/dist/xyflow/SyncWithDiagram.d.ts +1 -2
  24. package/dist/xyflow/XYFlow.d.ts +4 -7
  25. package/dist/xyflow/XYFlowBackground.d.ts +5 -4
  26. package/dist/xyflow/XYFlowEvents.d.ts +84 -84
  27. package/dist/xyflow/XYFlowInner.d.ts +11 -0
  28. package/dist/xyflow/diagram-to-xyflow.d.ts +1 -1
  29. package/dist/xyflow/edges/RelationshipEdge.d.ts +14 -14
  30. package/dist/xyflow/edges/edges.css.d.ts +5 -2
  31. package/dist/xyflow/edges/utils.d.ts +2 -0
  32. package/dist/xyflow/hooks/useXYFlow.d.ts +126 -126
  33. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +1 -0
  34. package/dist/xyflow/nodes/element/ElementIcon.d.ts +1 -1
  35. package/dist/xyflow/nodes/element/ElementLink.d.ts +1 -1
  36. package/dist/xyflow/nodes/element/ElementNode.d.ts +1 -1
  37. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +2 -2
  38. package/dist/xyflow/nodes/element/element.css.d.ts +2 -1
  39. package/dist/xyflow/nodes/shared/NavigateToBtn.d.ts +1 -2
  40. package/dist/xyflow/types.d.ts +18 -18
  41. package/package.json +21 -16
  42. package/src/KeepAspectRatioContainer.tsx +1 -1
  43. package/src/LikeC4Diagram.css.ts +4 -1
  44. package/src/LikeC4Diagram.props.ts +24 -14
  45. package/src/LikeC4Diagram.tsx +18 -9
  46. package/src/StaticLikeC4Diagram.tsx +2 -0
  47. package/src/globals.css.ts +7 -1
  48. package/src/index.ts +0 -3
  49. package/src/state/DiagramContext.tsx +21 -12
  50. package/src/state/diagramStore.ts +275 -98
  51. package/src/theme.css.ts +1 -0
  52. package/src/ui/DiagramTitlePanel.css.ts +33 -0
  53. package/src/ui/DiagramTitlePanel.tsx +138 -0
  54. package/src/ui/DynamicViewWalkthrough.css.ts +46 -0
  55. package/src/ui/DynamicViewWalkthrough.tsx +86 -0
  56. package/src/ui/OptionsPanel.tsx +7 -24
  57. package/src/ui/index.ts +1 -0
  58. package/src/ui/options/NodeOptions.tsx +103 -27
  59. package/src/xyflow/FitviewOnDiagramChange.tsx +89 -69
  60. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +75 -0
  61. package/src/xyflow/SyncWithDiagram.tsx +55 -101
  62. package/src/xyflow/XYFlow.tsx +52 -32
  63. package/src/xyflow/XYFlowBackground.tsx +7 -5
  64. package/src/xyflow/XYFlowEvents.tsx +150 -104
  65. package/src/xyflow/XYFlowInner.tsx +50 -0
  66. package/src/xyflow/diagram-to-xyflow.ts +16 -21
  67. package/src/xyflow/edges/RelationshipEdge.tsx +102 -70
  68. package/src/xyflow/edges/edges.css.ts +128 -53
  69. package/src/xyflow/edges/utils.ts +31 -0
  70. package/src/xyflow/nodes/compound/CompoundNode.css.ts +20 -12
  71. package/src/xyflow/nodes/compound/CompoundNode.tsx +6 -3
  72. package/src/xyflow/nodes/element/ElementLink.tsx +13 -3
  73. package/src/xyflow/nodes/element/ElementNode.tsx +24 -19
  74. package/src/xyflow/nodes/element/element.css.ts +10 -2
  75. package/src/xyflow/nodes/shared/NavigateToBtn.tsx +1 -0
  76. package/src/xyflow/types.ts +7 -8
package/dist/style.css CHANGED
@@ -597,10 +597,15 @@ svg.react-flow__connectionline {
597
597
  .react-flow__edge-text {
598
598
  fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));
599
599
  }
600
+ .likec4-diagram-root {
601
+ -webkit-font-smoothing: var(--mantine-webkit-font-smoothing);
602
+ -moz-osx-font-smoothing: var(--mantine-moz-font-smoothing);
603
+ }
600
604
  .likec4-diagram-root {
601
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"');
602
606
  --likec4-background-color: var(--mantine-color-body);
603
607
  --likec4-background-pattern-color: var(--mantine-color-dimmed);
608
+ --likec4-filter-dimmed: brightness(.6) grayscale(.8) opacity(.5) blur(1px);
604
609
  --likec4-compound-font-family: var(--likec4-font-family);
605
610
  --likec4-compound-title-color: var(--likec4-element-loContrast);
606
611
  --likec4-element-font-family: var(--likec4-font-family);
@@ -1253,6 +1258,8 @@ svg.react-flow__connectionline {
1253
1258
  --likec4-element-fill: #34369f;
1254
1259
  --likec4-element-stroke: #373287;
1255
1260
  }._2h8g8h0 {
1261
+ overflow: hidden;
1262
+ position: relative;
1256
1263
  width: 100%;
1257
1264
  height: 100%;
1258
1265
  padding: 0;
@@ -1262,7 +1269,7 @@ svg.react-flow__connectionline {
1262
1269
  --xy-background-pattern-color: var(--likec4-background-pattern-color);
1263
1270
  }
1264
1271
  .react-flow._2h8g8h1 .react-flow__viewport {
1265
- will-change: transform;
1272
+ backface-visibility: hidden;
1266
1273
  }
1267
1274
  .react-flow._2h8g8h1._2h8g8h3 {
1268
1275
  --likec4-background-color: transparent !important;
@@ -1271,53 +1278,94 @@ svg.react-flow__connectionline {
1271
1278
  }
1272
1279
  :where(._2h8g8h4, ._2h8g8h3) .react-flow__attribution {
1273
1280
  display: none;
1274
- }._1lmzt1h0 {
1275
- top: var(--likec4-options-panel-top, 1rem);
1276
- right: var(--likec4-options-panel-right, 1rem);
1277
- margin: 0;
1278
- box-shadow: var(--mantine-shadow-xl);
1279
- }.bexn7q0 {
1281
+ }@keyframes bexn7q6 {
1282
+ from {
1283
+ stroke-dashoffset: 36;
1284
+ }
1285
+ to {
1286
+ stroke-dashoffset: 1;
1287
+ }
1288
+ }
1289
+ .bexn7q1 {
1290
+ --bexn7q0: black;
1280
1291
  --xy-edge-stroke: var(--likec4-relation-lineColor);
1281
- --xy-edge-stroke-selected: color-mix(in srgb, var(--likec4-relation-lineColor), white 30%);
1292
+ --xy-edge-stroke-selected: color-mix(in srgb, var(--likec4-relation-lineColor), var(--bexn7q0) 35%);
1282
1293
  --xy-edge-label-color: color-mix(in srgb, var(--likec4-relation-labelColor), rgba(255 255 255 / 0.85) 20%);
1283
1294
  --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 35%);
1284
- --xy-edge-stroke-width: 2.5px;
1295
+ --xy-edge-stroke-width: 2.2px;
1296
+ }
1297
+ svg:has(.bexn7q2) {
1298
+ filter: var(--likec4-filter-dimmed);
1299
+ transition: filter 800ms ease-out;
1285
1300
  }
1286
- [data-mantine-color-scheme="dark"] .bexn7q0 {
1301
+ :where([data-mantine-color-scheme="dark"]) .bexn7q1 {
1302
+ --bexn7q0: white;
1287
1303
  --xy-edge-label-color: var(--likec4-relation-labelColor);
1288
1304
  --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 55%);
1289
1305
  }
1290
- .bexn7q0[data-edge-hovered='true'] {
1291
- --xy-edge-stroke: color-mix(in srgb, var(--likec4-relation-lineColor), white 30%);
1306
+ :where(.react-flow__edge.selected) .bexn7q1 {
1307
+ --xy-edge-stroke: var(--xy-edge-stroke-selected);
1292
1308
  --xy-edge-stroke-width: 3px;
1293
1309
  }
1294
- .react-flow__edge.selected .bexn7q0 {
1295
- --xy-edge-stroke-width: 2.5;
1310
+ .bexn7q1:is([data-edge-hovered='true'],[data-edge-active='true']) {
1311
+ --xy-edge-stroke: var(--xy-edge-stroke-selected);
1312
+ --xy-edge-stroke-width: 3px;
1313
+ }
1314
+ :where(.react-flow__edge.selected) .bexn7q1[data-edge-hovered='true'] {
1315
+ --xy-edge-stroke-width: 3.6px;
1296
1316
  }
1297
1317
  .react-flow__edges > svg {
1298
1318
  mix-blend-mode: screen;
1299
1319
  }
1300
- :where([data-mantine-color-scheme="dark"]) .react-flow__edges > svg {
1301
- mix-blend-mode: lighten;
1320
+ .bexn7q3 {
1321
+ stroke-width: var(--xy-edge-stroke-width);
1322
+ stroke-opacity: 0.08;
1323
+ transition-property: stroke-width, stroke-opacity;
1324
+ transition-duration: 155ms;
1325
+ transition-timing-function: ease-out;
1302
1326
  }
1303
- .bexn7q1 {
1304
- stroke-width: calc(var(--xy-edge-stroke-width) + 8);
1305
- stroke-opacity: 0.1;
1327
+ :where(.react-flow__edge.selected, [data-edge-active='true'], [data-edge-hovered='true']) .bexn7q3 {
1328
+ stroke-width: calc(var(--xy-edge-stroke-width) + 8px);
1329
+ stroke-opacity: 0.15;
1306
1330
  }
1307
- .bexn7q2 {
1331
+ .bexn7q4 {
1308
1332
  fill: var(--xy-edge-stroke);
1309
1333
  stroke: var(--xy-edge-stroke);
1334
+ pointer-events: none;
1310
1335
  }
1311
- .react-flow__edge.selected .bexn7q2 {
1312
- --xy-edge-stroke: var(--xy-edge-stroke-selected);
1336
+ .bexn7q5 {
1337
+ fill: var(--xy-edge-stroke);
1338
+ stroke: var(--xy-edge-stroke);
1339
+ fill-opacity: 0.75;
1340
+ stroke-width: 1;
1341
+ cursor: grab;
1342
+ pointer-events: visible;
1313
1343
  }
1314
- .bexn7q0[data-edge-hovered='true'] .bexn7q3 {
1315
- transition: all 130ms ease-out;
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;
1316
1348
  }
1317
1349
  .bexn7q7 {
1318
- --bexn7q6: translate(var(--bexn7q4), var(--bexn7q5));
1319
- --bexn7q4: 50%;
1320
- --bexn7q5: 50%;
1350
+ animation-duration: 800ms;
1351
+ animation-iteration-count: infinite;
1352
+ animation-timing-function: linear;
1353
+ }
1354
+ :where([data-edge-hovered='true']) .bexn7q7 {
1355
+ animation-name: bexn7q6;
1356
+ animation-delay: 350ms;
1357
+ transition: all 130ms ease-out;
1358
+ }
1359
+ :where(.react-flow__edge.selected, [data-edge-active='true']) .bexn7q7 {
1360
+ animation-name: bexn7q6;
1361
+ animation-delay: 0ms;
1362
+ transition: all 130ms ease-out;
1363
+ }
1364
+ :where([data-edge-dir='back']) .bexn7q7 {
1365
+ animation-direction: reverse;
1366
+ }
1367
+ .bexn7qb {
1368
+ --bexn7qa: translate(var(--bexn7q8, 50%), var(--bexn7q9, 50%));
1321
1369
  top: 0;
1322
1370
  left: 0;
1323
1371
  font-family: var(--likec4-font-family);
@@ -1325,25 +1373,46 @@ svg.react-flow__connectionline {
1325
1373
  pointer-events: all;
1326
1374
  cursor: pointer;
1327
1375
  transform-origin: 50% 50%;
1328
- text-align: left;
1329
1376
  mix-blend-mode: screen;
1330
- padding: 2px 6px 4px 6px;
1331
- width: max-content;
1377
+ color: var(--xy-edge-label-color);
1332
1378
  background-color: var(--xy-edge-label-background-color);
1333
1379
  border-radius: 3px;
1334
- transform: var(--bexn7q6);
1335
- will-change: transform;
1380
+ transform: var(--bexn7qa);
1336
1381
  }
1337
- .bexn7q7[data-edge-hovered="true"] {
1382
+ .bexn7qb[data-edge-hovered="true"] {
1338
1383
  transition: all 140ms ease-out;
1339
- transform: var(--bexn7q6) scale(1.1);
1384
+ transform: var(--bexn7qa) scale(1.1);
1340
1385
  }
1341
- .bexn7q8 {
1342
- 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;
1343
1413
  font-size: calc(0.78125rem * var(--mantine-scale));
1344
- line-height: 1.12;
1345
- transition: color 120ms ease-out;
1346
- }@keyframes lbtzdo7 {
1414
+ line-height: 1.2;
1415
+ }@keyframes lbtzdo8 {
1347
1416
  from {
1348
1417
  opacity: 0.6;
1349
1418
  }
@@ -1358,46 +1427,48 @@ svg.react-flow__connectionline {
1358
1427
  padding: 0;
1359
1428
  margin: 0;
1360
1429
  }
1361
- .lbtzdo2 {
1430
+ .lbtzdo1 {
1431
+ filter: var(--likec4-filter-dimmed);
1432
+ transition: filter 800ms ease-out;
1433
+ }
1434
+ .lbtzdo3 {
1362
1435
  width: 100%;
1363
1436
  height: 100%;
1364
1437
  position: relative;
1365
- border-radius: calc(0.375rem * var(--mantine-scale));
1438
+ border-radius: 6px;
1366
1439
  box-shadow: 0 4px 10px 0.5px rgba(0,0,0,0.1) , 0 2px 2px -1px rgba(0,0,0,0.4);
1367
1440
  padding: 8px;
1368
1441
  background: var(--likec4-element-fill);
1369
1442
  transition: all 200ms ease-out;
1370
1443
  }
1371
- :where(.react-flow__node.selected) .lbtzdo2 {
1444
+ :where(.react-flow__node.selected) .lbtzdo3 {
1372
1445
  box-shadow: none;
1373
1446
  }
1374
- :where(.react-flow__node:focus-visible) .lbtzdo2 {
1447
+ :where(.react-flow__node:focus-visible) .lbtzdo3 {
1375
1448
  transition-duration: 0ms;
1376
1449
  outline: 3px solid var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
1377
1450
  outline-offset: calc(0.09375rem * var(--mantine-scale));
1378
1451
  }
1379
- .lbtzdo5 {
1380
- --lbtzdo3: calc(var(--lbtzdo1, 80%) - var(--lbtzdo4));
1381
- --lbtzdo4: 0%;
1452
+ .lbtzdo6 {
1453
+ --lbtzdo4: calc(var(--lbtzdo2, 80%) - var(--lbtzdo5));
1454
+ --lbtzdo5: 0%;
1382
1455
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1383
- border-radius: 8px;
1384
1456
  border-style: dashed;
1385
1457
  border-width: 3px;
1386
1458
  padding: 6px;
1387
- border-color: color-mix(in srgb , var(--likec4-element-stroke), transparent min(var(--lbtzdo3), 30%));
1388
- 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));
1389
1461
  background-clip: padding-box;
1390
1462
  }
1391
- :where(.lbtzdo0[data-hovered]) .lbtzdo5 {
1392
- --lbtzdo4: 15%;
1393
- transition-delay: 175ms;
1394
- }
1395
- :where(.react-flow__node.selected) .lbtzdo5 {
1396
- --lbtzdo4: 25%;
1463
+ :where(.react-flow__node.selected) .lbtzdo6 {
1464
+ --lbtzdo5: 5%;
1397
1465
  transition-delay: 50ms;
1398
- border-color: transparent;
1399
1466
  }
1400
- .lbtzdo6 {
1467
+ :where([data-hovered]) .lbtzdo6 {
1468
+ --lbtzdo5: 15%;
1469
+ transition-delay: 175ms;
1470
+ }
1471
+ .lbtzdo7 {
1401
1472
  font-family: var(--likec4-compound-font-family);
1402
1473
  font-optical-sizing: auto;
1403
1474
  font-style: normal;
@@ -1412,18 +1483,18 @@ svg.react-flow__connectionline {
1412
1483
  color: var(--_compound-title-color,var(--likec4-compound-title-color));
1413
1484
  padding-left: 12px;
1414
1485
  }
1415
- :where([data-likec4-navigable='true']) .lbtzdo6 {
1486
+ :where([data-likec4-navigable='true']) .lbtzdo7 {
1416
1487
  padding-left: 26px;
1417
1488
  }
1418
- :where([data-mantine-color-scheme='light']) .lbtzdo6 {
1419
- opacity: 1;
1420
- }
1421
1489
  :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) {
1422
1490
  --_compound-title-color: var(--likec4-element-stroke);
1423
1491
  }
1424
- .lbtzdoa {
1425
- --lbtzdo8: var(--likec4-element-loContrast);
1426
- --lbtzdo9: 6;
1492
+ :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdo7 {
1493
+ opacity: 1;
1494
+ }
1495
+ .lbtzdob {
1496
+ --lbtzdo9: var(--likec4-element-loContrast);
1497
+ --lbtzdoa: 6;
1427
1498
  position: absolute;
1428
1499
  top: 0;
1429
1500
  left: 0;
@@ -1433,33 +1504,33 @@ svg.react-flow__connectionline {
1433
1504
  overflow: visible;
1434
1505
  visibility: hidden;
1435
1506
  }
1436
- :where(.react-flow__node.selected:not(:focus-visible)) .lbtzdoa {
1507
+ :where(.react-flow__node.selected:not(:focus-visible)) .lbtzdob {
1437
1508
  visibility: visible;
1438
1509
  }
1439
- :where(.react-flow__node:focus-within:not(.selected)) .lbtzdoa {
1440
- --lbtzdo8: color-mix(in srgb, var(--likec4-element-stroke) 30%, var(--likec4-element-loContrast));
1441
- --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;
1442
1513
  }
1443
- :where([data-mantine-color-scheme='light']) .lbtzdoa {
1444
- --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);
1445
1516
  }
1446
- .lbtzdoa rect {
1447
- stroke: var(--lbtzdo8);
1517
+ .lbtzdob rect {
1518
+ stroke: var(--lbtzdo9);
1448
1519
  transform-origin: center center;
1449
- stroke-width: var(--lbtzdo9);
1520
+ stroke-width: var(--lbtzdoa);
1450
1521
  animation-duration: 800ms;
1451
- animation-name: lbtzdo7;
1522
+ animation-name: lbtzdo8;
1452
1523
  animation-iteration-count: infinite;
1453
1524
  animation-direction: alternate;
1454
1525
  fill: none;
1455
1526
  }
1456
1527
  .lbtzdo0 {
1457
- --lbtzdob: var(--likec4-element-loContrast);
1528
+ --lbtzdoc: var(--likec4-element-loContrast);
1458
1529
  }
1459
1530
  :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) {
1460
- --lbtzdob: var(--likec4-element-stroke);
1531
+ --lbtzdoc: var(--likec4-element-stroke);
1461
1532
  }
1462
- .lbtzdoc {
1533
+ .lbtzdod {
1463
1534
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1464
1535
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
1465
1536
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
@@ -1468,41 +1539,41 @@ svg.react-flow__connectionline {
1468
1539
  left: 3px;
1469
1540
  top: 7px;
1470
1541
  cursor: pointer;
1471
- color: var(--_compound-title-color,var(--lbtzdob));
1542
+ color: var(--_compound-title-color,var(--lbtzdoc));
1472
1543
  transform-origin: 90% 70%;
1473
1544
  opacity: 0.75;
1474
1545
  transition: all 150ms ease-out;
1475
1546
  transition-delay: 0ms;
1476
1547
  background-color: var(--ai-bg);
1477
1548
  }
1478
- .lbtzdoc:hover {
1549
+ .lbtzdod:hover {
1479
1550
  box-shadow: var(--mantine-shadow-lg);
1480
1551
  transform: scale(1.466);
1481
1552
  opacity: 1;
1482
1553
  transition-delay: 0;
1483
1554
  }
1484
- .lbtzdoc:active {
1555
+ .lbtzdod:active {
1485
1556
  transform: scale(1.1);
1486
1557
  opacity: 1;
1487
1558
  transition-delay: 0;
1488
1559
  }
1489
- :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdoc {
1560
+ :where([data-mantine-color-scheme='light'] .likec4-compound-transparent) .lbtzdod {
1490
1561
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 50%);
1491
1562
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 20%);
1492
1563
  opacity: 0.85;
1493
1564
  }
1494
- :where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdoc:not(:hover) {
1565
+ :where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdod:not(:hover) {
1495
1566
  --ai-bg: var(--ai-bg-hover);
1496
1567
  box-shadow: var(--mantine-shadow-lg);
1497
1568
  transform: scale(1.223);
1498
1569
  opacity: 1;
1499
1570
  transition-delay: 250ms;
1500
1571
  }
1501
- .lbtzdoc svg.icon {
1572
+ .lbtzdod svg.icon {
1502
1573
  width: 70%;
1503
1574
  height: 70%;
1504
1575
  stroke-width: 1.5;
1505
- }@keyframes _1b6tkn3 {
1576
+ }@keyframes _1b6tkn4 {
1506
1577
  from {
1507
1578
  opacity: 0.6;
1508
1579
  }
@@ -1517,39 +1588,44 @@ svg.react-flow__connectionline {
1517
1588
  height: 100%;
1518
1589
  padding: 0;
1519
1590
  margin: 0;
1591
+ backface-visibility: hidden;
1592
+ }
1593
+ .react-flow__node:has(._1b6tkn3) {
1594
+ filter: var(--likec4-filter-dimmed);
1595
+ transition: filter 800ms ease-out;
1520
1596
  }
1521
- ._1b6tkn4 {
1597
+ ._1b6tkn5 {
1522
1598
  stroke: var(--likec4-element-loContrast);
1523
1599
  transform-origin: center center;
1524
1600
  stroke-width: 6;
1525
1601
  animation-duration: 800ms;
1526
- animation-name: _1b6tkn3;
1602
+ animation-name: _1b6tkn4;
1527
1603
  animation-iteration-count: infinite;
1528
1604
  animation-direction: alternate;
1529
1605
  visibility: hidden;
1530
1606
  }
1531
- :where(.react-flow__node.selected) ._1b6tkn4 {
1607
+ :where(.react-flow__node.selected) ._1b6tkn5 {
1532
1608
  visibility: visible;
1533
1609
  }
1534
- :where(.react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkn4 {
1610
+ :where(.react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkn5 {
1535
1611
  animation-name: none;
1536
1612
  stroke-width: 10;
1537
1613
  stroke: var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
1538
1614
  visibility: visible;
1539
1615
  }
1540
- :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 {
1541
1617
  stroke-width: 10;
1542
1618
  }
1543
- ._1b6tkn5 {
1619
+ ._1b6tkn6 {
1544
1620
  fill: var(--likec4-element-fill);
1545
1621
  }
1546
- ._1b6tkn6 {
1622
+ ._1b6tkn7 {
1547
1623
  fill: var(--likec4-element-stroke);
1548
1624
  }
1549
- ._1b6tkn7 {
1625
+ ._1b6tkn8 {
1550
1626
  fill: var(--_1b6tkn0);
1551
1627
  }
1552
- ._1b6tkn8 {
1628
+ ._1b6tkn9 {
1553
1629
  flex: 0 0 auto;
1554
1630
  font-family: var(--likec4-element-font-family);
1555
1631
  font-optical-sizing: auto;
@@ -1561,14 +1637,14 @@ svg.react-flow__connectionline {
1561
1637
  text-wrap: balance;
1562
1638
  color: var(--likec4-element-hiContrast);
1563
1639
  }
1564
- ._1b6tkn9 {
1640
+ ._1b6tkna {
1565
1641
  flex: 0 1 auto;
1566
1642
  font-family: var(--likec4-element-font-family);
1567
1643
  font-optical-sizing: auto;
1568
1644
  font-style: normal;
1569
1645
  font-weight: 400;
1570
1646
  font-size: calc(0.875rem * var(--mantine-scale));
1571
- line-height: 1.125;
1647
+ line-height: 1.25;
1572
1648
  text-align: center;
1573
1649
  text-wrap: pretty;
1574
1650
  color: var(--likec4-element-loContrast);
@@ -1576,7 +1652,7 @@ svg.react-flow__connectionline {
1576
1652
  text-overflow: ellipsis;
1577
1653
  overflow: hidden;
1578
1654
  }
1579
- ._1b6tkna {
1655
+ ._1b6tknb {
1580
1656
  flex: 0 0 auto;
1581
1657
  font-family: var(--likec4-element-font-family);
1582
1658
  font-optical-sizing: auto;
@@ -1589,10 +1665,10 @@ svg.react-flow__connectionline {
1589
1665
  opacity: 0.92;
1590
1666
  color: var(--likec4-element-loContrast);
1591
1667
  }
1592
- ._1b6tkn2:hover ._1b6tkna {
1668
+ ._1b6tkn2:hover ._1b6tknb {
1593
1669
  opacity: 1;
1594
1670
  }
1595
- ._1b6tknb {
1671
+ ._1b6tknc {
1596
1672
  --_1b6tkn1: calc(1.5rem * var(--mantine-scale));
1597
1673
  position: relative;
1598
1674
  width: 100%;
@@ -1605,24 +1681,24 @@ svg.react-flow__connectionline {
1605
1681
  overflow: hidden;
1606
1682
  gap: calc(0.5rem * var(--mantine-scale));
1607
1683
  }
1608
- ._1b6tknb:has(._1b6tkn9):has(._1b6tkna) {
1684
+ ._1b6tknc:has(._1b6tkna):has(._1b6tknb) {
1609
1685
  gap: calc(0.375rem * var(--mantine-scale));
1610
1686
  }
1611
- :where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) ._1b6tknb {
1687
+ :where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) ._1b6tknc {
1612
1688
  padding-left: calc(2.5rem * var(--mantine-scale));
1613
1689
  padding-right: calc(1.25rem * var(--mantine-scale));
1614
1690
  }
1615
- :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tknb {
1691
+ :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tknc {
1616
1692
  padding-top: calc(2.125rem * var(--mantine-scale));
1617
1693
  }
1618
- :where([data-likec4-shape="browser"]) ._1b6tknb {
1694
+ :where([data-likec4-shape="browser"]) ._1b6tknc {
1619
1695
  padding-top: calc(2rem * var(--mantine-scale));
1620
1696
  padding-bottom: calc(1.75rem * var(--mantine-scale));
1621
1697
  }
1622
- ._1b6tknd {
1623
- --_1b6tknc: 30px;
1624
- flex: 0 1 var(--_1b6tknc);
1625
- max-height: var(--_1b6tknc);
1698
+ ._1b6tkne {
1699
+ --_1b6tknd: 30px;
1700
+ flex: 0 1 var(--_1b6tknd);
1701
+ max-height: var(--_1b6tknd);
1626
1702
  margin-top: -8px;
1627
1703
  position: relative;
1628
1704
  user-select: none;
@@ -1630,17 +1706,17 @@ svg.react-flow__connectionline {
1630
1706
  overflow: visible;
1631
1707
  mix-blend-mode: hard-light;
1632
1708
  }
1633
- ._1b6tknd img {
1709
+ ._1b6tkne img {
1634
1710
  position: absolute;
1635
1711
  left: 0;
1636
1712
  bottom: 0;
1637
1713
  width: 100%;
1638
1714
  height: auto;
1639
1715
  object-fit: contain;
1640
- max-height: calc(var(--_1b6tknc) + 16px);
1716
+ max-height: calc(var(--_1b6tknd) + 16px);
1641
1717
  }
1642
- ._1b6tkng {
1643
- --_1b6tkne:
1718
+ ._1b6tknh {
1719
+ --_1b6tknf:
1644
1720
  drop-shadow(0 2px 1px rgba(0, 0, 0, 0.21))
1645
1721
  drop-shadow(0 1px 1px color-mix(in srgb, var(--likec4-element-stroke) 40%, transparent))
1646
1722
  drop-shadow(0 5px 3px rgba(0, 0, 0, 0.1))
@@ -1652,14 +1728,14 @@ svg.react-flow__connectionline {
1652
1728
  fill: var(--likec4-element-fill);
1653
1729
  stroke: var(--likec4-element-stroke);
1654
1730
  overflow: visible;
1655
- filter: var(--_1b6tknf, var(--_1b6tkne));
1731
+ filter: var(--_1b6tkng, var(--_1b6tknf));
1656
1732
  transition: filter 300ms ease-out;
1657
1733
  transition-delay: 0ms;
1658
1734
  }
1659
- :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 {
1660
1736
  filter: none;
1661
1737
  }
1662
- ._1b6tknh {
1738
+ ._1b6tkni {
1663
1739
  --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1664
1740
  --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
1665
1741
  --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
@@ -1677,28 +1753,28 @@ svg.react-flow__connectionline {
1677
1753
  transition-delay: 0ms;
1678
1754
  background-color: var(--ai-bg);
1679
1755
  }
1680
- ._1b6tknh:hover {
1756
+ ._1b6tkni:hover {
1681
1757
  box-shadow: var(--mantine-shadow-lg);
1682
1758
  transform: translate(-50%, 0) scale(1.35);
1683
1759
  opacity: 1;
1684
1760
  transition-delay: 0;
1685
1761
  }
1686
- ._1b6tknh:active {
1762
+ ._1b6tkni:active {
1687
1763
  transform: translate(-50%, 0) scale(1.02);
1688
1764
  opacity: 1;
1689
1765
  transition-delay: 0;
1690
1766
  }
1691
- :where([data-likec4-shape='browser']) ._1b6tknh {
1767
+ :where([data-likec4-shape='browser']) ._1b6tkni {
1692
1768
  bottom: 3px;
1693
1769
  }
1694
- :where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tknh:not(:hover) {
1770
+ :where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tkni:not(:hover) {
1695
1771
  --ai-bg: var(--ai-bg-hover);
1696
1772
  box-shadow: var(--mantine-shadow-lg);
1697
1773
  transform: translate(-50%, 0) scale(1.185);
1698
1774
  opacity: 1;
1699
1775
  transition-delay: 250ms;
1700
1776
  }
1701
- ._1b6tknh svg.icon {
1777
+ ._1b6tkni svg.icon {
1702
1778
  width: 65%;
1703
1779
  height: 65%;
1704
1780
  stroke-width: 1.5;
@@ -1753,4 +1829,66 @@ svg.react-flow__connectionline {
1753
1829
  }
1754
1830
  ._4ysv0o2 {
1755
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
+ }
1756
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: {
@@ -0,0 +1,4 @@
1
+ export declare const container: string;
2
+ export declare const paper: string;
3
+ export declare const title: string;
4
+ export declare const description: string;
@@ -0,0 +1 @@
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;