@likec4/diagram 1.21.1 → 1.22.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.
Files changed (120) hide show
  1. package/dist/LikeC4Diagram.js +9 -13
  2. package/dist/base/index.d.ts +0 -1
  3. package/dist/base/primitives/element/styles.css.js +1 -1
  4. package/dist/{base → components}/Link.css.js +3 -3
  5. package/dist/components/SearchControl.css.d.ts +2 -0
  6. package/dist/components/SearchControl.css.js +7 -0
  7. package/dist/components/SearchControl.d.ts +5 -0
  8. package/dist/components/SearchControl.js +17 -0
  9. package/dist/context/DiagramFeatures.d.ts +1 -1
  10. package/dist/context/IconRenderer.d.ts +10 -0
  11. package/dist/context/IconRenderer.js +34 -0
  12. package/dist/hooks/useCurrentViewId.js +8 -0
  13. package/dist/hooks/useDiagram.d.ts +108 -72
  14. package/dist/hooks/useDiagram.js +3 -0
  15. package/dist/likec4diagram/DiagramActor.js +13 -2
  16. package/dist/likec4diagram/DiagramUI.js +0 -2
  17. package/dist/likec4diagram/XYFlow.d.ts +6 -1
  18. package/dist/likec4diagram/XYFlow.js +37 -31
  19. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +2 -1
  20. package/dist/likec4diagram/state/actorContext.d.ts +620 -468
  21. package/dist/likec4diagram/state/assign.js +1 -1
  22. package/dist/likec4diagram/state/machine.d.ts +120 -74
  23. package/dist/likec4diagram/state/machine.js +32 -12
  24. package/dist/likec4diagram/state/syncManualLayoutActor.js +4 -8
  25. package/dist/likec4diagram/ui/controls/Controls.js +65 -48
  26. package/dist/likec4diagram/ui/controls/NavigationButtons.js +44 -69
  27. package/dist/likec4diagram/ui/controls/ToggleReadonly.d.ts +1 -0
  28. package/dist/likec4diagram/ui/controls/ToggleReadonly.js +29 -0
  29. package/dist/likec4diagram/ui/controls/_shared.js +1 -1
  30. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +1 -1
  31. package/dist/likec4diagram/ui/search/ElementsColumn.css.d.ts +15 -0
  32. package/dist/likec4diagram/ui/search/ElementsColumn.css.js +30 -0
  33. package/dist/likec4diagram/ui/search/ElementsColumn.d.ts +1 -0
  34. package/dist/likec4diagram/ui/search/ElementsColumn.js +243 -0
  35. package/dist/likec4diagram/ui/search/LikeC4Search.css.d.ts +8 -0
  36. package/dist/likec4diagram/ui/search/LikeC4Search.css.js +20 -0
  37. package/dist/likec4diagram/ui/search/LikeC4Search.d.ts +1 -0
  38. package/dist/likec4diagram/ui/search/LikeC4Search.js +265 -0
  39. package/dist/likec4diagram/ui/search/SearchInput.d.ts +1 -0
  40. package/dist/likec4diagram/ui/search/SearchInput.js +196 -0
  41. package/dist/likec4diagram/ui/search/ViewsColum.d.ts +9 -0
  42. package/dist/likec4diagram/ui/search/ViewsColum.js +130 -0
  43. package/dist/likec4diagram/ui/search/ViewsColumn.css.d.ts +5 -0
  44. package/dist/likec4diagram/ui/search/ViewsColumn.css.js +12 -0
  45. package/dist/likec4diagram/ui/search/_shared.css.d.ts +16 -0
  46. package/dist/likec4diagram/ui/search/_shared.css.js +5 -0
  47. package/dist/likec4diagram/ui/search/state.d.ts +19 -0
  48. package/dist/likec4diagram/ui/search/state.js +72 -0
  49. package/dist/likec4diagram/ui/search/utils.d.ts +3 -0
  50. package/dist/likec4diagram/ui/search/utils.js +23 -0
  51. package/dist/likec4diagram/useLayoutConstraints.js +4 -5
  52. package/dist/likec4model/useLikeC4ElementsTree.d.ts +1 -0
  53. package/dist/likec4model/useLikeC4ElementsTree.js +1 -0
  54. package/dist/overlays/Overlays.js +9 -9
  55. package/dist/overlays/element-details/ElementDetailsCard.js +20 -13
  56. package/dist/overlays/overlay/Overlay.d.ts +6 -2
  57. package/dist/overlays/overlay/Overlay.js +18 -29
  58. package/dist/overlays/relationship-details/SelectEdge.js +1 -3
  59. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +6 -5
  60. package/dist/overlays/relationships-browser/SelectElement.js +10 -6
  61. package/dist/overlays/relationships-browser/actor.d.ts +2 -2
  62. package/dist/overlays/relationships-browser/actor.js +8 -8
  63. package/dist/overlays/relationships-browser/custom/nodeTypes.js +2 -2
  64. package/dist/style.css +1 -1
  65. package/package.json +13 -13
  66. package/src/LikeC4Diagram.tsx +0 -1
  67. package/src/base/index.ts +0 -2
  68. package/src/base/primitives/element/styles.css.ts +2 -2
  69. package/src/{base → components}/Link.css.ts +3 -3
  70. package/src/components/SearchControl.css.ts +69 -0
  71. package/src/components/SearchControl.tsx +33 -0
  72. package/src/context/DiagramFeatures.tsx +1 -1
  73. package/src/context/IconRenderer.tsx +54 -1
  74. package/src/globals.css.ts +0 -2
  75. package/src/hooks/useDiagram.ts +5 -0
  76. package/src/likec4diagram/DiagramActor.tsx +15 -2
  77. package/src/likec4diagram/DiagramUI.tsx +0 -4
  78. package/src/likec4diagram/XYFlow.tsx +39 -31
  79. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +2 -1
  80. package/src/likec4diagram/state/assign.ts +1 -1
  81. package/src/likec4diagram/state/machine.ts +40 -14
  82. package/src/likec4diagram/state/syncManualLayoutActor.ts +6 -9
  83. package/src/likec4diagram/ui/controls/Controls.tsx +37 -25
  84. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +36 -58
  85. package/src/likec4diagram/ui/controls/ToggleReadonly.tsx +31 -0
  86. package/src/likec4diagram/ui/controls/styles.css.ts +3 -1
  87. package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +1 -1
  88. package/src/likec4diagram/ui/search/ElementsColumn.css.ts +119 -0
  89. package/src/likec4diagram/ui/search/ElementsColumn.tsx +291 -0
  90. package/src/likec4diagram/ui/search/LikeC4Search.css.ts +117 -0
  91. package/src/likec4diagram/ui/search/LikeC4Search.tsx +312 -0
  92. package/src/likec4diagram/ui/search/SearchInput.tsx +235 -0
  93. package/src/likec4diagram/ui/search/ViewsColum.tsx +158 -0
  94. package/src/likec4diagram/ui/search/ViewsColumn.css.ts +37 -0
  95. package/src/likec4diagram/ui/search/_shared.css.ts +104 -0
  96. package/src/likec4diagram/ui/search/state.ts +76 -0
  97. package/src/likec4diagram/ui/search/utils.ts +20 -0
  98. package/src/likec4diagram/useLayoutConstraints.ts +4 -5
  99. package/src/likec4model/useLikeC4ElementsTree.ts +4 -4
  100. package/src/overlays/Overlays.tsx +31 -25
  101. package/src/overlays/element-details/ElementDetailsCard.css.ts +4 -4
  102. package/src/overlays/element-details/ElementDetailsCard.tsx +245 -240
  103. package/src/overlays/overlay/Overlay.css.ts +10 -9
  104. package/src/overlays/overlay/Overlay.tsx +38 -26
  105. package/src/overlays/relationship-details/SelectEdge.css.ts +1 -0
  106. package/src/overlays/relationship-details/SelectEdge.tsx +2 -4
  107. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +10 -5
  108. package/src/overlays/relationships-browser/SelectElement.tsx +88 -82
  109. package/src/overlays/relationships-browser/actor.ts +10 -10
  110. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +2 -2
  111. package/dist/LikeC4Search.css.d.ts +0 -1
  112. package/dist/LikeC4Search.css.js +0 -5
  113. package/dist/LikeC4Search.d.ts +0 -2
  114. package/dist/LikeC4Search.js +0 -88
  115. package/src/LikeC4Search.css.ts +0 -12
  116. package/src/LikeC4Search.tsx +0 -91
  117. /package/dist/{base → components}/Link.css.d.ts +0 -0
  118. /package/dist/{base → components}/Link.d.ts +0 -0
  119. /package/dist/{base → components}/Link.js +0 -0
  120. /package/src/{base → components}/Link.tsx +0 -0
@@ -3,10 +3,12 @@ import { nonNullable } from "@likec4/core";
3
3
  import { useCallbackRef } from "@mantine/hooks";
4
4
  import clsx from "clsx";
5
5
  import { shallowEqual } from "fast-equals";
6
+ import { memo } from "react";
6
7
  import { BaseXYFlow } from "../base/BaseXYFlow.js";
7
8
  import { useDiagram } from "../hooks/useDiagram.js";
8
9
  import { useDiagramContext } from "../hooks/useDiagramContext.js";
9
10
  import { edgeTypes } from "./custom/index.js";
11
+ import { DiagramUI } from "./DiagramUI.js";
10
12
  import { useLayoutConstraints } from "./useLayoutConstraints.js";
11
13
  import { useDiagramEventHandlers } from "../context/DiagramEventHandlers.js";
12
14
  import { nodeTypes } from "./custom/nodes/nodeTypes.js";
@@ -18,10 +20,17 @@ const selectXYProps = (ctx) => ({
18
20
  zoomable: ctx.zoomable,
19
21
  fitViewPadding: ctx.fitViewPadding,
20
22
  enableFitView: ctx.features.enableFitView,
21
- enableReadOnly: ctx.features.enableReadOnly
23
+ enableReadOnly: ctx.features.enableReadOnly,
24
+ ...!ctx.features.enableFitView && {
25
+ viewport: {
26
+ x: -Math.min(ctx.view.bounds.x, 0),
27
+ y: -Math.min(ctx.view.bounds.y, 0),
28
+ zoom: 1
29
+ }
30
+ }
22
31
  });
23
- const equalsXYProps = (a, b) => a.initialized === b.initialized && a.pannable === b.pannable && a.zoomable === b.zoomable && a.fitViewPadding === b.fitViewPadding && a.enableFitView === b.enableFitView && a.enableReadOnly === b.enableReadOnly && shallowEqual(a.nodes, b.nodes) && shallowEqual(a.edges, b.edges);
24
- const LikeC4DiagramXYFlow = ({ background, ...rest }) => {
32
+ const equalsXYProps = (a, b) => a.initialized === b.initialized && a.pannable === b.pannable && a.zoomable === b.zoomable && a.fitViewPadding === b.fitViewPadding && a.enableFitView === b.enableFitView && a.enableReadOnly === b.enableReadOnly && shallowEqual(a.nodes, b.nodes) && shallowEqual(a.edges, b.edges) && shallowEqual(a.viewport, b.viewport);
33
+ const LikeC4DiagramXYFlow = memo(({ background, nodesDraggable, nodesSelectable }) => {
25
34
  const diagram = useDiagram();
26
35
  const {
27
36
  initialized,
@@ -54,10 +63,10 @@ const LikeC4DiagramXYFlow = ({ background, ...rest }) => {
54
63
  nodeTypes,
55
64
  edgeTypes,
56
65
  onNodesChange: useCallbackRef((changes) => {
57
- diagram.send({ type: "xyflow.applyNodeChages", changes });
66
+ diagram.send({ type: "xyflow.applyNodeChanges", changes });
58
67
  }),
59
68
  onEdgesChange: useCallbackRef((changes) => {
60
- diagram.send({ type: "xyflow.applyEdgeChages", changes });
69
+ diagram.send({ type: "xyflow.applyEdgeChanges", changes });
61
70
  }),
62
71
  background: initialized ? background : "transparent",
63
72
  fitView: false,
@@ -78,6 +87,7 @@ const LikeC4DiagramXYFlow = ({ background, ...rest }) => {
78
87
  }),
79
88
  onDoubleClick: useCallbackRef((e) => {
80
89
  e.stopPropagation();
90
+ e.preventDefault();
81
91
  diagram.send({ type: "xyflow.paneDblClick" });
82
92
  onCanvasDblClick == null ? void 0 : onCanvasDblClick(e);
83
93
  }),
@@ -87,38 +97,34 @@ const LikeC4DiagramXYFlow = ({ background, ...rest }) => {
87
97
  onInit: useCallbackRef((instance) => {
88
98
  diagram.send({ type: "xyflow.init", instance });
89
99
  }),
90
- ...onNodeContextMenu && {
91
- onNodeContextMenu: useCallbackRef((event, node) => {
92
- const diagramNode = nonNullable(
93
- diagram.findDiagramNode(node.id),
94
- `diagramNode ${node.id} not found`
95
- );
96
- onNodeContextMenu(diagramNode, event);
97
- })
98
- },
99
- ...onEdgeContextMenu && {
100
- onEdgeContextMenu: useCallbackRef((event, edge) => {
101
- const diagramEdge = nonNullable(
102
- diagram.findDiagramEdge(edge.id),
103
- `diagramEdge ${edge.id} not found`
104
- );
105
- onEdgeContextMenu(diagramEdge, event);
106
- })
107
- },
108
- ...onCanvasContextMenu && {
109
- onPaneContextMenu: useCallbackRef((event) => {
110
- onCanvasContextMenu(event);
111
- })
112
- },
100
+ onNodeContextMenu: useCallbackRef((event, node) => {
101
+ const diagramNode = nonNullable(
102
+ diagram.findDiagramNode(node.id),
103
+ `diagramNode ${node.id} not found`
104
+ );
105
+ onNodeContextMenu == null ? void 0 : onNodeContextMenu(diagramNode, event);
106
+ }),
107
+ onEdgeContextMenu: useCallbackRef((event, edge) => {
108
+ const diagramEdge = nonNullable(
109
+ diagram.findDiagramEdge(edge.id),
110
+ `diagramEdge ${edge.id} not found`
111
+ );
112
+ onEdgeContextMenu == null ? void 0 : onEdgeContextMenu(diagramEdge, event);
113
+ }),
114
+ onPaneContextMenu: useCallbackRef((event) => {
115
+ onCanvasContextMenu == null ? void 0 : onCanvasContextMenu(event);
116
+ }),
113
117
  ...enableFitView && {
114
118
  onViewportResize
115
119
  },
116
- ...notReadOnly && rest.nodesDraggable && layoutConstraints,
120
+ nodesDraggable,
121
+ nodesSelectable,
122
+ ...notReadOnly && nodesDraggable && layoutConstraints,
117
123
  ...props,
118
- ...rest
124
+ children: /* @__PURE__ */ jsx(DiagramUI, {})
119
125
  }
120
126
  );
121
- };
127
+ }, shallowEqual);
122
128
  export {
123
129
  LikeC4DiagramXYFlow
124
130
  };
@@ -5,7 +5,7 @@ import { IconInfoCircle, IconArrowRight, IconZoomScan, IconFileSymlink } from "@
5
5
  import clsx from "clsx";
6
6
  import { useCallback, Fragment as Fragment$1, forwardRef } from "react";
7
7
  import { pipe, map, filter, isTruthy, partition } from "remeda";
8
- import { Link } from "../../../base/Link.js";
8
+ import { Link } from "../../../components/Link.js";
9
9
  import { useDiagram } from "../../../hooks/useDiagram.js";
10
10
  import { useDiagramContext } from "../../../hooks/useDiagramContext.js";
11
11
  import { DiagramContext } from "../../state/machine.js";
@@ -89,6 +89,7 @@ function RelationshipsDropdownMenu({
89
89
  closeOnClickOutside: true,
90
90
  clickOutsideEvents: ["pointerdown", "mousedown", "click"],
91
91
  closeOnEscape: true,
92
+ keepMounted: false,
92
93
  closeOnItemClick: false,
93
94
  disabled,
94
95
  position: "bottom-start",