@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.
Files changed (264) hide show
  1. package/bundle/{chunk-BBzMXzCg.js → chunk-BvTQaUYl.js} +1675 -1207
  2. package/bundle/custom.js +50 -47
  3. package/bundle/index.js +2482 -2438
  4. package/dist/LikeC4CustomColors.d.ts +2 -7
  5. package/dist/LikeC4CustomColors.js +17 -6
  6. package/dist/LikeC4Diagram.d.ts +3 -2
  7. package/dist/LikeC4Diagram.js +10 -14
  8. package/dist/LikeC4Diagram.props.d.ts +28 -22
  9. package/dist/LikeC4ModelProvider.d.ts +5 -4
  10. package/dist/StaticLikeC4Diagram.d.ts +3 -2
  11. package/dist/StaticLikeC4Diagram.js +2 -2
  12. package/dist/base/BaseXYFlow.js +5 -5
  13. package/dist/base/const.d.ts +1 -1
  14. package/dist/base/const.js +1 -1
  15. package/dist/base/index.d.ts +2 -1
  16. package/dist/base/primitives/compound/CompoundActionButton.js +2 -1
  17. package/dist/base/primitives/compound/CompoundDetailsButton.js +2 -1
  18. package/dist/base/primitives/compound/CompoundTitle.d.ts +1 -1
  19. package/dist/base/primitives/compound/CompoundTitle.js +2 -1
  20. package/dist/base/primitives/edge/EdgeContainer.d.ts +1 -1
  21. package/dist/base/primitives/edge/EdgeLabel.css.js +1 -0
  22. package/dist/base/primitives/edge/EdgeLabel.d.ts +3 -3
  23. package/dist/base/primitives/edge/EdgeLabel.js +6 -4
  24. package/dist/base/primitives/edge/EdgeLabelContainer.d.ts +1 -1
  25. package/dist/base/primitives/edge/EdgeMarkers.d.ts +1 -1
  26. package/dist/base/primitives/edge/EdgePath.d.ts +1 -1
  27. package/dist/base/primitives/element/ElementActionButtons.js +10 -9
  28. package/dist/base/primitives/element/ElementDetailsButton.js +2 -1
  29. package/dist/base/primitives/element/ElementShape.d.ts +1 -1
  30. package/dist/base/primitives/element/ElementTags.d.ts +14 -0
  31. package/dist/base/primitives/element/ElementTags.js +176 -0
  32. package/dist/base/primitives/element/ElementTitle.d.ts +5 -4
  33. package/dist/base/primitives/element/ElementTitle.js +6 -6
  34. package/dist/base/primitives/index.d.ts +1 -0
  35. package/dist/base/types.Base.d.ts +54 -0
  36. package/dist/base/types.Base.js +48 -0
  37. package/dist/base/types.d.ts +2 -52
  38. package/dist/bundle/LikeC4View.d.ts +2 -1
  39. package/dist/bundle/LikeC4View.js +8 -6
  40. package/dist/bundle/LikeC4View.props.d.ts +15 -4
  41. package/dist/bundle/ReactLikeC4.d.ts +4 -7
  42. package/dist/bundle/ReactLikeC4.js +3 -2
  43. package/dist/bundle/index.js +1 -1
  44. package/dist/components/ErrorFallback.d.ts +2 -0
  45. package/dist/components/ErrorFallback.js +29 -0
  46. package/dist/context/DiagramEventHandlers.d.ts +6 -5
  47. package/dist/context/DiagramFeatures.d.ts +2 -2
  48. package/dist/context/DiagramFeatures.js +3 -31
  49. package/dist/context/EnsureMantine.js +1 -1
  50. package/dist/context/IconRenderer.js +1 -4
  51. package/dist/context/RootContainer.js +5 -1
  52. package/dist/context/TagStylesContext.d.ts +7 -0
  53. package/dist/context/TagStylesContext.js +85 -0
  54. package/dist/custom/components.d.ts +1 -1
  55. package/dist/custom/customNodes.d.ts +27 -17
  56. package/dist/custom/hooks.d.ts +1 -1
  57. package/dist/hooks/index.d.ts +1 -1
  58. package/dist/hooks/useDiagram.d.ts +73 -38
  59. package/dist/hooks/useDiagram.js +7 -3
  60. package/dist/hooks/useMantinePortalProps.d.ts +2 -2
  61. package/dist/hooks/useSearchActor.d.ts +2 -0
  62. package/dist/hooks/useSearchActor.js +10 -0
  63. package/dist/hooks/useUpdateEffect.js +3 -0
  64. package/dist/hooks/useXYFlow.d.ts +39 -37
  65. package/dist/hooks/useXYFlow.js +5 -1
  66. package/dist/index.js +1 -1
  67. package/dist/likec4diagram/DiagramUI.js +7 -2
  68. package/dist/likec4diagram/DiagramXYFlow.d.ts +4 -3
  69. package/dist/likec4diagram/DiagramXYFlow.js +104 -107
  70. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +7 -6
  71. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +8 -0
  72. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +7 -5
  73. package/dist/likec4diagram/custom/index.d.ts +7 -6
  74. package/dist/likec4diagram/custom/nodes/nodes.js +39 -26
  75. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +3 -3
  76. package/dist/likec4diagram/types.d.ts +5 -5
  77. package/dist/likec4diagram/ui/controls/Controls.js +12 -4
  78. package/dist/likec4diagram/ui/notation/NotationPanel.js +1 -1
  79. package/dist/likec4diagram/useViewToNodesEdges.d.ts +5 -3
  80. package/dist/likec4diagram/useViewToNodesEdges.js +20 -30
  81. package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
  82. package/dist/likec4model/useLikeC4ElementsTree.js +1 -1
  83. package/dist/likec4model/useLikeC4Model.d.ts +22 -10
  84. package/dist/likec4model/useLikeC4Model.js +11 -7
  85. package/dist/overlays/Overlays.js +4 -27
  86. package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
  87. package/dist/overlays/element-details/ElementDetailsCard.js +19 -12
  88. package/dist/overlays/element-details/TabPanelDeployments.d.ts +1 -1
  89. package/dist/overlays/element-details/TabPanelDeployments.js +1 -1
  90. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  91. package/dist/overlays/element-details/TabPanelStructure.d.ts +1 -1
  92. package/dist/overlays/element-details/actor.d.ts +288 -286
  93. package/dist/overlays/overlay/Overlay.css.d.ts +57 -2
  94. package/dist/overlays/overlay/Overlay.css.js +76 -39
  95. package/dist/overlays/overlay/Overlay.d.ts +12 -0
  96. package/dist/overlays/overlay/Overlay.js +36 -25
  97. package/dist/overlays/overlaysActor.d.ts +1 -1
  98. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +3 -2
  99. package/dist/overlays/relationship-details/RelationshipDetails.js +3 -3
  100. package/dist/overlays/relationship-details/_types.d.ts +2 -2
  101. package/dist/overlays/relationship-details/actor.js +7 -7
  102. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +3 -2
  103. package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -0
  104. package/dist/overlays/relationship-details/hooks.d.ts +10 -9
  105. package/dist/overlays/relationship-details/layout-to-xyflow.js +1 -0
  106. package/dist/overlays/relationship-details/layout.js +3 -1
  107. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +3 -2
  108. package/dist/overlays/relationships-browser/SelectElement.js +1 -1
  109. package/dist/overlays/relationships-browser/_types.d.ts +2 -2
  110. package/dist/overlays/relationships-browser/actor.d.ts +1 -1
  111. package/dist/overlays/relationships-browser/actor.js +7 -7
  112. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +3 -2
  113. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +8 -5
  114. package/dist/overlays/relationships-browser/custom/nodeTypes.js +4 -0
  115. package/dist/overlays/relationships-browser/layout.d.ts +2 -2
  116. package/dist/overlays/relationships-browser/layout.js +10 -6
  117. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +4 -3
  118. package/dist/search/Search.d.ts +5 -0
  119. package/dist/search/Search.js +192 -0
  120. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.js +0 -1
  121. package/dist/search/components/ElementsColumn.d.ts +2 -0
  122. package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.js +21 -19
  123. package/dist/search/components/PickView.d.ts +4 -0
  124. package/dist/search/components/PickView.js +135 -0
  125. package/dist/search/components/SearchByTags.d.ts +1 -0
  126. package/dist/search/components/SearchByTags.js +116 -0
  127. package/dist/search/components/SearchInput.d.ts +2 -0
  128. package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +53 -34
  129. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
  130. package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +14 -13
  131. package/dist/{likec4diagram/ui/search → search/components}/_shared.css.js +26 -35
  132. package/dist/{likec4diagram/ui/search/LikeC4Search.css.d.ts → search/components/styles.css.d.ts} +0 -2
  133. package/dist/search/components/styles.css.js +60 -0
  134. package/dist/{likec4diagram/ui/search → search/components}/utils.d.ts +1 -0
  135. package/dist/{likec4diagram/ui/search → search/components}/utils.js +7 -1
  136. package/dist/search/hooks.d.ts +16 -0
  137. package/dist/search/hooks.js +35 -0
  138. package/dist/search/searchActor.d.ts +90 -0
  139. package/dist/search/searchActor.js +75 -0
  140. package/dist/state/DiagramActorProvider.d.ts +9 -7
  141. package/dist/state/DiagramActorProvider.js +24 -18
  142. package/dist/state/assign.d.ts +0 -1
  143. package/dist/state/assign.js +9 -19
  144. package/dist/state/diagram-machine.d.ts +430 -176
  145. package/dist/state/diagram-machine.js +119 -54
  146. package/dist/state/syncManualLayoutActor.d.ts +2 -2
  147. package/dist/state/types.d.ts +2 -0
  148. package/dist/state/utils.d.ts +2 -0
  149. package/dist/state/utils.js +3 -0
  150. package/dist/styles-min.css +1 -1
  151. package/dist/styles-xyflow.css +1 -1
  152. package/dist/styles.css +1 -1
  153. package/dist/styles.css2.js +1 -1
  154. package/package.json +18 -18
  155. package/panda.buildinfo.json +171 -148
  156. package/src/LikeC4CustomColors.tsx +21 -6
  157. package/src/LikeC4Diagram.props.ts +35 -30
  158. package/src/LikeC4Diagram.tsx +19 -20
  159. package/src/LikeC4ModelProvider.tsx +6 -5
  160. package/src/StaticLikeC4Diagram.tsx +8 -6
  161. package/src/base/const.ts +1 -1
  162. package/src/base/index.ts +2 -1
  163. package/src/base/primitives/compound/CompoundActionButton.tsx +2 -1
  164. package/src/base/primitives/compound/CompoundDetailsButton.tsx +2 -1
  165. package/src/base/primitives/compound/CompoundTitle.tsx +3 -2
  166. package/src/base/primitives/edge/EdgeContainer.tsx +2 -1
  167. package/src/base/primitives/edge/EdgeLabel.css.ts +1 -0
  168. package/src/base/primitives/edge/EdgeLabel.tsx +20 -15
  169. package/src/base/primitives/edge/EdgeLabelContainer.tsx +1 -1
  170. package/src/base/primitives/edge/EdgeMarkers.tsx +2 -1
  171. package/src/base/primitives/edge/EdgePath.tsx +1 -1
  172. package/src/base/primitives/element/ElementActionButtons.tsx +11 -10
  173. package/src/base/primitives/element/ElementDetailsButton.tsx +2 -1
  174. package/src/base/primitives/element/ElementShape.tsx +2 -1
  175. package/src/base/primitives/element/ElementTags.tsx +182 -0
  176. package/src/base/primitives/element/ElementTitle.tsx +21 -15
  177. package/src/base/primitives/index.ts +1 -0
  178. package/src/base/types.Base.ts +104 -0
  179. package/src/base/types.ts +2 -99
  180. package/src/bundle/LikeC4View.props.ts +17 -4
  181. package/src/bundle/LikeC4View.tsx +17 -19
  182. package/src/bundle/ReactLikeC4.tsx +14 -26
  183. package/src/components/ErrorFallback.tsx +30 -0
  184. package/src/context/DiagramEventHandlers.tsx +5 -4
  185. package/src/context/DiagramFeatures.tsx +3 -22
  186. package/src/context/EnsureMantine.tsx +1 -1
  187. package/src/context/IconRenderer.tsx +1 -4
  188. package/src/context/RootContainer.tsx +9 -3
  189. package/src/context/TagStylesContext.tsx +96 -0
  190. package/src/custom/components.ts +2 -0
  191. package/src/custom/customNodes.tsx +24 -14
  192. package/src/custom/hooks.ts +1 -0
  193. package/src/hooks/index.ts +1 -1
  194. package/src/hooks/useCurrentViewId.ts +1 -4
  195. package/src/hooks/useDiagram.ts +104 -12
  196. package/src/hooks/useMantinePortalProps.ts +10 -1
  197. package/src/hooks/useSearchActor.ts +11 -0
  198. package/src/hooks/useUpdateEffect.ts +7 -4
  199. package/src/hooks/useXYFlow.ts +5 -0
  200. package/src/likec4diagram/DiagramUI.tsx +5 -0
  201. package/src/likec4diagram/DiagramXYFlow.tsx +115 -118
  202. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +9 -0
  203. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +10 -9
  204. package/src/likec4diagram/custom/nodes/nodes.tsx +45 -43
  205. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +11 -3
  206. package/src/likec4diagram/types.ts +5 -3
  207. package/src/likec4diagram/ui/controls/Controls.tsx +11 -4
  208. package/src/likec4diagram/ui/notation/NotationPanel.tsx +2 -2
  209. package/src/likec4diagram/useViewToNodesEdges.ts +34 -36
  210. package/src/likec4model/LikeC4ModelContext.ts +2 -2
  211. package/src/likec4model/useLikeC4ElementsTree.ts +1 -1
  212. package/src/likec4model/useLikeC4Model.ts +18 -16
  213. package/src/overlays/Overlays.tsx +5 -32
  214. package/src/overlays/element-details/ElementDetailsCard.tsx +25 -18
  215. package/src/overlays/element-details/TabPanelDeployments.tsx +3 -2
  216. package/src/overlays/element-details/TabPanelRelationships.tsx +2 -1
  217. package/src/overlays/element-details/TabPanelStructure.tsx +1 -1
  218. package/src/overlays/element-details/actor.ts +2 -2
  219. package/src/overlays/overlay/Overlay.css.ts +75 -38
  220. package/src/overlays/overlay/Overlay.tsx +43 -26
  221. package/src/overlays/overlaysActor.ts +1 -1
  222. package/src/overlays/relationship-details/RelationshipDetails.tsx +4 -4
  223. package/src/overlays/relationship-details/_types.ts +2 -1
  224. package/src/overlays/relationship-details/custom/nodeTypes.tsx +4 -0
  225. package/src/overlays/relationship-details/layout-to-xyflow.ts +1 -0
  226. package/src/overlays/relationship-details/layout.ts +3 -1
  227. package/src/overlays/relationships-browser/SelectElement.tsx +1 -1
  228. package/src/overlays/relationships-browser/_types.ts +2 -1
  229. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +4 -0
  230. package/src/overlays/relationships-browser/layout.ts +12 -7
  231. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -4
  232. package/src/search/Search.tsx +237 -0
  233. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
  234. package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +24 -22
  235. package/src/search/components/PickView.tsx +140 -0
  236. package/src/search/components/SearchByTags.tsx +109 -0
  237. package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +63 -36
  238. package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +17 -18
  239. package/src/{likec4diagram/ui/search → search/components}/_shared.css.ts +26 -37
  240. package/src/{likec4diagram/ui/search/LikeC4Search.css.ts → search/components/styles.css.ts} +9 -36
  241. package/src/{likec4diagram/ui/search → search/components}/utils.ts +7 -0
  242. package/src/search/hooks.ts +41 -0
  243. package/src/search/searchActor.ts +99 -0
  244. package/src/state/DiagramActorProvider.tsx +36 -25
  245. package/src/state/assign.ts +10 -10
  246. package/src/state/diagram-machine.ts +115 -52
  247. package/src/state/syncManualLayoutActor.ts +1 -1
  248. package/src/state/types.ts +2 -0
  249. package/src/state/utils.ts +4 -0
  250. package/dist/base/types.js +0 -54
  251. package/dist/likec4diagram/ui/search/ElementsColumn.d.ts +0 -1
  252. package/dist/likec4diagram/ui/search/LikeC4Search.css.js +0 -87
  253. package/dist/likec4diagram/ui/search/LikeC4Search.d.ts +0 -2
  254. package/dist/likec4diagram/ui/search/LikeC4Search.js +0 -267
  255. package/dist/likec4diagram/ui/search/SearchInput.d.ts +0 -1
  256. package/dist/likec4diagram/ui/search/state.d.ts +0 -19
  257. package/dist/likec4diagram/ui/search/state.js +0 -63
  258. package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
  259. package/src/likec4diagram/ui/search/state.ts +0 -78
  260. /package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.d.ts +0 -0
  261. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.d.ts +0 -0
  262. /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.js +0 -0
  263. /package/dist/{likec4diagram/ui/search → search/components}/_shared.css.d.ts +0 -0
  264. /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, IfNotReadOnly, useEnabledFeatures };
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
  }
@@ -56,10 +56,7 @@ function IconOrShapeRenderer({
56
56
  element,
57
57
  className
58
58
  }) {
59
- const icon = IconRenderer({
60
- element,
61
- className
62
- });
59
+ const icon = /* @__PURE__ */ jsx(IconRenderer, { element, className });
63
60
  if (icon) {
64
61
  return icon;
65
62
  }
@@ -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 { AnyAux, NodeModel } from '@likec4/core/model';
2
- import { DiagramView } from '@likec4/core/types';
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 AnyAux = AnyAux> = {
6
+ export type CustomElementNodeProps<M extends Any = Any> = {
7
7
  nodeProps: NodeProps<Types.ElementNodeData, 'element'>;
8
- nodeModel: NodeModel.WithElement<M, DiagramView>;
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<AnyAux>) => ReactNode) => (props: NodeProps<Types.ElementNodeData, "element">) => ReactNode;
57
- export type CustomDeploymentNodeProps<M extends AnyAux = AnyAux> = {
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, DiagramView>;
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<AnyAux>) => ReactNode) => (props: NodeProps<Types.DeploymentElementNodeData, "deployment">) => ReactNode;
108
- export type CustomCompoundElementNodeProps<M extends AnyAux = AnyAux> = {
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, DiagramView>;
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<AnyAux>) => ReactNode) => (props: NodeProps<Types.CompoundElementNodeData, "compound-element">) => ReactNode;
149
- export type CustomCompoundDeploymentNodeProps<M extends AnyAux = AnyAux> = {
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, DiagramView>;
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<AnyAux>) => ReactNode) => (props: NodeProps<Types.CompoundDeploymentNodeData, "compound-deployment">) => ReactNode;
184
- export type CustomViewGroupNodeProps<M extends AnyAux = AnyAux> = {
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, DiagramView>;
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<AnyAux>) => ReactNode) => (props: NodeProps<Types.ViewGroupNodeData, "view-group">) => ReactNode;
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);
@@ -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';
@@ -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, EdgeId, ElementNotation, Fqn, NodeId, ViewId } from '@likec4/core';
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
- * Diagram API
13
- * Mostly for internal use
14
- */
15
- export declare function useDiagram(): {
16
- actor: DiagramActorRef;
17
- send: (event: DiagramActorEvent) => void;
18
- navigateTo: (viewId: ViewId, fromNode?: NodeId) => void;
19
- navigate: (direction: "back" | "forward") => void;
20
- fitDiagram: (duration?: number) => void;
21
- openRelationshipsBrowser: (fqn: Fqn) => void;
22
- openSource: (params: OpenSourceParams) => void;
23
- openElementDetails: (fqn: Fqn, fromNode?: NodeId) => void;
24
- openRelationshipDetails: (...params: [edgeId: EdgeId] | [source: Fqn, target: Fqn]) => void;
25
- updateNodeData: (nodeId: NodeId, data: PartialDeep<Types.NodeData>) => void;
26
- updateEdgeData: (edgeId: EdgeId, data: PartialDeep<Types.EdgeData>) => void;
27
- scheduleSaveManualLayout: () => void;
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: () => boolean;
32
- align: (mode: AlignmentMode) => void;
33
- resetEdgeControlPoints: () => void;
34
- focusNode: (nodeId: NodeId) => void;
55
+ cancelSaveManualLayout(): boolean;
35
56
  /**
36
- * @warning Do not use in render phase
57
+ * Align nodes
37
58
  */
38
- readonly currentView: DiagramView;
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: () => DiagramActorSnapshot;
71
+ getSnapshot(): DiagramActorSnapshot;
43
72
  /**
44
73
  * @warning Do not use in render phase
45
74
  */
46
- getContext: () => DiagramContext;
75
+ getContext(): DiagramContext;
47
76
  /**
48
77
  * @warning Do not use in render phase
49
78
  */
50
- findDiagramNode: (xynodeId: string) => DiagramNode | null;
79
+ findDiagramNode(xynodeId: string): DiagramNode | null;
51
80
  /**
52
81
  * @warning Do not use in render phase
53
82
  */
54
- findDiagramEdge: (xyedgeId: string) => DiagramEdge | null;
55
- startWalkthrough: () => void;
56
- walkthroughStep: (direction?: "next" | "previous") => void;
57
- stopWalkthrough: () => void;
58
- toggleFeature: (feature: FeatureName, forceValue?: boolean) => void;
59
- highlightNotation: (notation: ElementNotation, kind?: string) => void;
60
- unhighlightNotation: () => void;
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;
@@ -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
- return useSelector(actorRef, useCallbackRef((s) => selector(s.context)), compare);
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 };
@@ -2,8 +2,8 @@ export declare function useMantinePortalProps(): {
2
2
  portalProps: {
3
3
  target: HTMLDivElement;
4
4
  };
5
- withinPortal: boolean;
5
+ withinPortal: true;
6
6
  } | {
7
- withinPortal: boolean;
7
+ withinPortal: false;
8
8
  portalProps?: never;
9
9
  };
@@ -0,0 +1,2 @@
1
+ import { SearchActorRef } from '../search/searchActor';
2
+ export declare function useSearchActorRef(): SearchActorRef | null;
@@ -0,0 +1,10 @@
1
+ import { useDiagramActorSnapshot } from './useDiagram.js';
2
+
3
+ const select = (s) => {
4
+ return s.children.search ?? null;
5
+ };
6
+ function useSearchActorRef() {
7
+ return useDiagramActorSnapshot(select, Object.is);
8
+ }
9
+
10
+ export { useSearchActorRef };
@@ -11,6 +11,9 @@ const depsShallowEqual = (d1, d2) => {
11
11
  return false;
12
12
  }
13
13
  for (const [i, element] of d1.entries()) {
14
+ if (element === d2[i]) {
15
+ continue;
16
+ }
14
17
  if (!shallowEqual(element, d2[i])) {
15
18
  return false;
16
19
  }