@likec4/diagram 1.18.0 → 1.19.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.
- package/LICENSE +1 -1
- package/dist/LikeC4CustomColors.d.ts +7 -0
- package/dist/LikeC4CustomColors.js +30 -0
- package/dist/LikeC4Diagram.css.d.ts +5 -0
- package/dist/LikeC4Diagram.css.js +13 -0
- package/dist/LikeC4Diagram.d.ts +6 -0
- package/dist/LikeC4Diagram.js +194 -0
- package/dist/LikeC4Diagram.props.d.ts +166 -0
- package/dist/LikeC4ModelProvider.d.ts +9 -0
- package/dist/LikeC4ModelProvider.js +12 -0
- package/dist/LikeC4Search.css.d.ts +1 -0
- package/dist/LikeC4Search.css.js +5 -0
- package/dist/LikeC4Search.d.ts +2 -0
- package/dist/LikeC4Search.js +96 -0
- package/dist/StaticLikeC4Diagram.d.ts +3 -0
- package/dist/StaticLikeC4Diagram.js +41 -0
- package/dist/_virtual/_commonjsHelpers.js +6 -0
- package/dist/controls/Text.d.ts +2 -0
- package/dist/controls/Text.js +7 -0
- package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +1 -0
- package/dist/controls/action-button-bar/ActionButtonBar.css.js +5 -0
- package/dist/controls/action-button-bar/ActionButtonBar.d.ts +9 -0
- package/dist/controls/action-button-bar/ActionButtonBar.js +100 -0
- package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +10 -0
- package/dist/controls/action-button-bar/useActionButtonBarCtx.js +9 -0
- package/dist/controls/action-buttons/ActionButton.css.d.ts +1 -0
- package/dist/controls/action-buttons/ActionButton.css.js +5 -0
- package/dist/controls/action-buttons/ActionButton.d.ts +9 -0
- package/dist/controls/action-buttons/ActionButton.js +66 -0
- package/dist/controls/action-buttons/ActionButtons.d.ts +12 -0
- package/dist/controls/action-buttons/ActionButtons.js +99 -0
- package/dist/globals.css.d.ts +1 -0
- package/dist/globals.css.js +92 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/useDiagramState.d.ts +6 -0
- package/dist/hooks/useDiagramState.js +27 -0
- package/dist/hooks/useMantinePortalProps.d.ts +9 -0
- package/dist/hooks/useMantinePortalProps.js +9 -0
- package/dist/hooks/useSetState.d.ts +2 -0
- package/dist/hooks/useSetState.js +19 -0
- package/dist/hooks/useUpdateEffect.d.ts +4 -0
- package/dist/hooks/useUpdateEffect.js +32 -0
- package/dist/hooks/useXYFlow.d.ts +270 -0
- package/dist/hooks/useXYFlow.js +20 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +25 -0
- package/dist/likec4model/LikeC4ModelContext.d.ts +3 -0
- package/dist/likec4model/LikeC4ModelContext.js +5 -0
- package/dist/likec4model/index.d.ts +2 -0
- package/dist/likec4model/useLikeC4ElementsTree.d.ts +12 -0
- package/dist/likec4model/useLikeC4ElementsTree.js +25 -0
- package/dist/likec4model/useLikeC4Model.d.ts +20 -0
- package/dist/likec4model/useLikeC4Model.js +55 -0
- package/dist/overlays/OverlayContext.d.ts +10 -0
- package/dist/overlays/OverlayContext.js +9 -0
- package/dist/overlays/Overlays.css.d.ts +3 -0
- package/dist/overlays/Overlays.css.js +7 -0
- package/dist/overlays/Overlays.d.ts +2 -0
- package/dist/overlays/Overlays.js +137 -0
- package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +5 -0
- package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +185 -0
- package/dist/overlays/edge-details/SelectEdge.css.d.ts +7 -0
- package/dist/overlays/edge-details/SelectEdge.css.js +17 -0
- package/dist/overlays/edge-details/SelectEdge.d.ts +5 -0
- package/dist/overlays/edge-details/SelectEdge.js +129 -0
- package/dist/overlays/edge-details/_types.d.ts +14 -0
- package/dist/overlays/edge-details/use-layouted-edge-details.d.ts +21 -0
- package/dist/overlays/edge-details/use-layouted-edge-details.js +270 -0
- package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +5 -0
- package/dist/overlays/edge-details/xyflow/CompoundNode.js +76 -0
- package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +5 -0
- package/dist/overlays/edge-details/xyflow/ElementNode.js +159 -0
- package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +3 -0
- package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +84 -0
- package/dist/overlays/edge-details/xyflow/styles.css.d.ts +9 -0
- package/dist/overlays/edge-details/xyflow/styles.css.js +21 -0
- package/dist/overlays/element-details/ElementDetailsCard.css.d.ts +16 -0
- package/dist/overlays/element-details/ElementDetailsCard.css.js +33 -0
- package/dist/overlays/element-details/ElementDetailsCard.d.ts +7 -0
- package/dist/overlays/element-details/ElementDetailsCard.js +484 -0
- package/dist/overlays/element-details/TabPanelDeployments.css.d.ts +4 -0
- package/dist/overlays/element-details/TabPanelDeployments.css.js +11 -0
- package/dist/overlays/element-details/TabPanelDeployments.d.ts +7 -0
- package/dist/overlays/element-details/TabPanelDeployments.js +173 -0
- package/dist/overlays/element-details/TabPanelRelationships.css.d.ts +5 -0
- package/dist/overlays/element-details/TabPanelRelationships.css.js +11 -0
- package/dist/overlays/element-details/TabPanelRelationships.d.ts +8 -0
- package/dist/overlays/element-details/TabPanelRelationships.js +157 -0
- package/dist/overlays/element-details/TabPanelStructure.css.d.ts +2 -0
- package/dist/overlays/element-details/TabPanelStructure.css.js +7 -0
- package/dist/overlays/element-details/TabPanelStructure.d.ts +25 -0
- package/dist/overlays/element-details/TabPanelStructure.js +91 -0
- package/dist/overlays/index.d.ts +1 -0
- package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +5 -0
- package/dist/overlays/relationships-of/RelationshipsOverlay.js +193 -0
- package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +19 -0
- package/dist/overlays/relationships-of/RelationshipsXYFlow.js +290 -0
- package/dist/overlays/relationships-of/SelectElement.css.d.ts +2 -0
- package/dist/overlays/relationships-of/SelectElement.css.js +7 -0
- package/dist/overlays/relationships-of/SelectElement.d.ts +7 -0
- package/dist/overlays/relationships-of/SelectElement.js +126 -0
- package/dist/overlays/relationships-of/_types.d.ts +28 -0
- package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +22 -0
- package/dist/overlays/relationships-of/use-layouted-relationships.js +496 -0
- package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +6 -0
- package/dist/overlays/relationships-of/xyflow/CompoundNode.js +120 -0
- package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +6 -0
- package/dist/overlays/relationships-of/xyflow/ElementNode.js +194 -0
- package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +5 -0
- package/dist/overlays/relationships-of/xyflow/EmptyNode.js +18 -0
- package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +3 -0
- package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +123 -0
- package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +14 -0
- package/dist/overlays/relationships-of/xyflow/styles.css.js +24 -0
- package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +4 -0
- package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +12 -0
- package/dist/overlays/shared/xyflow/_types.d.ts +77 -0
- package/dist/state/DiagramContext.d.ts +1609 -0
- package/dist/state/DiagramContext.js +101 -0
- package/dist/state/aligners.d.ts +42 -0
- package/dist/state/aligners.js +349 -0
- package/dist/state/diagram-to-xyflow.d.ts +11 -0
- package/dist/state/diagram-to-xyflow.js +113 -0
- package/dist/state/diagramStore.d.ts +1705 -0
- package/dist/state/diagramStore.js +808 -0
- package/dist/state/diagramStore.layout.d.ts +4 -0
- package/dist/state/diagramStore.layout.js +56 -0
- package/dist/style.css +1 -0
- package/dist/theme-vars.css.d.ts +72 -0
- package/dist/theme-vars.css.js +6 -0
- package/dist/theme-vars.css.ts.vanilla.css.js +1 -0
- package/dist/theme-vars.d.ts +3 -0
- package/dist/theme-vars.js +5 -0
- package/dist/ui/DiagramTitlePanel.css.d.ts +4 -0
- package/dist/ui/DiagramTitlePanel.css.js +11 -0
- package/dist/ui/DiagramTitlePanel.d.ts +1 -0
- package/dist/ui/DiagramTitlePanel.js +159 -0
- package/dist/ui/DynamicViewWalkthrough.css.d.ts +4 -0
- package/dist/ui/DynamicViewWalkthrough.css.js +11 -0
- package/dist/ui/DynamicViewWalkthrough.d.ts +1 -0
- package/dist/ui/DynamicViewWalkthrough.js +156 -0
- package/dist/ui/EnsureMantine.d.ts +7 -0
- package/dist/ui/EnsureMantine.js +14 -0
- package/dist/ui/FramerMotionConfig.d.ts +2 -0
- package/dist/ui/FramerMotionConfig.js +14 -0
- package/dist/ui/Link.d.ts +4 -0
- package/dist/ui/Link.js +36 -0
- package/dist/ui/notation/NotationPanel.css.d.ts +6 -0
- package/dist/ui/notation/NotationPanel.css.js +16 -0
- package/dist/ui/notation/NotationPanel.d.ts +1 -0
- package/dist/ui/notation/NotationPanel.js +250 -0
- package/dist/ui/notation/index.d.ts +1 -0
- package/dist/ui/top-left/ChangeAutoLayoutButton.d.ts +2 -0
- package/dist/ui/top-left/ChangeAutoLayoutButton.js +159 -0
- package/dist/ui/top-left/ManualLayoutToolsButton.d.ts +2 -0
- package/dist/ui/top-left/ManualLayoutToolsButton.js +137 -0
- package/dist/ui/top-left/TopLeftPanel.d.ts +4 -0
- package/dist/ui/top-left/TopLeftPanel.js +211 -0
- package/dist/ui/top-left/_shared.d.ts +7 -0
- package/dist/ui/top-left/_shared.js +22 -0
- package/dist/ui/top-left/styles.css.d.ts +8 -0
- package/dist/ui/top-left/styles.css.js +17 -0
- package/dist/utils/types.d.ts +8 -0
- package/dist/utils/vector.d.ts +24 -0
- package/dist/utils/vector.js +55 -0
- package/dist/xyflow/EdgeMarkers.d.ts +12 -0
- package/dist/xyflow/EdgeMarkers.js +192 -0
- package/dist/xyflow/FitviewOnDiagramChange.d.ts +4 -0
- package/dist/xyflow/FitviewOnDiagramChange.js +72 -0
- package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +1 -0
- package/dist/xyflow/SelectEdgesOnNodeFocus.js +96 -0
- package/dist/xyflow/XYFlow.d.ts +8 -0
- package/dist/xyflow/XYFlow.js +145 -0
- package/dist/xyflow/XYFlowBackground.d.ts +10 -0
- package/dist/xyflow/XYFlowBackground.js +25 -0
- package/dist/xyflow/XYFlowInner.d.ts +8 -0
- package/dist/xyflow/XYFlowInner.js +41 -0
- package/dist/xyflow/const.d.ts +7 -0
- package/dist/xyflow/const.js +12 -0
- package/dist/xyflow/edges/EdgeLabel.d.ts +7 -0
- package/dist/xyflow/edges/EdgeLabel.js +160 -0
- package/dist/xyflow/edges/RelationshipEdge.d.ts +6 -0
- package/dist/xyflow/edges/RelationshipEdge.js +443 -0
- package/dist/xyflow/edges/RelationshipsDropdownMenu.css.d.ts +4 -0
- package/dist/xyflow/edges/RelationshipsDropdownMenu.css.js +11 -0
- package/dist/xyflow/edges/RelationshipsDropdownMenu.d.ts +13 -0
- package/dist/xyflow/edges/RelationshipsDropdownMenu.js +211 -0
- package/dist/xyflow/edges/edges.css.d.ts +17 -0
- package/dist/xyflow/edges/edges.css.js +37 -0
- package/dist/xyflow/edges/utils.d.ts +16 -0
- package/dist/xyflow/edges/utils.js +24 -0
- package/dist/xyflow/nodes/AnimateVariants.d.ts +1313 -0
- package/dist/xyflow/nodes/AnimateVariants.js +123 -0
- package/dist/xyflow/nodes/Node.css.d.ts +3 -0
- package/dist/xyflow/nodes/Node.css.js +9 -0
- package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +14 -0
- package/dist/xyflow/nodes/compound/CompoundNode.css.js +27 -0
- package/dist/xyflow/nodes/compound/CompoundNode.d.ts +6 -0
- package/dist/xyflow/nodes/compound/CompoundNode.js +216 -0
- package/dist/xyflow/nodes/compound/index.d.ts +1 -0
- package/dist/xyflow/nodes/element/ElementLink.css.d.ts +3 -0
- package/dist/xyflow/nodes/element/ElementLink.d.ts +6 -0
- package/dist/xyflow/nodes/element/ElementNode.d.ts +6 -0
- package/dist/xyflow/nodes/element/ElementNode.js +190 -0
- package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +17 -0
- package/dist/xyflow/nodes/element/ElementShapeSvg.js +175 -0
- package/dist/xyflow/nodes/element/element.css.d.ts +18 -0
- package/dist/xyflow/nodes/element/element.css.js +31 -0
- package/dist/xyflow/nodes/element/index.d.ts +1 -0
- package/dist/xyflow/nodes/shared/ElementIcon.d.ts +8 -0
- package/dist/xyflow/nodes/shared/ElementIcon.js +38 -0
- package/dist/xyflow/nodes/shared/Toolbar.d.ts +9 -0
- package/dist/xyflow/nodes/shared/Toolbar.js +436 -0
- package/dist/xyflow/types.d.ts +36 -0
- package/dist/xyflow/useLayoutConstraints.d.ts +42 -0
- package/dist/xyflow/useLayoutConstraints.js +226 -0
- package/dist/xyflow/useXYFlowEvents.d.ts +160 -0
- package/dist/xyflow/useXYFlowEvents.js +275 -0
- package/dist/xyflow/utils.d.ts +22 -0
- package/dist/xyflow/utils.js +72 -0
- package/package.json +34 -27
- package/src/LikeC4Diagram.tsx +4 -4
- package/src/LikeC4Search.css.ts +12 -0
- package/src/LikeC4Search.tsx +39 -90
- package/src/controls/Text.ts +5 -0
- package/src/controls/action-button-bar/ActionButtonBar.css.ts +13 -0
- package/src/controls/action-button-bar/ActionButtonBar.tsx +138 -0
- package/src/controls/action-button-bar/useActionButtonBarCtx.ts +13 -0
- package/src/controls/action-buttons/ActionButton.css.ts +29 -0
- package/src/controls/action-buttons/ActionButton.tsx +66 -0
- package/src/controls/action-buttons/ActionButtons.tsx +138 -0
- package/src/hooks/useXYFlow.ts +8 -8
- package/src/index.ts +12 -6
- package/src/likec4model/index.ts +12 -2
- package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +18 -12
- package/src/overlays/edge-details/_types.ts +13 -37
- package/src/overlays/edge-details/use-layouted-edge-details.ts +16 -14
- package/src/overlays/edge-details/xyflow/CompoundNode.tsx +3 -11
- package/src/overlays/edge-details/xyflow/ElementNode.tsx +4 -11
- package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +3 -3
- package/src/overlays/edge-details/xyflow/styles.css.ts +1 -59
- package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +23 -23
- package/src/overlays/relationships-of/_types.ts +20 -58
- package/src/overlays/relationships-of/use-layouted-relationships.ts +36 -40
- package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +9 -13
- package/src/overlays/relationships-of/xyflow/ElementNode.tsx +12 -15
- package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +4 -7
- package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +16 -14
- package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +60 -0
- package/src/overlays/shared/xyflow/_types.ts +87 -0
- package/src/state/diagram-to-xyflow.ts +6 -7
- package/src/state/diagramStore.layout.ts +3 -4
- package/src/state/diagramStore.ts +35 -37
- package/src/theme-vars.css.ts +81 -0
- package/src/theme-vars.ts +8 -81
- package/src/ui/DiagramTitlePanel.tsx +6 -6
- package/src/utils/types.ts +6 -0
- package/src/xyflow/SelectEdgesOnNodeFocus.tsx +3 -3
- package/src/xyflow/XYFlow.tsx +2 -2
- package/src/xyflow/edges/EdgeLabel.tsx +25 -18
- package/src/xyflow/edges/RelationshipEdge.tsx +5 -3
- package/src/xyflow/edges/RelationshipsDropdownMenu.tsx +3 -3
- package/src/xyflow/edges/edges.css.ts +68 -74
- package/src/xyflow/edges/utils.ts +6 -6
- package/src/xyflow/nodes/AnimateVariants.ts +143 -0
- package/src/xyflow/nodes/Node.css.ts +44 -0
- package/src/xyflow/nodes/compound/CompoundNode.css.ts +1 -64
- package/src/xyflow/nodes/compound/CompoundNode.tsx +69 -182
- package/src/xyflow/nodes/element/ElementLink.tsx +2 -3
- package/src/xyflow/nodes/element/ElementNode.tsx +64 -266
- package/src/xyflow/nodes/element/element.css.ts +0 -57
- package/src/xyflow/nodes/shared/Toolbar.tsx +30 -30
- package/src/xyflow/types.ts +48 -51
- package/src/xyflow/useLayoutConstraints.ts +9 -9
- package/src/xyflow/useXYFlowEvents.ts +13 -30
- package/src/xyflow/utils.ts +2 -2
- package/src/xyflow/nodes/use-animate-variants.tsx +0 -64
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { nonexhaustive } from "@likec4/core";
|
|
2
|
+
import { getNodeDimensions } from "@xyflow/system";
|
|
3
|
+
import { hasAtLeast } from "remeda";
|
|
4
|
+
import { createLayoutConstraints } from "../xyflow/useLayoutConstraints.js";
|
|
5
|
+
import { GridAligner, getLinearAligner } from "./aligners.js";
|
|
6
|
+
function align(get) {
|
|
7
|
+
return (mode) => {
|
|
8
|
+
const { scheduleSaveManualLayout, xystore } = get();
|
|
9
|
+
const { nodeLookup, parentLookup } = xystore.getState();
|
|
10
|
+
const selectedNodes = new Set(nodeLookup.values().filter((n) => n.selected).map((n) => n.id));
|
|
11
|
+
const nodesToAlign = [...selectedNodes.difference(new Set(parentLookup.keys()))];
|
|
12
|
+
if (!hasAtLeast(nodesToAlign, 2)) {
|
|
13
|
+
console.warn("At least 2 nodes must be selected to align");
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const constraints = createLayoutConstraints(xystore, nodesToAlign);
|
|
17
|
+
const aligner = getAligner(mode);
|
|
18
|
+
constraints.onMove((nodes) => {
|
|
19
|
+
aligner.computeLayout(nodes.map(({ node }) => toNodeRect(node)));
|
|
20
|
+
nodes.forEach(({ rect, node }) => {
|
|
21
|
+
rect.positionAbsolute = {
|
|
22
|
+
...rect.positionAbsolute,
|
|
23
|
+
...aligner.applyPosition(toNodeRect(node))
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
scheduleSaveManualLayout();
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function toNodeRect(node) {
|
|
31
|
+
return {
|
|
32
|
+
...node.internals.positionAbsolute,
|
|
33
|
+
id: node.id,
|
|
34
|
+
width: getNodeDimensions(node).width,
|
|
35
|
+
height: getNodeDimensions(node).height
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function getAligner(mode) {
|
|
39
|
+
switch (mode) {
|
|
40
|
+
case "Left":
|
|
41
|
+
case "Right":
|
|
42
|
+
case "Top":
|
|
43
|
+
case "Bottom":
|
|
44
|
+
case "Center":
|
|
45
|
+
case "Middle":
|
|
46
|
+
return getLinearAligner(mode);
|
|
47
|
+
case "Column":
|
|
48
|
+
case "Row":
|
|
49
|
+
return new GridAligner(mode);
|
|
50
|
+
default:
|
|
51
|
+
nonexhaustive(mode);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
align
|
|
56
|
+
};
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.react-flow{direction:ltr;--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.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.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 .react-flow__edges{position:absolute}.react-flow .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{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.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-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))}.likec4-diagram-root{overflow:hidden;position:relative;width:100%;height:100%;padding:0;margin:0;box-sizing:border-box;-webkit-font-smoothing:var(--mantine-webkit-font-smoothing);-moz-osx-font-smoothing:var(--mantine-moz-font-smoothing)}:where(.likec4-diagram-root) .mantine-ActionIcon-icon .tabler-icon{width:75%;height:75%}.likec4-diagram-root{--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"');--likec4-background-color: var(--mantine-color-body);--likec4-background-pattern-color: var(--mantine-color-gray-4);--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-mantine-color-scheme=dark]) .likec4-diagram-root{--likec4-background-pattern-color: var(--mantine-color-dark-5)}: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=primary][data-compound-depth="1"]){--likec4-element-fill: #145ed7;--likec4-element-stroke: #194bb8}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=primary][data-compound-depth="1"]){--likec4-element-fill: #1a5bc5;--likec4-element-stroke: #1e49a9}:where([data-likec4-color=primary][data-compound-depth="2"]){--likec4-element-fill: #195cc8;--likec4-element-stroke: #1d4aac}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=primary][data-compound-depth="2"]){--likec4-element-fill: #1e56b1;--likec4-element-stroke: #204698}:where([data-likec4-color=primary][data-compound-depth="3"]){--likec4-element-fill: #1e59ba;--likec4-element-stroke: #2149a0}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=primary][data-compound-depth="3"]){--likec4-element-fill: #21519f;--likec4-element-stroke: #224289}:where([data-likec4-color=primary][data-compound-depth="4"]){--likec4-element-fill: #2357ad;--likec4-element-stroke: #244795}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=primary][data-compound-depth="4"]){--likec4-element-fill: #234c8e;--likec4-element-stroke: #243f7a}:where([data-likec4-color=primary][data-compound-depth="5"]){--likec4-element-fill: #2755a0;--likec4-element-stroke: #27468a}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=primary][data-compound-depth="5"]){--likec4-element-fill: #25467d;--likec4-element-stroke: #243b6c}:where([data-likec4-color=primary][data-compound-depth="6"]){--likec4-element-fill: #2a5293;--likec4-element-stroke: #2a447f}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=primary][data-compound-depth="6"]){--likec4-element-fill: #25416d;--likec4-element-stroke: #24365f}: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=blue][data-compound-depth="1"]){--likec4-element-fill: #145ed7;--likec4-element-stroke: #194bb8}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=blue][data-compound-depth="1"]){--likec4-element-fill: #1a5bc5;--likec4-element-stroke: #1e49a9}:where([data-likec4-color=blue][data-compound-depth="2"]){--likec4-element-fill: #195cc8;--likec4-element-stroke: #1d4aac}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=blue][data-compound-depth="2"]){--likec4-element-fill: #1e56b1;--likec4-element-stroke: #204698}:where([data-likec4-color=blue][data-compound-depth="3"]){--likec4-element-fill: #1e59ba;--likec4-element-stroke: #2149a0}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=blue][data-compound-depth="3"]){--likec4-element-fill: #21519f;--likec4-element-stroke: #224289}:where([data-likec4-color=blue][data-compound-depth="4"]){--likec4-element-fill: #2357ad;--likec4-element-stroke: #244795}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=blue][data-compound-depth="4"]){--likec4-element-fill: #234c8e;--likec4-element-stroke: #243f7a}:where([data-likec4-color=blue][data-compound-depth="5"]){--likec4-element-fill: #2755a0;--likec4-element-stroke: #27468a}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=blue][data-compound-depth="5"]){--likec4-element-fill: #25467d;--likec4-element-stroke: #243b6c}:where([data-likec4-color=blue][data-compound-depth="6"]){--likec4-element-fill: #2a5293;--likec4-element-stroke: #2a447f}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=blue][data-compound-depth="6"]){--likec4-element-fill: #25416d;--likec4-element-stroke: #24365f}: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=secondary][data-compound-depth="1"]){--likec4-element-fill: #086392;--likec4-element-stroke: #084f76}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=secondary][data-compound-depth="1"]){--likec4-element-fill: #0d5d86;--likec4-element-stroke: #0b4a6c}:where([data-likec4-color=secondary][data-compound-depth="2"]){--likec4-element-fill: #0c5e88;--likec4-element-stroke: #0b4b6e}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=secondary][data-compound-depth="2"]){--likec4-element-fill: #105579;--likec4-element-stroke: #0e4462}:where([data-likec4-color=secondary][data-compound-depth="3"]){--likec4-element-fill: #10597f;--likec4-element-stroke: #0e4767}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=secondary][data-compound-depth="3"]){--likec4-element-fill: #134e6c;--likec4-element-stroke: #103e57}:where([data-likec4-color=secondary][data-compound-depth="4"]){--likec4-element-fill: #135475;--likec4-element-stroke: #11435f}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=secondary][data-compound-depth="4"]){--likec4-element-fill: #154660;--likec4-element-stroke: #11384e}:where([data-likec4-color=secondary][data-compound-depth="5"]){--likec4-element-fill: #164f6c;--likec4-element-stroke: #133f58}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=secondary][data-compound-depth="5"]){--likec4-element-fill: #163f55;--likec4-element-stroke: #123345}:where([data-likec4-color=secondary][data-compound-depth="6"]){--likec4-element-fill: #194a64;--likec4-element-stroke: #153c51}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=secondary][data-compound-depth="6"]){--likec4-element-fill: #17384a;--likec4-element-stroke: #132d3c}: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=sky][data-compound-depth="1"]){--likec4-element-fill: #086392;--likec4-element-stroke: #084f76}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=sky][data-compound-depth="1"]){--likec4-element-fill: #0d5d86;--likec4-element-stroke: #0b4a6c}:where([data-likec4-color=sky][data-compound-depth="2"]){--likec4-element-fill: #0c5e88;--likec4-element-stroke: #0b4b6e}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=sky][data-compound-depth="2"]){--likec4-element-fill: #105579;--likec4-element-stroke: #0e4462}:where([data-likec4-color=sky][data-compound-depth="3"]){--likec4-element-fill: #10597f;--likec4-element-stroke: #0e4767}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=sky][data-compound-depth="3"]){--likec4-element-fill: #134e6c;--likec4-element-stroke: #103e57}:where([data-likec4-color=sky][data-compound-depth="4"]){--likec4-element-fill: #135475;--likec4-element-stroke: #11435f}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=sky][data-compound-depth="4"]){--likec4-element-fill: #154660;--likec4-element-stroke: #11384e}:where([data-likec4-color=sky][data-compound-depth="5"]){--likec4-element-fill: #164f6c;--likec4-element-stroke: #133f58}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=sky][data-compound-depth="5"]){--likec4-element-fill: #163f55;--likec4-element-stroke: #123345}:where([data-likec4-color=sky][data-compound-depth="6"]){--likec4-element-fill: #194a64;--likec4-element-stroke: #153c51}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=sky][data-compound-depth="6"]){--likec4-element-fill: #17384a;--likec4-element-stroke: #132d3c}: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=muted][data-compound-depth="1"]){--likec4-element-fill: #4e5a6a;--likec4-element-stroke: #384250}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=muted][data-compound-depth="1"]){--likec4-element-fill: #4b5563;--likec4-element-stroke: #363e4b}:where([data-likec4-color=muted][data-compound-depth="2"]){--likec4-element-fill: #4c5665;--likec4-element-stroke: #363f4c}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=muted][data-compound-depth="2"]){--likec4-element-fill: #474f5c;--likec4-element-stroke: #333a45}:where([data-likec4-color=muted][data-compound-depth="3"]){--likec4-element-fill: #4a5360;--likec4-element-stroke: #353d48}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=muted][data-compound-depth="3"]){--likec4-element-fill: #424a54;--likec4-element-stroke: #30363f}:where([data-likec4-color=muted][data-compound-depth="4"]){--likec4-element-fill: #48505b;--likec4-element-stroke: #333a44}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=muted][data-compound-depth="4"]){--likec4-element-fill: #3e444d;--likec4-element-stroke: #2d323a}:where([data-likec4-color=muted][data-compound-depth="5"]){--likec4-element-fill: #454c56;--likec4-element-stroke: #323841}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=muted][data-compound-depth="5"]){--likec4-element-fill: #393e46;--likec4-element-stroke: #292e34}:where([data-likec4-color=muted][data-compound-depth="6"]){--likec4-element-fill: #434951;--likec4-element-stroke: #30353d}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=muted][data-compound-depth="6"]){--likec4-element-fill: #34383e;--likec4-element-stroke: #26292f}: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=slate][data-compound-depth="1"]){--likec4-element-fill: #4e5a6a;--likec4-element-stroke: #384250}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=slate][data-compound-depth="1"]){--likec4-element-fill: #4b5563;--likec4-element-stroke: #363e4b}:where([data-likec4-color=slate][data-compound-depth="2"]){--likec4-element-fill: #4c5665;--likec4-element-stroke: #363f4c}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=slate][data-compound-depth="2"]){--likec4-element-fill: #474f5c;--likec4-element-stroke: #333a45}:where([data-likec4-color=slate][data-compound-depth="3"]){--likec4-element-fill: #4a5360;--likec4-element-stroke: #353d48}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=slate][data-compound-depth="3"]){--likec4-element-fill: #424a54;--likec4-element-stroke: #30363f}:where([data-likec4-color=slate][data-compound-depth="4"]){--likec4-element-fill: #48505b;--likec4-element-stroke: #333a44}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=slate][data-compound-depth="4"]){--likec4-element-fill: #3e444d;--likec4-element-stroke: #2d323a}:where([data-likec4-color=slate][data-compound-depth="5"]){--likec4-element-fill: #454c56;--likec4-element-stroke: #323841}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=slate][data-compound-depth="5"]){--likec4-element-fill: #393e46;--likec4-element-stroke: #292e34}:where([data-likec4-color=slate][data-compound-depth="6"]){--likec4-element-fill: #434951;--likec4-element-stroke: #30353d}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=slate][data-compound-depth="6"]){--likec4-element-fill: #34383e;--likec4-element-stroke: #26292f}: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=gray][data-compound-depth="1"]){--likec4-element-fill: #595959;--likec4-element-stroke: #3f3f3f}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=gray][data-compound-depth="1"]){--likec4-element-fill: #545454;--likec4-element-stroke: #3c3c3c}:where([data-likec4-color=gray][data-compound-depth="2"]){--likec4-element-fill: #555555;--likec4-element-stroke: #3d3d3d}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=gray][data-compound-depth="2"]){--likec4-element-fill: #4e4e4e;--likec4-element-stroke: #383838}:where([data-likec4-color=gray][data-compound-depth="3"]){--likec4-element-fill: #525252;--likec4-element-stroke: #3a3a3a}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=gray][data-compound-depth="3"]){--likec4-element-fill: #484848;--likec4-element-stroke: #343434}:where([data-likec4-color=gray][data-compound-depth="4"]){--likec4-element-fill: #4e4e4e;--likec4-element-stroke: #383838}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=gray][data-compound-depth="4"]){--likec4-element-fill: #434343;--likec4-element-stroke: #303030}:where([data-likec4-color=gray][data-compound-depth="5"]){--likec4-element-fill: #4b4b4b;--likec4-element-stroke: #353535}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=gray][data-compound-depth="5"]){--likec4-element-fill: #3d3d3d;--likec4-element-stroke: #2b2b2b}:where([data-likec4-color=gray][data-compound-depth="6"]){--likec4-element-fill: #474747;--likec4-element-stroke: #333333}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=gray][data-compound-depth="6"]){--likec4-element-fill: #373737;--likec4-element-stroke: #272727}:where([data-likec4-color=red]){--likec4-element-fill: #AC4D39;--likec4-element-stroke: #853A2D;--likec4-element-hiContrast: #FBD3CB;--likec4-element-loContrast: #f5b2a3;--likec4-compound-title-color: #f5b2a3;--likec4-relation-lineColor: #AC4D39;--likec4-relation-labelBg: #b91c1c;--likec4-relation-labelColor: #f5b2a3}:where([data-likec4-color=red][data-compound-depth="1"]){--likec4-element-fill: #803e30;--likec4-element-stroke: #632f26}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=red][data-compound-depth="1"]){--likec4-element-fill: #773d30;--likec4-element-stroke: #5c2e26}:where([data-likec4-color=red][data-compound-depth="2"]){--likec4-element-fill: #793d31;--likec4-element-stroke: #5e2e26}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=red][data-compound-depth="2"]){--likec4-element-fill: #6c3a2f;--likec4-element-stroke: #542c25}:where([data-likec4-color=red][data-compound-depth="3"]){--likec4-element-fill: #723c31;--likec4-element-stroke: #582e27}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=red][data-compound-depth="3"]){--likec4-element-fill: #62372e;--likec4-element-stroke: #4c2a24}:where([data-likec4-color=red][data-compound-depth="4"]){--likec4-element-fill: #6a3b31;--likec4-element-stroke: #522d27}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=red][data-compound-depth="4"]){--likec4-element-fill: #58342c;--likec4-element-stroke: #442823}:where([data-likec4-color=red][data-compound-depth="5"]){--likec4-element-fill: #633a31;--likec4-element-stroke: #4d2c27}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=red][data-compound-depth="5"]){--likec4-element-fill: #4f312a;--likec4-element-stroke: #3d2521}:where([data-likec4-color=red][data-compound-depth="6"]){--likec4-element-fill: #5d3931;--likec4-element-stroke: #482b27}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=red][data-compound-depth="6"]){--likec4-element-fill: #462d28;--likec4-element-stroke: #36231f}: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=green][data-compound-depth="1"]){--likec4-element-fill: #35683e;--likec4-element-stroke: #24462d}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=green][data-compound-depth="1"]){--likec4-element-fill: #34613c;--likec4-element-stroke: #24412b}:where([data-likec4-color=green][data-compound-depth="2"]){--likec4-element-fill: #35623d;--likec4-element-stroke: #24422c}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=green][data-compound-depth="2"]){--likec4-element-fill: #325839;--likec4-element-stroke: #223c29}:where([data-likec4-color=green][data-compound-depth="3"]){--likec4-element-fill: #345d3c;--likec4-element-stroke: #243e2a}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=green][data-compound-depth="3"]){--likec4-element-fill: #305136;--likec4-element-stroke: #213626}:where([data-likec4-color=green][data-compound-depth="4"]){--likec4-element-fill: #33573a;--likec4-element-stroke: #233b29}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=green][data-compound-depth="4"]){--likec4-element-fill: #2d4932;--likec4-element-stroke: #1f3123}:where([data-likec4-color=green][data-compound-depth="5"]){--likec4-element-fill: #335238;--likec4-element-stroke: #223728}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=green][data-compound-depth="5"]){--likec4-element-fill: #2b422f;--likec4-element-stroke: #1d2c21}:where([data-likec4-color=green][data-compound-depth="6"]){--likec4-element-fill: #324d37;--likec4-element-stroke: #223426}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=green][data-compound-depth="6"]){--likec4-element-fill: #283a2b;--likec4-element-stroke: #1b271e}:where([data-likec4-color=amber]){--likec4-element-fill: #A35829;--likec4-element-stroke: #7E451D;--likec4-element-hiContrast: #FFE0C2;--likec4-element-loContrast: #f9b27c;--likec4-compound-title-color: #f9b27c;--likec4-relation-lineColor: #b45309;--likec4-relation-labelBg: #78350f;--likec4-relation-labelColor: #FFE0C2}:where([data-likec4-color=amber][data-compound-depth="1"]){--likec4-element-fill: #794524;--likec4-element-stroke: #5e361a}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=amber][data-compound-depth="1"]){--likec4-element-fill: #704225;--likec4-element-stroke: #56331b}:where([data-likec4-color=amber][data-compound-depth="2"]){--likec4-element-fill: #724325;--likec4-element-stroke: #58341b}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=amber][data-compound-depth="2"]){--likec4-element-fill: #663e25;--likec4-element-stroke: #4e301b}:where([data-likec4-color=amber][data-compound-depth="3"]){--likec4-element-fill: #6b4126;--likec4-element-stroke: #52321c}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=amber][data-compound-depth="3"]){--likec4-element-fill: #5c3a25;--likec4-element-stroke: #472d1b}:where([data-likec4-color=amber][data-compound-depth="4"]){--likec4-element-fill: #643e27;--likec4-element-stroke: #4d301d}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=amber][data-compound-depth="4"]){--likec4-element-fill: #533624;--likec4-element-stroke: #402a1a}:where([data-likec4-color=amber][data-compound-depth="5"]){--likec4-element-fill: #5d3c28;--likec4-element-stroke: #472f1d}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=amber][data-compound-depth="5"]){--likec4-element-fill: #493223;--likec4-element-stroke: #38261a}:where([data-likec4-color=amber][data-compound-depth="6"]){--likec4-element-fill: #563a28;--likec4-element-stroke: #422d1e}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=amber][data-compound-depth="6"]){--likec4-element-fill: #412d21;--likec4-element-stroke: #322319}: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}:where([data-likec4-color=indigo][data-compound-depth="1"]){--likec4-element-fill: #2529e1;--likec4-element-stroke: #2d24c2}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=indigo][data-compound-depth="1"]){--likec4-element-fill: #2529d3;--likec4-element-stroke: #3028b2}:where([data-likec4-color=indigo][data-compound-depth="2"]){--likec4-element-fill: #2428d7;--likec4-element-stroke: #3028b5}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=indigo][data-compound-depth="2"]){--likec4-element-fill: #282bbf;--likec4-element-stroke: #312aa1}:where([data-likec4-color=indigo][data-compound-depth="3"]){--likec4-element-fill: #292cc8;--likec4-element-stroke: #322ba9}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=indigo][data-compound-depth="3"]){--likec4-element-fill: #2b2dac;--likec4-element-stroke: #312b91}:where([data-likec4-color=indigo][data-compound-depth="4"]){--likec4-element-fill: #2d30ba;--likec4-element-stroke: #342e9e}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=indigo][data-compound-depth="4"]){--likec4-element-fill: #2c2f99;--likec4-element-stroke: #302c82}:where([data-likec4-color=indigo][data-compound-depth="5"]){--likec4-element-fill: #3133ac;--likec4-element-stroke: #363092}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=indigo][data-compound-depth="5"]){--likec4-element-fill: #2d2f87;--likec4-element-stroke: #2f2b73}:where([data-likec4-color=indigo][data-compound-depth="6"]){--likec4-element-fill: #34369f;--likec4-element-stroke: #373287}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=indigo][data-compound-depth="6"]){--likec4-element-fill: #2d2e76;--likec4-element-stroke: #2e2b65}._2h8g8h1{opacity:0}.react-flow._2h8g8h0{--xy-background-color: var(--likec4-background-color);--xy-background-pattern-color: var(--likec4-background-pattern-color)}.react-flow._2h8g8h0._2h8g8h3{--likec4-background-color: transparent !important;--xy-background-color: transparent !important;background-color:transparent!important}:where(._2h8g8h4,._2h8g8h3) .react-flow__attribution{display:none}@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none){._2h8g8h0{--likec4-safari-animation-hook: }}._16mg60z0{margin-inline-end:4px}:where(._16mg60z0) .tabler-icon{opacity:.8;width:70%;height:70%}@keyframes bexn7q7{0%{stroke-dashoffset:46}to{stroke-dashoffset:10}}.bexn7q1{--bexn7q0: black;--xy-edge-stroke: var(--likec4-relation-lineColor);--xy-edge-stroke-selected: color-mix(in srgb, var(--likec4-relation-lineColor), var(--bexn7q0) 35%);--xy-edge-label-color: color-mix(in srgb, var(--likec4-relation-labelColor), rgba(255 255 255 / .85) 40%);--xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 40%);--xy-edge-stroke-width: 3}:where([data-mantine-color-scheme=dark]) .bexn7q1{--bexn7q0: white;--xy-edge-label-color: var(--likec4-relation-labelColor);--xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 50%)}:where(.react-flow__edge.selected) .bexn7q1{--xy-edge-stroke: var(--xy-edge-stroke-selected);--xy-edge-stroke-width: 3}.bexn7q1:is([data-edge-hovered=true],[data-edge-active=true]){--xy-edge-stroke: var(--xy-edge-stroke-selected);--xy-edge-stroke-width: 3}:where(.react-flow__edge.selected) .bexn7q1[data-edge-hovered=true]{--xy-edge-stroke-width: 4}.likec4-diagram .react-flow__edges>svg{mix-blend-mode:plus-lighter}:where([data-mantine-color-scheme=light]) .likec4-diagram .react-flow__edges>svg{mix-blend-mode:screen}.likec4-diagram .react-flow__edges>svg:has(.bexn7q2){opacity:.6;transition:opacity .6s ease-in-out,filter .6s ease-in-out;transition-delay:.2s;filter:grayscale(.85) var(--likec4-safari-animation-hook, blur(1px));will-change:opacity,filter}.bexn7q3{stroke-opacity:.08;transition-property:stroke-width,stroke-opacity;transition-duration:155ms;transition-timing-function:ease-out}:where(.react-flow__edge.selected,[data-edge-active=true],[data-edge-hovered=true]) .bexn7q3{stroke-width:calc(var(--xy-edge-stroke-width) + 8);stroke-opacity:.15}.bexn7q4{fill:var(--xy-edge-stroke);stroke:var(--xy-edge-stroke)}.bexn7q5{fill:var(--xy-edge-stroke);stroke:var(--xy-edge-stroke);fill-opacity:.75;stroke-width:1;cursor:grab;pointer-events:auto;visibility:hidden}.bexn7q5:hover{stroke:var(--mantine-primary-color-filled-hover);stroke-width:9;transition:stroke .1s ease-out,stroke-width .1s ease-out}:where(.react-flow__edge.selected,[data-edge-hovered=true]) .bexn7q5{visibility:visible;transition:fill-opacity .15s ease-out,stroke .15s ease-out,stroke-width .15s ease-out;transition-delay:50ms;fill-opacity:1;stroke-width:5}.bexn7q6{cursor:grabbing}.bexn7q6 *{cursor:grabbing!important}.bexn7q8{animation-duration:.8s;animation-iteration-count:infinite;animation-timing-function:linear;animation-fill-mode:both;stroke-dashoffset:10}:where([data-edge-hovered=true]) .bexn7q8{animation-name:bexn7q7;animation-delay:.45s;transition:stroke .13s ease-out,stroke-width .13s ease-out}:where(.react-flow__edge.selected,[data-edge-active=true],[data-edge-animated=true]) .bexn7q8{animation-name:bexn7q7;animation-delay:0ms;transition:stroke .13s ease-out,stroke-width .13s ease-out}:where([data-edge-dir=back]) .bexn7q8{animation-direction:reverse}.bexn7q2 .bexn7q8{animation-play-state:paused}.bexn7q9{flex:0 0 auto;font-weight:600;font-size:calc(.875rem * var(--mantine-scale));line-height:1;padding:5px;text-align:center;min-width:22px;border-top-left-radius:2px;border-bottom-left-radius:2px;background-color:color-mix(in srgb,var(--likec4-relation-labelBg),var(--bexn7q0) 5%);font-variant-numeric:tabular-nums}:where([data-mantine-color-scheme=dark]) :where([data-likec4-color=gray]) .bexn7q9{background-color:color-mix(in srgb,var(--likec4-relation-labelBg),var(--bexn7q0) 15%)}:where([data-edge-active=true]) .bexn7q9{background-color:transparent}.bexn7qd{--bexn7qc: translate(var(--bexn7qa, -50%), var(--bexn7qb, -50%));top:0;left:0;padding:2px 4px 4px;font-family:var(--likec4-font-family);display:flex;position:absolute;pointer-events:all;cursor:pointer;width:fit-content;transform-origin:50% 50%;mix-blend-mode:plus-lighter;color:var(--xy-edge-label-color);background-color:var(--xy-edge-label-background-color);border-radius:2px;transform:var(--bexn7qc)}.bexn7qd[data-edge-hovered=true]{transition:all .14s ease-in-out;transform:var(--bexn7qc) scale(1.12)}.bexn7qd:has(.bexn7q9){padding:0;gap:2px}.bexn7qd:is(.bexn7q2){opacity:.3;transition:opacity .6s ease-in-out,filter .6s ease-in-out;transition-delay:.2s;filter:grayscale(.85) var(--likec4-safari-animation-hook, blur(1px));will-change:opacity,filter}.bexn7qe{white-space-collapse:preserve-breaks;font-size:calc(.875rem * var(--mantine-scale));line-height:1.185}.bexn7qf{text-align:center;white-space-collapse:preserve-breaks;font-size:calc(.6875rem * var(--mantine-scale));line-height:1;opacity:.75}.bexn7qd:has(.bexn7q9) .bexn7qe{padding:2px 5px 4px 2px}.bexn7qg{position:absolute;top:4px;right:4px;z-index:9}.bexn7qh{--text-fz: var(--mantine-font-size-sm);-webkit-user-select:all;user-select:all;text-align:left;white-space-collapse:preserve-breaks;text-wrap:pretty;line-height:1.25}.bexn7qi{--ai-bg: var(--likec4-relation-labelBg);--ai-hover: color-mix(in srgb , var(--likec4-relation-labelBg), var(--bexn7q0) 10%);z-index:calc(var(--layer-overlays, 1) + 1);pointer-events:all;color:var(--xy-edge-label-color);cursor:pointer;opacity:1;transition:all .13s cubic-bezier(.5,0,.2,1);background-color:var(--ai-bg)}.bexn7qi:hover{transform:translateY(1px) scale(1.15)}.bexn7qi:active{transform:translateY(-1px) scale(.9)}.bexn7qi .tabler-icon{width:80%;height:80%;stroke-width:2}@media (min-width: 62em){.bexn7qh{--text-fz: var(--mantine-font-size-md)}}.qcv9lq0{min-width:250px;max-width:min(90vw,500px)}.qcv9lq1{gap:4px}.qcv9lq2{display:block;font-size:10px;font-weight:500;white-space:nowrap;padding:2px 5px;border-radius:2px;background:color-mix(in srgb,var(--likec4-element-fill),transparent 45%);line-height:1.1}:where([data-mantine-color-scheme=dark]) .qcv9lq2{color:var(--likec4-element-loContrast)}.qcv9lq3{white-space-collapse:preserve-breaks;font-size:var(--mantine-font-size-sm)}._10w34w70{z-index:100;width:100%;display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:2px;justify-content:center;pointer-events:none}._1jdst3q0{--ai-bg-idle: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);--ai-bg: var(--ai-bg-idle);--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));pointer-events:all;color:var(--likec4-element-loContrast);cursor:pointer;background-color:var(--ai-bg)}._1jdst3q0:hover{box-shadow:var(--mantine-shadow-md)}:where([data-mantine-color-scheme=light]) .likec4-compound-transparent ._1jdst3q0{--ai-bg-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 20%);--ai-hover: color-mix(in srgb , var(--likec4-element-fill), transparent 10%);--ai-bg: color-mix(in srgb , var(--likec4-element-fill), transparent 99%);color:var(--likec4-element-stroke);opacity:.85}._12hvjem0{position:absolute;left:3px;top:6px}._12hvjem1{position:absolute;top:2px;right:2px}:where([data-likec4-shape=browser]) ._12hvjem1{right:5px}:where([data-likec4-shape=cylinder],[data-likec4-shape=storage]) ._12hvjem1{top:14px}:where([data-likec4-shape=queue]) ._12hvjem1{top:1px;right:12px}._12hvjem2{z-index:100;position:absolute;left:0;width:100%;bottom:2px;display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:center;pointer-events:none}:where([data-likec4-shape=browser]) ._12hvjem2{bottom:4px}@keyframes _1b6tkn4{0%{stroke-opacity:.8}to{stroke-opacity:.5}}._1b6tkn1{--_1b6tkn0: color-mix(in srgb, var(--likec4-element-stroke) 90%, var(--likec4-element-fill));position:absolute;top:0;left:0;width:100%;height:100%;padding:0;margin:0;display:flex;align-items:center;justify-content:center}._1b6tkn1:after{content:" ";position:absolute;top:100%;left:0;right:0;height:16px;background:transparent;pointer-events:all}:where(.react-flow__node.selected) ._1b6tkn1{will-change:transform}._1b6tkn2{top:50%;left:50%;visibility:hidden}._1b6tkn3{will-change:transform}._1b6tkn6{--_1b6tkn5: var(--likec4-element-loContrast);stroke:var(--_1b6tkn5);fill:none;transform-origin:center center;stroke-width:6;animation-duration:1s;animation-iteration-count:infinite;animation-direction:alternate;stroke-opacity:.8;visibility:hidden}:where(.react-flow__node.selected) ._1b6tkn6{visibility:visible;animation-name:var(--likec4-safari-animation-hook, _1b6tkn4)}:where(.react-flow__node:focus-visible,._1b6tkn1:focus-visible) ._1b6tkn6{stroke-width:10;stroke:var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));visibility:visible}:where([data-likec4-shape=queue],[data-likec4-shape=cylinder],[data-likec4-shape=storage]) ._1b6tkn6{stroke-width:10}:where([data-mantine-color-scheme=light]) ._1b6tkn6{--_1b6tkn5: color-mix(in srgb, var(--likec4-element-fill) 50%, #3c3c3c)}._1b6tkn7{fill:var(--likec4-element-fill)}._1b6tkn8{fill:var(--likec4-element-stroke)}._1b6tkn9{fill:var(--_1b6tkn0, color-mix(in srgb, var(--likec4-element-stroke) 90%, var(--likec4-element-fill)))}._1b6tknd{flex:0 0 auto;font-family:var(--likec4-element-font-family);font-optical-sizing:auto;font-style:normal;text-align:var(--_1b6tknb);font-weight:500;font-size:19px;line-height:1.15;text-wrap:balance;color:var(--likec4-element-hiContrast);white-space-collapse:preserve-breaks}._1b6tkne{flex:0 1 auto;font-family:var(--likec4-element-font-family);font-optical-sizing:auto;font-style:normal;font-weight:400;font-size:14px;line-height:1.2;text-align:var(--_1b6tknb);text-wrap:pretty;color:var(--likec4-element-loContrast);white-space-collapse:preserve-breaks;text-overflow:ellipsis;overflow:hidden}:where(._1b6tkna) ._1b6tkne{text-wrap:wrap}._1b6tknf{flex:0 0 auto;font-family:var(--likec4-element-font-family);font-optical-sizing:auto;font-style:normal;font-weight:400;font-size:12px;line-height:1.125;text-align:var(--_1b6tknb);text-wrap:balance;opacity:.92;color:var(--likec4-element-loContrast)}._1b6tkn1:hover ._1b6tknf{opacity:1}._1b6tkng{--_1b6tknc: 48px;flex:1;height:fit-content;display:flex;align-items:center;justify-content:center;flex-direction:row;padding:calc(1.5rem * var(--mantine-scale));overflow:hidden;gap:calc(.625rem * var(--mantine-scale))}:where([data-likec4-shape=queue],[data-likec4-shape=mobile]) ._1b6tkng{padding-left:40px;padding-right:20px}:where([data-likec4-shape=cylinder],[data-likec4-shape=storage]) ._1b6tkng{padding-top:30px}:where([data-likec4-shape=browser]) ._1b6tkng{padding-top:32px;padding-bottom:28px}._1b6tkn1:not(:is([data-likec4-shape=queue],[data-likec4-shape=mobile])) ._1b6tkng:is(._1b6tkna){padding-left:24px;padding-right:18px}._1b6tkng:has(._1b6tkne,._1b6tknf){--_1b6tknc: 60px;gap:calc(1rem * var(--mantine-scale))}._1b6tknh{--_1b6tknb: center;height:fit-content;width:max-content;display:flex;flex-direction:column;align-items:stretch;justify-content:center;flex-wrap:nowrap;overflow:hidden;gap:calc(.5rem * var(--mantine-scale))}._1b6tknh:has(._1b6tkne):has(._1b6tknf){gap:calc(.375rem * var(--mantine-scale))}:where(._1b6tkna) ._1b6tknh{--_1b6tknb: left;min-width:calc(100% - 160px);align-items:flex-start}._1b6tkni{flex:0 0 var(--_1b6tknc);height:var(--_1b6tknc);width:var(--_1b6tknc);display:flex;align-items:center;justify-content:center;mix-blend-mode:hard-light;align-self:flex-start}._1b6tkni svg,._1b6tkni img{width:100%;height:auto;max-height:100%;pointer-events:none;filter:drop-shadow(0 0 3px rgb(0 0 0 / 12%)) drop-shadow(0 1px 8px rgb(0 0 0 / 8%)) drop-shadow(1px 1px 16px rgb(0 0 0 / 3%))}._1b6tkni img{object-fit:contain}._1b6tknk{top:0;left:0;position:absolute;pointer-events:none;transform-origin:50% 50%;fill:var(--likec4-element-fill);stroke:none;z-index:-1;transition:opacity .5s ease-out;transform:translate(8px,10px);opacity:.5}:where(.react-flow__node.selected,.react-flow__node:focus-visible,._1b6tkn1:focus-visible) ._1b6tknk{visibility:hidden}:where([data-likec4-shape=cylinder],[data-likec4-shape=storage]) ._1b6tknk{transform:translate(8px,8px)}:where([data-likec4-shape=queue]) ._1b6tknk{transform:translate(-10px,8px)}._1b6tknl{--_1b6tknj: 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;width:100%;height:100%;pointer-events:none;fill:var(--likec4-element-fill);stroke:var(--likec4-element-stroke);overflow:visible;filter:var(--_1b6tknj);transition:filter .3s ease-out;transition-delay:0ms;z-index:-1}:where(.react-flow__node.selected,.react-flow__node:focus-visible,._1b6tkn1:focus-visible) ._1b6tknl{--_1b6tknj: none}._1b6tknm{z-index:100;position:absolute;left:0;width:100%;bottom:2px;display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;gap:2px;justify-content:center;pointer-events:none}:where([data-likec4-shape=browser]) ._1b6tknm{bottom:4px}@keyframes lbtzdoe{0%{opacity:.6}to{opacity:.3}}.lbtzdo0{position:relative;width:100%;height:100%}.lbtzdo2{--lbtzdo1: 18px;width:100%;height:100%;position:relative;padding:0;margin:0}.lbtzdo2:before{content:" ";position:absolute;top:0;left:-16px;width:16px;height:min(100%,80px);pointer-events:all;background:transparent}.lbtzdo3{top:50%;left:50%;visibility:hidden}:where([data-mantine-color-scheme=dark] .likec4-compound-transparent){--_compound-border-color: color-mix(in srgb, var(--likec4-compound-title-color) 25%, var(--likec4-element-stroke))}:where([data-mantine-color-scheme=light] .likec4-compound-transparent){--_compound-title-color: var(--likec4-element-stroke)}.lbtzdo8{--lbtzdo6: 6px;width:100%;height:100%;position:relative;border-radius:var(--lbtzdo6);box-shadow:0 4px 10px .5px #0000001a,0 2px 2px -1px #0006;padding:0;margin:0;transition:all .2s ease-out;cursor:default}.lbtzdo8:before{content:" ";position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;border:1px solid transparent;border-radius:var(--lbtzdo6);transition:background 175ms ease-out,opacity 175ms ease-out;background:var(--likec4-element-fill);background-clip:border-box}:where(.react-flow__node.selected) .lbtzdo8{box-shadow:none}:where(.react-flow__node:focus-visible) .lbtzdo8{transition-duration:0ms;outline:3px solid var(--mantine-primary-color-outline, var(--mantine-primary-color-filled, var(--likec4-element-stroke)));outline-offset:calc(.09375rem * var(--mantine-scale))}.lbtzdo9{display:flex;align-items:center;gap:6px;padding-left:14px;padding-top:6px;min-height:30px;padding-right:2px}:where(.react-flow__node.draggable) .lbtzdo9{cursor:grab}:where(.likec4-compound-transparent) .lbtzdo9{padding-top:3px}.lbtzdoa{padding-left:32px}.lbtzdoc{--lbtzdo5: var(--_compound-border-color,var(--likec4-element-stroke));--lbtzdob: 0;border-style:dashed;border-width:3px;box-shadow:none;border-color:color-mix(in srgb,var(--lbtzdo5),transparent var(--lbtzdo7, 5%))}.lbtzdoc:before{border-radius:unset;transition-delay:.1s;opacity:calc(var(--lbtzdo4, 1) + var(--lbtzdob))}:where([data-hovered]) .lbtzdoc{--lbtzdob: .08}.lbtzdod{flex:1;font-family:var(--likec4-compound-font-family);font-weight:600;font-size:calc(.9375rem * var(--mantine-scale));text-transform:uppercase;letter-spacing:.2px;color:var(--_compound-title-color,var(--likec4-compound-title-color));mix-blend-mode:screen}.lbtzdoh{--lbtzdof: var(--likec4-element-loContrast);--lbtzdog: 6;position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible;visibility:hidden}:where(.react-flow__node.selected:not(:focus-visible)) .lbtzdoh{visibility:visible}:where(.react-flow__node:focus-within:not(.selected)) .lbtzdoh{--lbtzdof: color-mix(in srgb, var(--likec4-element-stroke) 30%, var(--likec4-element-loContrast));--lbtzdog: 8}:where([data-mantine-color-scheme=light]) .lbtzdoh{--lbtzdof: color-mix(in srgb, var(--likec4-element-stroke) 80%, #000)}.lbtzdoh rect{stroke:var(--lbtzdof);transform-origin:center center;stroke-width:var(--lbtzdog);animation-duration:.8s;animation-name:lbtzdoe;animation-iteration-count:infinite;animation-direction:alternate;fill:none}.lbtzdo2{--lbtzdoi: var(--likec4-element-loContrast)}:where([data-mantine-color-scheme=light] .likec4-compound-transparent){--lbtzdoi: var(--likec4-element-stroke)}.lbtzdoj{flex:0 0 var(--lbtzdo1);height:var(--lbtzdo1);width:var(--lbtzdo1);display:flex;align-items:center;justify-content:center;mix-blend-mode:luminosity}.lbtzdoj svg,.lbtzdoj img{width:100%;height:auto;max-height:100%;pointer-events:none;filter:drop-shadow(0 0 3px rgb(0 0 0 / 10%)) drop-shadow(0 1px 8px rgb(0 0 0 / 8%)) drop-shadow(1px 1px 16px rgb(0 0 0 / 3%))}.lbtzdoj img{object-fit:contain}.hbkbtj0{bottom:0;left:0;padding:8px;margin:0}.hbkbtj1{cursor:default;min-width:200px;max-width:calc(100vw - 16px);background-color:color-mix(in srgb,var(--mantine-color-body),transparent 20%);-webkit-backdrop-filter:var(--likec4-safari-animation-hook, blur(8px));backdrop-filter:var(--likec4-safari-animation-hook, blur(8px))}:where([data-mantine-color-scheme=dark]) .hbkbtj1{background-color:color-mix(in srgb,var(--mantine-color-dark-6),transparent 20%)}.hbkbtj3{white-space-collapse:preserve-breaks;color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .hbkbtj3{color:var(--mantine-color-gray-5)}@media (min-width: 48em){.hbkbtj1{min-width:250px;max-width:90vw}}@media (min-width: 62em){.hbkbtj1{min-width:350px;max-width:70vw}}._2jkb2y0{position:absolute;bottom:.5rem;left:50%;transform:translate(-50%);padding:0;margin:0;display:flex;flex-direction:column;gap:.4rem;align-items:center}._2jkb2y1{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:all 175ms ease-in}._2jkb2y1:hover{transition-timing-function:ease-out;transform:scale(1.1)}._2jkb2y1:active{transition-duration:.1s;transform:scale(.98) translateY(3px)}._2jkb2y3{--_2jkb2y2: 35%;--button-bg: color-mix(in srgb, var(--mantine-primary-color-filled), transparent var(--_2jkb2y2));--button-hover: color-mix(in srgb, var(--mantine-primary-color-filled-hover), transparent var(--_2jkb2y2));transition:all 175ms ease-in;background-color:var(--button-bg)}[data-mantine-color-scheme=light] ._2jkb2y3{--_2jkb2y2: 15%}:where(._2jkb2y1,._2jkb2y3) .tabler-icon{width:.85em;height:.85em}._2jkb2y4{position:absolute;margin:0;padding:0;top:0;left:0;width:100%;height:100%;border:2px solid var(--mantine-color-orange-6);pointer-events:none}@media (min-width: 62em){._2jkb2y0{gap:.6rem}._2jkb2y4{border-width:4px}}._1snasyb0{gap:calc(var(--mantine-spacing-xs) / 1.5)}._1snasyb1{top:var(--likec4-navigation-webview-top, 1rem);left:var(--likec4-navigation-webview-left, 1rem);gap:calc(var(--mantine-spacing-xs) / 1.5);margin:0}.likec4-top-left-panel .action-icon{--ai-size: 2rem}.likec4-top-left-panel .action-icon .tabler-icon{width:65%;height:65%}._1snasyb2{box-shadow:var(--mantine-shadow-md)}._1snasyb3 .tabler-icon{width:65%;height:65%}._1snasyb4{flex:1 1 40%;text-align:center;font-weight:500;padding:4px 6px;font-size:calc(.6875rem * var(--mantine-scale));z-index:1}._1snasyb5{background:var(--mantine-color-gray-2);border-radius:var(--mantine-radius-sm);border:1px solid var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) ._1snasyb5{background:var(--mantine-color-dark-5);border-color:var(--mantine-color-dark-4)}._1snasyb6{position:relative;border-radius:var(--mantine-radius-sm);background:var(--mantine-color-gray-3);box-shadow:inset 1px 1px 3px #00000024}:where([data-mantine-color-scheme=dark]) ._1snasyb6{background:var(--mantine-color-dark-7)}._1snasyb7{position:absolute;width:8px;height:8px;border:2px solid var(--mantine-color-gray-5);border-radius:3px;transform:translate(-50%,-50%)}._1ncdyfa0{bottom:0;right:0;padding:8px;margin:0}._1ncdyfa1{cursor:default;-webkit-user-select:none;user-select:none;min-width:200px;max-width:calc(100vw - 20px);background-color:color-mix(in srgb,var(--mantine-color-body),transparent 20%);-webkit-backdrop-filter:var(--likec4-safari-animation-hook, blur(8px));backdrop-filter:var(--likec4-safari-animation-hook, blur(8px))}:where([data-mantine-color-scheme=dark]) ._1ncdyfa1{background-color:color-mix(in srgb,var(--mantine-color-dark-6),transparent 20%)}._1ncdyfa2{padding:calc(var(--mantine-spacing-xs) / 2)}._1ncdyfa3{--_1b6tkn0: color-mix(in srgb, var(--likec4-element-stroke) 90%, var(--likec4-element-fill));background-color:transparent;transition:all .1s ease-in}._1ncdyfa3:hover{transition:all .12s ease-out;background-color:color-mix(in srgb,var(--mantine-primary-color-2),transparent 50%)}:where([data-mantine-color-scheme=dark]) ._1ncdyfa3:hover{background-color:color-mix(in srgb,var(--mantine-color-dark-3),transparent 60%)}._1ncdyfa4{fill:var(--likec4-element-fill);stroke:var(--likec4-element-stroke);stroke-width:1;overflow:visible;width:100%;height:auto;filter:drop-shadow(0 2px 3px rgb(0 0 0 / 22%)) drop-shadow(0 1px 8px rgb(0 0 0 / 10%))}._1ncdyfa5{--badge-radius: 2px;--badge-fz: 9.5px;--badge-padding-x: 3px;--badge-height: 13.5px;--badge-lh: 1;font-weight:500;letter-spacing:.2px;padding-top:0;padding-bottom:0;text-transform:lowercase;transition:all .15s ease-in-out;cursor:pointer}@media (min-width: 48em){._1ncdyfa1{min-width:300px;max-width:65vw}}@media (min-width: 62em){._1ncdyfa1{max-width:40vw}}._1n45dyn0{display:inline-flex;align-items:center;padding:6px 2px 0}._1n45dyn0 .mantine-Text-root{font-size:var(--mantine-font-size-xs);font-weight:500;line-height:1}._1n45dyn1{padding-left:4px;grid-column:1}._1n45dyn2{grid-column:2}._1n45dyn3{grid-column:3;padding-right:4px}._1n45dyn4{display:grid;grid-column-start:1;grid-column-end:4;border-bottom:1px solid var(--mantine-color-default-border);margin-bottom:0;padding:0 4px 5px}._1n45dyn4 .mantine-Text-root{font-size:var(--mantine-font-size-sm);font-weight:400;color:var(--mantine-color-dimmed)}._1n45dyn5{display:contents}._1n45dyn5:last-child ._1n45dyn4{border-bottom:none;margin-bottom:0}._1n45dyn5>*{transition:all .15s ease-in}._1n45dyn5:is(:hover,[data-selected=true])>*{transition:all .15s ease-out;cursor:pointer;background-color:var(--mantine-color-default-hover)}._1n45dyn6{display:grid;grid-template-columns:1fr 30px 1fr;grid-auto-rows:min-content max-content;gap:0;align-items:stretch}._1n45dyn7{display:grid;grid-template-columns:min-content 1fr;grid-auto-rows:min-content max-content;gap:10px 12px;align-items:baseline;justify-items:start}._144zcea0{width:100%;height:100%}._144zcea1{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;overflow:hidden;gap:6px;padding:16px}._144zcea2{flex:0 0 auto;width:fit-content;text-align:center;font-family:var(--likec4-element-font-family);font-optical-sizing:auto;font-style:normal;font-weight:500;font-size:17px;line-height:1.25;text-wrap:balance;color:var(--likec4-element-hiContrast)}._144zcea3{flex:0 0 auto;width:fit-content;text-align:center;font-family:var(--likec4-element-font-family);font-optical-sizing:auto;font-style:normal;font-size:var(--mantine-font-size-xs);line-height:1.25;text-wrap:balance;color:var(--likec4-element-loContrast)}._144zcea4{width:100%;height:100%;box-shadow:0 4px 10px .5px #0000001a,0 2px 2px -1px #0006;background:color-mix(in srgb,var(--likec4-element-fill),transparent 10%);border-radius:4px}._144zcea5{font-family:var(--likec4-compound-font-family);font-optical-sizing:auto;font-style:normal;font-weight:600;font-size:14px;line-height:1;text-transform:uppercase;padding-top:12px;padding-left:10px;mix-blend-mode:screen;color:var(--likec4-compound-title-color)}._144zcea6{top:0;left:0;position:absolute;pointer-events:none;fill:var(--likec4-element-fill);stroke:var(--likec4-element-stroke);overflow:visible;filter: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));z-index:-1}._144zcea7{z-index:100;position:absolute;left:50%;bottom:2px;transform:translate(-50%);gap:0;transition:all .19s cubic-bezier(.5,0,.4,1)}:where([data-likec4-shape=browser],[data-likec4-shape=mobile]) ._144zcea7{bottom:6px}:where(._144zcea0:hover) ._144zcea7{transition-delay:20ms;gap:8px;transform:translate(-50%,5px)}._144zcea8{--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));opacity:.7;pointer-events:all;cursor:pointer;transform:scale(.9);transition:all .19s cubic-bezier(.5,0,.4,1)}._144zcea8:hover{transition-delay:0ms;transform:scale(1.25);box-shadow:var(--mantine-shadow-lg)}._144zcea8:active{transform:scale(.975)}:where(._144zcea0:hover) ._144zcea8{--ai-bg: var(--ai-bg-hover);transition-delay:40ms;transition-timing-function:cubic-bezier(0,0,.4,1);opacity:1;transform:scale(1.07);box-shadow:var(--mantine-shadow-md)}._1u47gxi1{--backdrop-blur: 0px;--backdrop-opacity: 0%;--_1u47gxi0: black;position:absolute;top:0;left:0;padding:0;margin:0;box-sizing:border-box;border:0 solid transparent;width:100%;height:100%;z-index:1000;isolation:isolate;-webkit-backdrop-filter:blur(var(--backdrop-blur));backdrop-filter:blur(var(--backdrop-blur));background-color:rgb(200 200 200 / var(--backdrop-opacity))}:where([data-mantine-color-scheme=dark]) ._1u47gxi1{--_1u47gxi0: white;background-color:rgb(36 36 36 / var(--backdrop-opacity))}.react-flow._1u47gxi2{--xy-background-pattern-color: var(--likec4-background-pattern-color)}:where([data-mantine-color-scheme=dark]) .react-flow._1u47gxi2{--xy-edge-label-color: var(--likec4-relation-labelColor);--xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 50%)}:where(._1u47gxi2) .react-flow__attribution{display:none}:where(._1u47gxi2) .react-flow__edge-text{font-size:16px}._1u47gxi2 .react-flow__edges>svg{mix-blend-mode:plus-lighter}:where([data-mantine-color-scheme=light]) ._1u47gxi2 .react-flow__edges>svg{mix-blend-mode:screen}._5hogu30{--xy-edge-stroke: var(--likec4-relation-lineColor);--xy-edge-stroke-selected: color-mix(in srgb, var(--likec4-relation-lineColor), var(--_1u47gxi0) 35%);--xy-edge-label-color: color-mix(in srgb, var(--likec4-relation-labelColor), rgba(255 255 255 / .85) 50%);--xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 20%);opacity:1;transition:all .13s cubic-bezier(.5,0,.2,1)}._5hogu30[data-edge-dimmed=true]{opacity:.2;transition-delay:.4s}._5hogu30[data-edge-dimmed=immediate]{opacity:.2}:where([data-mantine-color-scheme=dark]) ._5hogu30{--xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 50%)}._5hogu31{padding:2px 5px;font-family:var(--likec4-font-family);position:absolute;cursor:pointer;width:fit-content;color:var(--xy-edge-label-color);background-color:var(--xy-edge-label-background-color);border-radius:4px;pointer-events:all;text-wrap:pretty;white-space:preserve-breaks}._5hogu32{text-align:center;white-space-collapse:preserve-breaks;font-size:var(--mantine-font-size-md);line-height:var(--mantine-line-height-xs)}._5hogu33{text-align:center;white-space-collapse:preserve-breaks;font-size:var(--mantine-font-size-sm);line-height:1}.paikoy2{--backdrop-opacity: 0%;--backdrop-blur: 0px;box-sizing:border-box;margin:0;padding:0;position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;max-width:100%;max-height:100%;background:transparent;border:0 solid transparent}.paikoy2::backdrop{-webkit-backdrop-filter:blur(var(--backdrop-blur));backdrop-filter:blur(var(--backdrop-blur));background-color:rgb(36 36 36 / var(--backdrop-opacity))}.paikoy3{--paikoy0: var(--mantine-color-body);--paikoy1: linear-gradient(180deg, var(--likec4-element-fill), var(--likec4-element-fill) 4px, transparent 4px);position:absolute;pointer-events:all;gap:var(--mantine-spacing-lg);justify-content:stretch;background-color:var(--paikoy0);background-image:var(--paikoy1);border-top-color:var(--likec4-element-fill)}:where([data-mantine-color-scheme=dark]) .paikoy3{--paikoy0: var(--mantine-color-dark-6);--paikoy1: linear-gradient(180deg, color-mix(in srgb, var(--likec4-element-fill) 15%, transparent), transparent 80px), linear-gradient(180deg, var(--likec4-element-fill), var(--likec4-element-fill) 4px, transparent 4px) }.paikoy4{flex:0;cursor:move}:where(.paikoy3) .react-flow__attribution{display:none}.paikoy5{display:block;font-family:var(--likec4-element-font-family);font-optical-sizing:auto;font-style:normal;font-weight:600;font-size:24px;line-height:var(--mantine-line-height-xs)}.paikoy6{flex:0 0 40px;height:40px;width:40px;display:flex;align-items:center;justify-content:center;align-self:flex-start;cursor:move}:where([data-mantine-color-scheme=dark]) .paikoy6{mix-blend-mode:hard-light}.paikoy6 svg,.paikoy6 img{width:100%;height:auto;max-height:100%;pointer-events:none;filter:drop-shadow(0 0 3px rgb(0 0 0 / 10%)) drop-shadow(0 1px 8px rgb(0 0 0 / 5%)) drop-shadow(1px 1px 16px rgb(0 0 0 / 2%))}.paikoy6 img{object-fit:contain}.paikoy9{--paikoy7: var(--mantine-color-dark-1);width:100%;background:var(--mantine-color-body);border-radius:var(--mantine-radius-sm);padding:10px 8px;transition:all .13s cubic-bezier(.5,0,.2,1);border:1px solid var(--mantine-color-default-border)}.paikoy9:hover{--paikoy8: var(--mantine-color-dark-1);--paikoy7: var(--mantine-color-default-color);background:var(--mantine-color-default-hover)}:where([data-mantine-color-scheme=dark]) .paikoy9{background:var(--mantine-color-dark-6)}:where([data-mantine-color-scheme=light]) .paikoy9{--paikoy8: var(--mantine-color-gray-6);--paikoy7: var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=light]) .paikoy9:hover{--paikoy8: var(--mantine-color-gray-7)}.paikoy9 .mantine-ThemeIcon-root{--ti-size: 22px;transition:all .13s cubic-bezier(.5,0,.2,1);color:var(--paikoy8, var(--mantine-color-dark-2))}.paikoy9 .mantine-ThemeIcon-root:hover{color:var(--mantine-color-default-color)}.paikoy9>*{transition:all .13s cubic-bezier(.5,0,.2,1)}.paikoy9:hover>*{transition-timing-function:cubic-bezier(0,0,.4,1);transform:translate(1.6px)}.paikoya{transition:all .13s cubic-bezier(.5,0,.2,1);color:var(--paikoy7, var(--mantine-color-gray-7));font-size:15px;font-weight:500;line-height:1.4}.paikoyb{flex:1;display:flex;flex-direction:column;justify-content:stretch;overflow:hidden;gap:var(--mantine-spacing-sm)}.paikoyc{background:var(--mantine-color-gray-1);border-radius:var(--mantine-radius-sm);flex-wrap:nowrap;gap:6px;padding:4px}:where([data-mantine-color-scheme=dark]) .paikoyc{background:var(--mantine-color-dark-7)}.paikoyd{font-size:var(--mantine-font-size-xs);font-weight:500;flex-grow:1;padding:6px 8px;transition:all .13s cubic-bezier(.5,0,.2,1);border-radius:var(--mantine-radius-sm);color:var(--mantine-color-gray-7)}.paikoyd:hover{transition-timing-function:cubic-bezier(0,0,.4,1);color:var(--mantine-color-default-color);background:var(--mantine-color-gray-3)}.paikoyd[data-active]{transition:none;background:var(--mantine-color-white);box-shadow:var(--mantine-shadow-xs);color:var(--mantine-color-default-color)}:where([data-mantine-color-scheme=dark]) .paikoyd{color:var(--mantine-color-dark-1)}:where([data-mantine-color-scheme=dark]) .paikoyd:hover{color:var(--mantine-color-white);background:var(--mantine-color-dark-6)}:where([data-mantine-color-scheme=dark]) .paikoyd:is([data-active]){color:var(--mantine-color-white);background:var(--mantine-color-dark-5)}.paikoye{flex:1;overflow:hidden;position:relative}.paikoye:not(:has(.mantine-ScrollArea-root)){padding-left:4px;padding-right:4px}.paikoye .mantine-ScrollArea-root{width:100%;height:100%}.paikoye .mantine-ScrollArea-viewport>div{padding-left:4px;padding-right:4px}.paikoyf{flex:1;display:grid;grid-template-columns:min-content 1fr;grid-auto-rows:min-content max-content;gap:calc(1.25rem * var(--mantine-scale)) calc(1rem * var(--mantine-scale));align-items:baseline;justify-items:stretch}.paikoyg{justify-self:end}.paikoyh{transition:all .13s cubic-bezier(.5,0,.2,1);border:1px dashed var(--mantine-color-default-border);border-radius:var(--mantine-radius-sm);min-height:30px;padding:3px 16px 3px 3px;cursor:pointer;color:var(--mantine-color-gray-7)}.paikoyh:hover{transition-timing-function:cubic-bezier(0,0,.4,1);border-style:solid;color:var(--mantine-color-default-color);background:var(--mantine-color-default-hover)}:where([data-mantine-color-scheme=dark]) .paikoyh{color:var(--mantine-color-dark-1)}.paikoyh>*{transition:all .13s cubic-bezier(.5,0,.2,1)}.paikoyh:hover>*{transition-timing-function:cubic-bezier(0,0,.4,1);transform:translate(1px)}.paikoyi{position:absolute;width:14px;height:14px;border:3.5px solid var(--mantine-color-dark-3);border-top:none;border-left:none;border-radius:2px;bottom:2px;right:2px;transition:all .13s cubic-bezier(.5,0,.2,1);cursor:se-resize}.paikoyi:hover{border-width:4px;border-color:var(--mantine-color-dark-1)}._6nb9wd0[data-level="1"]{margin-bottom:calc(1rem * var(--mantine-scale))}._6nb9wd1{cursor:default;margin-top:0;margin-bottom:0}._6nb9wd2{transition:all .13s cubic-bezier(.5,0,.2,1);color:var(--mantine-color-gray-7)}._6nb9wd2:hover{transition-timing-function:cubic-bezier(0,0,.4,1)}:where([data-mantine-color-scheme=dark]) ._6nb9wd2{color:var(--mantine-color-dark-1)}._6nb9wd2>*{transition:all .13s cubic-bezier(.5,0,.2,1)}._6nb9wd2:hover>:not([data-no-transform]){transition-timing-function:cubic-bezier(0,0,.4,1);transform:translate(1px)}.mantine-Button-root:hover ._6nb9wd2>:not([data-no-transform]){transition-timing-function:cubic-bezier(0,0,.4,1);transform:translate(1px)}._6nb9wd4{cursor:pointer;width:100%;justify-content:stretch;flex-wrap:nowrap;height:calc(2.25rem * var(--mantine-scale));padding-inline-start:calc(1rem * var(--mantine-scale));padding-inline-end:calc(.625rem * var(--mantine-scale));border-radius:var(--mantine-radius-sm);align-items:center;color:var(--mantine-color-gray-7)}._6nb9wd4:hover{background:var(--mantine-color-gray-light-hover)}:where([data-mantine-color-scheme=dark]) ._6nb9wd4{color:var(--mantine-color-gray-light-color)}._6nb9wd4 .tabler-icon{transition:all .13s cubic-bezier(.5,0,.2,1);width:90%;opacity:.65}._19duq0h0{position:relative;width:100%;height:100%}._19duq0h1{width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;overflow:hidden;gap:6px;padding:16px}._19duq0h2{flex:0 0 auto;width:fit-content;text-align:center;font-family:var(--likec4-element-font-family);font-optical-sizing:auto;font-style:normal;font-weight:500;font-size:18px;line-height:1.25;text-wrap:balance;color:var(--likec4-element-hiContrast)}._19duq0h3{flex:0 0 auto;width:fit-content;text-align:center;font-family:var(--likec4-element-font-family);font-optical-sizing:auto;font-style:normal;font-size:var(--mantine-font-size-sm);line-height:1.25;text-wrap:balance;color:var(--likec4-element-loContrast)}._19duq0h4{position:relative;width:100%;height:100%;box-shadow:0 4px 10px .5px #0000001a,1px 1px 4px -1px #0000004d;background:var(--likec4-element-fill);border-radius:6px}._19duq0h5{font-family:var(--likec4-compound-font-family);font-weight:600;font-size:15px;line-height:1;text-transform:uppercase;padding-top:14px;padding-left:12px;mix-blend-mode:screen;color:var(--likec4-compound-title-color)}._19duq0h6{top:0;left:0;position:absolute;pointer-events:none;fill:var(--likec4-element-fill);stroke:var(--likec4-element-stroke);overflow:visible;filter: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));z-index:-1}._19duq0h7{--xy-edge-stroke: var(--likec4-relation-lineColor);--xy-edge-stroke-selected: color-mix(in srgb, var(--likec4-relation-lineColor), var(--_1u47gxi0) 35%);--xy-edge-label-color: color-mix(in srgb, var(--likec4-relation-labelColor), rgba(255 255 255 / .85) 50%);--xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 20%);opacity:1;transition:all .13s cubic-bezier(.5,0,.2,1)}._19duq0h7[data-edge-dimmed=true]{opacity:.2;transition-delay:.4s}._19duq0h7[data-edge-dimmed=immediate]{opacity:.2}:where([data-mantine-color-scheme=dark]) ._19duq0h7{--xy-edge-label-background-color: color-mix(in srgb, var(--likec4-relation-labelBg), transparent 50%)}._19duq0h8{padding:2px 5px;font-family:var(--likec4-font-family);position:absolute;cursor:pointer;width:fit-content;color:var(--xy-edge-label-color);background-color:var(--xy-edge-label-background-color);border-radius:4px;pointer-events:all;text-wrap:pretty;white-space:preserve-breaks}._19duq0h9{text-align:center;white-space-collapse:preserve-breaks;font-size:var(--mantine-font-size-md);line-height:var(--mantine-line-height-xs)}._19duq0ha{text-align:center;white-space-collapse:preserve-breaks;font-size:var(--mantine-font-size-sm);line-height:1}._19duq0hb{width:100%;height:100%;border:3px dashed var(--mantine-color-default-border);border-radius:var(--mantine-radius-md);display:flex;justify-content:center;align-items:center}._19duq0hc{z-index:100;position:absolute;left:50%;bottom:2px;transform:translate(-50%);gap:0;transition:all .19s cubic-bezier(.5,0,.4,1)}:where([data-likec4-shape=browser]) ._19duq0hc{bottom:4px}:where(._19duq0h0:hover) ._19duq0hc{transition-delay:20ms;gap:8px;transform:translate(-50%,5px)}._19duq0hd{--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));opacity:.7;pointer-events:all;cursor:pointer;transform:scale(.9);transition:all .19s cubic-bezier(.5,0,.4,1)}._19duq0hd:hover{transition-delay:0ms;transform:scale(1.25);box-shadow:var(--mantine-shadow-lg)}._19duq0hd:active{transform:scale(.975)}:where(._19duq0h0:hover) ._19duq0hd{--ai-bg: var(--ai-bg-hover);transition-delay:40ms;transition-timing-function:cubic-bezier(0,0,.4,1);opacity:1;transform:scale(1.07);box-shadow:var(--mantine-shadow-md)}.k4m020{display:inline-block;font-size:var(--mantine-font-size-sm);font-weight:500;white-space:nowrap;padding:3px 6px;border-radius:3px;background:color-mix(in srgb,var(--likec4-element-fill),transparent 25%);line-height:1.2;color:var(--likec4-element-hiContrast)}:where([data-mantine-color-scheme=light]) .k4m021{background:var(--mantine-color-gray-1)}.k4m021[data-missing]{color:var(--mantine-color-orange-4);background:color-mix(in srgb,var(--mantine-color-orange-8) 15%,transparent);border-color:color-mix(in srgb,var(--mantine-color-orange-5) 20%,transparent)}:where([data-mantine-color-scheme=light]) .k4m021[data-missing]{color:var(--mantine-color-orange-8)}.k4m022{flex:1 1 100%;position:relative;width:100%;height:100%;background:var(--mantine-color-body);border:1px solid var(--mantine-color-default-border);border-radius:var(--mantine-radius-sm)}:where([data-mantine-color-scheme=light]) .k4m022{border-color:var(--mantine-color-gray-3);background:var(--mantine-color-gray-1)}.k4m023:before{content:"scope:";position:absolute;top:0;left:8px;font-size:9px;font-weight:500;line-height:1;color:var(--mantine-color-dimmed);opacity:.85;transform:translateY(-100%) translateY(-2px)}:where([data-mantine-color-scheme=light]) .k4m023 .mantine-SegmentedControl-root{background:var(--mantine-color-gray-3)}.k4m024{display:inline-block;font-size:var(--mantine-font-size-xl);font-weight:600;padding:1px 5px;min-width:24px;text-align:center;border-radius:var(--mantine-radius-sm);background:var(--mantine-color-dark-7);color:var(--mantine-color-default-color)}:where([data-mantine-color-scheme=light]) .k4m024{background:var(--mantine-color-gray-4);color:var(--mantine-color-dark-6)}.k4m024[data-zero]{color:var(--mantine-color-dimmed)}:where([data-mantine-color-scheme=light]) .k4m024[data-zero]{background:var(--mantine-color-gray-3)}.k4m024[data-missing]{color:var(--mantine-color-orange-4);background:color-mix(in srgb,var(--mantine-color-orange-8) 20%,transparent)}:where([data-mantine-color-scheme=light]) .k4m024[data-missing]{color:var(--mantine-color-orange-8)}._15ijd1w0{margin-top:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-sm)}._15ijd1w1{display:inline-flex;transition:all .13s cubic-bezier(.5,0,.2,1);border:1px dashed var(--mantine-color-default-border);border-radius:var(--mantine-radius-sm);padding:var(--mantine-spacing-xs) var(--mantine-spacing-md);align-items:center;cursor:pointer;color:var(--mantine-color-gray-7)}._15ijd1w1:hover{transition-timing-function:cubic-bezier(0,0,.4,1);border-style:solid;color:var(--mantine-color-default-color);background:var(--mantine-color-default-hover)}:where([data-mantine-color-scheme=dark]) ._15ijd1w1{color:var(--mantine-color-dark-1)}._15ijd1w1>*{transition:all .13s cubic-bezier(.5,0,.2,1)}._15ijd1w1:hover>*{transition-timing-function:cubic-bezier(0,0,.4,1);transform:translate(1px)}.z1mia80{margin:0}.z1mia81:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .z1mia81:hover{background-color:var(--mantine-color-default-hover);color:var(--mantine-color-white)}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export declare const vars: {
|
|
2
|
+
safariAnimationHook: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
3
|
+
default: {
|
|
4
|
+
font: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
5
|
+
};
|
|
6
|
+
likec4: {
|
|
7
|
+
font: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
8
|
+
background: {
|
|
9
|
+
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
10
|
+
pattern: {
|
|
11
|
+
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
compound: {
|
|
16
|
+
font: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
17
|
+
titleColor: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
18
|
+
};
|
|
19
|
+
element: {
|
|
20
|
+
font: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
21
|
+
fill: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
22
|
+
stroke: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
23
|
+
hiContrast: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
24
|
+
loContrast: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
25
|
+
};
|
|
26
|
+
relation: {
|
|
27
|
+
lineColor: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
28
|
+
labelColor: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
29
|
+
labelBgColor: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
30
|
+
};
|
|
31
|
+
optionsPanel: {
|
|
32
|
+
top: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
33
|
+
right: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
34
|
+
};
|
|
35
|
+
navigationPanel: {
|
|
36
|
+
top: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
37
|
+
left: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
export declare const xyvars: {
|
|
41
|
+
background: {
|
|
42
|
+
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
43
|
+
pattern: {
|
|
44
|
+
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
edge: {
|
|
48
|
+
stroke: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
49
|
+
strokeSelected: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
50
|
+
labelColor: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
51
|
+
labelBgColor: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
52
|
+
strokeWidth: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
53
|
+
};
|
|
54
|
+
node: {
|
|
55
|
+
color: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
56
|
+
border: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
57
|
+
backgroundColor: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
58
|
+
groupBackgroundColor: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
59
|
+
boxshadowHover: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
60
|
+
boxshadowSelected: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
61
|
+
borderRadius: `var(--${string})` | `var(--${string}, ${string})` | `var(--${string}, ${number})`;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export declare const whereLight = ":where([data-mantine-color-scheme=\"light\"])";
|
|
65
|
+
export declare const whereDark = ":where([data-mantine-color-scheme=\"dark\"])";
|
|
66
|
+
export declare const easings: {
|
|
67
|
+
out: string;
|
|
68
|
+
inOut: string;
|
|
69
|
+
};
|
|
70
|
+
export declare const transitions: {
|
|
71
|
+
fast: string;
|
|
72
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
var vars = { safariAnimationHook: "var(--likec4-safari-animation-hook)", "default": { font: "var(--likec4-default-font-family)" }, likec4: { font: "var(--likec4-font-family)", background: { color: "var(--likec4-background-color)", pattern: { color: "var(--likec4-background-pattern-color)" } } }, compound: { font: "var(--likec4-compound-font-family)", titleColor: "var(--likec4-compound-title-color)" }, element: { font: "var(--likec4-element-font-family)", fill: "var(--likec4-element-fill)", stroke: "var(--likec4-element-stroke)", hiContrast: "var(--likec4-element-hiContrast)", loContrast: "var(--likec4-element-loContrast)" }, relation: { lineColor: "var(--likec4-relation-lineColor)", labelColor: "var(--likec4-relation-labelColor)", labelBgColor: "var(--likec4-relation-labelBg)" }, optionsPanel: { top: "var(--likec4-options-webview-top)", right: "var(--likec4-options-webview-right)" }, navigationPanel: { top: "var(--likec4-navigation-webview-top)", left: "var(--likec4-navigation-webview-left)" } };
|
|
2
|
+
var xyvars = { background: { color: "var(--xy-background-color)", pattern: { color: "var(--xy-background-pattern-color)" } }, edge: { stroke: "var(--xy-edge-stroke)", strokeSelected: "var(--xy-edge-stroke-selected)", labelColor: "var(--xy-edge-label-color)", labelBgColor: "var(--xy-edge-label-background-color)", strokeWidth: "var(--xy-edge-stroke-width)" }, node: { color: "var(--xy-node-color)", border: "var(--xy-node-border)", backgroundColor: "var(--xy-node-background-color)", groupBackgroundColor: "var(--xy-node-group-background-color)", boxshadowHover: "var(--xy-node-boxshadow-hover)", boxshadowSelected: "var(--xy-node-boxshadow-selected)", borderRadius: "var(--xy-node-border-radius)" } };
|
|
3
|
+
export {
|
|
4
|
+
vars,
|
|
5
|
+
xyvars
|
|
6
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function DiagramTitlePanel(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Card, CardSection, Button, Group, Text, Spoiler, Stack } from "@mantine/core";
|
|
3
|
+
import { useLocalStorage } from "@mantine/hooks";
|
|
4
|
+
import { IconMenu } from "@tabler/icons-react";
|
|
5
|
+
import clsx from "clsx";
|
|
6
|
+
import { AnimatePresence, m } from "framer-motion";
|
|
7
|
+
import { container, card, title, description } from "./DiagramTitlePanel.css.js";
|
|
8
|
+
import { Link } from "./Link.js";
|
|
9
|
+
import { useDiagramState } from "../hooks/useDiagramState.js";
|
|
10
|
+
const selector = (s) => ({
|
|
11
|
+
id: s.view.id,
|
|
12
|
+
title: s.view.title ?? "untitled",
|
|
13
|
+
description: s.view.description,
|
|
14
|
+
links: s.view.links
|
|
15
|
+
});
|
|
16
|
+
function DiagramTitlePanel() {
|
|
17
|
+
const { id, title: title$1, description: description$1, links } = useDiagramState(selector);
|
|
18
|
+
const [isCollapsed, setCollapsed] = useLocalStorage({
|
|
19
|
+
key: "diagram-title-webview-collapsed",
|
|
20
|
+
defaultValue: false
|
|
21
|
+
});
|
|
22
|
+
const toggle = () => setCollapsed((v) => !v);
|
|
23
|
+
return /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsx(
|
|
24
|
+
m.div,
|
|
25
|
+
{
|
|
26
|
+
initial: { opacity: 0.05, scale: 0.7 },
|
|
27
|
+
animate: { opacity: 1, scale: 1 },
|
|
28
|
+
exit: {
|
|
29
|
+
opacity: 0.05,
|
|
30
|
+
scale: 0.6
|
|
31
|
+
},
|
|
32
|
+
className: clsx("react-flow__panel", container),
|
|
33
|
+
style: {
|
|
34
|
+
transformOrigin: "left center"
|
|
35
|
+
},
|
|
36
|
+
children: /* @__PURE__ */ jsxs(
|
|
37
|
+
Card,
|
|
38
|
+
{
|
|
39
|
+
radius: "sm",
|
|
40
|
+
className: card,
|
|
41
|
+
withBorder: !isCollapsed,
|
|
42
|
+
p: isCollapsed ? "sm" : "md",
|
|
43
|
+
onDoubleClick: (e) => e.stopPropagation(),
|
|
44
|
+
children: [
|
|
45
|
+
isCollapsed && /* @__PURE__ */ jsx(CardSection, { children: /* @__PURE__ */ jsx(
|
|
46
|
+
Button,
|
|
47
|
+
{
|
|
48
|
+
fullWidth: true,
|
|
49
|
+
justify: "stretch",
|
|
50
|
+
size: "md",
|
|
51
|
+
radius: "0",
|
|
52
|
+
variant: "subtle",
|
|
53
|
+
color: "gray",
|
|
54
|
+
onClick: toggle,
|
|
55
|
+
fw: 500,
|
|
56
|
+
fz: "sm",
|
|
57
|
+
tabIndex: -1,
|
|
58
|
+
children: title$1
|
|
59
|
+
}
|
|
60
|
+
) }),
|
|
61
|
+
!isCollapsed && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
62
|
+
/* @__PURE__ */ jsx(CardSection, { mb: "xs", children: /* @__PURE__ */ jsx(
|
|
63
|
+
Button,
|
|
64
|
+
{
|
|
65
|
+
fullWidth: true,
|
|
66
|
+
size: "xs",
|
|
67
|
+
h: "sm",
|
|
68
|
+
py: 2,
|
|
69
|
+
radius: "0",
|
|
70
|
+
variant: "subtle",
|
|
71
|
+
color: "gray",
|
|
72
|
+
onClick: toggle,
|
|
73
|
+
tabIndex: -1,
|
|
74
|
+
children: /* @__PURE__ */ jsx(IconMenu, { size: 11, opacity: 0.7 })
|
|
75
|
+
}
|
|
76
|
+
) }),
|
|
77
|
+
/* @__PURE__ */ jsxs(Group, { justify: "stretch", wrap: "nowrap", mb: "sm", children: [
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
Text,
|
|
80
|
+
{
|
|
81
|
+
component: "div",
|
|
82
|
+
flex: "1",
|
|
83
|
+
size: "md",
|
|
84
|
+
fw: 500,
|
|
85
|
+
lh: 1.1,
|
|
86
|
+
className: title,
|
|
87
|
+
children: title$1
|
|
88
|
+
}
|
|
89
|
+
),
|
|
90
|
+
/* @__PURE__ */ jsxs(
|
|
91
|
+
Text,
|
|
92
|
+
{
|
|
93
|
+
hidden: isCollapsed,
|
|
94
|
+
component: "div",
|
|
95
|
+
flex: "0 0 auto",
|
|
96
|
+
inline: true,
|
|
97
|
+
size: "xs",
|
|
98
|
+
fz: 9,
|
|
99
|
+
fw: 500,
|
|
100
|
+
c: "dimmed",
|
|
101
|
+
style: {
|
|
102
|
+
userSelect: "all"
|
|
103
|
+
},
|
|
104
|
+
children: [
|
|
105
|
+
/* @__PURE__ */ jsxs("span", { style: { userSelect: "none" }, children: [
|
|
106
|
+
"id:",
|
|
107
|
+
" "
|
|
108
|
+
] }),
|
|
109
|
+
id
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
] }),
|
|
114
|
+
description$1 && /* @__PURE__ */ jsx(
|
|
115
|
+
Spoiler,
|
|
116
|
+
{
|
|
117
|
+
maxHeight: 42,
|
|
118
|
+
showLabel: /* @__PURE__ */ jsx(Button, { color: "gray", variant: "light", fz: "10", size: "compact-xs", tabIndex: -1, children: "show more" }),
|
|
119
|
+
hideLabel: /* @__PURE__ */ jsx(Button, { color: "gray", variant: "light", fz: "10", size: "compact-xs", tabIndex: -1, children: "hide" }),
|
|
120
|
+
children: /* @__PURE__ */ jsx(
|
|
121
|
+
Text,
|
|
122
|
+
{
|
|
123
|
+
component: "div",
|
|
124
|
+
size: "sm",
|
|
125
|
+
className: description,
|
|
126
|
+
children: description$1 || "no description"
|
|
127
|
+
}
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
),
|
|
131
|
+
!description$1 && /* @__PURE__ */ jsx(
|
|
132
|
+
Text,
|
|
133
|
+
{
|
|
134
|
+
component: "div",
|
|
135
|
+
size: "xs",
|
|
136
|
+
c: "dimmed",
|
|
137
|
+
children: "no description"
|
|
138
|
+
}
|
|
139
|
+
),
|
|
140
|
+
links && /* @__PURE__ */ jsx(
|
|
141
|
+
Stack,
|
|
142
|
+
{
|
|
143
|
+
gap: 3,
|
|
144
|
+
justify: "stretch",
|
|
145
|
+
align: "stretch",
|
|
146
|
+
children: links.map((link) => /* @__PURE__ */ jsx(Link, { link }, link.url))
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
] })
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
)
|
|
153
|
+
},
|
|
154
|
+
id
|
|
155
|
+
) });
|
|
156
|
+
}
|
|
157
|
+
export {
|
|
158
|
+
DiagramTitlePanel as default
|
|
159
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function DynamicViewWalkthrough(): import("react/jsx-runtime").JSX.Element;
|