@likec4/diagram 1.0.0-next.2 → 1.0.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 (124) hide show
  1. package/dist/LikeC4Diagram.css.d.ts +0 -1
  2. package/dist/LikeC4Diagram.d.ts +1 -2
  3. package/dist/LikeC4Diagram.props.d.ts +24 -25
  4. package/dist/StaticLikeC4Diagram.d.ts +1 -2
  5. package/dist/globals.css.d.ts +1 -0
  6. package/dist/hooks/index.d.ts +2 -3
  7. package/dist/hooks/useSetState.d.ts +3 -0
  8. package/dist/hooks/useUpdateEffect.d.ts +4 -0
  9. package/dist/icons/Clipboard.d.ts +0 -1
  10. package/dist/icons/Link.d.ts +0 -1
  11. package/dist/icons/ZoomIn.d.ts +0 -1
  12. package/dist/icons/index.d.ts +0 -1
  13. package/dist/index.d.ts +1 -4
  14. package/dist/index.mjs +9388 -0
  15. package/dist/mantine/EnsureMantine.d.ts +2 -4
  16. package/dist/mantine/theme.d.ts +3 -0
  17. package/dist/mantine.css.d.ts +1 -0
  18. package/dist/state/DiagramContext.d.ts +386 -0
  19. package/dist/state/WhenInitialized.d.ts +3 -0
  20. package/dist/state/diagramStore.d.ts +428 -0
  21. package/dist/state/index.d.ts +4 -2
  22. package/dist/state/useDiagramStore.d.ts +387 -0
  23. package/dist/style.css +1212 -1
  24. package/dist/theme.css.d.ts +16 -2
  25. package/dist/ui/Camera.d.ts +0 -1
  26. package/dist/ui/KeepAspectRatio.css.d.ts +0 -1
  27. package/dist/ui/KeepAspectRatio.d.ts +0 -1
  28. package/dist/ui/OptionsPanel.css.d.ts +0 -1
  29. package/dist/ui/OptionsPanel.d.ts +0 -1
  30. package/dist/ui/index.d.ts +0 -1
  31. package/dist/ui/options/NodeOptions.d.ts +0 -1
  32. package/dist/xyflow/FitviewOnDiagramChange.d.ts +1 -5
  33. package/dist/xyflow/SyncWithDiagram.d.ts +5 -0
  34. package/dist/xyflow/XYFlowBackground.d.ts +0 -1
  35. package/dist/xyflow/XYFlowEvents.d.ts +5 -15
  36. package/dist/xyflow/XYFlowWrapper.d.ts +4 -5
  37. package/dist/xyflow/const.d.ts +1 -2
  38. package/dist/xyflow/diagram-to-xyflow.d.ts +4 -2
  39. package/dist/xyflow/edges/RelationshipEdge.d.ts +7 -7
  40. package/dist/xyflow/edges/edges.css.d.ts +2 -1
  41. package/dist/xyflow/edges/utils.d.ts +3 -4
  42. package/dist/xyflow/hooks/index.d.ts +2 -37
  43. package/dist/xyflow/hooks/{use-layout-/321/201onstraints.d.ts → useLayoutConstraints.d.ts} +2 -4
  44. package/dist/xyflow/hooks/useXYFlow.d.ts +266 -0
  45. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +0 -1
  46. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +0 -1
  47. package/dist/xyflow/nodes/compound/index.d.ts +0 -1
  48. package/dist/xyflow/nodes/element/ElementIcon.d.ts +1 -2
  49. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +0 -1
  50. package/dist/xyflow/nodes/element/ElementLink.d.ts +1 -2
  51. package/dist/xyflow/nodes/element/ElementNode.d.ts +1 -3
  52. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +2 -3
  53. package/dist/xyflow/nodes/element/element.css.d.ts +0 -1
  54. package/dist/xyflow/nodes/element/index.d.ts +1 -2
  55. package/dist/xyflow/nodes/shared/NavigateToBtn.d.ts +0 -1
  56. package/dist/xyflow/types.d.ts +20 -8
  57. package/dist/xyflow/utils.d.ts +0 -1
  58. package/package.json +36 -34
  59. package/src/LikeC4Diagram.css.ts +31 -0
  60. package/src/LikeC4Diagram.props.ts +154 -0
  61. package/src/LikeC4Diagram.tsx +119 -0
  62. package/src/StaticLikeC4Diagram.tsx +39 -0
  63. package/src/globals.css.ts +128 -0
  64. package/src/hooks/index.ts +2 -0
  65. package/src/hooks/useSetState.ts +19 -0
  66. package/src/hooks/useUpdateEffect.ts +28 -0
  67. package/src/icons/Clipboard.tsx +24 -0
  68. package/src/icons/Link.tsx +23 -0
  69. package/src/icons/ZoomIn.tsx +25 -0
  70. package/src/icons/index.ts +3 -0
  71. package/src/index.ts +11 -0
  72. package/src/mantine/EnsureMantine.tsx +14 -0
  73. package/src/mantine/theme.ts +19 -0
  74. package/src/mantine.css.ts +4 -0
  75. package/src/reset.d.ts +2 -0
  76. package/src/state/DiagramContext.tsx +42 -0
  77. package/src/state/WhenInitialized.tsx +24 -0
  78. package/src/state/diagramStore.ts +358 -0
  79. package/src/state/index.ts +4 -0
  80. package/src/state/useDiagramStore.ts +39 -0
  81. package/src/theme.css.ts +64 -0
  82. package/src/ui/Camera.tsx +174 -0
  83. package/src/ui/KeepAspectRatio.css.ts +7 -0
  84. package/src/ui/KeepAspectRatio.tsx +35 -0
  85. package/src/ui/OptionsPanel.css.ts +10 -0
  86. package/src/ui/OptionsPanel.tsx +65 -0
  87. package/src/ui/index.ts +3 -0
  88. package/src/ui/options/NodeOptions.tsx +253 -0
  89. package/src/xyflow/FitviewOnDiagramChange.tsx +93 -0
  90. package/src/xyflow/SyncWithDiagram.tsx +113 -0
  91. package/src/xyflow/XYFlowBackground.tsx +33 -0
  92. package/src/xyflow/XYFlowEvents.tsx +100 -0
  93. package/src/xyflow/XYFlowWrapper.tsx +166 -0
  94. package/src/xyflow/const.ts +7 -0
  95. package/src/xyflow/diagram-to-xyflow.ts +197 -0
  96. package/src/xyflow/edges/RelationshipEdge.tsx +288 -0
  97. package/src/xyflow/edges/edges.css.ts +124 -0
  98. package/src/xyflow/edges/utils.ts +110 -0
  99. package/src/xyflow/hooks/index.ts +2 -0
  100. package/src/xyflow/hooks/useLayoutConstraints.ts +289 -0
  101. package/src/xyflow/hooks/useXYFlow.ts +20 -0
  102. package/src/xyflow/nodes/compound/CompoundNode.css.ts +191 -0
  103. package/src/xyflow/nodes/compound/CompoundNode.tsx +105 -0
  104. package/src/xyflow/nodes/compound/index.ts +1 -0
  105. package/src/xyflow/nodes/element/ElementIcon.tsx +44 -0
  106. package/src/xyflow/nodes/element/ElementLink.css.ts +67 -0
  107. package/src/xyflow/nodes/element/ElementLink.tsx +94 -0
  108. package/src/xyflow/nodes/element/ElementNode.tsx +225 -0
  109. package/src/xyflow/nodes/element/ElementShapeSvg.tsx +181 -0
  110. package/src/xyflow/nodes/element/element.css.ts +261 -0
  111. package/src/xyflow/nodes/element/index.ts +1 -0
  112. package/src/xyflow/nodes/shared/NavigateToBtn.tsx +25 -0
  113. package/src/xyflow/types.ts +100 -0
  114. package/src/xyflow/utils.ts +12 -0
  115. package/dist/EmbeddedLikeC4Diagram.css.d.ts +0 -6
  116. package/dist/EmbeddedLikeC4Diagram.d.ts +0 -18
  117. package/dist/bundle.d.ts +0 -3
  118. package/dist/hooks/use-set-state.d.ts +0 -2
  119. package/dist/hooks/use-update-effect.d.ts +0 -4
  120. package/dist/index.css.d.ts +0 -2
  121. package/dist/index.js +0 -13043
  122. package/dist/mantine/index.d.ts +0 -3
  123. package/dist/state/DiagramState.d.ts +0 -162
  124. package/dist/xyflow/UpdateOnDiagramChange.d.ts +0 -10
package/dist/style.css CHANGED
@@ -1 +1,1212 @@
1
- .react-flow{--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgb(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgb(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.selection{cursor:pointer}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.draggable.dragging{cursor:grabbing}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow__edges{position:absolute}.react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}._2t65ix0 *,._2t65ix0 *:before,._2t65ix0 *:after{box-sizing:border-box;outline:none;border-width:0;border-style:solid;border-color:transparent}:root,:host{--likec4-font-family: var(--likec4-default-font-family, Helvetica, Arial, sans-serif);--likec4-background-color: var(--mantine-color-body);--likec4-compound-font-family: var(--likec4-font-family);--likec4-compound-title-color: var(--likec4-element-loContrast);--likec4-element-font-family: var(--likec4-font-family);--likec4-element-fill: #3b82f6;--likec4-element-stroke: #2563eb;--likec4-element-hiContrast: #eff6ff;--likec4-element-loContrast: #bfdbfe;--likec4-relation-lineColor: #64748b;--likec4-relation-labelBg: #0f172a;--likec4-relation-labelColor: #cbd5e1}:where([data-likec4-color=primary]){--likec4-element-fill: #3b82f6;--likec4-element-stroke: #2563eb;--likec4-element-hiContrast: #eff6ff;--likec4-element-loContrast: #bfdbfe;--likec4-compound-title-color: #bfdbfe;--likec4-relation-lineColor: #3b82f6;--likec4-relation-labelBg: #172554;--likec4-relation-labelColor: #60a5fa}:where([data-likec4-color=blue]){--likec4-element-fill: #3b82f6;--likec4-element-stroke: #2563eb;--likec4-element-hiContrast: #eff6ff;--likec4-element-loContrast: #bfdbfe;--likec4-compound-title-color: #bfdbfe;--likec4-relation-lineColor: #3b82f6;--likec4-relation-labelBg: #172554;--likec4-relation-labelColor: #60a5fa}:where([data-likec4-color=secondary]){--likec4-element-fill: #0284c7;--likec4-element-stroke: #0369a1;--likec4-element-hiContrast: #f0f9ff;--likec4-element-loContrast: #B6ECF7;--likec4-compound-title-color: #B6ECF7;--likec4-relation-lineColor: #0ea5e9;--likec4-relation-labelBg: #082f49;--likec4-relation-labelColor: #38bdf8}:where([data-likec4-color=sky]){--likec4-element-fill: #0284c7;--likec4-element-stroke: #0369a1;--likec4-element-hiContrast: #f0f9ff;--likec4-element-loContrast: #B6ECF7;--likec4-compound-title-color: #B6ECF7;--likec4-relation-lineColor: #0ea5e9;--likec4-relation-labelBg: #082f49;--likec4-relation-labelColor: #38bdf8}:where([data-likec4-color=muted]){--likec4-element-fill: #64748b;--likec4-element-stroke: #475569;--likec4-element-hiContrast: #f8fafc;--likec4-element-loContrast: #cbd5e1;--likec4-compound-title-color: #cbd5e1;--likec4-relation-lineColor: #64748b;--likec4-relation-labelBg: #0f172a;--likec4-relation-labelColor: #cbd5e1}:where([data-likec4-color=slate]){--likec4-element-fill: #64748b;--likec4-element-stroke: #475569;--likec4-element-hiContrast: #f8fafc;--likec4-element-loContrast: #cbd5e1;--likec4-compound-title-color: #cbd5e1;--likec4-relation-lineColor: #64748b;--likec4-relation-labelBg: #0f172a;--likec4-relation-labelColor: #cbd5e1}:where([data-likec4-color=gray]){--likec4-element-fill: #737373;--likec4-element-stroke: #525252;--likec4-element-hiContrast: #fafafa;--likec4-element-loContrast: #d4d4d4;--likec4-compound-title-color: #d4d4d4;--likec4-relation-lineColor: #6E6E6E;--likec4-relation-labelBg: #18191b;--likec4-relation-labelColor: #C6C6C6}:where([data-likec4-color=red]){--likec4-element-fill: #AC4D39;--likec4-element-stroke: #853A2D;--likec4-element-hiContrast: #FBD3CB;--likec4-element-loContrast: #FF977D;--likec4-compound-title-color: #FF977D;--likec4-relation-lineColor: #AC4D39;--likec4-relation-labelBg: #b91c1c;--likec4-relation-labelColor: #FF977D}:where([data-likec4-color=green]){--likec4-element-fill: #428a4f;--likec4-element-stroke: #2d5d39;--likec4-element-hiContrast: #f8fafc;--likec4-element-loContrast: #c2f0c2;--likec4-compound-title-color: #c2f0c2;--likec4-relation-lineColor: #15803d;--likec4-relation-labelBg: #052e16;--likec4-relation-labelColor: #22c55e}:where([data-likec4-color=amber]){--likec4-element-fill: #A35829;--likec4-element-stroke: #7E451D;--likec4-element-hiContrast: #FFE0C2;--likec4-element-loContrast: #FFA057;--likec4-compound-title-color: #FFA057;--likec4-relation-lineColor: #b45309;--likec4-relation-labelBg: #78350f;--likec4-relation-labelColor: #FFE0C2}:where([data-likec4-color=indigo]){--likec4-element-fill: #6366f1;--likec4-element-stroke: #4f46e5;--likec4-element-hiContrast: #eef2ff;--likec4-element-loContrast: #c7d2fe;--likec4-compound-title-color: #c7d2fe;--likec4-relation-lineColor: #6366f1;--likec4-relation-labelBg: #1e1b4b;--likec4-relation-labelColor: #818cf8}._1yqpph0{background-color:transparent}._1yqpph1{padding:0;height:100%}._1yqpph2{position:absolute;top:1rem;left:1rem}._1yqpph3{position:absolute;top:1rem;right:1rem}@media (min-width: 62em){._1yqpph4{--cb-size: var(--cb-size-lg)}}._2h8g8h0{--xy-background-color: var(--likec4-background-color);min-height:100px}._2h8g8h1 .react-flow__pane{cursor:default}._2h8g8h2{--likec4-background-color: transparent !important;--xy-background-color: transparent !important;background-color:transparent!important}:where(._2h8g8h3,._2h8g8h2) .react-flow__attribution{display:none}._14qhjro0{position:relative;width:100%;height:auto;margin-left:auto;margin-right:auto;padding:0;box-sizing:border-box}._1lmzt1h0{top:1rem;right:1rem;margin:0;box-shadow:var(--mantine-shadow-xl)}.bexn7q0{--xy-edge-stroke: var(--likec4-relation-lineColor);--xy-edge-stroke-selected: color-mix(in srgb, var(--likec4-relation-lineColor), white 30%);--xy-edge-label-color: var(--likec4-relation-labelColor);--xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 15%);--xy-edge-stroke-width: 2.5px}[data-mantine-color-scheme=dark] .bexn7q0{--xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 75%)}.bexn7q0[data-edge-hovered=true]{--xy-edge-stroke: color-mix(in srgb, var(--likec4-relation-lineColor), white 30%);--xy-edge-stroke-width: 3px}.react-flow__edge.selected .bexn7q0{--xy-edge-stroke-width: 2.5}.react-flow__edges>svg{mix-blend-mode:lighten}.bexn7q1{stroke-width:calc(var(--xy-edge-stroke-width) + 8);stroke-opacity:.1}.bexn7q2{fill:var(--xy-edge-stroke);stroke:var(--xy-edge-stroke)}.react-flow__edge.selected .bexn7q2{--xy-edge-stroke: var(--xy-edge-stroke-selected)}.bexn7q0[data-edge-hovered=true] .bexn7q3{transition:all .13s ease-out}.bexn7q4{font-family:var(--likec4-font-family);position:absolute;pointer-events:all;cursor:pointer;transform-origin:50% 50%;text-align:left;mix-blend-mode:screen;padding:2px 6px 4px;width:max-content;background-color:var(--xy-edge-label-background-color);border-radius:3px}.bexn7q4[data-edge-hovered=true]{transition:all .14s ease-out;transform:scale(1.1)}.bexn7q5{color:var(--xy-edge-label-color);font-size:calc(.75rem * var(--mantine-scale));transition:color .12s ease-out}@keyframes lbtzdo3{0%{opacity:.6}to{opacity:.4}}.lbtzdo0{width:100%;width:-webkit-fill-available;height:100%;height:-webkit-fill-available;position:relative;padding:0;margin:0}.lbtzdo1{width:100%;height:100%;position:relative;border-radius:calc(.375rem * var(--mantine-scale));box-shadow:0 4px 10px .5px #0000001a,0 2px 2px -1px #0006;padding:calc(.5rem * var(--mantine-scale));background:var(--likec4-element-fill);transition:all .3s ease-out}:where(.react-flow__node.selected) .lbtzdo1{box-shadow:none}.lbtzdo2{font-family:var(--likec4-compound-font-family);font-optical-sizing:auto;font-style:normal;text-align:left;display:inline-block;font-weight:600;font-size:13px;text-transform:uppercase;letter-spacing:.2px;line-height:1;opacity:.75;color:var(--likec4-compound-title-color);padding-left:calc(.75rem * var(--mantine-scale));mix-blend-mode:lighten}:where([data-likec4-navigable=true]) .lbtzdo2{padding-left:calc(1.625rem * var(--mantine-scale))}.lbtzdo4{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible;stroke:var(--likec4-element-loContrast);transform-origin:center center;stroke-width:6px;animation-duration:.8s;animation-name:lbtzdo3;animation-iteration-count:infinite;animation-direction:alternate;visibility:hidden}.react-flow__node.selected .lbtzdo4{visibility:visible}.lbtzdo5{--ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);--ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));--ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));position:absolute;pointer-events:all;left:3px;top:7px;color:var(--likec4-element-loContrast);transform-origin:90% 70%;opacity:.75;transition:all .15s ease-out;transition-delay:0ms;background-color:var(--ai-bg)}.lbtzdo5:hover{box-shadow:var(--mantine-shadow-lg);transform:scale(1.466);opacity:1;transition-delay:0}.lbtzdo5:active{transform:scale(1.1);opacity:1;transition-delay:0}:where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdo5:not(:hover){--ai-bg: var(--ai-bg-hover);box-shadow:var(--mantine-shadow-lg);transform:scale(1.223);opacity:1;transition-delay:.25s}.lbtzdo5 svg.icon{width:70%;height:70%;stroke-width:1.5}@keyframes _1b6tkn3{0%{opacity:.6}to{opacity:.4}}._1b6tkn2{--_1b6tkn0: color-mix(in srgb, var(--likec4-element-stroke) 90%, var(--likec4-element-fill));--likec4-element-font-family: var(--likec4-font-family);position:relative;width:100%;width:-webkit-fill-available;height:100%;height:-webkit-fill-available;padding:0;margin:0}._1b6tkn4{stroke:var(--likec4-element-loContrast);transform-origin:center center;stroke-width:6;animation-duration:.8s;animation-name:_1b6tkn3;animation-iteration-count:infinite;animation-direction:alternate;visibility:hidden}:where([data-likec4-shape=queue],[data-likec4-shape=cylinder],[data-likec4-shape=storage]) ._1b6tkn4{stroke-width:10}.react-flow__node.selected ._1b6tkn4{visibility:visible}._1b6tkn5{fill:var(--likec4-element-fill)}._1b6tkn6{fill:var(--likec4-element-stroke)}._1b6tkn7{fill:var(--_1b6tkn0)}._1b6tkn8{flex:0 0 auto;font-family:var(--likec4-element-font-family);font-optical-sizing:auto;font-style:normal;text-align:center;font-weight:500;font-size:calc(1.1875rem * var(--mantine-scale));line-height:1.22;text-wrap:balance;color:var(--likec4-element-hiContrast)}._1b6tkn9{flex:0 1 auto;font-family:var(--likec4-element-font-family, var(--likec4-font-family));font-optical-sizing:auto;font-style:normal;font-weight:400;font-size:calc(.875rem * var(--mantine-scale));line-height:1.2;text-align:center;text-wrap:pretty;color:var(--likec4-element-loContrast);white-space-collapse:preserve-breaks;text-overflow:ellipsis;overflow:hidden}._1b6tkna{flex:0 0 auto;font-family:var(--likec4-element-font-family, var(--likec4-font-family));font-optical-sizing:auto;font-style:normal;font-weight:400;font-size:calc(.75rem * var(--mantine-scale));line-height:1.25;text-align:center;text-wrap:balance;opacity:.92;color:var(--likec4-element-loContrast)}._1b6tkn2:hover ._1b6tkna{opacity:1}._1b6tknb{--_1b6tkn1: calc(1.5rem * var(--mantine-scale));position:relative;width:100%;width:-webkit-fill-available;height:100%;height:-webkit-fill-available;padding:var(--_1b6tkn1);display:flex;flex-direction:column;align-items:stretch;justify-content:center;overflow:hidden;gap:calc(.5rem * var(--mantine-scale))}._1b6tknb:has(._1b6tkn9):has(._1b6tkna){gap:calc(.375rem * var(--mantine-scale))}:where([data-likec4-shape=queue],[data-likec4-shape=mobile]) ._1b6tknb{padding-left:calc(2.5rem * var(--mantine-scale));padding-right:calc(1.25rem * var(--mantine-scale))}:where([data-likec4-shape=cylinder],[data-likec4-shape=storage]) ._1b6tknb{padding-top:calc(2.125rem * var(--mantine-scale))}:where([data-likec4-shape=browser]) ._1b6tknb{padding-top:calc(2.25rem * var(--mantine-scale))}._1b6tknd{--_1b6tknc: 30px;flex:0 1 var(--_1b6tknc);max-height:var(--_1b6tknc);margin-top:-8px;position:relative;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:visible;mix-blend-mode:hard-light}._1b6tknd img{position:absolute;left:0;bottom:0;width:100%;height:auto;object-fit:contain;max-height:calc(var(--_1b6tknc) + 16px)}._1b6tkng{--_1b6tkne: drop-shadow(0 2px 1px rgba(0, 0, 0, .21)) drop-shadow(0 1px 1px color-mix(in srgb, var(--likec4-element-stroke) 40%, transparent)) drop-shadow(0 5px 3px rgba(0, 0, 0, .1)) ;top:0;left:0;position:absolute;pointer-events:none;fill:var(--likec4-element-fill);stroke:var(--likec4-element-stroke);overflow:visible;filter:var(--_1b6tknf, var(--_1b6tkne));transition:filter .3s ease-out;transition-delay:0ms}:where(.react-flow__node.selected) ._1b6tkng{filter:none}._1b6tknh{--ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);--ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));--ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));z-index:calc(var(--layer-overlays, 1) + 1);position:absolute;pointer-events:all;left:50%;bottom:0;color:var(--likec4-element-loContrast);transform-origin:50% 65%;opacity:.75;transition:all .15s ease-out;transform:translate(-50%);transition-delay:0ms;background-color:var(--ai-bg)}._1b6tknh:hover{box-shadow:var(--mantine-shadow-lg);transform:translate(-50%) scale(1.465);opacity:1;transition-delay:0}._1b6tknh:active{transform:translate(-50%) scale(1.1);opacity:1;transition-delay:0}:where([data-likec4-shape=browser]) ._1b6tknh{bottom:3px}:where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tknh:not(:hover){--ai-bg: var(--ai-bg-hover);box-shadow:var(--mantine-shadow-lg);transform:translate(-50%) scale(1.25);opacity:1;transition-delay:.25s}._1b6tknh svg.icon{width:70%;height:70%;stroke-width:1.5}._4ysv0o0{position:absolute;left:0;bottom:0;padding-left:6px;padding-bottom:6px}:where([data-likec4-shape=cylinder],[data-likec4-shape=storage]) ._4ysv0o0{bottom:6px}:where([data-likec4-shape=queue]) ._4ysv0o0{left:12px;bottom:-3px}._4ysv0o1{display:flex;line-height:.75;font-size:11px;align-items:center;justify-content:center;color:var(--likec4-element-loContrast);padding:2px 5px;border-radius:4px;background-color:color-mix(in srgb,var(--likec4-element-stroke),transparent 20%);transition:all .18s ease-out;opacity:.85}._4ysv0o1:hover{color:var(--likec4-element-hiContrast);background-color:var(--likec4-element-stroke);opacity:1}._4ysv0o1 .icon{display:inline-block;line-height:1;width:11px;height:11px;opacity:.6}._4ysv0o1 span{display:inline-block;line-height:1;margin-left:3px}._4ysv0o2{text-align:left}
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
+ }
600
+ .likec4-diagram-root {
601
+ --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
+ --likec4-background-color: var(--mantine-color-body);
603
+ --likec4-background-pattern-color: var(--mantine-color-dimmed);
604
+ --likec4-compound-font-family: var(--likec4-font-family);
605
+ --likec4-compound-title-color: var(--likec4-element-loContrast);
606
+ --likec4-element-font-family: var(--likec4-font-family);
607
+ --likec4-element-fill: #3b82f6;
608
+ --likec4-element-stroke: #2563eb;
609
+ --likec4-element-hiContrast: #eff6ff;
610
+ --likec4-element-loContrast: #bfdbfe;
611
+ --likec4-relation-lineColor: #64748b;
612
+ --likec4-relation-labelBg: #0f172a;
613
+ --likec4-relation-labelColor: #cbd5e1;
614
+ }
615
+ :where([data-mantine-color-scheme='light']) .likec4-diagram-root {
616
+ --likec4-background-pattern-color: var(--mantine-color-dark-3);
617
+ }
618
+ :where([data-likec4-color='primary']) {
619
+ --likec4-element-fill: #3b82f6;
620
+ --likec4-element-stroke: #2563eb;
621
+ --likec4-element-hiContrast: #eff6ff;
622
+ --likec4-element-loContrast: #bfdbfe;
623
+ --likec4-compound-title-color: #bfdbfe;
624
+ --likec4-relation-lineColor: #3b82f6;
625
+ --likec4-relation-labelBg: #172554;
626
+ --likec4-relation-labelColor: #60a5fa;
627
+ }
628
+ :where([data-likec4-color='blue']) {
629
+ --likec4-element-fill: #3b82f6;
630
+ --likec4-element-stroke: #2563eb;
631
+ --likec4-element-hiContrast: #eff6ff;
632
+ --likec4-element-loContrast: #bfdbfe;
633
+ --likec4-compound-title-color: #bfdbfe;
634
+ --likec4-relation-lineColor: #3b82f6;
635
+ --likec4-relation-labelBg: #172554;
636
+ --likec4-relation-labelColor: #60a5fa;
637
+ }
638
+ :where([data-likec4-color='secondary']) {
639
+ --likec4-element-fill: #0284c7;
640
+ --likec4-element-stroke: #0369a1;
641
+ --likec4-element-hiContrast: #f0f9ff;
642
+ --likec4-element-loContrast: #B6ECF7;
643
+ --likec4-compound-title-color: #B6ECF7;
644
+ --likec4-relation-lineColor: #0ea5e9;
645
+ --likec4-relation-labelBg: #082f49;
646
+ --likec4-relation-labelColor: #38bdf8;
647
+ }
648
+ :where([data-likec4-color='sky']) {
649
+ --likec4-element-fill: #0284c7;
650
+ --likec4-element-stroke: #0369a1;
651
+ --likec4-element-hiContrast: #f0f9ff;
652
+ --likec4-element-loContrast: #B6ECF7;
653
+ --likec4-compound-title-color: #B6ECF7;
654
+ --likec4-relation-lineColor: #0ea5e9;
655
+ --likec4-relation-labelBg: #082f49;
656
+ --likec4-relation-labelColor: #38bdf8;
657
+ }
658
+ :where([data-likec4-color='muted']) {
659
+ --likec4-element-fill: #64748b;
660
+ --likec4-element-stroke: #475569;
661
+ --likec4-element-hiContrast: #f8fafc;
662
+ --likec4-element-loContrast: #cbd5e1;
663
+ --likec4-compound-title-color: #cbd5e1;
664
+ --likec4-relation-lineColor: #64748b;
665
+ --likec4-relation-labelBg: #0f172a;
666
+ --likec4-relation-labelColor: #cbd5e1;
667
+ }
668
+ :where([data-likec4-color='slate']) {
669
+ --likec4-element-fill: #64748b;
670
+ --likec4-element-stroke: #475569;
671
+ --likec4-element-hiContrast: #f8fafc;
672
+ --likec4-element-loContrast: #cbd5e1;
673
+ --likec4-compound-title-color: #cbd5e1;
674
+ --likec4-relation-lineColor: #64748b;
675
+ --likec4-relation-labelBg: #0f172a;
676
+ --likec4-relation-labelColor: #cbd5e1;
677
+ }
678
+ :where([data-likec4-color='gray']) {
679
+ --likec4-element-fill: #737373;
680
+ --likec4-element-stroke: #525252;
681
+ --likec4-element-hiContrast: #fafafa;
682
+ --likec4-element-loContrast: #d4d4d4;
683
+ --likec4-compound-title-color: #d4d4d4;
684
+ --likec4-relation-lineColor: #6E6E6E;
685
+ --likec4-relation-labelBg: #18191b;
686
+ --likec4-relation-labelColor: #C6C6C6;
687
+ }
688
+ :where([data-likec4-color='red']) {
689
+ --likec4-element-fill: #AC4D39;
690
+ --likec4-element-stroke: #853A2D;
691
+ --likec4-element-hiContrast: #FBD3CB;
692
+ --likec4-element-loContrast: #FF977D;
693
+ --likec4-compound-title-color: #FF977D;
694
+ --likec4-relation-lineColor: #AC4D39;
695
+ --likec4-relation-labelBg: #b91c1c;
696
+ --likec4-relation-labelColor: #FF977D;
697
+ }
698
+ :where([data-likec4-color='green']) {
699
+ --likec4-element-fill: #428a4f;
700
+ --likec4-element-stroke: #2d5d39;
701
+ --likec4-element-hiContrast: #f8fafc;
702
+ --likec4-element-loContrast: #c2f0c2;
703
+ --likec4-compound-title-color: #c2f0c2;
704
+ --likec4-relation-lineColor: #15803d;
705
+ --likec4-relation-labelBg: #052e16;
706
+ --likec4-relation-labelColor: #22c55e;
707
+ }
708
+ :where([data-likec4-color='amber']) {
709
+ --likec4-element-fill: #A35829;
710
+ --likec4-element-stroke: #7E451D;
711
+ --likec4-element-hiContrast: #FFE0C2;
712
+ --likec4-element-loContrast: #FFA057;
713
+ --likec4-compound-title-color: #FFA057;
714
+ --likec4-relation-lineColor: #b45309;
715
+ --likec4-relation-labelBg: #78350f;
716
+ --likec4-relation-labelColor: #FFE0C2;
717
+ }
718
+ :where([data-likec4-color='indigo']) {
719
+ --likec4-element-fill: #6366f1;
720
+ --likec4-element-stroke: #4f46e5;
721
+ --likec4-element-hiContrast: #eef2ff;
722
+ --likec4-element-loContrast: #c7d2fe;
723
+ --likec4-compound-title-color: #c7d2fe;
724
+ --likec4-relation-lineColor: #6366f1;
725
+ --likec4-relation-labelBg: #1e1b4b;
726
+ --likec4-relation-labelColor: #818cf8;
727
+ }.react-flow._2h8g8h0 {
728
+ --xy-background-color: var(--likec4-background-color);
729
+ --xy-background-pattern-color: var(--likec4-background-pattern-color);
730
+ }
731
+ .react-flow._2h8g8h0 .react-flow__viewport {
732
+ will-change: transform;
733
+ }
734
+ .react-flow._2h8g8h0._2h8g8h2 {
735
+ --likec4-background-color: transparent !important;
736
+ --xy-background-color: transparent !important;
737
+ background-color: transparent !important;
738
+ }
739
+ :where(._2h8g8h3, ._2h8g8h2) .react-flow__attribution {
740
+ display: none;
741
+ }._14qhjro0 {
742
+ width: 100%;
743
+ height: 100%;
744
+ padding: 0;
745
+ }._1lmzt1h0 {
746
+ top: var(--likec4-options-panel-top, 1rem);
747
+ right: var(--likec4-options-panel-right, 1rem);
748
+ margin: 0;
749
+ box-shadow: var(--mantine-shadow-xl);
750
+ }.bexn7q0 {
751
+ --xy-edge-stroke: var(--likec4-relation-lineColor);
752
+ --xy-edge-stroke-selected: color-mix(in srgb, var(--likec4-relation-lineColor), white 30%);
753
+ --xy-edge-label-color: color-mix(in srgb, var(--likec4-relation-labelColor), rgba(255 255 255 / 0.85) 20%);
754
+ --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 35%);
755
+ --xy-edge-stroke-width: 2.5px;
756
+ }
757
+ [data-mantine-color-scheme="dark"] .bexn7q0 {
758
+ --xy-edge-label-color: var(--likec4-relation-labelColor);
759
+ --xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 75%);
760
+ }
761
+ .bexn7q0[data-edge-hovered='true'] {
762
+ --xy-edge-stroke: color-mix(in srgb, var(--likec4-relation-lineColor), white 30%);
763
+ --xy-edge-stroke-width: 3px;
764
+ }
765
+ .react-flow__edge.selected .bexn7q0 {
766
+ --xy-edge-stroke-width: 2.5;
767
+ }
768
+ .react-flow__edges > svg {
769
+ mix-blend-mode: screen;
770
+ }
771
+ :where([data-mantine-color-scheme="dark"]) .react-flow__edges > svg {
772
+ mix-blend-mode: lighten;
773
+ }
774
+ .bexn7q1 {
775
+ stroke-width: calc(var(--xy-edge-stroke-width) + 8);
776
+ stroke-opacity: 0.1;
777
+ }
778
+ .bexn7q2 {
779
+ fill: var(--xy-edge-stroke);
780
+ stroke: var(--xy-edge-stroke);
781
+ }
782
+ .react-flow__edge.selected .bexn7q2 {
783
+ --xy-edge-stroke: var(--xy-edge-stroke-selected);
784
+ }
785
+ .bexn7q0[data-edge-hovered='true'] .bexn7q3 {
786
+ transition: all 130ms ease-out;
787
+ }
788
+ .bexn7q7 {
789
+ --bexn7q6: translate(var(--bexn7q4), var(--bexn7q5));
790
+ --bexn7q4: 50%;
791
+ --bexn7q5: 50%;
792
+ top: 0;
793
+ left: 0;
794
+ font-family: var(--likec4-font-family);
795
+ position: absolute;
796
+ pointer-events: all;
797
+ cursor: pointer;
798
+ transform-origin: 50% 50%;
799
+ text-align: left;
800
+ mix-blend-mode: screen;
801
+ padding: 2px 6px 4px 6px;
802
+ width: max-content;
803
+ background-color: var(--xy-edge-label-background-color);
804
+ border-radius: 3px;
805
+ transform: var(--bexn7q6);
806
+ will-change: transform;
807
+ }
808
+ [data-mantine-color-scheme="dark"] .bexn7q7 {
809
+ mix-blend-mode: luminosity;
810
+ }
811
+ .bexn7q7[data-edge-hovered="true"] {
812
+ transition: all 140ms ease-out;
813
+ transform: var(--bexn7q6) scale(1.1);
814
+ }
815
+ .bexn7q8 {
816
+ color: var(--xy-edge-label-color);
817
+ font-size: calc(0.78125rem * var(--mantine-scale));
818
+ line-height: 1.12;
819
+ transition: color 120ms ease-out;
820
+ }@keyframes lbtzdo5 {
821
+ from {
822
+ opacity: 0.6;
823
+ }
824
+ to {
825
+ opacity: 0.3;
826
+ }
827
+ }
828
+ .lbtzdo0 {
829
+ width: 100%;
830
+ height: 100%;
831
+ position: relative;
832
+ padding: 0;
833
+ margin: 0;
834
+ }
835
+ .lbtzdo2 {
836
+ width: 100%;
837
+ height: 100%;
838
+ position: relative;
839
+ border-radius: calc(0.375rem * var(--mantine-scale));
840
+ box-shadow: 0 4px 10px 0.5px rgba(0,0,0,0.1) , 0 2px 2px -1px rgba(0,0,0,0.4);
841
+ padding: calc(0.5rem * var(--mantine-scale));
842
+ background: var(--likec4-element-fill);
843
+ transition: all 300ms ease-out;
844
+ }
845
+ :where(.react-flow__node.selected) .lbtzdo2 {
846
+ box-shadow: none;
847
+ }
848
+ :where(.react-flow__node:focus-visible) .lbtzdo2 {
849
+ transition-duration: 0ms;
850
+ outline: 3px solid var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
851
+ outline-offset: calc(0.09375rem * var(--mantine-scale));
852
+ }
853
+ .lbtzdo3 {
854
+ --lbtzdo1: 90%;
855
+ width: 100%;
856
+ height: 100%;
857
+ position: relative;
858
+ border-radius: calc(0.5rem * var(--mantine-scale));
859
+ border-style: dashed;
860
+ border-width: calc(0.21875rem * var(--mantine-scale));
861
+ border-color: var(--likec4-element-fill);
862
+ box-shadow: 0 4px 10px 0.5px rgba(0,0,0,0.05) , 0 2px 2px -1px rgba(0,0,0,0.04);
863
+ padding: calc(0.5rem * var(--mantine-scale));
864
+ background: color-mix(in srgb , var(--likec4-element-fill), transparent var(--lbtzdo1));
865
+ transition: all 200ms ease-out;
866
+ }
867
+ :where(.lbtzdo0[data-hovered]) .lbtzdo3 {
868
+ --lbtzdo1: 65%;
869
+ transition-delay: 300ms;
870
+ }
871
+ :where(.react-flow__node.selected) .lbtzdo3 {
872
+ --lbtzdo1: 15%;
873
+ transition-delay: 50ms;
874
+ box-shadow: none;
875
+ border-color: transparent;
876
+ }
877
+ .lbtzdo4 {
878
+ font-family: var(--likec4-compound-font-family);
879
+ font-optical-sizing: auto;
880
+ font-style: normal;
881
+ text-align: left;
882
+ display: inline-block;
883
+ font-weight: 600;
884
+ font-size: 13px;
885
+ text-transform: uppercase;
886
+ letter-spacing: 0.2px;
887
+ line-height: 1;
888
+ opacity: 0.75;
889
+ color: var(--likec4-compound-title-color);
890
+ padding-left: calc(0.75rem * var(--mantine-scale));
891
+ mix-blend-mode: lighten;
892
+ }
893
+ :where([data-likec4-navigable='true']) .lbtzdo4 {
894
+ padding-left: calc(1.625rem * var(--mantine-scale));
895
+ }
896
+ .lbtzdo6 {
897
+ position: absolute;
898
+ top: 0;
899
+ left: 0;
900
+ width: 100%;
901
+ height: 100%;
902
+ pointer-events: none;
903
+ overflow: visible;
904
+ visibility: hidden;
905
+ }
906
+ :where(.react-flow__node.selected:not(:focus-visible)) .lbtzdo6 {
907
+ visibility: visible;
908
+ }
909
+ .lbtzdo6 rect {
910
+ stroke: var(--likec4-element-loContrast);
911
+ transform-origin: center center;
912
+ stroke-width: 6;
913
+ animation-duration: 800ms;
914
+ animation-name: lbtzdo5;
915
+ animation-iteration-count: infinite;
916
+ animation-direction: alternate;
917
+ fill: none;
918
+ }
919
+ :where(.react-flow__node:focus-within:not(.selected)) .lbtzdo6 rect {
920
+ stroke: color-mix(in srgb, var(--likec4-element-stroke) 30%, var(--likec4-element-loContrast));
921
+ stroke-width: 8;
922
+ }
923
+ .lbtzdo7 {
924
+ --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
925
+ --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
926
+ --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
927
+ position: absolute;
928
+ pointer-events: all;
929
+ left: 3px;
930
+ top: 7px;
931
+ cursor: pointer;
932
+ color: var(--likec4-element-loContrast);
933
+ transform-origin: 90% 70%;
934
+ opacity: 0.75;
935
+ transition: all 150ms ease-out;
936
+ transition-delay: 0ms;
937
+ background-color: var(--ai-bg);
938
+ }
939
+ .lbtzdo7:hover {
940
+ box-shadow: var(--mantine-shadow-lg);
941
+ transform: scale(1.466);
942
+ opacity: 1;
943
+ transition-delay: 0;
944
+ }
945
+ .lbtzdo7:active {
946
+ transform: scale(1.1);
947
+ opacity: 1;
948
+ transition-delay: 0;
949
+ }
950
+ :where(.react-flow__node:not(.dragging) .lbtzdo0:hover) .lbtzdo7:not(:hover) {
951
+ --ai-bg: var(--ai-bg-hover);
952
+ box-shadow: var(--mantine-shadow-lg);
953
+ transform: scale(1.223);
954
+ opacity: 1;
955
+ transition-delay: 250ms;
956
+ }
957
+ .lbtzdo7 svg.icon {
958
+ width: 70%;
959
+ height: 70%;
960
+ stroke-width: 1.5;
961
+ }@keyframes _1b6tkn3 {
962
+ from {
963
+ opacity: 0.6;
964
+ }
965
+ to {
966
+ opacity: 0.4;
967
+ }
968
+ }
969
+ ._1b6tkn2 {
970
+ --_1b6tkn0: color-mix(in srgb, var(--likec4-element-stroke) 90%, var(--likec4-element-fill));
971
+ position: relative;
972
+ width: 100%;
973
+ height: 100%;
974
+ padding: 0;
975
+ margin: 0;
976
+ }
977
+ ._1b6tkn4 {
978
+ stroke: var(--likec4-element-loContrast);
979
+ transform-origin: center center;
980
+ stroke-width: 6;
981
+ animation-duration: 800ms;
982
+ animation-name: _1b6tkn3;
983
+ animation-iteration-count: infinite;
984
+ animation-direction: alternate;
985
+ visibility: hidden;
986
+ }
987
+ :where(.react-flow__node.selected) ._1b6tkn4 {
988
+ visibility: visible;
989
+ }
990
+ :where(.react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkn4 {
991
+ animation-name: none;
992
+ stroke-width: 10;
993
+ stroke: var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));
994
+ visibility: visible;
995
+ }
996
+ :where([data-likec4-shape="queue"], [data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tkn4 {
997
+ stroke-width: 10;
998
+ }
999
+ ._1b6tkn5 {
1000
+ fill: var(--likec4-element-fill);
1001
+ }
1002
+ ._1b6tkn6 {
1003
+ fill: var(--likec4-element-stroke);
1004
+ }
1005
+ ._1b6tkn7 {
1006
+ fill: var(--_1b6tkn0);
1007
+ }
1008
+ ._1b6tkn8 {
1009
+ flex: 0 0 auto;
1010
+ font-family: var(--likec4-element-font-family);
1011
+ font-optical-sizing: auto;
1012
+ font-style: normal;
1013
+ text-align: center;
1014
+ font-weight: 500;
1015
+ font-size: calc(1.1875rem * var(--mantine-scale));
1016
+ line-height: 1.2;
1017
+ text-wrap: balance;
1018
+ color: var(--likec4-element-hiContrast);
1019
+ }
1020
+ ._1b6tkn9 {
1021
+ flex: 0 1 auto;
1022
+ font-family: var(--likec4-element-font-family);
1023
+ font-optical-sizing: auto;
1024
+ font-style: normal;
1025
+ font-weight: 400;
1026
+ font-size: calc(0.875rem * var(--mantine-scale));
1027
+ line-height: 1.125;
1028
+ text-align: center;
1029
+ text-wrap: pretty;
1030
+ color: var(--likec4-element-loContrast);
1031
+ white-space-collapse: preserve-breaks;
1032
+ text-overflow: ellipsis;
1033
+ overflow: hidden;
1034
+ }
1035
+ ._1b6tkna {
1036
+ flex: 0 0 auto;
1037
+ font-family: var(--likec4-element-font-family);
1038
+ font-optical-sizing: auto;
1039
+ font-style: normal;
1040
+ font-weight: 400;
1041
+ font-size: calc(0.75rem * var(--mantine-scale));
1042
+ line-height: 1.125;
1043
+ text-align: center;
1044
+ text-wrap: balance;
1045
+ opacity: 0.92;
1046
+ color: var(--likec4-element-loContrast);
1047
+ }
1048
+ ._1b6tkn2:hover ._1b6tkna {
1049
+ opacity: 1;
1050
+ }
1051
+ ._1b6tknb {
1052
+ --_1b6tkn1: calc(1.5rem * var(--mantine-scale));
1053
+ position: relative;
1054
+ width: 100%;
1055
+ height: 100%;
1056
+ padding: var(--_1b6tkn1);
1057
+ display: flex;
1058
+ flex-direction: column;
1059
+ align-items: stretch;
1060
+ justify-content: center;
1061
+ overflow: hidden;
1062
+ gap: calc(0.5rem * var(--mantine-scale));
1063
+ }
1064
+ ._1b6tknb:has(._1b6tkn9):has(._1b6tkna) {
1065
+ gap: calc(0.375rem * var(--mantine-scale));
1066
+ }
1067
+ :where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) ._1b6tknb {
1068
+ padding-left: calc(2.5rem * var(--mantine-scale));
1069
+ padding-right: calc(1.25rem * var(--mantine-scale));
1070
+ }
1071
+ :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._1b6tknb {
1072
+ padding-top: calc(2.125rem * var(--mantine-scale));
1073
+ }
1074
+ :where([data-likec4-shape="browser"]) ._1b6tknb {
1075
+ padding-top: calc(2rem * var(--mantine-scale));
1076
+ padding-bottom: calc(1.75rem * var(--mantine-scale));
1077
+ }
1078
+ ._1b6tknd {
1079
+ --_1b6tknc: 30px;
1080
+ flex: 0 1 var(--_1b6tknc);
1081
+ max-height: var(--_1b6tknc);
1082
+ margin-top: -8px;
1083
+ position: relative;
1084
+ user-select: none;
1085
+ pointer-events: none;
1086
+ overflow: visible;
1087
+ mix-blend-mode: hard-light;
1088
+ }
1089
+ ._1b6tknd img {
1090
+ position: absolute;
1091
+ left: 0;
1092
+ bottom: 0;
1093
+ width: 100%;
1094
+ height: auto;
1095
+ object-fit: contain;
1096
+ max-height: calc(var(--_1b6tknc) + 16px);
1097
+ }
1098
+ ._1b6tkng {
1099
+ --_1b6tkne:
1100
+ drop-shadow(0 2px 1px rgba(0, 0, 0, 0.21))
1101
+ drop-shadow(0 1px 1px color-mix(in srgb, var(--likec4-element-stroke) 40%, transparent))
1102
+ drop-shadow(0 5px 3px rgba(0, 0, 0, 0.1))
1103
+ ;
1104
+ top: 0px;
1105
+ left: 0px;
1106
+ position: absolute;
1107
+ pointer-events: none;
1108
+ fill: var(--likec4-element-fill);
1109
+ stroke: var(--likec4-element-stroke);
1110
+ overflow: visible;
1111
+ filter: var(--_1b6tknf, var(--_1b6tkne));
1112
+ transition: filter 300ms ease-out;
1113
+ transition-delay: 0ms;
1114
+ }
1115
+ :where(.react-flow__node.selected, .react-flow__node:focus-visible, ._1b6tkn2:focus-visible) ._1b6tkng {
1116
+ filter: none;
1117
+ }
1118
+ ._1b6tknh {
1119
+ --ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);
1120
+ --ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill) 65%, var(--likec4-element-stroke));
1121
+ --ai-hover: color-mix(in srgb , var(--likec4-element-fill) 50%, var(--likec4-element-stroke));
1122
+ z-index: calc(var(--layer-overlays, 1) + 1);
1123
+ position: absolute;
1124
+ pointer-events: all;
1125
+ left: 50%;
1126
+ bottom: 0;
1127
+ color: var(--likec4-element-loContrast);
1128
+ cursor: pointer;
1129
+ transform-origin: 50% 65%;
1130
+ opacity: 0.75;
1131
+ transition: all 150ms ease-out;
1132
+ transform: translate(-50%, 0);
1133
+ transition-delay: 0ms;
1134
+ background-color: var(--ai-bg);
1135
+ }
1136
+ ._1b6tknh:hover {
1137
+ box-shadow: var(--mantine-shadow-lg);
1138
+ transform: translate(-50%, 0) scale(1.35);
1139
+ opacity: 1;
1140
+ transition-delay: 0;
1141
+ }
1142
+ ._1b6tknh:active {
1143
+ transform: translate(-50%, 0) scale(1.02);
1144
+ opacity: 1;
1145
+ transition-delay: 0;
1146
+ }
1147
+ :where([data-likec4-shape='browser']) ._1b6tknh {
1148
+ bottom: 3px;
1149
+ }
1150
+ :where(.react-flow__node:not(.dragging) ._1b6tkn2:hover) ._1b6tknh:not(:hover) {
1151
+ --ai-bg: var(--ai-bg-hover);
1152
+ box-shadow: var(--mantine-shadow-lg);
1153
+ transform: translate(-50%, 0) scale(1.185);
1154
+ opacity: 1;
1155
+ transition-delay: 250ms;
1156
+ }
1157
+ ._1b6tknh svg.icon {
1158
+ width: 65%;
1159
+ height: 65%;
1160
+ stroke-width: 1.5;
1161
+ }._4ysv0o0 {
1162
+ position: absolute;
1163
+ left: 0;
1164
+ bottom: 0;
1165
+ padding-left: 6px;
1166
+ padding-bottom: 6px;
1167
+ pointer-events: all;
1168
+ }
1169
+ :where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) ._4ysv0o0 {
1170
+ bottom: 6px;
1171
+ }
1172
+ :where([data-likec4-shape="queue"]) ._4ysv0o0 {
1173
+ left: 12px;
1174
+ bottom: -3px;
1175
+ }
1176
+ ._4ysv0o1 {
1177
+ display: flex;
1178
+ line-height: 0.75;
1179
+ font-size: 11px;
1180
+ font-weight: 500;
1181
+ align-items: center;
1182
+ justify-content: center;
1183
+ color: var(--likec4-element-loContrast);
1184
+ padding-top: 2px;
1185
+ padding-bottom: 2px;
1186
+ padding-left: 4px;
1187
+ padding-right: 5px;
1188
+ border-radius: 3px;
1189
+ background-color: color-mix(in srgb, var(--likec4-element-stroke), transparent 20%);
1190
+ transition: all 180ms ease-out;
1191
+ opacity: 0.85;
1192
+ }
1193
+ ._4ysv0o1:hover {
1194
+ color: var(--likec4-element-hiContrast);
1195
+ background-color: var(--likec4-element-stroke);
1196
+ opacity: 1;
1197
+ }
1198
+ ._4ysv0o1 .icon {
1199
+ display: inline-block;
1200
+ line-height: 1;
1201
+ width: 10px;
1202
+ height: 10px;
1203
+ opacity: 0.6;
1204
+ }
1205
+ ._4ysv0o1 span {
1206
+ display: inline-block;
1207
+ line-height: 1;
1208
+ margin-left: 3px;
1209
+ }
1210
+ ._4ysv0o2 {
1211
+ text-align: left;
1212
+ }