@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
@@ -1,6 +1,7 @@
1
1
  import { RelationshipsBrowserActorRef } from './actor';
2
2
  import { FunctionComponent, CSSProperties, ReactNode } from 'react';
3
3
  import { Position } from '@xyflow/system';
4
+ import { EdgeData, Dimmed } from '../../base/types.Base';
4
5
  import { Fqn, NonEmptyArray, RelationId, Color, ViewId, RelationshipLineType } from '@likec4/core';
5
6
  export declare const edgeTypes: {
6
7
  relationship: FunctionComponent<{
@@ -30,10 +31,10 @@ export declare const edgeTypes: {
30
31
  markerEnd?: string;
31
32
  pathOptions?: any;
32
33
  interactionWidth?: number;
33
- data: import("../../base").Base.EdgeData & {
34
+ data: EdgeData & {
34
35
  hovered?: boolean;
35
36
  active?: boolean;
36
- dimmed?: import("../../base").Base.Dimmed;
37
+ dimmed?: Dimmed;
37
38
  sourceFqn: Fqn;
38
39
  targetFqn: Fqn;
39
40
  relations: NonEmptyArray<RelationId>;
@@ -34,7 +34,7 @@ const SelectElement = memo(() => {
34
34
  } = useRelationshipsBrowserState(selector2);
35
35
  const root = useRef(null);
36
36
  const viewport = useRef(null);
37
- const model = useLikeC4Model(true);
37
+ const model = useLikeC4Model();
38
38
  const subject = model.findElement(subjectId);
39
39
  const data = useLikeC4ElementsTree(scope === "view" && viewId ? viewId : void 0);
40
40
  const tree = useTree({
@@ -1,4 +1,4 @@
1
- import { Color, DiagramNode, Fqn, IconUrl, NonEmptyArray, RelationId, RelationshipLineType, ViewId } from '@likec4/core';
1
+ import { Color, DiagramNode, Fqn, IconUrl, NonEmptyArray, RelationId, RelationshipLineType, ViewId } from '@likec4/core/types';
2
2
  import { Simplify } from 'type-fest';
3
3
  import { Base, NonOptional, ReactFlowEdge, ReactFlowNode } from '../../base/types';
4
4
  export declare namespace RelationshipsBrowserTypes {
@@ -10,7 +10,7 @@ export declare namespace RelationshipsBrowserTypes {
10
10
  in: string[];
11
11
  out: string[];
12
12
  };
13
- type ElementNodeData = Simplify<Base.NodeData & NonOptional<Pick<DiagramNode, 'title' | 'technology' | 'description' | 'color' | 'shape' | 'style' | 'width' | 'height' | 'navigateTo'>> & {
13
+ type ElementNodeData = Simplify<Base.NodeData & NonOptional<Pick<DiagramNode, 'title' | 'technology' | 'description' | 'color' | 'shape' | 'style' | 'width' | 'height' | 'tags' | 'navigateTo'>> & {
14
14
  column: Column;
15
15
  fqn: Fqn;
16
16
  icon: string | null;
@@ -352,7 +352,7 @@ export declare const relationshipsBrowserLogic: StateMachine<Context, Events, {
352
352
  }) => {
353
353
  subject: Fqn;
354
354
  viewId: ViewId | null;
355
- scope: "global" | "view";
355
+ scope: "view" | "global";
356
356
  closeable: boolean;
357
357
  enableSelectSubject: boolean;
358
358
  enableChangeScope: boolean;
@@ -9,8 +9,8 @@ import { updateNodes } from '../../base/updateNodes.js';
9
9
  import { typedSystem } from '../../state/utils.js';
10
10
  import { ViewPadding } from './const.js';
11
11
  import { viewToNodesEdge } from './useViewToNodesEdges.js';
12
- import { Base } from '../../base/types.js';
13
12
  import { centerXYInternalNode } from '../../utils/xyflow.js';
13
+ import { setDimmed, setHovered, setData } from '../../base/types.Base.js';
14
14
 
15
15
  const findRootSubject = (nodes) => nodes.find(
16
16
  (n) => n.data.column === "subjects" && isNullish(n.parentId)
@@ -104,7 +104,7 @@ const layouter = fromPromise(async ({ input, self, signal }) => {
104
104
  xyedges: []
105
105
  });
106
106
  await delay(120);
107
- next.xynodes = next.xynodes.map(Base.setDimmed(false));
107
+ next.xynodes = next.xynodes.map(setDimmed(false));
108
108
  if (signal.aborted) {
109
109
  return updateXYData();
110
110
  }
@@ -334,12 +334,12 @@ const relationshipsBrowserLogic = setup({
334
334
  const hasDimmed = context.xyedges.some((edge) => edge.data.dimmed !== false || edge.selected);
335
335
  return context.xyedges.map((edge) => {
336
336
  if (edge.id === event.edge.id) {
337
- return Base.setData(edge, {
337
+ return setData(edge, {
338
338
  hovered: true,
339
339
  dimmed: false
340
340
  });
341
341
  }
342
- return hasDimmed && !edge.selected ? Base.setDimmed(edge, "immediate") : edge;
342
+ return hasDimmed && !edge.selected ? setDimmed(edge, "immediate") : edge;
343
343
  });
344
344
  }
345
345
  }),
@@ -354,7 +354,7 @@ const relationshipsBrowserLogic = setup({
354
354
  xyedges: ({ context, event }) => {
355
355
  return context.xyedges.map((edge) => {
356
356
  if (edge.id === event.edge.id) {
357
- return Base.setHovered(edge, false);
357
+ return setHovered(edge, false);
358
358
  }
359
359
  return edge;
360
360
  });
@@ -367,14 +367,14 @@ const relationshipsBrowserLogic = setup({
367
367
  "dim.nonhovered.edges": {
368
368
  actions: assign({
369
369
  xyedges: ({ context }) => context.xyedges.map(
370
- (edge) => edge.data.hovered ? edge : Base.setDimmed(edge, edge.data.dimmed === "immediate" ? "immediate" : true)
370
+ (edge) => edge.data.hovered ? edge : setDimmed(edge, edge.data.dimmed === "immediate" ? "immediate" : true)
371
371
  )
372
372
  })
373
373
  },
374
374
  "undim.edges": {
375
375
  actions: assign({
376
376
  xyedges: ({ context }) => {
377
- return context.xyedges.map(Base.setDimmed(false));
377
+ return context.xyedges.map(setDimmed(false));
378
378
  }
379
379
  })
380
380
  },
@@ -1,5 +1,6 @@
1
1
  import { FunctionComponent, CSSProperties, ReactNode } from 'react';
2
2
  import { Position } from '@xyflow/system';
3
+ import { EdgeData, Dimmed } from '../../../base/types.Base';
3
4
  import { Fqn, NonEmptyArray, RelationId, Color, ViewId, RelationshipLineType } from '@likec4/core';
4
5
  export declare const RelationshipEdge: FunctionComponent<{
5
6
  id: string;
@@ -28,10 +29,10 @@ export declare const RelationshipEdge: FunctionComponent<{
28
29
  markerEnd?: string;
29
30
  pathOptions?: any;
30
31
  interactionWidth?: number;
31
- data: import("../../../base").Base.EdgeData & {
32
+ data: EdgeData & {
32
33
  hovered?: boolean;
33
34
  active?: boolean;
34
- dimmed?: import("../../../base").Base.Dimmed;
35
+ dimmed?: Dimmed;
35
36
  sourceFqn: Fqn;
36
37
  targetFqn: Fqn;
37
38
  relations: NonEmptyArray<RelationId>;
@@ -1,18 +1,21 @@
1
1
  import { NodeProps } from '../../../base';
2
2
  import { RelationshipsBrowserTypes } from '../_types';
3
3
  import { MemoExoticComponent } from 'react';
4
- import { ElementStyle, Color, ViewId, Fqn, IconUrl } from '@likec4/core';
4
+ import { Dimmed } from '../../../base/types.Base';
5
+ import { ElementStyle, Color, Any, ViewId, Fqn, IconUrl } from '@likec4/core';
6
+ import { Tags } from '@likec4/core/types/aux';
5
7
  export declare const ElementNode: MemoExoticComponent<(props: NodeProps<{
6
8
  hovered?: boolean;
7
- dimmed?: import("../../../base").Base.Dimmed;
9
+ dimmed?: Dimmed;
8
10
  width: number;
9
11
  height: number;
10
12
  style: ElementStyle;
11
13
  color: Color;
12
14
  title: string;
13
- technology: string | null;
14
- description: string | null;
15
15
  shape: "rectangle" | "person" | "browser" | "mobile" | "cylinder" | "storage" | "queue";
16
+ tags: Tags<Any>;
17
+ technology: string | null | undefined;
18
+ description: string | null | undefined;
16
19
  navigateTo: ViewId<string> | null | undefined;
17
20
  column: RelationshipsBrowserTypes.Column;
18
21
  fqn: Fqn;
@@ -22,7 +25,7 @@ export declare const ElementNode: MemoExoticComponent<(props: NodeProps<{
22
25
  }, string>) => import("react/jsx-runtime").JSX.Element>;
23
26
  export declare const CompoundNode: MemoExoticComponent<(props: NodeProps<{
24
27
  hovered?: boolean;
25
- dimmed?: import("../../../base").Base.Dimmed;
28
+ dimmed?: Dimmed;
26
29
  style: ElementStyle;
27
30
  color: Color;
28
31
  title: string;
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { Handle } from '@xyflow/react';
3
3
  import { Position } from '@xyflow/system';
4
+ import { useEnabledFeatures } from '../../../context/DiagramFeatures.js';
4
5
  import { useDiagram } from '../../../hooks/useDiagram.js';
5
6
  import { ElementActions } from './ElementActions.js';
6
7
  import { EmptyNode as EmptyNode$1 } from './EmptyNode.js';
@@ -10,6 +11,7 @@ import { CompoundTitle } from '../../../base/primitives/compound/CompoundTitle.j
10
11
  import { ElementNodeContainer } from '../../../base/primitives/element/ElementNodeContainer.js';
11
12
  import { ElementShape } from '../../../base/primitives/element/ElementShape.js';
12
13
  import { ElementTitle } from '../../../base/primitives/element/ElementTitle.js';
14
+ import { ElementTags } from '../../../base/primitives/element/ElementTags.js';
13
15
  import { ElementDetailsButton } from '../../../base/primitives/element/ElementDetailsButton.js';
14
16
 
15
17
  const ElementDetailsButtonWithHandler = (props) => {
@@ -26,9 +28,11 @@ const ElementDetailsButtonWithHandler = (props) => {
26
28
  );
27
29
  };
28
30
  const ElementNode = customNode((props) => {
31
+ const { enableElementTags } = useEnabledFeatures();
29
32
  return /* @__PURE__ */ jsxs(ElementNodeContainer, { layoutId: props.id, nodeProps: props, children: [
30
33
  /* @__PURE__ */ jsx(ElementShape, { ...props }),
31
34
  /* @__PURE__ */ jsx(ElementTitle, { ...props }),
35
+ enableElementTags && /* @__PURE__ */ jsx(ElementTags, { ...props }),
32
36
  /* @__PURE__ */ jsx(ElementDetailsButtonWithHandler, { ...props }),
33
37
  /* @__PURE__ */ jsx(ElementActions, { ...props }),
34
38
  /* @__PURE__ */ jsx(ElementPorts, { ...props })
@@ -1,6 +1,6 @@
1
1
  import { RelationshipsViewData } from '@likec4/core/compute-view/relationships';
2
2
  import { DiagramEdge, DiagramNode, DiagramView, ElementKind, Fqn, ViewId } from '@likec4/core/types';
3
- import { AnyAux, LikeC4ViewModel } from '@likec4/core/model';
3
+ import { LikeC4ViewModel } from '@likec4/core/model';
4
4
  import { RelationshipsBrowserTypes } from './_types';
5
5
  export type LayoutRelationshipsViewResult = {
6
6
  subject: Fqn;
@@ -24,5 +24,5 @@ export declare namespace LayoutRelationshipsViewResult {
24
24
  existsInCurrentView: boolean;
25
25
  };
26
26
  }
27
- export declare function layoutRelationshipsView(data: RelationshipsViewData, scope: LikeC4ViewModel<AnyAux> | null): Omit<LayoutRelationshipsViewResult, 'subject'>;
27
+ export declare function layoutRelationshipsView(data: RelationshipsViewData, scope: LikeC4ViewModel | null): Omit<LayoutRelationshipsViewResult, 'subject'>;
28
28
  export declare function useRelationshipsView(subject: Fqn, viewId: ViewId | null, scope: 'global' | 'view'): LayoutRelationshipsViewResult;
@@ -1,7 +1,7 @@
1
1
  import { computeRelationshipsView, treeFromElements } from '@likec4/core/compute-view/relationships';
2
2
  import { useMemo } from 'react';
3
3
  import dagre from '@dagrejs/dagre';
4
- import { toArray, invariant, ifind, DefaultMap } from '@likec4/core';
4
+ import { toArray, invariant, ifind, nonNullable, DefaultMap } from '@likec4/core';
5
5
  import { pipe, concat, map, groupBy, prop, forEachObj, filter, mapToObj, find, only, unique, tap, reduce, sortBy } from 'remeda';
6
6
  import { useLikeC4Model } from '../../likec4model/useLikeC4Model.js';
7
7
 
@@ -325,12 +325,14 @@ function layoutRelationshipsView(data, scope) {
325
325
  return {
326
326
  id,
327
327
  parent: null,
328
+ x: position.x,
329
+ y: position.y,
328
330
  position: [position.x, position.y],
329
331
  title: "empty node",
330
332
  description: null,
331
333
  technology: null,
332
- tags: null,
333
- links: null,
334
+ tags: [],
335
+ links: [],
334
336
  color: "muted",
335
337
  shape: "rectangle",
336
338
  style: {
@@ -367,11 +369,13 @@ function layoutRelationshipsView(data, scope) {
367
369
  return {
368
370
  id,
369
371
  parent: parentId ?? null,
372
+ x: position.x,
373
+ y: position.y,
370
374
  position: [position.x, position.y],
371
375
  title: element.title,
372
376
  description: element.description,
373
377
  technology: element.technology,
374
- tags: null,
378
+ tags: [...element.tags],
375
379
  links: null,
376
380
  color: inheritFromNodeOrAncestor?.color ?? element.color,
377
381
  shape: inheritFromNode?.shape ?? element.shape,
@@ -426,7 +430,7 @@ function layoutRelationshipsView(data, scope) {
426
430
  relations,
427
431
  sourceHandle,
428
432
  targetHandle
429
- } = find(edges, (e2) => e2.name === ename);
433
+ } = nonNullable(find(edges, (e2) => e2.name === ename));
430
434
  const onlyRelation = only(relations);
431
435
  const label = onlyRelation?.title ?? "untitled";
432
436
  const isMultiple = relations.length > 1;
@@ -452,7 +456,7 @@ function layoutRelationshipsView(data, scope) {
452
456
  };
453
457
  }
454
458
  function useRelationshipsView(subject, viewId, scope) {
455
- const model = useLikeC4Model(true);
459
+ const model = useLikeC4Model();
456
460
  return useMemo(() => {
457
461
  const view = viewId ? model.findView(viewId) : null;
458
462
  const data = layoutRelationshipsView(
@@ -1,4 +1,4 @@
1
- import { Queue, ElementKind, nonNullable, DiagramNode, invariant } from '@likec4/core';
1
+ import { Queue, GroupElementKind, nonNullable, invariant } from '@likec4/core';
2
2
  import '@react-hookz/web';
3
3
  import { hasAtLeast } from 'remeda';
4
4
  import { ZIndexes } from '../../base/const.js';
@@ -21,7 +21,7 @@ function viewToNodesEdge(view) {
21
21
  let next;
22
22
  while (next = queue.dequeue()) {
23
23
  const { node, parent } = next;
24
- const isCompound = hasAtLeast(node.children, 1) || node.kind == ElementKind.Group;
24
+ const isCompound = hasAtLeast(node.children, 1) || node.kind == GroupElementKind;
25
25
  if (isCompound) {
26
26
  for (const child of node.children) {
27
27
  queue.enqueue({ node: nodeById(child), parent: node });
@@ -53,7 +53,7 @@ function viewToNodesEdge(view) {
53
53
  parentId: ns + parent.id
54
54
  }
55
55
  };
56
- const fqn = DiagramNode.modelRef(node);
56
+ const fqn = node.modelRef ?? null;
57
57
  const navigateTo = { navigateTo: node.navigateTo ?? null };
58
58
  switch (true) {
59
59
  case node.kind === LayoutRelationshipsViewResult.Empty: {
@@ -110,6 +110,7 @@ function viewToNodesEdge(view) {
110
110
  ports: node.ports,
111
111
  style: node.style,
112
112
  existsInCurrentView: node.existsInCurrentView,
113
+ tags: node.tags,
113
114
  ...navigateTo
114
115
  }
115
116
  }
@@ -0,0 +1,5 @@
1
+ import { SearchActorRef } from './searchActor';
2
+ import { NamedExoticComponent } from 'react';
3
+ export declare const Search: NamedExoticComponent<{
4
+ searchActorRef: SearchActorRef;
5
+ }>;
@@ -0,0 +1,192 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { css } from '@likec4/styles/css';
3
+ import { VStack } from '@likec4/styles/jsx';
4
+ import { FocusTrap, Group, Grid, GridCol, Title, ScrollArea } from '@mantine/core';
5
+ import { useCallbackRef, useHotkeys } from '@mantine/hooks';
6
+ import { useTimeoutEffect } from '@react-hookz/web';
7
+ import { useSelector } from '@xstate/react';
8
+ import { LayoutGroup, AnimatePresence } from 'motion/react';
9
+ import { memo, useRef } from 'react';
10
+ import { ErrorBoundary } from 'react-error-boundary';
11
+ import { isTruthy } from 'remeda';
12
+ import { ErrorFallback } from '../components/ErrorFallback.js';
13
+ import { DiagramFeatures } from '../context/DiagramFeatures.js';
14
+ import { Overlay } from '../overlays/overlay/Overlay.js';
15
+ import { ElementsColumn } from './components/ElementsColumn.js';
16
+ import { PickView } from './components/PickView.js';
17
+ import { SearchByTags } from './components/SearchByTags.js';
18
+ import { LikeC4SearchInput } from './components/SearchInput.js';
19
+ import { focusToFirstFoundElement, moveFocusToSearchInput } from './components/utils.js';
20
+ import { ViewsColumn } from './components/ViewsColum.js';
21
+ import { SearchActorContext, usePickViewFor } from './hooks.js';
22
+
23
+ const dialog = css({
24
+ backgroundColor: `[rgb(34 34 34 / var(--_opacity, 95%))]`,
25
+ _light: {
26
+ backgroundColor: `[rgb(250 250 250 / var(--_opacity, 95%))]`
27
+ },
28
+ backdropFilter: "auto",
29
+ backdropBlur: "var(--_blur, 10px)"
30
+ // base: `[rgb(34 34 34 / var(${backdropOpacity}))]`,
31
+ // _light: `[rgb(255 255 255/ var(${backdropOpacity}))]`,
32
+ // },
33
+ });
34
+ const body = css({
35
+ // containerName: 'likec4-search',
36
+ // containerType: 'size',
37
+ // position: 'fixed',
38
+ // zIndex: 901,
39
+ // top: 0,
40
+ // left: 0,
41
+ width: "100%",
42
+ height: "100%",
43
+ maxHeight: "100vh",
44
+ overflow: "hidden",
45
+ display: "flex",
46
+ flexDirection: "column",
47
+ justifyContent: "stretch",
48
+ gap: "sm",
49
+ paddingTop: 20,
50
+ paddingLeft: 16,
51
+ paddingRight: 16,
52
+ paddingBottom: 8,
53
+ background: "[transparent]"
54
+ // backgroundColor: {
55
+ // _dark: `[rgb(34 34 34 / 0.95)]`,
56
+ // _light: `[rgb(255 255 255/ 0.95)]`,
57
+ // },
58
+ });
59
+ const selectIsOpened = (s) => !s.matches("inactive");
60
+ const Search = memo(({ searchActorRef }) => {
61
+ const isOpened = useSelector(searchActorRef, selectIsOpened);
62
+ const openSearch = () => {
63
+ searchActorRef.send({ type: "open" });
64
+ };
65
+ const sendClose = () => {
66
+ searchActorRef.send({ type: "close" });
67
+ };
68
+ const afterCloseCbRef = useRef(null);
69
+ const close = useCallbackRef((cb) => {
70
+ afterCloseCbRef.current = cb ?? null;
71
+ sendClose();
72
+ });
73
+ const onExitComplete = useCallbackRef(() => {
74
+ if (afterCloseCbRef.current) {
75
+ afterCloseCbRef.current();
76
+ afterCloseCbRef.current = null;
77
+ }
78
+ });
79
+ useHotkeys([
80
+ ["mod+k", openSearch, {
81
+ preventDefault: true
82
+ }],
83
+ ["mod+f", openSearch, {
84
+ preventDefault: true
85
+ }]
86
+ ]);
87
+ return /* @__PURE__ */ jsx(
88
+ SearchActorContext,
89
+ {
90
+ value: {
91
+ searchActorRef,
92
+ close
93
+ },
94
+ children: /* @__PURE__ */ jsx(DiagramFeatures.Overlays, { children: /* @__PURE__ */ jsx(ErrorBoundary, { FallbackComponent: ErrorFallback, onReset: sendClose, children: /* @__PURE__ */ jsx(LayoutGroup, { children: /* @__PURE__ */ jsx(AnimatePresence, { onExitComplete, children: isOpened && /* @__PURE__ */ jsx(
95
+ Overlay,
96
+ {
97
+ fullscreen: true,
98
+ withBackdrop: false,
99
+ backdrop: {
100
+ opacity: 0.9
101
+ },
102
+ classes: {
103
+ dialog,
104
+ body
105
+ },
106
+ openDelay: 0,
107
+ onClose: close,
108
+ "data-likec4-search": "true",
109
+ children: /* @__PURE__ */ jsx(SearchOverlay, { close, searchActorRef })
110
+ }
111
+ ) }) }) }) })
112
+ }
113
+ );
114
+ });
115
+ const scrollArea = css({
116
+ height: [
117
+ "100%",
118
+ "100cqh"
119
+ ],
120
+ "& .mantine-ScrollArea-viewport": {
121
+ minHeight: "100%",
122
+ "& > div": {
123
+ minHeight: "100%",
124
+ height: "100%"
125
+ }
126
+ }
127
+ });
128
+ const SearchOverlay = ({ close, searchActorRef }) => {
129
+ const pickViewFor = usePickViewFor();
130
+ useTimeoutEffect(() => {
131
+ if (isTruthy(searchActorRef.getSnapshot().context.openedWithSearch)) {
132
+ focusToFirstFoundElement();
133
+ }
134
+ }, 150);
135
+ return /* @__PURE__ */ jsxs(FocusTrap, { children: [
136
+ /* @__PURE__ */ jsx(
137
+ Group,
138
+ {
139
+ className: "group",
140
+ wrap: "nowrap",
141
+ onClick: (e) => {
142
+ e.stopPropagation();
143
+ moveFocusToSearchInput();
144
+ },
145
+ children: /* @__PURE__ */ jsxs(VStack, { flex: 1, px: "sm", children: [
146
+ /* @__PURE__ */ jsx(LikeC4SearchInput, {}),
147
+ /* @__PURE__ */ jsx(SearchByTags, {})
148
+ ] })
149
+ }
150
+ ),
151
+ /* @__PURE__ */ jsxs(Grid, { children: [
152
+ /* @__PURE__ */ jsx(GridCol, { span: 6, children: /* @__PURE__ */ jsx(Title, { component: "div", order: 6, c: "dimmed", pl: "sm", children: "Elements" }) }),
153
+ /* @__PURE__ */ jsx(GridCol, { span: 6, children: /* @__PURE__ */ jsx(Title, { component: "div", order: 6, c: "dimmed", pl: "sm", children: "Views" }) })
154
+ ] }),
155
+ /* @__PURE__ */ jsxs(
156
+ Grid,
157
+ {
158
+ className: css({
159
+ containerName: "likec4-search-elements",
160
+ containerType: "size",
161
+ overflow: "hidden",
162
+ flexGrow: 1
163
+ }),
164
+ children: [
165
+ /* @__PURE__ */ jsx(GridCol, { span: 6, children: /* @__PURE__ */ jsx(
166
+ ScrollArea,
167
+ {
168
+ type: "scroll",
169
+ className: scrollArea,
170
+ pr: "xs",
171
+ scrollbars: "y",
172
+ children: /* @__PURE__ */ jsx(AnimatePresence, { children: /* @__PURE__ */ jsx(LayoutGroup, { id: "likec4-search-elements", children: /* @__PURE__ */ jsx(ElementsColumn, {}) }) })
173
+ }
174
+ ) }),
175
+ /* @__PURE__ */ jsx(GridCol, { span: 6, children: /* @__PURE__ */ jsx(
176
+ ScrollArea,
177
+ {
178
+ type: "scroll",
179
+ className: scrollArea,
180
+ pr: "xs",
181
+ scrollbars: "y",
182
+ children: /* @__PURE__ */ jsx(AnimatePresence, { children: /* @__PURE__ */ jsx(LayoutGroup, { id: "likec4-search-views", children: /* @__PURE__ */ jsx(ViewsColumn, {}) }) })
183
+ }
184
+ ) })
185
+ ]
186
+ }
187
+ ),
188
+ pickViewFor && /* @__PURE__ */ jsx(PickView, { elementFqn: pickViewFor })
189
+ ] });
190
+ };
191
+
192
+ export { Search };
@@ -11,7 +11,6 @@ const treeRoot = css(
11
11
  containerName: "likec4-tree"
12
12
  }),
13
13
  {
14
- overflow: "hidden",
15
14
  containerType: "inline-size",
16
15
  height: "100%"
17
16
  }
@@ -0,0 +1,2 @@
1
+ import { MemoExoticComponent } from 'react';
2
+ export declare const ElementsColumn: MemoExoticComponent<() => import("react/jsx-runtime").JSX.Element>;
@@ -5,25 +5,26 @@ import { useTree, Tree, ActionIcon, UnstyledButton, Box, Group, Highlight, Toolt
5
5
  import { useCallbackRef } from '@mantine/hooks';
6
6
  import { IconChevronRight } from '@tabler/icons-react';
7
7
  import * as m from 'motion/react-m';
8
- import { useMemo, useCallback, useEffect } from 'react';
9
- import { isEmpty, pipe, reduce, only, partition, first } from 'remeda';
10
- import { IconOrShapeRenderer } from '../../../context/IconRenderer.js';
11
- import { sortByLabel } from '../../../likec4model/useLikeC4ElementsTree.js';
12
- import { useLikeC4Model } from '../../../likec4model/useLikeC4Model.js';
8
+ import { memo, useMemo, useCallback, useEffect } from 'react';
9
+ import { isEmpty, pipe, reduce, only, first } from 'remeda';
10
+ import { IconOrShapeRenderer } from '../../context/IconRenderer.js';
11
+ import { useDiagram } from '../../hooks/useDiagram.js';
12
+ import { sortByLabel } from '../../likec4model/useLikeC4ElementsTree.js';
13
+ import { useLikeC4Model } from '../../likec4model/useLikeC4Model.js';
14
+ import { useNormalizedSearch, useSearchActor } from '../hooks.js';
13
15
  import { focusable, buttonsva } from './_shared.css.js';
14
16
  import { treeSubtree, treeLabel, treeRoot, treeNode, elementIcon, elementExpandIcon, elementTitleAndId, elementId, elementViewsCount } from './ElementsColumn.css.js';
15
- import { useNormalizedSearch, useCloseSearchAndNavigateTo, setPickView } from './state.js';
16
17
  import { stopAndPrevent, moveFocusToSearchInput, centerY } from './utils.js';
17
18
  import { NothingFound } from './ViewsColum.js';
18
19
 
19
20
  const btn = buttonsva();
20
- function ElementsColumn() {
21
+ const ElementsColumn = memo(() => {
22
+ const model = useLikeC4Model();
21
23
  const search = useNormalizedSearch();
22
- const model = useLikeC4Model(true);
23
24
  const data = useMemo(() => {
24
25
  const searchTerms = search.split(".");
25
26
  let elements;
26
- if (isEmpty(search) || search === "kind:") {
27
+ if (isEmpty(searchTerms) || searchTerms[0] === "kind:") {
27
28
  elements = model.elements();
28
29
  } else {
29
30
  elements = ifilter(model.elements(), (element) => {
@@ -76,7 +77,7 @@ function ElementsColumn() {
76
77
  return /* @__PURE__ */ jsx(NothingFound, {});
77
78
  }
78
79
  return /* @__PURE__ */ jsx(ElementsTree, { data, handleClick });
79
- }
80
+ });
80
81
  const setHoveredNode = () => {
81
82
  };
82
83
  function ElementsTree({
@@ -200,6 +201,7 @@ function ElementTreeNode({ node, elementProps, hasChildren, expanded }) {
200
201
  component: m.button,
201
202
  layout: true,
202
203
  tabIndex: -1,
204
+ "data-value": element.id,
203
205
  className: cx(btn.root, "group", "likec4-element-button"),
204
206
  ...views.length > 0 && {
205
207
  onClick: (e) => {
@@ -237,7 +239,8 @@ function ElementTreeNode({ node, elementProps, hasChildren, expanded }) {
237
239
  ] });
238
240
  }
239
241
  function useHandleElementSelection() {
240
- const navigateTo = useCloseSearchAndNavigateTo();
242
+ const diagram = useDiagram();
243
+ const { searchActorRef } = useSearchActor();
241
244
  return useCallback((element) => {
242
245
  const views = [...element.views()];
243
246
  if (views.length === 0) {
@@ -245,16 +248,15 @@ function useHandleElementSelection() {
245
248
  }
246
249
  const singleView = only(views);
247
250
  if (singleView) {
248
- navigateTo(singleView.id, element.id);
251
+ if (singleView.id === diagram.currentView.id) {
252
+ searchActorRef.send({ type: "close" });
253
+ } else {
254
+ diagram.navigateTo(singleView.id);
255
+ }
249
256
  return;
250
257
  }
251
- const [scoped, others] = partition(views, (v) => v.viewOf?.id === element.id);
252
- setPickView({
253
- elementFqn: element.id,
254
- scoped,
255
- others
256
- });
257
- }, [setPickView, navigateTo]);
258
+ searchActorRef.send({ type: "pickview.open", elementFqn: element.id });
259
+ }, []);
258
260
  }
259
261
 
260
262
  export { ElementsColumn };
@@ -0,0 +1,4 @@
1
+ import { Fqn } from '@likec4/core/types';
2
+ export declare function PickView({ elementFqn }: {
3
+ elementFqn: Fqn;
4
+ }): import("react/jsx-runtime").JSX.Element;