@likec4/diagram 1.7.1 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/LikeC4Diagram.d.ts +1 -1
  2. package/dist/LikeC4Diagram.props.d.ts +38 -22
  3. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  4. package/dist/globals.css.d.ts +0 -1
  5. package/dist/hooks/index.d.ts +2 -0
  6. package/dist/{state/useDiagramStore.d.ts → hooks/useDiagramState.d.ts} +2 -3
  7. package/dist/{xyflow/hooks → hooks}/useXYFlow.d.ts +10 -10
  8. package/dist/index.d.ts +3 -2
  9. package/dist/index.mjs +755 -401
  10. package/dist/state/DiagramContext.d.ts +74 -30
  11. package/dist/state/diagram-to-xyflow.d.ts +2 -0
  12. package/dist/state/diagramStore.d.ts +71 -22
  13. package/dist/style.css +655 -35
  14. package/dist/ui/top-left/ChangeAutoLayoutButton.d.ts +3 -0
  15. package/dist/ui/top-left/TopLeftPanel.d.ts +4 -0
  16. package/dist/ui/top-left/_shared.d.ts +5 -0
  17. package/dist/ui/top-left/styles.css.d.ts +3 -0
  18. package/dist/xyflow/XYFlowInner.d.ts +0 -1
  19. package/dist/xyflow/edges/edges.css.d.ts +1 -1
  20. package/dist/xyflow/{hooks/useLayoutConstraints.d.ts → useLayoutConstraints.d.ts} +1 -1
  21. package/dist/xyflow/utils.d.ts +11 -1
  22. package/package.json +6 -6
  23. package/src/LikeC4Diagram.props.ts +66 -32
  24. package/src/LikeC4Diagram.tsx +19 -12
  25. package/src/StaticLikeC4Diagram.tsx +2 -0
  26. package/src/globals.css.ts +0 -2
  27. package/src/hooks/index.ts +2 -0
  28. package/src/{state/useDiagramStore.ts → hooks/useDiagramState.ts} +3 -4
  29. package/src/{xyflow/hooks → hooks}/useXYFlow.ts +1 -1
  30. package/src/index.ts +4 -2
  31. package/src/state/DiagramContext.tsx +15 -7
  32. package/src/state/diagram-to-xyflow.ts +17 -3
  33. package/src/state/diagramStore.ts +73 -38
  34. package/src/ui/DiagramTitlePanel.tsx +1 -1
  35. package/src/ui/DynamicViewWalkthrough.tsx +1 -2
  36. package/src/ui/OptionsPanel.tsx +1 -1
  37. package/src/ui/options/EdgeOptions.tsx +1 -16
  38. package/src/ui/options/NodeOptions.tsx +38 -13
  39. package/src/ui/top-left/ChangeAutoLayoutButton.tsx +131 -0
  40. package/src/ui/top-left/TopLeftPanel.tsx +213 -0
  41. package/src/ui/top-left/_shared.ts +19 -0
  42. package/src/ui/top-left/styles.css.ts +38 -0
  43. package/src/xyflow/FitviewOnDiagramChange.tsx +2 -2
  44. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +87 -59
  45. package/src/xyflow/XYFlow.tsx +7 -8
  46. package/src/xyflow/XYFlowEvents.tsx +39 -19
  47. package/src/xyflow/XYFlowInner.tsx +5 -7
  48. package/src/xyflow/edges/RelationshipEdge.tsx +60 -27
  49. package/src/xyflow/edges/edges.css.ts +29 -25
  50. package/src/xyflow/nodes/compound/CompoundNode.tsx +1 -1
  51. package/src/xyflow/nodes/element/ElementLink.tsx +1 -2
  52. package/src/xyflow/nodes/element/ElementNode.tsx +7 -5
  53. package/src/xyflow/nodes/shared/NavigateToBtn.tsx +1 -1
  54. package/src/xyflow/{hooks/useLayoutConstraints.ts → useLayoutConstraints.ts} +3 -3
  55. package/src/xyflow/utils.ts +25 -1
  56. package/dist/state/hooks.d.ts +0 -4
  57. package/dist/state/index.d.ts +0 -2
  58. package/dist/state/useNavigationHistory.d.ts +0 -5
  59. package/dist/types.d.ts +0 -20
  60. package/dist/ui/BackwardForwardPanel.css.d.ts +0 -1
  61. package/dist/ui/BackwardForwardPanel.d.ts +0 -1
  62. package/dist/xyflow/hooks/index.d.ts +0 -2
  63. package/src/state/hooks.ts +0 -5
  64. package/src/state/index.ts +0 -2
  65. package/src/state/useNavigationHistory.ts +0 -39
  66. package/src/types.ts +0 -22
  67. package/src/ui/BackwardForwardPanel.css.ts +0 -22
  68. package/src/ui/BackwardForwardPanel.tsx +0 -76
  69. package/src/xyflow/hooks/index.ts +0 -3
package/dist/style.css CHANGED
@@ -1,3 +1,602 @@
1
+ /* this gets exported as style.css and can be used for the default theming */
2
+ /* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */
3
+ .react-flow {
4
+ direction: ltr;
5
+
6
+ --xy-edge-stroke-default: #b1b1b7;
7
+ --xy-edge-stroke-width-default: 1;
8
+ --xy-edge-stroke-selected-default: #555;
9
+
10
+ --xy-connectionline-stroke-default: #b1b1b7;
11
+ --xy-connectionline-stroke-width-default: 1;
12
+
13
+ --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);
14
+
15
+ --xy-minimap-background-color-default: #fff;
16
+ --xy-minimap-mask-background-color-default: rgb(240, 240, 240, 0.6);
17
+ --xy-minimap-mask-stroke-color-default: transparent;
18
+ --xy-minimap-mask-stroke-width-default: 1;
19
+ --xy-minimap-node-background-color-default: #e2e2e2;
20
+ --xy-minimap-node-stroke-color-default: transparent;
21
+ --xy-minimap-node-stroke-width-default: 2;
22
+
23
+ --xy-background-color-default: transparent;
24
+ --xy-background-pattern-dots-color-default: #91919a;
25
+ --xy-background-pattern-lines-color-default: #eee;
26
+ --xy-background-pattern-cross-color-default: #e2e2e2;
27
+ background-color: var(--xy-background-color, var(--xy-background-color-default));
28
+ --xy-node-color-default: inherit;
29
+ --xy-node-border-default: 1px solid #1a192b;
30
+ --xy-node-background-color-default: #fff;
31
+ --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
32
+ --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);
33
+ --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;
34
+ --xy-node-border-radius-default: 3px;
35
+
36
+ --xy-handle-background-color-default: #1a192b;
37
+ --xy-handle-border-color-default: #fff;
38
+
39
+ --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);
40
+ --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);
41
+
42
+ --xy-controls-button-background-color-default: #fefefe;
43
+ --xy-controls-button-background-color-hover-default: #f4f4f4;
44
+ --xy-controls-button-color-default: inherit;
45
+ --xy-controls-button-color-hover-default: inherit;
46
+ --xy-controls-button-border-color-default: #eee;
47
+ --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
48
+
49
+ --xy-edge-label-background-color-default: #ffffff;
50
+ --xy-edge-label-color-default: inherit;
51
+ --xy-resize-background-color-default: #3367d9;
52
+ }
53
+ .react-flow.dark {
54
+ --xy-edge-stroke-default: #3e3e3e;
55
+ --xy-edge-stroke-width-default: 1;
56
+ --xy-edge-stroke-selected-default: #727272;
57
+
58
+ --xy-connectionline-stroke-default: #b1b1b7;
59
+ --xy-connectionline-stroke-width-default: 1;
60
+
61
+ --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);
62
+
63
+ --xy-minimap-background-color-default: #141414;
64
+ --xy-minimap-mask-background-color-default: rgb(60, 60, 60, 0.6);
65
+ --xy-minimap-mask-stroke-color-default: transparent;
66
+ --xy-minimap-mask-stroke-width-default: 1;
67
+ --xy-minimap-node-background-color-default: #2b2b2b;
68
+ --xy-minimap-node-stroke-color-default: transparent;
69
+ --xy-minimap-node-stroke-width-default: 2;
70
+
71
+ --xy-background-color-default: #141414;
72
+ --xy-background-pattern-dots-color-default: #777;
73
+ --xy-background-pattern-lines-color-default: #777;
74
+ --xy-background-pattern-cross-color-default: #777;
75
+ --xy-node-color-default: #f8f8f8;
76
+ --xy-node-border-default: 1px solid #3c3c3c;
77
+ --xy-node-background-color-default: #1e1e1e;
78
+ --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
79
+ --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);
80
+ --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;
81
+
82
+ --xy-handle-background-color-default: #bebebe;
83
+ --xy-handle-border-color-default: #1e1e1e;
84
+
85
+ --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);
86
+ --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);
87
+
88
+ --xy-controls-button-background-color-default: #2b2b2b;
89
+ --xy-controls-button-background-color-hover-default: #3e3e3e;
90
+ --xy-controls-button-color-default: #f8f8f8;
91
+ --xy-controls-button-color-hover-default: #fff;
92
+ --xy-controls-button-border-color-default: #5b5b5b;
93
+ --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
94
+
95
+ --xy-edge-label-background-color-default: #141414;
96
+ --xy-edge-label-color-default: #f8f8f8;
97
+ }
98
+ .react-flow__background {
99
+ background-color: var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));
100
+ pointer-events: none;
101
+ z-index: -1;
102
+ }
103
+ .react-flow__container {
104
+ position: absolute;
105
+ width: 100%;
106
+ height: 100%;
107
+ top: 0;
108
+ left: 0;
109
+ }
110
+ .react-flow__pane {
111
+ z-index: 1;
112
+ }
113
+ .react-flow__pane.selection {
114
+ cursor: pointer;
115
+ }
116
+ .react-flow__pane.draggable {
117
+ cursor: grab;
118
+ }
119
+ .react-flow__pane.draggable.dragging {
120
+ cursor: grabbing;
121
+ }
122
+ .react-flow__viewport {
123
+ transform-origin: 0 0;
124
+ z-index: 2;
125
+ pointer-events: none;
126
+ }
127
+ .react-flow__renderer {
128
+ z-index: 4;
129
+ }
130
+ .react-flow__selection {
131
+ z-index: 6;
132
+ }
133
+ .react-flow__nodesselection-rect:focus,
134
+ .react-flow__nodesselection-rect:focus-visible {
135
+ outline: none;
136
+ }
137
+ .react-flow__edge-path {
138
+ stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
139
+ stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));
140
+ fill: none;
141
+ }
142
+ .react-flow__connection-path {
143
+ stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));
144
+ stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));
145
+ fill: none;
146
+ }
147
+ .react-flow__edges {
148
+ position: absolute;
149
+ }
150
+ .react-flow__edges svg {
151
+ overflow: visible;
152
+ position: absolute;
153
+ pointer-events: none;
154
+ }
155
+ .react-flow__edge {
156
+ pointer-events: visibleStroke;
157
+ }
158
+ .react-flow__edge.selectable {
159
+ cursor: pointer;
160
+ }
161
+ .react-flow__edge.animated path {
162
+ stroke-dasharray: 5;
163
+ animation: dashdraw 0.5s linear infinite;
164
+ }
165
+ .react-flow__edge.animated path.react-flow__edge-interaction {
166
+ stroke-dasharray: none;
167
+ animation: none;
168
+ }
169
+ .react-flow__edge.inactive {
170
+ pointer-events: none;
171
+ }
172
+ .react-flow__edge.selected,
173
+ .react-flow__edge:focus,
174
+ .react-flow__edge:focus-visible {
175
+ outline: none;
176
+ }
177
+ .react-flow__edge.selected .react-flow__edge-path,
178
+ .react-flow__edge.selectable:focus .react-flow__edge-path,
179
+ .react-flow__edge.selectable:focus-visible .react-flow__edge-path {
180
+ stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));
181
+ }
182
+ .react-flow__edge-textwrapper {
183
+ pointer-events: all;
184
+ }
185
+ .react-flow__edge .react-flow__edge-text {
186
+ pointer-events: none;
187
+ -webkit-user-select: none;
188
+ -moz-user-select: none;
189
+ user-select: none;
190
+ }
191
+ .react-flow__connection {
192
+ pointer-events: none;
193
+ }
194
+ .react-flow__connection .animated {
195
+ stroke-dasharray: 5;
196
+ animation: dashdraw 0.5s linear infinite;
197
+ }
198
+ svg.react-flow__connectionline {
199
+ z-index: 1001;
200
+ overflow: visible;
201
+ position: absolute;
202
+ }
203
+ .react-flow__nodes {
204
+ pointer-events: none;
205
+ transform-origin: 0 0;
206
+ }
207
+ .react-flow__node {
208
+ position: absolute;
209
+ -webkit-user-select: none;
210
+ -moz-user-select: none;
211
+ user-select: none;
212
+ pointer-events: all;
213
+ transform-origin: 0 0;
214
+ box-sizing: border-box;
215
+ cursor: default;
216
+ }
217
+ .react-flow__node.selectable {
218
+ cursor: pointer;
219
+ }
220
+ .react-flow__node.draggable {
221
+ cursor: grab;
222
+ pointer-events: all;
223
+ }
224
+ .react-flow__node.draggable.dragging {
225
+ cursor: grabbing;
226
+ }
227
+ .react-flow__nodesselection {
228
+ z-index: 3;
229
+ transform-origin: left top;
230
+ pointer-events: none;
231
+ }
232
+ .react-flow__nodesselection-rect {
233
+ position: absolute;
234
+ pointer-events: all;
235
+ cursor: grab;
236
+ }
237
+ .react-flow__handle {
238
+ position: absolute;
239
+ pointer-events: none;
240
+ min-width: 5px;
241
+ min-height: 5px;
242
+ width: 6px;
243
+ height: 6px;
244
+ background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));
245
+ border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));
246
+ border-radius: 100%;
247
+ }
248
+ .react-flow__handle.connectingfrom {
249
+ pointer-events: all;
250
+ }
251
+ .react-flow__handle.connectionindicator {
252
+ pointer-events: all;
253
+ cursor: crosshair;
254
+ }
255
+ .react-flow__handle-bottom {
256
+ top: auto;
257
+ left: 50%;
258
+ bottom: 0;
259
+ transform: translate(-50%, 50%);
260
+ }
261
+ .react-flow__handle-top {
262
+ top: 0;
263
+ left: 50%;
264
+ transform: translate(-50%, -50%);
265
+ }
266
+ .react-flow__handle-left {
267
+ top: 50%;
268
+ left: 0;
269
+ transform: translate(-50%, -50%);
270
+ }
271
+ .react-flow__handle-right {
272
+ top: 50%;
273
+ right: 0;
274
+ transform: translate(50%, -50%);
275
+ }
276
+ .react-flow__edgeupdater {
277
+ cursor: move;
278
+ pointer-events: all;
279
+ }
280
+ .react-flow__panel {
281
+ position: absolute;
282
+ z-index: 5;
283
+ margin: 15px;
284
+ }
285
+ .react-flow__panel.top {
286
+ top: 0;
287
+ }
288
+ .react-flow__panel.bottom {
289
+ bottom: 0;
290
+ }
291
+ .react-flow__panel.left {
292
+ left: 0;
293
+ }
294
+ .react-flow__panel.right {
295
+ right: 0;
296
+ }
297
+ .react-flow__panel.center {
298
+ left: 50%;
299
+ transform: translateX(-50%);
300
+ }
301
+ .react-flow__attribution {
302
+ font-size: 10px;
303
+ background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));
304
+ padding: 2px 3px;
305
+ margin: 0;
306
+ }
307
+ .react-flow__attribution a {
308
+ text-decoration: none;
309
+ color: #999;
310
+ }
311
+ @keyframes dashdraw {
312
+ from {
313
+ stroke-dashoffset: 10;
314
+ }
315
+ }
316
+ .react-flow__edgelabel-renderer {
317
+ position: absolute;
318
+ width: 100%;
319
+ height: 100%;
320
+ pointer-events: none;
321
+ -webkit-user-select: none;
322
+ -moz-user-select: none;
323
+ user-select: none;
324
+ left: 0;
325
+ top: 0;
326
+ }
327
+ .react-flow__viewport-portal {
328
+ position: absolute;
329
+ width: 100%;
330
+ height: 100%;
331
+ left: 0;
332
+ top: 0;
333
+ -webkit-user-select: none;
334
+ -moz-user-select: none;
335
+ user-select: none;
336
+ }
337
+ .react-flow__minimap {
338
+ background: var(
339
+ --xy-minimap-background-color-props,
340
+ var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))
341
+ );
342
+ }
343
+ .react-flow__minimap-svg {
344
+ display: block;
345
+ }
346
+ .react-flow__minimap-mask {
347
+ fill: var(
348
+ --xy-minimap-mask-background-color-props,
349
+ var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))
350
+ );
351
+ stroke: var(
352
+ --xy-minimap-mask-stroke-color-props,
353
+ var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))
354
+ );
355
+ stroke-width: var(
356
+ --xy-minimap-mask-stroke-width-props,
357
+ var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))
358
+ );
359
+ }
360
+ .react-flow__minimap-node {
361
+ fill: var(
362
+ --xy-minimap-node-background-color-props,
363
+ var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))
364
+ );
365
+ stroke: var(
366
+ --xy-minimap-node-stroke-color-props,
367
+ var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))
368
+ );
369
+ stroke-width: var(
370
+ --xy-minimap-node-stroke-width-props,
371
+ var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))
372
+ );
373
+ }
374
+ .react-flow__background-pattern.dots {
375
+ fill: var(
376
+ --xy-background-pattern-color-props,
377
+ var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))
378
+ );
379
+ }
380
+ .react-flow__background-pattern.lines {
381
+ stroke: var(
382
+ --xy-background-pattern-color-props,
383
+ var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))
384
+ );
385
+ }
386
+ .react-flow__background-pattern.cross {
387
+ stroke: var(
388
+ --xy-background-pattern-color-props,
389
+ var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))
390
+ );
391
+ }
392
+ .react-flow__controls {
393
+ display: flex;
394
+ flex-direction: column;
395
+ box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));
396
+ }
397
+ .react-flow__controls.horizontal {
398
+ flex-direction: row;
399
+ }
400
+ .react-flow__controls-button {
401
+ display: flex;
402
+ justify-content: center;
403
+ align-items: center;
404
+ height: 26px;
405
+ width: 26px;
406
+ padding: 4px;
407
+ border: none;
408
+ background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));
409
+ border-bottom: 1px solid
410
+ var(
411
+ --xy-controls-button-border-color-props,
412
+ var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))
413
+ );
414
+ color: var(
415
+ --xy-controls-button-color-props,
416
+ var(--xy-controls-button-color, var(--xy-controls-button-color-default))
417
+ );
418
+ cursor: pointer;
419
+ -webkit-user-select: none;
420
+ -moz-user-select: none;
421
+ user-select: none;
422
+ }
423
+ .react-flow__controls-button svg {
424
+ width: 100%;
425
+ max-width: 12px;
426
+ max-height: 12px;
427
+ fill: currentColor;
428
+ }
429
+ .react-flow__edge.updating .react-flow__edge-path {
430
+ stroke: #777;
431
+ }
432
+ .react-flow__edge-text {
433
+ font-size: 10px;
434
+ }
435
+ .react-flow__node.selectable:focus,
436
+ .react-flow__node.selectable:focus-visible {
437
+ outline: none;
438
+ }
439
+ .react-flow__node-input,
440
+ .react-flow__node-default,
441
+ .react-flow__node-output,
442
+ .react-flow__node-group {
443
+ padding: 10px;
444
+ border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));
445
+ width: 150px;
446
+ font-size: 12px;
447
+ color: var(--xy-node-color, var(--xy-node-color-default));
448
+ text-align: center;
449
+ border: var(--xy-node-border, var(--xy-node-border-default));
450
+ background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));
451
+ }
452
+ .react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {
453
+ box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));
454
+ }
455
+ .react-flow__node-input.selectable.selected,
456
+ .react-flow__node-input.selectable:focus,
457
+ .react-flow__node-input.selectable:focus-visible,
458
+ .react-flow__node-default.selectable.selected,
459
+ .react-flow__node-default.selectable:focus,
460
+ .react-flow__node-default.selectable:focus-visible,
461
+ .react-flow__node-output.selectable.selected,
462
+ .react-flow__node-output.selectable:focus,
463
+ .react-flow__node-output.selectable:focus-visible,
464
+ .react-flow__node-group.selectable.selected,
465
+ .react-flow__node-group.selectable:focus,
466
+ .react-flow__node-group.selectable:focus-visible {
467
+ box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));
468
+ }
469
+ .react-flow__node-group {
470
+ background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));
471
+ }
472
+ .react-flow__nodesselection-rect,
473
+ .react-flow__selection {
474
+ background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));
475
+ border: var(--xy-selection-border, var(--xy-selection-border-default));
476
+ }
477
+ .react-flow__nodesselection-rect:focus,
478
+ .react-flow__nodesselection-rect:focus-visible,
479
+ .react-flow__selection:focus,
480
+ .react-flow__selection:focus-visible {
481
+ outline: none;
482
+ }
483
+ .react-flow__controls-button:hover {
484
+ background: var(
485
+ --xy-controls-button-background-color-hover-props,
486
+ var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))
487
+ );
488
+ color: var(
489
+ --xy-controls-button-color-hover-props,
490
+ var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))
491
+ );
492
+ }
493
+ .react-flow__controls-button:disabled {
494
+ pointer-events: none;
495
+ }
496
+ .react-flow__controls-button:disabled svg {
497
+ fill-opacity: 0.4;
498
+ }
499
+ .react-flow__controls-button:last-child {
500
+ border-bottom: none;
501
+ }
502
+ .react-flow__resize-control {
503
+ position: absolute;
504
+ }
505
+ .react-flow__resize-control.left,
506
+ .react-flow__resize-control.right {
507
+ cursor: ew-resize;
508
+ }
509
+ .react-flow__resize-control.top,
510
+ .react-flow__resize-control.bottom {
511
+ cursor: ns-resize;
512
+ }
513
+ .react-flow__resize-control.top.left,
514
+ .react-flow__resize-control.bottom.right {
515
+ cursor: nwse-resize;
516
+ }
517
+ .react-flow__resize-control.bottom.left,
518
+ .react-flow__resize-control.top.right {
519
+ cursor: nesw-resize;
520
+ }
521
+ /* handle styles */
522
+ .react-flow__resize-control.handle {
523
+ width: 4px;
524
+ height: 4px;
525
+ border: 1px solid #fff;
526
+ border-radius: 1px;
527
+ background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));
528
+ transform: translate(-50%, -50%);
529
+ }
530
+ .react-flow__resize-control.handle.left {
531
+ left: 0;
532
+ top: 50%;
533
+ }
534
+ .react-flow__resize-control.handle.right {
535
+ left: 100%;
536
+ top: 50%;
537
+ }
538
+ .react-flow__resize-control.handle.top {
539
+ left: 50%;
540
+ top: 0;
541
+ }
542
+ .react-flow__resize-control.handle.bottom {
543
+ left: 50%;
544
+ top: 100%;
545
+ }
546
+ .react-flow__resize-control.handle.top.left {
547
+ left: 0;
548
+ }
549
+ .react-flow__resize-control.handle.bottom.left {
550
+ left: 0;
551
+ }
552
+ .react-flow__resize-control.handle.top.right {
553
+ left: 100%;
554
+ }
555
+ .react-flow__resize-control.handle.bottom.right {
556
+ left: 100%;
557
+ }
558
+ /* line styles */
559
+ .react-flow__resize-control.line {
560
+ border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));
561
+ border-width: 0;
562
+ border-style: solid;
563
+ }
564
+ .react-flow__resize-control.line.left,
565
+ .react-flow__resize-control.line.right {
566
+ width: 1px;
567
+ transform: translate(-50%, 0);
568
+ top: 0;
569
+ height: 100%;
570
+ }
571
+ .react-flow__resize-control.line.left {
572
+ left: 0;
573
+ border-left-width: 1px;
574
+ }
575
+ .react-flow__resize-control.line.right {
576
+ left: 100%;
577
+ border-right-width: 1px;
578
+ }
579
+ .react-flow__resize-control.line.top,
580
+ .react-flow__resize-control.line.bottom {
581
+ height: 1px;
582
+ transform: translate(0, -50%);
583
+ left: 0;
584
+ width: 100%;
585
+ }
586
+ .react-flow__resize-control.line.top {
587
+ top: 0;
588
+ border-top-width: 1px;
589
+ }
590
+ .react-flow__resize-control.line.bottom {
591
+ border-bottom-width: 1px;
592
+ top: 100%;
593
+ }
594
+ .react-flow__edge-textbg {
595
+ fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));
596
+ }
597
+ .react-flow__edge-text {
598
+ fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));
599
+ }
1
600
  .likec4-diagram-root {
2
601
  overflow: hidden;
3
602
  position: relative;
@@ -692,7 +1291,7 @@
692
1291
  --bexn7q0: black;
693
1292
  --xy-edge-stroke: var(--likec4-relation-lineColor);
694
1293
  --xy-edge-stroke-selected: color-mix(in srgb, var(--likec4-relation-lineColor), var(--bexn7q0) 35%);
695
- --xy-edge-label-color: color-mix(in srgb, var(--likec4-relation-labelColor), rgba(255 255 255 / 0.85) 20%);
1294
+ --xy-edge-label-color: color-mix(in srgb, var(--likec4-relation-labelColor), rgba(255 255 255 / 0.85) 40%);
696
1295
  --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 40%);
697
1296
  --xy-edge-stroke-width: 3;
698
1297
  }
@@ -786,12 +1385,29 @@
786
1385
  .bexn7q2 .bexn7q8 {
787
1386
  animation-play-state: paused;
788
1387
  }
789
- .bexn7qc {
790
- --bexn7qb: translate(var(--bexn7q9, -50%), var(--bexn7qa, -50%));
1388
+ .bexn7q9 {
1389
+ flex: 0 0 auto;
1390
+ font-weight: 600;
1391
+ font-size: calc(0.875rem * var(--mantine-scale));
1392
+ line-height: 1;
1393
+ padding: 5px 5px;
1394
+ text-align: center;
1395
+ min-width: 22px;
1396
+ border-top-left-radius: 2px;
1397
+ border-bottom-left-radius: 2px;
1398
+ background-color: color-mix(in srgb, var(--likec4-relation-labelBg), var(--bexn7q0) 5%);
1399
+ font-variant-numeric: tabular-nums;
1400
+ }
1401
+ :where([data-mantine-color-scheme="dark"]) :where([data-likec4-color="gray"]) .bexn7q9 {
1402
+ background-color: color-mix(in srgb, var(--likec4-relation-labelBg), var(--bexn7q0) 15%);
1403
+ }
1404
+ .bexn7qd {
1405
+ --bexn7qc: translate(var(--bexn7qa, -50%), var(--bexn7qb, -50%));
791
1406
  top: 0;
792
1407
  left: 0;
793
1408
  padding: 2px 4px 4px 4px;
794
1409
  font-family: var(--likec4-font-family);
1410
+ display: flex;
795
1411
  position: absolute;
796
1412
  pointer-events: all;
797
1413
  cursor: pointer;
@@ -800,45 +1416,32 @@
800
1416
  mix-blend-mode: plus-lighter;
801
1417
  color: var(--xy-edge-label-color);
802
1418
  background-color: var(--xy-edge-label-background-color);
803
- border-radius: 3px;
804
- transform: var(--bexn7qb);
1419
+ border-radius: 2px;
1420
+ transform: var(--bexn7qc);
805
1421
  }
806
- .bexn7qc[data-edge-hovered="true"] {
1422
+ .bexn7qd[data-edge-hovered="true"] {
807
1423
  transition: all 140ms ease-in-out;
808
- transform: var(--bexn7qb) scale(1.12);
1424
+ transform: var(--bexn7qc) scale(1.12);
809
1425
  }
810
- .bexn7qc:is(.bexn7q2) {
1426
+ .bexn7qd:has(.bexn7q9) {
1427
+ padding: 0;
1428
+ gap: 2px;
1429
+ }
1430
+ .bexn7qd:is(.bexn7q2) {
811
1431
  opacity: 0.3;
812
1432
  transition: opacity 600ms ease-in-out, filter 600ms ease-in-out;
813
1433
  transition-delay: 200ms;
814
1434
  filter: grayscale(0.85) var(--likec4-safari-animation-hook, blur(1px));
815
1435
  will-change: opacity, filter;
816
1436
  }
817
- .bexn7qd {
818
- position: absolute;
819
- top: -2px;
820
- left: -2px;
821
- font-weight: 500;
822
- font-size: calc(1rem * var(--mantine-scale));
823
- line-height: 0.9;
824
- padding: 4px 6px;
825
- border-radius: 99999px;
826
- text-align: center;
827
- min-width: 22px;
828
- background-color: var(--xy-edge-label-background-color);
829
- transition: all 120ms ease-out;
830
- transform: translateX(-100%);
831
- font-variant-numeric: tabular-nums;
832
- }
833
- :where([data-edge-hovered="true"],[data-edge-active="true"]) .bexn7qd {
834
- font-weight: 600;
835
- background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 5%);
836
- }
837
1437
  .bexn7qe {
838
1438
  text-align: left;
839
1439
  white-space-collapse: preserve-breaks;
840
1440
  font-size: calc(0.875rem * var(--mantine-scale));
841
1441
  line-height: 1.185;
1442
+ }
1443
+ .bexn7qd:has(.bexn7q9) .bexn7qe {
1444
+ padding: 2px 5px 4px 2px;
842
1445
  }@keyframes lbtzdoa {
843
1446
  from {
844
1447
  opacity: 0.6;
@@ -1363,13 +1966,6 @@ drop-shadow(1px 1px 16px rgb(0 0 0 / 3%))
1363
1966
  }
1364
1967
  ._4ysv0o2 {
1365
1968
  text-align: left;
1366
- }._19mimxc0 {
1367
- top: var(--likec4-navigation-panel-top, 0.8rem);
1368
- left: var(--likec4-navigation-panel-left, 1rem);
1369
- margin: 0;
1370
- }
1371
- ._19mimxc0 .mantine-ActionIcon-root {
1372
- --ai-size: var(--ai-size-lg);
1373
1969
  }.hbkbtj0 {
1374
1970
  bottom: 0;
1375
1971
  left: 0;
@@ -1443,4 +2039,28 @@ drop-shadow(1px 1px 16px rgb(0 0 0 / 3%))
1443
2039
  right: var(--likec4-options-panel-right, 1rem);
1444
2040
  margin: 0;
1445
2041
  box-shadow: var(--mantine-shadow-xl);
2042
+ }._1snasyb0 {
2043
+ top: var(--likec4-navigation-panel-top, 1rem);
2044
+ left: var(--likec4-navigation-panel-left, 1rem);
2045
+ margin: 0;
2046
+ }
2047
+ .likec4-top-left-panel .action-icon {
2048
+ --ai-size: var(--ai-size-lg);
2049
+ }
2050
+ .likec4-top-left-panel .action-icon .tabler-icon {
2051
+ width: 70%;
2052
+ height: 70%;
2053
+ }
2054
+ ._1snasyb1 .tabler-icon {
2055
+ width: 75%;
2056
+ height: 75%;
2057
+ }
2058
+ ._1snasyb2 {
2059
+ background: var(--mantine-color-gray-2);
2060
+ border-radius: var(--mantine-radius-sm);
2061
+ border: 1px solid var(--mantine-color-gray-3);
2062
+ }
2063
+ :where([data-mantine-color-scheme="dark"]) ._1snasyb2 {
2064
+ background: var(--mantine-color-dark-5);
2065
+ border: 1px solid var(--mantine-color-dark-4);
1446
2066
  }