@likec4/diagram 1.31.0 → 1.32.1
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-DlHyKoeo.js} +1700 -1206
- package/bundle/custom.js +51 -47
- package/bundle/index.js +5495 -5428
- 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 +41 -24
- 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 +22 -19
- package/dist/bundle/LikeC4View.props.d.ts +15 -4
- package/dist/bundle/ReactLikeC4.d.ts +4 -7
- package/dist/bundle/ReactLikeC4.js +10 -8
- 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 +32 -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 +107 -110
- 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 +7 -7
- 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/index.d.ts +1 -1
- package/dist/likec4model/useLikeC4ElementsTree.js +1 -1
- package/dist/likec4model/useLikeC4Model.d.ts +23 -10
- package/dist/likec4model/useLikeC4Model.js +22 -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 +58 -27
- 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 +4 -0
- package/dist/search/Search.js +173 -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 +26 -25
- 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 +119 -0
- package/dist/search/components/SearchInput.d.ts +2 -0
- package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +61 -40
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +25 -17
- 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/search/components/utils.d.ts +5 -0
- package/dist/search/components/utils.js +58 -0
- package/dist/search/hooks.d.ts +10 -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 +645 -183
- package/dist/state/diagram-machine.js +127 -60
- 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 +20 -19
- package/panda.buildinfo.json +171 -148
- package/src/LikeC4CustomColors.tsx +21 -6
- package/src/LikeC4Diagram.props.ts +48 -32
- 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 +27 -36
- package/src/bundle/ReactLikeC4.tsx +16 -36
- 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 +29 -14
- package/src/custom/hooks.ts +2 -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 +118 -121
- 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/index.ts +2 -0
- package/src/likec4model/useLikeC4ElementsTree.ts +1 -1
- package/src/likec4model/useLikeC4Model.ts +32 -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 +61 -29
- 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 +220 -0
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +28 -29
- package/src/search/components/PickView.tsx +134 -0
- package/src/search/components/SearchByTags.tsx +112 -0
- package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +72 -42
- package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +29 -22
- 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/search/components/utils.ts +64 -0
- package/src/search/hooks.ts +38 -0
- package/src/search/searchActor.ts +99 -0
- package/src/state/DiagramActorProvider.tsx +37 -25
- package/src/state/assign.ts +10 -10
- package/src/state/diagram-machine.ts +123 -58
- 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/dist/likec4diagram/ui/search/utils.d.ts +0 -3
- package/dist/likec4diagram/ui/search/utils.js +0 -20
- package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
- package/src/likec4diagram/ui/search/state.ts +0 -78
- package/src/likec4diagram/ui/search/utils.ts +0 -20
- /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
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { Box } from '@likec4/styles/jsx';
|
|
3
|
+
import { Notification, ScrollAreaAutosize, Code, Group, Button } from '@mantine/core';
|
|
4
|
+
import { IconX } from '@tabler/icons-react';
|
|
5
|
+
|
|
6
|
+
function ErrorFallback({ error, resetErrorBoundary }) {
|
|
7
|
+
const errorString = error instanceof Error ? error.message : "Unknown error";
|
|
8
|
+
return /* @__PURE__ */ jsx(Box, { pos: "fixed", top: 0, left: 0, w: "100%", p: 0, style: { zIndex: 1e3 }, children: /* @__PURE__ */ jsxs(
|
|
9
|
+
Notification,
|
|
10
|
+
{
|
|
11
|
+
icon: /* @__PURE__ */ jsx(IconX, { style: { width: 16, height: 16 } }),
|
|
12
|
+
styles: {
|
|
13
|
+
icon: {
|
|
14
|
+
alignSelf: "flex-start"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
color: "red",
|
|
18
|
+
title: "Oops, something went wrong",
|
|
19
|
+
p: "xl",
|
|
20
|
+
withCloseButton: false,
|
|
21
|
+
children: [
|
|
22
|
+
/* @__PURE__ */ jsx(ScrollAreaAutosize, { maw: "100%", mah: 400, children: /* @__PURE__ */ jsx(Code, { block: true, children: errorString }) }),
|
|
23
|
+
/* @__PURE__ */ jsx(Group, { gap: "xs", mt: "xl", children: /* @__PURE__ */ jsx(Button, { color: "gray", size: "xs", variant: "light", onClick: () => resetErrorBoundary(), children: "Reset" }) })
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
) });
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { ErrorFallback };
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { Any } from '@likec4/core/types';
|
|
1
2
|
import { PropsWithChildren, RefObject } from 'react';
|
|
2
3
|
import { LikeC4DiagramEventHandlers } from '../LikeC4Diagram.props';
|
|
3
4
|
type RequiredOrNull<T> = {
|
|
4
5
|
[P in keyof T]-?: NonNullable<T[P]> | null;
|
|
5
6
|
};
|
|
6
|
-
type DiagramEventHandlersContextValue = RequiredOrNull<LikeC4DiagramEventHandlers
|
|
7
|
-
handlersRef: RefObject<LikeC4DiagramEventHandlers
|
|
7
|
+
type DiagramEventHandlersContextValue = RequiredOrNull<LikeC4DiagramEventHandlers<Any>> & {
|
|
8
|
+
handlersRef: RefObject<LikeC4DiagramEventHandlers<Any>>;
|
|
8
9
|
};
|
|
9
|
-
export declare function DiagramEventHandlers({ handlers, children, }: PropsWithChildren<{
|
|
10
|
-
handlers: LikeC4DiagramEventHandlers
|
|
10
|
+
export declare function DiagramEventHandlers<A extends Any>({ handlers, children, }: PropsWithChildren<{
|
|
11
|
+
handlers: LikeC4DiagramEventHandlers<A>;
|
|
11
12
|
}>): import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
export declare function useDiagramEventHandlers(): DiagramEventHandlersContextValue;
|
|
13
|
-
export declare function useDiagramEventHandlersRef(): RefObject<LikeC4DiagramEventHandlers
|
|
14
|
+
export declare function useDiagramEventHandlersRef(): RefObject<LikeC4DiagramEventHandlers<Any>>;
|
|
14
15
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ExclusiveUnion } from '@likec4/core';
|
|
1
|
+
import { ExclusiveUnion } from '@likec4/core/types';
|
|
2
2
|
import { PropsWithChildren } from 'react';
|
|
3
|
-
declare const FeatureNames: readonly ["Controls", "ReadOnly", "FocusMode", "NavigateTo", "ElementDetails", "RelationshipDetails", "RelationshipBrowser", "Search", "NavigationButtons", "Notations", "DynamicViewWalkthrough", "EdgeEditing", "ViewTitle", "FitView", "
|
|
3
|
+
declare const FeatureNames: readonly ["Controls", "ReadOnly", "FocusMode", "NavigateTo", "ElementDetails", "RelationshipDetails", "RelationshipBrowser", "Search", "NavigationButtons", "Notations", "DynamicViewWalkthrough", "EdgeEditing", "ViewTitle", "FitView", "Vscode", "ElementTags"];
|
|
4
4
|
export type FeatureName = typeof FeatureNames[number];
|
|
5
5
|
export type EnabledFeatures = {
|
|
6
6
|
[P in `enable${FeatureName}`]: boolean;
|
|
@@ -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 {
|
|
@@ -24,15 +26,20 @@ export type CustomElementNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
24
26
|
* ElementTitle,
|
|
25
27
|
* ElementActions,
|
|
26
28
|
* ElementDetailsButtonWithHandler,
|
|
29
|
+
* IfEnabled,
|
|
27
30
|
* IfNotReadOnly,
|
|
28
31
|
* ElementToolbar,
|
|
29
32
|
* DefaultHandles,
|
|
33
|
+
* ElementTags
|
|
30
34
|
* } from '@likec4/diagram/custom'
|
|
31
35
|
*
|
|
32
36
|
* const CustomElementNode = elementNode(({ nodeProps, nodeModel }) => (
|
|
33
37
|
* <ElementNodeContainer nodeProps={nodeProps}>
|
|
34
38
|
* <ElementShape {...nodeProps} />
|
|
35
39
|
* <ElementTitle {...nodeProps} />
|
|
40
|
+
* <IfEnabled feature="ElementTags">
|
|
41
|
+
* <ElementTags {...nodeProps} />
|
|
42
|
+
* </IfEnabled>
|
|
36
43
|
* <ElementActions
|
|
37
44
|
* {...nodeProps}
|
|
38
45
|
* extraButtons={[
|
|
@@ -53,10 +60,10 @@ export type CustomElementNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
53
60
|
* ))
|
|
54
61
|
* ```
|
|
55
62
|
*/
|
|
56
|
-
export declare const elementNode: (Node: (props: CustomElementNodeProps<
|
|
57
|
-
export type CustomDeploymentNodeProps<M extends
|
|
63
|
+
export declare const elementNode: (Node: (props: CustomElementNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.ElementNodeData, "element">) => ReactNode;
|
|
64
|
+
export type CustomDeploymentNodeProps<M extends Any = Any> = {
|
|
58
65
|
nodeProps: NodeProps<Types.DeploymentElementNodeData, 'deployment'>;
|
|
59
|
-
nodeModel: NodeModel.WithDeploymentElement<M
|
|
66
|
+
nodeModel: NodeModel.WithDeploymentElement<M>;
|
|
60
67
|
};
|
|
61
68
|
/**
|
|
62
69
|
* Node that will be used to render the element from deployment model.
|
|
@@ -67,6 +74,8 @@ export type CustomDeploymentNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
67
74
|
* - `nodeProps`: props from XYFlow
|
|
68
75
|
* - `nodeModel`: {@link NodeModel.WithDeploymentElement}
|
|
69
76
|
*
|
|
77
|
+
* @see [Default implementation](https://github.com/likec4/likec4/blob/main/packages/diagram/src/likec4diagram/custom/nodes/nodes.tsx)
|
|
78
|
+
*
|
|
70
79
|
* @example
|
|
71
80
|
* ```tsx
|
|
72
81
|
* import {
|
|
@@ -104,10 +113,10 @@ export type CustomDeploymentNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
104
113
|
* ))
|
|
105
114
|
* ```
|
|
106
115
|
*/
|
|
107
|
-
export declare const deploymentNode: (Node: (props: CustomDeploymentNodeProps<
|
|
108
|
-
export type CustomCompoundElementNodeProps<M extends
|
|
116
|
+
export declare const deploymentNode: (Node: (props: CustomDeploymentNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.DeploymentElementNodeData, "deployment">) => ReactNode;
|
|
117
|
+
export type CustomCompoundElementNodeProps<M extends Any = Any> = {
|
|
109
118
|
nodeProps: NodeProps<Types.CompoundElementNodeData, 'compound-element'>;
|
|
110
|
-
nodeModel: NodeModel.WithElement<M
|
|
119
|
+
nodeModel: NodeModel.WithElement<M>;
|
|
111
120
|
};
|
|
112
121
|
/**
|
|
113
122
|
* Node that will be used to render the compound element from the model.
|
|
@@ -117,6 +126,8 @@ export type CustomCompoundElementNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
117
126
|
* - `nodeProps`: props from XYFlow
|
|
118
127
|
* - `nodeModel`: LikeC4 {@link NodeModel.WithElement}
|
|
119
128
|
*
|
|
129
|
+
* @see [Default implementation](https://github.com/likec4/likec4/blob/main/packages/diagram/src/likec4diagram/custom/nodes/nodes.tsx)
|
|
130
|
+
*
|
|
120
131
|
* @example
|
|
121
132
|
* ```tsx
|
|
122
133
|
* import {
|
|
@@ -145,10 +156,10 @@ export type CustomCompoundElementNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
145
156
|
* ))
|
|
146
157
|
* ```
|
|
147
158
|
*/
|
|
148
|
-
export declare const compoundElementNode: (Node: (props: CustomCompoundElementNodeProps<
|
|
149
|
-
export type CustomCompoundDeploymentNodeProps<M extends
|
|
159
|
+
export declare const compoundElementNode: (Node: (props: CustomCompoundElementNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.CompoundElementNodeData, "compound-element">) => ReactNode;
|
|
160
|
+
export type CustomCompoundDeploymentNodeProps<M extends Any = Any> = {
|
|
150
161
|
nodeProps: NodeProps<Types.CompoundDeploymentNodeData, 'compound-deployment'>;
|
|
151
|
-
nodeModel: NodeModel.WithDeploymentElement<M
|
|
162
|
+
nodeModel: NodeModel.WithDeploymentElement<M>;
|
|
152
163
|
};
|
|
153
164
|
/**
|
|
154
165
|
* Node that will be used to render the compound from the deployment model.
|
|
@@ -158,6 +169,8 @@ export type CustomCompoundDeploymentNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
158
169
|
* - `nodeProps`: props from XYFlow
|
|
159
170
|
* - `nodeModel`: LikeC4 {@link NodeModel.WithDeploymentElement}
|
|
160
171
|
*
|
|
172
|
+
* @see [Default implementation](https://github.com/likec4/likec4/blob/main/packages/diagram/src/likec4diagram/custom/nodes/nodes.tsx)
|
|
173
|
+
*
|
|
161
174
|
* @example
|
|
162
175
|
* ```tsx
|
|
163
176
|
* import {
|
|
@@ -180,10 +193,10 @@ export type CustomCompoundDeploymentNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
180
193
|
* </CompoundNodeContainer>
|
|
181
194
|
* ```
|
|
182
195
|
*/
|
|
183
|
-
export declare const compoundDeploymentNode: (Node: (props: CustomCompoundDeploymentNodeProps<
|
|
184
|
-
export type CustomViewGroupNodeProps<M extends
|
|
196
|
+
export declare const compoundDeploymentNode: (Node: (props: CustomCompoundDeploymentNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.CompoundDeploymentNodeData, "compound-deployment">) => ReactNode;
|
|
197
|
+
export type CustomViewGroupNodeProps<M extends Any = Any> = {
|
|
185
198
|
nodeProps: NodeProps<Types.ViewGroupNodeData, 'view-group'>;
|
|
186
|
-
nodeModel: NodeModel.IsGroup<M
|
|
199
|
+
nodeModel: NodeModel.IsGroup<M>;
|
|
187
200
|
};
|
|
188
201
|
/**
|
|
189
202
|
* Node that will be used to render the view group from the model.
|
|
@@ -192,6 +205,8 @@ export type CustomViewGroupNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
192
205
|
* - `nodeProps`: props from XYFlow
|
|
193
206
|
* - `nodeModel`: LikeC4 {@link NodeModel.IsGroup}
|
|
194
207
|
*
|
|
208
|
+
* @see [Default implementation](https://github.com/likec4/likec4/blob/main/packages/diagram/src/likec4diagram/custom/nodes/nodes.tsx)
|
|
209
|
+
*
|
|
195
210
|
* @example
|
|
196
211
|
* ```tsx
|
|
197
212
|
* import {
|
|
@@ -208,7 +223,7 @@ export type CustomViewGroupNodeProps<M extends AnyAux = AnyAux> = {
|
|
|
208
223
|
* </CompoundNodeContainer>
|
|
209
224
|
* ```
|
|
210
225
|
*/
|
|
211
|
-
export declare const viewGroupNode: (Node: (props: CustomViewGroupNodeProps<
|
|
226
|
+
export declare const viewGroupNode: (Node: (props: CustomViewGroupNodeProps<Any>) => ReactNode) => (props: NodeProps<Types.ViewGroupNodeData, "view-group">) => ReactNode;
|
|
212
227
|
export interface CustomNodes {
|
|
213
228
|
element?: undefined | ((props: NodeProps<Types.ElementNodeData, 'element'>) => ReactNode);
|
|
214
229
|
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, useLikeC4ViewModel, } 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 };
|