@likec4/diagram 1.31.0 → 1.32.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/bundle/{chunk-BBzMXzCg.js → chunk-BvTQaUYl.js} +1675 -1207
- package/bundle/custom.js +50 -47
- package/bundle/index.js +2482 -2438
- package/dist/LikeC4CustomColors.d.ts +2 -7
- package/dist/LikeC4CustomColors.js +17 -6
- package/dist/LikeC4Diagram.d.ts +3 -2
- package/dist/LikeC4Diagram.js +10 -14
- package/dist/LikeC4Diagram.props.d.ts +28 -22
- package/dist/LikeC4ModelProvider.d.ts +5 -4
- package/dist/StaticLikeC4Diagram.d.ts +3 -2
- package/dist/StaticLikeC4Diagram.js +2 -2
- package/dist/base/BaseXYFlow.js +5 -5
- package/dist/base/const.d.ts +1 -1
- package/dist/base/const.js +1 -1
- package/dist/base/index.d.ts +2 -1
- package/dist/base/primitives/compound/CompoundActionButton.js +2 -1
- package/dist/base/primitives/compound/CompoundDetailsButton.js +2 -1
- package/dist/base/primitives/compound/CompoundTitle.d.ts +1 -1
- package/dist/base/primitives/compound/CompoundTitle.js +2 -1
- package/dist/base/primitives/edge/EdgeContainer.d.ts +1 -1
- package/dist/base/primitives/edge/EdgeLabel.css.js +1 -0
- package/dist/base/primitives/edge/EdgeLabel.d.ts +3 -3
- package/dist/base/primitives/edge/EdgeLabel.js +6 -4
- package/dist/base/primitives/edge/EdgeLabelContainer.d.ts +1 -1
- package/dist/base/primitives/edge/EdgeMarkers.d.ts +1 -1
- package/dist/base/primitives/edge/EdgePath.d.ts +1 -1
- package/dist/base/primitives/element/ElementActionButtons.js +10 -9
- package/dist/base/primitives/element/ElementDetailsButton.js +2 -1
- package/dist/base/primitives/element/ElementShape.d.ts +1 -1
- package/dist/base/primitives/element/ElementTags.d.ts +14 -0
- package/dist/base/primitives/element/ElementTags.js +176 -0
- package/dist/base/primitives/element/ElementTitle.d.ts +5 -4
- package/dist/base/primitives/element/ElementTitle.js +6 -6
- package/dist/base/primitives/index.d.ts +1 -0
- package/dist/base/types.Base.d.ts +54 -0
- package/dist/base/types.Base.js +48 -0
- package/dist/base/types.d.ts +2 -52
- package/dist/bundle/LikeC4View.d.ts +2 -1
- package/dist/bundle/LikeC4View.js +8 -6
- package/dist/bundle/LikeC4View.props.d.ts +15 -4
- package/dist/bundle/ReactLikeC4.d.ts +4 -7
- package/dist/bundle/ReactLikeC4.js +3 -2
- package/dist/bundle/index.js +1 -1
- package/dist/components/ErrorFallback.d.ts +2 -0
- package/dist/components/ErrorFallback.js +29 -0
- package/dist/context/DiagramEventHandlers.d.ts +6 -5
- package/dist/context/DiagramFeatures.d.ts +2 -2
- package/dist/context/DiagramFeatures.js +3 -31
- package/dist/context/EnsureMantine.js +1 -1
- package/dist/context/IconRenderer.js +1 -4
- package/dist/context/RootContainer.js +5 -1
- package/dist/context/TagStylesContext.d.ts +7 -0
- package/dist/context/TagStylesContext.js +85 -0
- package/dist/custom/components.d.ts +1 -1
- package/dist/custom/customNodes.d.ts +27 -17
- package/dist/custom/hooks.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/useDiagram.d.ts +73 -38
- package/dist/hooks/useDiagram.js +7 -3
- package/dist/hooks/useMantinePortalProps.d.ts +2 -2
- package/dist/hooks/useSearchActor.d.ts +2 -0
- package/dist/hooks/useSearchActor.js +10 -0
- package/dist/hooks/useUpdateEffect.js +3 -0
- package/dist/hooks/useXYFlow.d.ts +39 -37
- package/dist/hooks/useXYFlow.js +5 -1
- package/dist/index.js +1 -1
- package/dist/likec4diagram/DiagramUI.js +7 -2
- package/dist/likec4diagram/DiagramXYFlow.d.ts +4 -3
- package/dist/likec4diagram/DiagramXYFlow.js +104 -107
- package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +7 -6
- package/dist/likec4diagram/custom/edges/RelationshipEdge.js +8 -0
- package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +7 -5
- package/dist/likec4diagram/custom/index.d.ts +7 -6
- package/dist/likec4diagram/custom/nodes/nodes.js +39 -26
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +3 -3
- package/dist/likec4diagram/types.d.ts +5 -5
- package/dist/likec4diagram/ui/controls/Controls.js +12 -4
- package/dist/likec4diagram/ui/notation/NotationPanel.js +1 -1
- package/dist/likec4diagram/useViewToNodesEdges.d.ts +5 -3
- package/dist/likec4diagram/useViewToNodesEdges.js +20 -30
- package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
- package/dist/likec4model/useLikeC4ElementsTree.js +1 -1
- package/dist/likec4model/useLikeC4Model.d.ts +22 -10
- package/dist/likec4model/useLikeC4Model.js +11 -7
- package/dist/overlays/Overlays.js +4 -27
- package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
- package/dist/overlays/element-details/ElementDetailsCard.js +19 -12
- package/dist/overlays/element-details/TabPanelDeployments.d.ts +1 -1
- package/dist/overlays/element-details/TabPanelDeployments.js +1 -1
- package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
- package/dist/overlays/element-details/TabPanelStructure.d.ts +1 -1
- package/dist/overlays/element-details/actor.d.ts +288 -286
- package/dist/overlays/overlay/Overlay.css.d.ts +57 -2
- package/dist/overlays/overlay/Overlay.css.js +76 -39
- package/dist/overlays/overlay/Overlay.d.ts +12 -0
- package/dist/overlays/overlay/Overlay.js +36 -25
- package/dist/overlays/overlaysActor.d.ts +1 -1
- package/dist/overlays/relationship-details/RelationshipDetails.d.ts +3 -2
- package/dist/overlays/relationship-details/RelationshipDetails.js +3 -3
- package/dist/overlays/relationship-details/_types.d.ts +2 -2
- package/dist/overlays/relationship-details/actor.js +7 -7
- package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +3 -2
- package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -0
- package/dist/overlays/relationship-details/hooks.d.ts +10 -9
- package/dist/overlays/relationship-details/layout-to-xyflow.js +1 -0
- package/dist/overlays/relationship-details/layout.js +3 -1
- package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +3 -2
- package/dist/overlays/relationships-browser/SelectElement.js +1 -1
- package/dist/overlays/relationships-browser/_types.d.ts +2 -2
- package/dist/overlays/relationships-browser/actor.d.ts +1 -1
- package/dist/overlays/relationships-browser/actor.js +7 -7
- package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +3 -2
- package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +8 -5
- package/dist/overlays/relationships-browser/custom/nodeTypes.js +4 -0
- package/dist/overlays/relationships-browser/layout.d.ts +2 -2
- package/dist/overlays/relationships-browser/layout.js +10 -6
- package/dist/overlays/relationships-browser/useViewToNodesEdges.js +4 -3
- package/dist/search/Search.d.ts +5 -0
- package/dist/search/Search.js +192 -0
- package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.js +0 -1
- package/dist/search/components/ElementsColumn.d.ts +2 -0
- package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.js +21 -19
- package/dist/search/components/PickView.d.ts +4 -0
- package/dist/search/components/PickView.js +135 -0
- package/dist/search/components/SearchByTags.d.ts +1 -0
- package/dist/search/components/SearchByTags.js +116 -0
- package/dist/search/components/SearchInput.d.ts +2 -0
- package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +53 -34
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +14 -13
- package/dist/{likec4diagram/ui/search → search/components}/_shared.css.js +26 -35
- package/dist/{likec4diagram/ui/search/LikeC4Search.css.d.ts → search/components/styles.css.d.ts} +0 -2
- package/dist/search/components/styles.css.js +60 -0
- package/dist/{likec4diagram/ui/search → search/components}/utils.d.ts +1 -0
- package/dist/{likec4diagram/ui/search → search/components}/utils.js +7 -1
- package/dist/search/hooks.d.ts +16 -0
- package/dist/search/hooks.js +35 -0
- package/dist/search/searchActor.d.ts +90 -0
- package/dist/search/searchActor.js +75 -0
- package/dist/state/DiagramActorProvider.d.ts +9 -7
- package/dist/state/DiagramActorProvider.js +24 -18
- package/dist/state/assign.d.ts +0 -1
- package/dist/state/assign.js +9 -19
- package/dist/state/diagram-machine.d.ts +430 -176
- package/dist/state/diagram-machine.js +119 -54
- package/dist/state/syncManualLayoutActor.d.ts +2 -2
- package/dist/state/types.d.ts +2 -0
- package/dist/state/utils.d.ts +2 -0
- package/dist/state/utils.js +3 -0
- package/dist/styles-min.css +1 -1
- package/dist/styles-xyflow.css +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css2.js +1 -1
- package/package.json +18 -18
- package/panda.buildinfo.json +171 -148
- package/src/LikeC4CustomColors.tsx +21 -6
- package/src/LikeC4Diagram.props.ts +35 -30
- package/src/LikeC4Diagram.tsx +19 -20
- package/src/LikeC4ModelProvider.tsx +6 -5
- package/src/StaticLikeC4Diagram.tsx +8 -6
- package/src/base/const.ts +1 -1
- package/src/base/index.ts +2 -1
- package/src/base/primitives/compound/CompoundActionButton.tsx +2 -1
- package/src/base/primitives/compound/CompoundDetailsButton.tsx +2 -1
- package/src/base/primitives/compound/CompoundTitle.tsx +3 -2
- package/src/base/primitives/edge/EdgeContainer.tsx +2 -1
- package/src/base/primitives/edge/EdgeLabel.css.ts +1 -0
- package/src/base/primitives/edge/EdgeLabel.tsx +20 -15
- package/src/base/primitives/edge/EdgeLabelContainer.tsx +1 -1
- package/src/base/primitives/edge/EdgeMarkers.tsx +2 -1
- package/src/base/primitives/edge/EdgePath.tsx +1 -1
- package/src/base/primitives/element/ElementActionButtons.tsx +11 -10
- package/src/base/primitives/element/ElementDetailsButton.tsx +2 -1
- package/src/base/primitives/element/ElementShape.tsx +2 -1
- package/src/base/primitives/element/ElementTags.tsx +182 -0
- package/src/base/primitives/element/ElementTitle.tsx +21 -15
- package/src/base/primitives/index.ts +1 -0
- package/src/base/types.Base.ts +104 -0
- package/src/base/types.ts +2 -99
- package/src/bundle/LikeC4View.props.ts +17 -4
- package/src/bundle/LikeC4View.tsx +17 -19
- package/src/bundle/ReactLikeC4.tsx +14 -26
- package/src/components/ErrorFallback.tsx +30 -0
- package/src/context/DiagramEventHandlers.tsx +5 -4
- package/src/context/DiagramFeatures.tsx +3 -22
- package/src/context/EnsureMantine.tsx +1 -1
- package/src/context/IconRenderer.tsx +1 -4
- package/src/context/RootContainer.tsx +9 -3
- package/src/context/TagStylesContext.tsx +96 -0
- package/src/custom/components.ts +2 -0
- package/src/custom/customNodes.tsx +24 -14
- package/src/custom/hooks.ts +1 -0
- package/src/hooks/index.ts +1 -1
- package/src/hooks/useCurrentViewId.ts +1 -4
- package/src/hooks/useDiagram.ts +104 -12
- package/src/hooks/useMantinePortalProps.ts +10 -1
- package/src/hooks/useSearchActor.ts +11 -0
- package/src/hooks/useUpdateEffect.ts +7 -4
- package/src/hooks/useXYFlow.ts +5 -0
- package/src/likec4diagram/DiagramUI.tsx +5 -0
- package/src/likec4diagram/DiagramXYFlow.tsx +115 -118
- package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +9 -0
- package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +10 -9
- package/src/likec4diagram/custom/nodes/nodes.tsx +45 -43
- package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +11 -3
- package/src/likec4diagram/types.ts +5 -3
- package/src/likec4diagram/ui/controls/Controls.tsx +11 -4
- package/src/likec4diagram/ui/notation/NotationPanel.tsx +2 -2
- package/src/likec4diagram/useViewToNodesEdges.ts +34 -36
- package/src/likec4model/LikeC4ModelContext.ts +2 -2
- package/src/likec4model/useLikeC4ElementsTree.ts +1 -1
- package/src/likec4model/useLikeC4Model.ts +18 -16
- package/src/overlays/Overlays.tsx +5 -32
- package/src/overlays/element-details/ElementDetailsCard.tsx +25 -18
- package/src/overlays/element-details/TabPanelDeployments.tsx +3 -2
- package/src/overlays/element-details/TabPanelRelationships.tsx +2 -1
- package/src/overlays/element-details/TabPanelStructure.tsx +1 -1
- package/src/overlays/element-details/actor.ts +2 -2
- package/src/overlays/overlay/Overlay.css.ts +75 -38
- package/src/overlays/overlay/Overlay.tsx +43 -26
- package/src/overlays/overlaysActor.ts +1 -1
- package/src/overlays/relationship-details/RelationshipDetails.tsx +4 -4
- package/src/overlays/relationship-details/_types.ts +2 -1
- package/src/overlays/relationship-details/custom/nodeTypes.tsx +4 -0
- package/src/overlays/relationship-details/layout-to-xyflow.ts +1 -0
- package/src/overlays/relationship-details/layout.ts +3 -1
- package/src/overlays/relationships-browser/SelectElement.tsx +1 -1
- package/src/overlays/relationships-browser/_types.ts +2 -1
- package/src/overlays/relationships-browser/custom/nodeTypes.tsx +4 -0
- package/src/overlays/relationships-browser/layout.ts +12 -7
- package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -4
- package/src/search/Search.tsx +237 -0
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +24 -22
- package/src/search/components/PickView.tsx +140 -0
- package/src/search/components/SearchByTags.tsx +109 -0
- package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +63 -36
- package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +17 -18
- package/src/{likec4diagram/ui/search → search/components}/_shared.css.ts +26 -37
- package/src/{likec4diagram/ui/search/LikeC4Search.css.ts → search/components/styles.css.ts} +9 -36
- package/src/{likec4diagram/ui/search → search/components}/utils.ts +7 -0
- package/src/search/hooks.ts +41 -0
- package/src/search/searchActor.ts +99 -0
- package/src/state/DiagramActorProvider.tsx +36 -25
- package/src/state/assign.ts +10 -10
- package/src/state/diagram-machine.ts +115 -52
- package/src/state/syncManualLayoutActor.ts +1 -1
- package/src/state/types.ts +2 -0
- package/src/state/utils.ts +4 -0
- package/dist/base/types.js +0 -54
- package/dist/likec4diagram/ui/search/ElementsColumn.d.ts +0 -1
- package/dist/likec4diagram/ui/search/LikeC4Search.css.js +0 -87
- package/dist/likec4diagram/ui/search/LikeC4Search.d.ts +0 -2
- package/dist/likec4diagram/ui/search/LikeC4Search.js +0 -267
- package/dist/likec4diagram/ui/search/SearchInput.d.ts +0 -1
- package/dist/likec4diagram/ui/search/state.d.ts +0 -19
- package/dist/likec4diagram/ui/search/state.js +0 -63
- package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
- package/src/likec4diagram/ui/search/state.ts +0 -78
- /package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.d.ts +0 -0
- /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.d.ts +0 -0
- /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.js +0 -0
- /package/dist/{likec4diagram/ui/search → search/components}/_shared.css.d.ts +0 -0
- /package/src/{likec4diagram/ui/search → search/components}/ViewsColumn.css.ts +0 -0
|
@@ -18,14 +18,11 @@ const FeatureNames = [
|
|
|
18
18
|
"EdgeEditing",
|
|
19
19
|
"ViewTitle",
|
|
20
20
|
"FitView",
|
|
21
|
-
/**
|
|
22
|
-
* LikeC4Model is available in context
|
|
23
|
-
*/
|
|
24
|
-
"LikeC4Model",
|
|
25
21
|
/**
|
|
26
22
|
* Running in VSCode
|
|
27
23
|
*/
|
|
28
|
-
"Vscode"
|
|
24
|
+
"Vscode",
|
|
25
|
+
"ElementTags"
|
|
29
26
|
];
|
|
30
27
|
const AllDisabled = mapToObj(
|
|
31
28
|
FeatureNames,
|
|
@@ -35,30 +32,14 @@ const DiagramFeaturesContext = createContext(AllDisabled);
|
|
|
35
32
|
const validate = (features) => {
|
|
36
33
|
let {
|
|
37
34
|
enableReadOnly,
|
|
38
|
-
enableLikeC4Model,
|
|
39
|
-
enableElementDetails,
|
|
40
|
-
enableRelationshipDetails,
|
|
41
|
-
enableRelationshipBrowser,
|
|
42
|
-
enableSearch,
|
|
43
35
|
enableEdgeEditing,
|
|
44
36
|
...rest
|
|
45
37
|
} = features;
|
|
46
|
-
if (!enableLikeC4Model) {
|
|
47
|
-
enableElementDetails = false;
|
|
48
|
-
enableRelationshipDetails = false;
|
|
49
|
-
enableRelationshipBrowser = false;
|
|
50
|
-
enableSearch = false;
|
|
51
|
-
}
|
|
52
38
|
if (enableReadOnly) {
|
|
53
39
|
enableEdgeEditing = false;
|
|
54
40
|
}
|
|
55
41
|
return {
|
|
56
42
|
enableReadOnly,
|
|
57
|
-
enableLikeC4Model,
|
|
58
|
-
enableElementDetails,
|
|
59
|
-
enableRelationshipDetails,
|
|
60
|
-
enableRelationshipBrowser,
|
|
61
|
-
enableSearch,
|
|
62
43
|
enableEdgeEditing,
|
|
63
44
|
...rest
|
|
64
45
|
};
|
|
@@ -109,14 +90,5 @@ function IfEnabled({
|
|
|
109
90
|
const enabled = useEnabledFeatures()[`enable${feature}`] === true;
|
|
110
91
|
return enabled && and ? /* @__PURE__ */ jsx(Fragment, { children }) : null;
|
|
111
92
|
}
|
|
112
|
-
function IfNotReadOnly({
|
|
113
|
-
children
|
|
114
|
-
}) {
|
|
115
|
-
const isReadOnly = useEnabledFeatures()[`enableReadOnly`] === true;
|
|
116
|
-
if (isReadOnly) {
|
|
117
|
-
return null;
|
|
118
|
-
}
|
|
119
|
-
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
120
|
-
}
|
|
121
93
|
|
|
122
|
-
export { AllDisabled, DiagramFeatures, IfEnabled,
|
|
94
|
+
export { AllDisabled, DiagramFeatures, IfEnabled, useEnabledFeatures };
|
|
@@ -10,7 +10,7 @@ function EnsureMantine({ children }) {
|
|
|
10
10
|
}
|
|
11
11
|
}, []);
|
|
12
12
|
if (!mantineCtx) {
|
|
13
|
-
return /* @__PURE__ */ jsx(MantineProvider, { children });
|
|
13
|
+
return /* @__PURE__ */ jsx(MantineProvider, { defaultColorScheme: "auto", children });
|
|
14
14
|
}
|
|
15
15
|
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
16
16
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { cx } from '@likec4/styles/css';
|
|
3
3
|
import { Box } from '@likec4/styles/jsx';
|
|
4
|
+
import { useId } from '@mantine/hooks';
|
|
4
5
|
import { useRef, useEffect, createContext, useContext, createRef } from 'react';
|
|
5
6
|
import { usePanningAtom } from './ReduceGraphics.js';
|
|
7
|
+
import { TagStylesProvider } from './TagStylesContext.js';
|
|
6
8
|
|
|
7
9
|
const RootContainerContext = createContext(createRef());
|
|
8
10
|
function RootContainer({
|
|
@@ -10,6 +12,7 @@ function RootContainer({
|
|
|
10
12
|
reduceGraphics = false,
|
|
11
13
|
children
|
|
12
14
|
}) {
|
|
15
|
+
const id = useId();
|
|
13
16
|
const ref = useRef(null);
|
|
14
17
|
const $isPanning = usePanningAtom();
|
|
15
18
|
useEffect(() => {
|
|
@@ -24,12 +27,13 @@ function RootContainer({
|
|
|
24
27
|
return /* @__PURE__ */ jsx(
|
|
25
28
|
Box,
|
|
26
29
|
{
|
|
30
|
+
id,
|
|
27
31
|
className: cx("likec4-root", className),
|
|
28
32
|
ref,
|
|
29
33
|
...reduceGraphics && {
|
|
30
34
|
["data-likec4-reduced-graphics"]: true
|
|
31
35
|
},
|
|
32
|
-
children: /* @__PURE__ */ jsx(RootContainerContext.Provider, { value: ref, children })
|
|
36
|
+
children: /* @__PURE__ */ jsx(TagStylesProvider, { rootSelector: `#${id}`, children: /* @__PURE__ */ jsx(RootContainerContext.Provider, { value: ref, children }) })
|
|
33
37
|
}
|
|
34
38
|
);
|
|
35
39
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TagSpecification } from '@likec4/core';
|
|
2
|
+
import { PropsWithChildren } from 'react';
|
|
3
|
+
export declare function TagStylesProvider({ children, rootSelector }: PropsWithChildren<{
|
|
4
|
+
rootSelector: string;
|
|
5
|
+
}>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function useTagSpecifications(): Record<string, TagSpecification>;
|
|
7
|
+
export declare function useTagSpecification(tag: string): TagSpecification;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { isTagColorSpecified } from '@likec4/core';
|
|
3
|
+
import { useMantineStyleNonce } from '@mantine/core';
|
|
4
|
+
import { useDeepCompareMemo } from '@react-hookz/web';
|
|
5
|
+
import { createContext, useContext } from 'react';
|
|
6
|
+
import { pipe, entries, flatMap, join } from 'remeda';
|
|
7
|
+
import { useLikeC4Specification } from '../likec4model/useLikeC4Model.js';
|
|
8
|
+
|
|
9
|
+
const TagStylesContext = createContext({});
|
|
10
|
+
const radixColors = [
|
|
11
|
+
"yellow",
|
|
12
|
+
"orange",
|
|
13
|
+
"amber",
|
|
14
|
+
"tomato",
|
|
15
|
+
"red",
|
|
16
|
+
"ruby",
|
|
17
|
+
"crimson",
|
|
18
|
+
"pink",
|
|
19
|
+
"pink",
|
|
20
|
+
"purple",
|
|
21
|
+
"violet",
|
|
22
|
+
"indigo",
|
|
23
|
+
"blue",
|
|
24
|
+
"teal",
|
|
25
|
+
"grass",
|
|
26
|
+
"lime"
|
|
27
|
+
];
|
|
28
|
+
const generateColorVars = (spec) => {
|
|
29
|
+
const color = spec.color;
|
|
30
|
+
if (isTagColorSpecified(spec)) {
|
|
31
|
+
return `
|
|
32
|
+
--colors-likec4-tag-bg: ${color};
|
|
33
|
+
--colors-likec4-tag-bg-hover: color-mix(in srgb, ${color}, var(--colors-likec4-mix-color) 20%);
|
|
34
|
+
`;
|
|
35
|
+
}
|
|
36
|
+
if (!radixColors.includes(color)) {
|
|
37
|
+
return "";
|
|
38
|
+
}
|
|
39
|
+
let textcolor = "12";
|
|
40
|
+
if (["mint", "grass", "lime", "yellow", "amber"].includes(color)) {
|
|
41
|
+
textcolor = "dark-2";
|
|
42
|
+
}
|
|
43
|
+
return `
|
|
44
|
+
--colors-likec4-tag-border: var(--colors-${color}-8);
|
|
45
|
+
--colors-likec4-tag-bg: var(--colors-${color}-9);
|
|
46
|
+
--colors-likec4-tag-bg-hover: var(--colors-${color}-10);
|
|
47
|
+
--colors-likec4-tag-text: var(--colors-${color}-${textcolor});
|
|
48
|
+
`;
|
|
49
|
+
};
|
|
50
|
+
function TagStylesProvider({ children, rootSelector }) {
|
|
51
|
+
const tags = useLikeC4Specification().tags;
|
|
52
|
+
const { specs, stylesheet } = useDeepCompareMemo(() => {
|
|
53
|
+
if (!tags) {
|
|
54
|
+
return { specs: {}, stylesheet: "" };
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
specs: tags,
|
|
58
|
+
stylesheet: pipe(
|
|
59
|
+
entries(tags),
|
|
60
|
+
flatMap(([tag, spec]) => [
|
|
61
|
+
`:is(${rootSelector} [data-likec4-tag="${tag}"]) {`,
|
|
62
|
+
generateColorVars(spec),
|
|
63
|
+
"}"
|
|
64
|
+
]),
|
|
65
|
+
join("\n")
|
|
66
|
+
)
|
|
67
|
+
};
|
|
68
|
+
}, [tags, rootSelector]);
|
|
69
|
+
return /* @__PURE__ */ jsxs(TagStylesContext.Provider, { value: specs, children: [
|
|
70
|
+
stylesheet !== "" && /* @__PURE__ */ jsx(TagStylesheet, { stylesheet }),
|
|
71
|
+
children
|
|
72
|
+
] });
|
|
73
|
+
}
|
|
74
|
+
function TagStylesheet({ stylesheet }) {
|
|
75
|
+
const nonce = useMantineStyleNonce()?.();
|
|
76
|
+
return /* @__PURE__ */ jsx("style", { "data-likec4-tag-stylesheet": true, type: "text/css", dangerouslySetInnerHTML: { __html: stylesheet }, nonce });
|
|
77
|
+
}
|
|
78
|
+
function useTagSpecification(tag) {
|
|
79
|
+
const specs = useContext(TagStylesContext);
|
|
80
|
+
return specs[tag] ?? {
|
|
81
|
+
color: "tomato"
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export { TagStylesProvider, useTagSpecification };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { CompoundActionButton, CompoundDetailsButton, CompoundNodeContainer, CompoundTitle, DefaultHandles, ElementActionButtons, ElementDetailsButton, ElementNodeContainer, ElementShape, ElementTitle, } from '../base/primitives';
|
|
1
|
+
export { CompoundActionButton, CompoundDetailsButton, CompoundNodeContainer, CompoundTitle, DefaultHandles, ElementActionButtons, ElementDetailsButton, ElementNodeContainer, ElementShape, ElementTag, ElementTags, ElementTitle, } from '../base/primitives';
|
|
2
2
|
export { IconOrShapeRenderer, IconRenderer, IconRendererProvider, } from '../context/IconRenderer';
|
|
3
3
|
export { CompoundActions, CompoundDeploymentNode, CompoundDeploymentToolbar, CompoundDetailsButtonWithHandler, CompoundElementNode, CompoundElementToolbar, DeploymentElementActions, DeploymentElementToolbar, DeploymentNode, ElementActions, ElementDetailsButtonWithHandler, ElementNode, ElementToolbar, Toolbar, ViewGroupNode, } from '../likec4diagram/custom/nodes';
|
|
4
4
|
export { IfEnabled, IfNotEnabled, IfNotReadOnly, } from '../context/DiagramFeatures';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { NodeModel } from '@likec4/core/model';
|
|
2
|
+
import { Any } from '@likec4/core/types';
|
|
3
3
|
import { ReactNode } from 'react';
|
|
4
4
|
import { NodeProps } from '../base/types';
|
|
5
5
|
import { Types } from '../likec4diagram/types';
|
|
6
|
-
export type CustomElementNodeProps<M extends
|
|
6
|
+
export type CustomElementNodeProps<M extends Any = Any> = {
|
|
7
7
|
nodeProps: NodeProps<Types.ElementNodeData, 'element'>;
|
|
8
|
-
nodeModel: NodeModel.WithElement<M
|
|
8
|
+
nodeModel: NodeModel.WithElement<M>;
|
|
9
9
|
};
|
|
10
10
|
/**
|
|
11
11
|
* Node that will be used to render the element from the model.
|
|
@@ -15,6 +15,8 @@ export type CustomElementNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
15
15
|
* - `nodeProps`: props from XYFlow
|
|
16
16
|
* - `nodeModel`: LikeC4 {@link NodeModel.WithElement}
|
|
17
17
|
*
|
|
18
|
+
* @see [Default implementation](https://github.com/likec4/likec4/blob/main/packages/diagram/src/likec4diagram/custom/nodes/nodes.tsx)
|
|
19
|
+
*
|
|
18
20
|
* @example
|
|
19
21
|
* ```tsx
|
|
20
22
|
* import {
|
|
@@ -53,10 +55,10 @@ export type CustomElementNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
53
55
|
* ))
|
|
54
56
|
* ```
|
|
55
57
|
*/
|
|
56
|
-
export declare const elementNode: (Node: (props: CustomElementNodeProps<
|
|
57
|
-
export type CustomDeploymentNodeProps<M extends
|
|
58
|
+
export declare const elementNode: (Node: (props: CustomElementNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.ElementNodeData, "element">) => ReactNode;
|
|
59
|
+
export type CustomDeploymentNodeProps<M extends Any = Any> = {
|
|
58
60
|
nodeProps: NodeProps<Types.DeploymentElementNodeData, 'deployment'>;
|
|
59
|
-
nodeModel: NodeModel.WithDeploymentElement<M
|
|
61
|
+
nodeModel: NodeModel.WithDeploymentElement<M>;
|
|
60
62
|
};
|
|
61
63
|
/**
|
|
62
64
|
* Node that will be used to render the element from deployment model.
|
|
@@ -67,6 +69,8 @@ export type CustomDeploymentNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
67
69
|
* - `nodeProps`: props from XYFlow
|
|
68
70
|
* - `nodeModel`: {@link NodeModel.WithDeploymentElement}
|
|
69
71
|
*
|
|
72
|
+
* @see [Default implementation](https://github.com/likec4/likec4/blob/main/packages/diagram/src/likec4diagram/custom/nodes/nodes.tsx)
|
|
73
|
+
*
|
|
70
74
|
* @example
|
|
71
75
|
* ```tsx
|
|
72
76
|
* import {
|
|
@@ -104,10 +108,10 @@ export type CustomDeploymentNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
104
108
|
* ))
|
|
105
109
|
* ```
|
|
106
110
|
*/
|
|
107
|
-
export declare const deploymentNode: (Node: (props: CustomDeploymentNodeProps<
|
|
108
|
-
export type CustomCompoundElementNodeProps<M extends
|
|
111
|
+
export declare const deploymentNode: (Node: (props: CustomDeploymentNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.DeploymentElementNodeData, "deployment">) => ReactNode;
|
|
112
|
+
export type CustomCompoundElementNodeProps<M extends Any = Any> = {
|
|
109
113
|
nodeProps: NodeProps<Types.CompoundElementNodeData, 'compound-element'>;
|
|
110
|
-
nodeModel: NodeModel.WithElement<M
|
|
114
|
+
nodeModel: NodeModel.WithElement<M>;
|
|
111
115
|
};
|
|
112
116
|
/**
|
|
113
117
|
* Node that will be used to render the compound element from the model.
|
|
@@ -117,6 +121,8 @@ export type CustomCompoundElementNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
117
121
|
* - `nodeProps`: props from XYFlow
|
|
118
122
|
* - `nodeModel`: LikeC4 {@link NodeModel.WithElement}
|
|
119
123
|
*
|
|
124
|
+
* @see [Default implementation](https://github.com/likec4/likec4/blob/main/packages/diagram/src/likec4diagram/custom/nodes/nodes.tsx)
|
|
125
|
+
*
|
|
120
126
|
* @example
|
|
121
127
|
* ```tsx
|
|
122
128
|
* import {
|
|
@@ -145,10 +151,10 @@ export type CustomCompoundElementNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
145
151
|
* ))
|
|
146
152
|
* ```
|
|
147
153
|
*/
|
|
148
|
-
export declare const compoundElementNode: (Node: (props: CustomCompoundElementNodeProps<
|
|
149
|
-
export type CustomCompoundDeploymentNodeProps<M extends
|
|
154
|
+
export declare const compoundElementNode: (Node: (props: CustomCompoundElementNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.CompoundElementNodeData, "compound-element">) => ReactNode;
|
|
155
|
+
export type CustomCompoundDeploymentNodeProps<M extends Any = Any> = {
|
|
150
156
|
nodeProps: NodeProps<Types.CompoundDeploymentNodeData, 'compound-deployment'>;
|
|
151
|
-
nodeModel: NodeModel.WithDeploymentElement<M
|
|
157
|
+
nodeModel: NodeModel.WithDeploymentElement<M>;
|
|
152
158
|
};
|
|
153
159
|
/**
|
|
154
160
|
* Node that will be used to render the compound from the deployment model.
|
|
@@ -158,6 +164,8 @@ export type CustomCompoundDeploymentNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
158
164
|
* - `nodeProps`: props from XYFlow
|
|
159
165
|
* - `nodeModel`: LikeC4 {@link NodeModel.WithDeploymentElement}
|
|
160
166
|
*
|
|
167
|
+
* @see [Default implementation](https://github.com/likec4/likec4/blob/main/packages/diagram/src/likec4diagram/custom/nodes/nodes.tsx)
|
|
168
|
+
*
|
|
161
169
|
* @example
|
|
162
170
|
* ```tsx
|
|
163
171
|
* import {
|
|
@@ -180,10 +188,10 @@ export type CustomCompoundDeploymentNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
180
188
|
* </CompoundNodeContainer>
|
|
181
189
|
* ```
|
|
182
190
|
*/
|
|
183
|
-
export declare const compoundDeploymentNode: (Node: (props: CustomCompoundDeploymentNodeProps<
|
|
184
|
-
export type CustomViewGroupNodeProps<M extends
|
|
191
|
+
export declare const compoundDeploymentNode: (Node: (props: CustomCompoundDeploymentNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.CompoundDeploymentNodeData, "compound-deployment">) => ReactNode;
|
|
192
|
+
export type CustomViewGroupNodeProps<M extends Any = Any> = {
|
|
185
193
|
nodeProps: NodeProps<Types.ViewGroupNodeData, 'view-group'>;
|
|
186
|
-
nodeModel: NodeModel.IsGroup<M
|
|
194
|
+
nodeModel: NodeModel.IsGroup<M>;
|
|
187
195
|
};
|
|
188
196
|
/**
|
|
189
197
|
* Node that will be used to render the view group from the model.
|
|
@@ -192,6 +200,8 @@ export type CustomViewGroupNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
192
200
|
* - `nodeProps`: props from XYFlow
|
|
193
201
|
* - `nodeModel`: LikeC4 {@link NodeModel.IsGroup}
|
|
194
202
|
*
|
|
203
|
+
* @see [Default implementation](https://github.com/likec4/likec4/blob/main/packages/diagram/src/likec4diagram/custom/nodes/nodes.tsx)
|
|
204
|
+
*
|
|
195
205
|
* @example
|
|
196
206
|
* ```tsx
|
|
197
207
|
* import {
|
|
@@ -208,7 +218,7 @@ export type CustomViewGroupNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
208
218
|
* </CompoundNodeContainer>
|
|
209
219
|
* ```
|
|
210
220
|
*/
|
|
211
|
-
export declare const viewGroupNode: (Node: (props: CustomViewGroupNodeProps<
|
|
221
|
+
export declare const viewGroupNode: (Node: (props: CustomViewGroupNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.ViewGroupNodeData, "view-group">) => ReactNode;
|
|
212
222
|
export interface CustomNodes {
|
|
213
223
|
element?: undefined | ((props: NodeProps<Types.ElementNodeData, 'element'>) => ReactNode);
|
|
214
224
|
deployment?: undefined | ((props: NodeProps<Types.DeploymentElementNodeData, 'deployment'>) => ReactNode);
|
package/dist/custom/hooks.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export { type EnabledFeatures, useEnabledFeatures, } from '../context/DiagramFea
|
|
|
4
4
|
export { useCurrentViewId, } from '../hooks/useCurrentViewId';
|
|
5
5
|
export { useDiagram, useDiagramContext, } from '../hooks/useDiagram';
|
|
6
6
|
export { useXYFlow, useXYInternalNode, useXYStore, useXYStoreApi, } from '../hooks/useXYFlow';
|
|
7
|
-
export { useLikeC4Model, } from '../likec4model/useLikeC4Model';
|
|
7
|
+
export { useLikeC4Model, useLikeC4Specification, } from '../likec4model/useLikeC4Model';
|
|
8
8
|
export { useMantinePortalProps } from '../hooks/useMantinePortalProps';
|
|
9
9
|
export { useSetState } from '../hooks/useSetState';
|
|
10
10
|
export { useUpdateEffect } from '../hooks/useUpdateEffect';
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { useMantinePortalProps } from './useMantinePortalProps';
|
|
2
2
|
export { useSetState } from './useSetState';
|
|
3
3
|
export { useUpdateEffect } from './useUpdateEffect';
|
|
4
|
-
export { useXYFlow, useXYInternalNode, useXYStore, useXYStoreApi } from './useXYFlow';
|
|
4
|
+
export { useCurrentZoom, useIsZoomTooSmall, useXYFlow, useXYInternalNode, useXYStore, useXYStoreApi } from './useXYFlow';
|
|
5
5
|
export type { XYStoreApi } from './useXYFlow';
|
|
@@ -1,67 +1,102 @@
|
|
|
1
|
-
import { DiagramEdge, DiagramNode, DiagramView,
|
|
1
|
+
import { aux, DiagramEdge, DiagramNode, DiagramView, NodeId, NodeNotation as ElementNotation, scalar } from '@likec4/core/types';
|
|
2
|
+
import { DependencyList } from 'react';
|
|
2
3
|
import { PartialDeep } from 'type-fest';
|
|
3
4
|
import { FeatureName } from '../context/DiagramFeatures';
|
|
4
5
|
import { OpenSourceParams } from '../LikeC4Diagram.props';
|
|
5
6
|
import { Types } from '../likec4diagram/types';
|
|
6
7
|
import { AlignmentMode } from '../state/aligners';
|
|
7
|
-
import { DiagramActorEvent, DiagramActorSnapshot, DiagramContext, SyncLayoutActorSnapshot } from '../state/types';
|
|
8
|
+
import { DiagramActorEvent, DiagramActorRef, DiagramActorSnapshot, DiagramContext, SyncLayoutActorSnapshot } from '../state/types';
|
|
8
9
|
import { useDiagramActorRef } from './safeContext';
|
|
9
|
-
import { DiagramActorRef } from '..';
|
|
10
10
|
export { useDiagramActorRef };
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
11
|
+
export interface DiagramApi {
|
|
12
|
+
readonly actor: DiagramActorRef;
|
|
13
|
+
/**
|
|
14
|
+
* @warning Do not use in render phase
|
|
15
|
+
*/
|
|
16
|
+
readonly currentView: DiagramView;
|
|
17
|
+
/**
|
|
18
|
+
* Send event to diagram actor
|
|
19
|
+
*/
|
|
20
|
+
send(event: DiagramActorEvent): void;
|
|
21
|
+
/**
|
|
22
|
+
* Navigate to view
|
|
23
|
+
*/
|
|
24
|
+
navigateTo(viewId: scalar.ViewId, fromNode?: scalar.NodeId): void;
|
|
25
|
+
/**
|
|
26
|
+
* Navigate back or forward in history
|
|
27
|
+
*/
|
|
28
|
+
navigate(direction: 'back' | 'forward'): void;
|
|
29
|
+
/**
|
|
30
|
+
* Fit diagram to view
|
|
31
|
+
*/
|
|
32
|
+
fitDiagram(duration?: number): void;
|
|
33
|
+
/**
|
|
34
|
+
* Open relationships browser
|
|
35
|
+
*/
|
|
36
|
+
openRelationshipsBrowser(fqn: scalar.Fqn): void;
|
|
37
|
+
/**
|
|
38
|
+
* If running in editor, trigger opening source file
|
|
39
|
+
*/
|
|
40
|
+
openSource(params: OpenSourceParams<aux.Unknown>): void;
|
|
41
|
+
/**
|
|
42
|
+
* Open element details card
|
|
43
|
+
*/
|
|
44
|
+
openElementDetails(fqn: scalar.Fqn, fromNode?: scalar.NodeId): void;
|
|
45
|
+
openRelationshipDetails(...params: [edgeId: scalar.EdgeId] | [source: scalar.Fqn, target: scalar.Fqn]): void;
|
|
46
|
+
updateNodeData(nodeId: scalar.NodeId, data: PartialDeep<Types.NodeData>): void;
|
|
47
|
+
updateEdgeData(edgeId: scalar.EdgeId, data: PartialDeep<Types.EdgeData>): void;
|
|
48
|
+
/**
|
|
49
|
+
* Schedule save manual layout
|
|
50
|
+
*/
|
|
51
|
+
scheduleSaveManualLayout(): void;
|
|
28
52
|
/**
|
|
29
53
|
* @returns true if there was pending request to save layout
|
|
30
54
|
*/
|
|
31
|
-
cancelSaveManualLayout
|
|
32
|
-
align: (mode: AlignmentMode) => void;
|
|
33
|
-
resetEdgeControlPoints: () => void;
|
|
34
|
-
focusNode: (nodeId: NodeId) => void;
|
|
55
|
+
cancelSaveManualLayout(): boolean;
|
|
35
56
|
/**
|
|
36
|
-
*
|
|
57
|
+
* Align nodes
|
|
37
58
|
*/
|
|
38
|
-
|
|
59
|
+
align(mode: AlignmentMode): void;
|
|
60
|
+
/**
|
|
61
|
+
* Reset edge control points
|
|
62
|
+
*/
|
|
63
|
+
resetEdgeControlPoints(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Focus node
|
|
66
|
+
*/
|
|
67
|
+
focusNode(nodeId: NodeId): void;
|
|
39
68
|
/**
|
|
40
69
|
* @warning Do not use in render phase
|
|
41
70
|
*/
|
|
42
|
-
getSnapshot
|
|
71
|
+
getSnapshot(): DiagramActorSnapshot;
|
|
43
72
|
/**
|
|
44
73
|
* @warning Do not use in render phase
|
|
45
74
|
*/
|
|
46
|
-
getContext
|
|
75
|
+
getContext(): DiagramContext;
|
|
47
76
|
/**
|
|
48
77
|
* @warning Do not use in render phase
|
|
49
78
|
*/
|
|
50
|
-
findDiagramNode
|
|
79
|
+
findDiagramNode(xynodeId: string): DiagramNode | null;
|
|
51
80
|
/**
|
|
52
81
|
* @warning Do not use in render phase
|
|
53
82
|
*/
|
|
54
|
-
findDiagramEdge
|
|
55
|
-
startWalkthrough
|
|
56
|
-
walkthroughStep
|
|
57
|
-
stopWalkthrough
|
|
58
|
-
toggleFeature
|
|
59
|
-
highlightNotation
|
|
60
|
-
unhighlightNotation
|
|
61
|
-
|
|
83
|
+
findDiagramEdge(xyedgeId: string): DiagramEdge | null;
|
|
84
|
+
startWalkthrough(): void;
|
|
85
|
+
walkthroughStep(direction?: 'next' | 'previous'): void;
|
|
86
|
+
stopWalkthrough(): void;
|
|
87
|
+
toggleFeature(feature: FeatureName, forceValue?: boolean): void;
|
|
88
|
+
highlightNotation(notation: ElementNotation, kind?: string): void;
|
|
89
|
+
unhighlightNotation(): void;
|
|
90
|
+
openSearch(searchValue?: string): void;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Diagram API
|
|
94
|
+
* Mostly for internal use
|
|
95
|
+
*/
|
|
96
|
+
export declare function useDiagram(): DiagramApi;
|
|
62
97
|
export declare function useDiagramActorSnapshot<T = unknown>(selector: (state: DiagramActorSnapshot) => T, compare?: (a: NoInfer<T>, b: NoInfer<T>) => boolean): T;
|
|
63
98
|
export declare function useDiagramSyncLayoutState<T = unknown>(selector: (state: SyncLayoutActorSnapshot) => T, compare?: (a: NoInfer<T>, b: NoInfer<T>) => boolean): T;
|
|
64
99
|
/**
|
|
65
100
|
* Read diagram context
|
|
66
101
|
*/
|
|
67
|
-
export declare function useDiagramContext<T = unknown>(selector: (context: DiagramContext) => T, compare?: (a: NoInfer<T>, b: NoInfer<T>) => boolean): T;
|
|
102
|
+
export declare function useDiagramContext<T = unknown>(selector: (context: DiagramContext) => T, compare?: (a: NoInfer<T>, b: NoInfer<T>) => boolean, deps?: DependencyList): T;
|
package/dist/hooks/useDiagram.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallbackRef } from '@mantine/hooks';
|
|
2
2
|
import { useSelector } from '@xstate/react';
|
|
3
3
|
import { shallowEqual } from 'fast-equals';
|
|
4
|
-
import { useMemo } from 'react';
|
|
4
|
+
import { useMemo, useCallback } from 'react';
|
|
5
5
|
import { findDiagramEdge, findDiagramNode } from '../state/utils.js';
|
|
6
6
|
import { useDiagramActorRef } from './safeContext.js';
|
|
7
7
|
|
|
@@ -112,6 +112,9 @@ function useDiagram() {
|
|
|
112
112
|
},
|
|
113
113
|
unhighlightNotation: () => {
|
|
114
114
|
actor.send({ type: "notations.unhighlight" });
|
|
115
|
+
},
|
|
116
|
+
openSearch: (searchValue) => {
|
|
117
|
+
actor.send({ type: "open.search", ...searchValue && { search: searchValue } });
|
|
115
118
|
}
|
|
116
119
|
}), [actor]);
|
|
117
120
|
}
|
|
@@ -123,9 +126,10 @@ function useDiagramSyncLayoutState(selector, compare = shallowEqual) {
|
|
|
123
126
|
const syncLayoutActorRef = useDiagramActorSnapshot((s) => s.context.syncLayoutActorRef);
|
|
124
127
|
return useSelector(syncLayoutActorRef, useCallbackRef(selector), compare);
|
|
125
128
|
}
|
|
126
|
-
function useDiagramContext(selector, compare = shallowEqual) {
|
|
129
|
+
function useDiagramContext(selector, compare = shallowEqual, deps) {
|
|
127
130
|
const actorRef = useDiagramActorRef();
|
|
128
|
-
|
|
131
|
+
const select = useCallback((s) => selector(s.context), deps ?? []);
|
|
132
|
+
return useSelector(actorRef, select, compare);
|
|
129
133
|
}
|
|
130
134
|
|
|
131
135
|
export { useDiagram, useDiagramActorRef, useDiagramActorSnapshot, useDiagramContext, useDiagramSyncLayoutState };
|