@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,5 +1,60 @@
1
- import { SlotRecipeRuntimeFn, SlotRecipeVariantRecord } from '@likec4/styles/types';
1
+ import { SlotRecipeRuntimeFn } from '@likec4/styles/types';
2
2
  export declare const backdropBlur = "--_blur";
3
3
  export declare const backdropOpacity = "--_opacity";
4
4
  export declare const level = "--_level";
5
- export declare const overlay: SlotRecipeRuntimeFn<"body" | "dialog", SlotRecipeVariantRecord<"body" | "dialog">>;
5
+ export declare const overlay: SlotRecipeRuntimeFn<"body" | "dialog", {
6
+ fullscreen: {
7
+ false: {
8
+ dialog: {
9
+ sm: {
10
+ inset: "[var(--_inset) var(--_inset) var(--_offset) var(--_inset)]";
11
+ width: "calc(100vw - 2 * var(--_inset))";
12
+ height: "calc(100vh - var(--_offset) - var(--_inset))";
13
+ "--_border-radius": "6px";
14
+ padding: "6px";
15
+ "--_offset": "1rem";
16
+ };
17
+ md: {
18
+ "--_offset": "1rem";
19
+ };
20
+ lg: {
21
+ "--_offset": "2rem";
22
+ };
23
+ xl: {
24
+ "--_offset": "4rem";
25
+ };
26
+ };
27
+ body: {
28
+ sm: {
29
+ borderRadius: "calc(var(--_border-radius) - 2px)";
30
+ };
31
+ };
32
+ };
33
+ true: {
34
+ dialog: {
35
+ inset: number;
36
+ padding: number;
37
+ };
38
+ };
39
+ };
40
+ withBackdrop: {
41
+ false: {
42
+ dialog: {
43
+ _backdrop: {
44
+ display: "none";
45
+ };
46
+ };
47
+ };
48
+ true: {
49
+ dialog: {
50
+ _backdrop: {
51
+ backdropFilter: "blur(var(--_blur))";
52
+ backgroundColor: {
53
+ _dark: "[rgb(34 34 34 / var(--_opacity))]";
54
+ _light: "[rgb(15 15 15/ var(--_opacity))]";
55
+ };
56
+ };
57
+ };
58
+ };
59
+ };
60
+ }>;
@@ -10,8 +10,8 @@ const dialog = css.raw({
10
10
  boxSizing: "border-box",
11
11
  margin: 0,
12
12
  position: "fixed",
13
- width: "auto",
14
- height: "auto",
13
+ width: "100vw",
14
+ height: "100vh",
15
15
  maxWidth: "100vw",
16
16
  maxHeight: "100vh",
17
17
  background: `mantine.colors.defaultBorder/50`,
@@ -24,60 +24,97 @@ const dialog = css.raw({
24
24
  [offset]: "0px",
25
25
  [inset]: "calc((1 + var(--_level) * 0.75) * var(--_offset))",
26
26
  [backdropOpacity]: "0%",
27
+ [borderRadius]: "0px",
27
28
  _backdrop: {
28
- cursor: "zoom-out",
29
- backdropFilter: `blur(var(${backdropBlur}))`,
30
- backgroundColor: {
31
- _dark: `[rgb(34 34 34 / var(${backdropOpacity}))]`,
32
- _light: `[rgb(15 15 15/ var(${backdropOpacity}))]`
33
- }
34
- },
35
- smDown: {
36
- [borderRadius]: "0px",
37
- border: "none",
38
- inset: 0,
39
- padding: 0,
40
- // [offset]: '0px',
41
- // [inset]: '0px',
42
- width: "100vw",
43
- height: "100vh"
44
- },
45
- sm: {
46
- inset: "[var(--_inset) var(--_inset) var(--_offset) var(--_inset)]",
47
- width: "calc(100vw - 2 * var(--_inset))",
48
- height: "calc(100vh - var(--_offset) - var(--_inset))",
49
- [borderRadius]: "6px",
50
- padding: "6px",
51
- [offset]: "1rem"
52
- },
53
- md: {
54
- [offset]: "1rem"
55
- },
56
- lg: {
57
- [offset]: "2rem"
29
+ cursor: "zoom-out"
58
30
  },
59
- xl: {
60
- [offset]: "4rem"
61
- }
31
+ inset: 0,
32
+ padding: 0
62
33
  });
63
34
  const body = css.raw({
64
35
  position: "relative",
65
36
  containerName: "overlay-dialog",
66
37
  containerType: "size",
67
38
  border: `0 solid transparent`,
68
- background: "mantine.colors.body",
69
39
  overflow: "hidden",
70
40
  width: "100%",
71
41
  height: "100%",
72
- sm: {
73
- borderRadius: `calc(var(${borderRadius}) - 2px)`
74
- }
42
+ background: "mantine.colors.body"
75
43
  });
76
44
  const overlay = sva({
77
45
  slots: ["dialog", "body"],
78
46
  base: {
79
47
  dialog,
80
48
  body
49
+ },
50
+ variants: {
51
+ fullscreen: {
52
+ false: {
53
+ dialog: {
54
+ sm: {
55
+ inset: "[var(--_inset) var(--_inset) var(--_offset) var(--_inset)]",
56
+ width: "calc(100vw - 2 * var(--_inset))",
57
+ height: "calc(100vh - var(--_offset) - var(--_inset))",
58
+ [borderRadius]: "6px",
59
+ padding: "6px",
60
+ [offset]: "1rem"
61
+ },
62
+ md: {
63
+ [offset]: "1rem"
64
+ },
65
+ lg: {
66
+ [offset]: "2rem"
67
+ },
68
+ xl: {
69
+ [offset]: "4rem"
70
+ }
71
+ },
72
+ body: {
73
+ sm: {
74
+ borderRadius: `calc(var(${borderRadius}) - 2px)`
75
+ }
76
+ }
77
+ },
78
+ true: {
79
+ dialog: {
80
+ inset: 0,
81
+ padding: 0
82
+ }
83
+ }
84
+ },
85
+ // transparent: {
86
+ // false: {
87
+ // },
88
+ // true: {
89
+ // dialog: {
90
+ // background: 'transparent',
91
+ // },
92
+ // },
93
+ // },
94
+ withBackdrop: {
95
+ false: {
96
+ dialog: {
97
+ _backdrop: {
98
+ display: "none"
99
+ }
100
+ }
101
+ },
102
+ true: {
103
+ dialog: {
104
+ _backdrop: {
105
+ backdropFilter: `blur(var(${backdropBlur}))`,
106
+ backgroundColor: {
107
+ _dark: `[rgb(34 34 34 / var(${backdropOpacity}))]`,
108
+ _light: `[rgb(15 15 15/ var(${backdropOpacity}))]`
109
+ }
110
+ }
111
+ }
112
+ }
113
+ }
114
+ },
115
+ defaultVariants: {
116
+ fullscreen: false,
117
+ withBackdrop: true
81
118
  }
82
119
  });
83
120
 
@@ -1,21 +1,33 @@
1
1
  import { PropsWithChildren, ForwardRefExoticComponent, ReactNode, RefAttributes } from 'react';
2
2
  export type OverlayProps = PropsWithChildren<{
3
+ fullscreen?: boolean | undefined;
4
+ withBackdrop?: boolean | undefined;
3
5
  overlayLevel?: number;
4
6
  className?: string;
5
7
  classes?: {
6
8
  dialog?: string;
7
9
  body?: string;
8
10
  };
11
+ backdrop?: {
12
+ opacity?: number;
13
+ };
14
+ openDelay?: number;
9
15
  onClose: () => void;
10
16
  onClick?: never;
11
17
  }>;
12
18
  export declare const Overlay: ForwardRefExoticComponent<{
19
+ fullscreen?: boolean | undefined;
20
+ withBackdrop?: boolean | undefined;
13
21
  overlayLevel?: number;
14
22
  className?: string;
15
23
  classes?: {
16
24
  dialog?: string;
17
25
  body?: string;
18
26
  };
27
+ backdrop?: {
28
+ opacity?: number;
29
+ };
30
+ openDelay?: number;
19
31
  onClose: () => void;
20
32
  onClick?: never;
21
33
  } & {
@@ -2,9 +2,9 @@ import { jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { cx } from '@likec4/styles/css';
3
3
  import { RemoveScroll } from '@mantine/core';
4
4
  import { useMergedRef } from '@mantine/hooks';
5
- import { useSyncedRef, useDebouncedCallback, useTimeoutEffect } from '@react-hookz/web';
5
+ import { useDebouncedCallback, useTimeoutEffect } from '@react-hookz/web';
6
6
  import { useReducedMotionConfig, m } from 'motion/react';
7
- import { forwardRef, useState, useRef, useEffect } from 'react';
7
+ import { forwardRef, useState, useRef, useLayoutEffect } from 'react';
8
8
  import { overlay, backdropOpacity, backdropBlur, level } from './Overlay.css.js';
9
9
  import { stopPropagation } from '../../utils/xyflow.js';
10
10
 
@@ -14,13 +14,18 @@ const Overlay = forwardRef(({
14
14
  classes,
15
15
  overlayLevel = 0,
16
16
  children,
17
+ fullscreen = false,
18
+ withBackdrop = true,
19
+ backdrop,
20
+ openDelay = 130,
17
21
  ...rest
18
22
  }, ref) => {
19
- const [opened, setOpened] = useState(false);
23
+ const [opened, setOpened] = useState(openDelay === 0);
20
24
  const dialogRef = useRef(null);
21
25
  const isClosingRef = useRef(false);
22
26
  const motionNotReduced = useReducedMotionConfig() !== true;
23
- const onCloseRef = useSyncedRef(onClose);
27
+ const onCloseRef = useRef(onClose);
28
+ onCloseRef.current = onClose;
24
29
  const close = useDebouncedCallback(
25
30
  () => {
26
31
  if (isClosingRef.current) return;
@@ -30,33 +35,27 @@ const Overlay = forwardRef(({
30
35
  [],
31
36
  50
32
37
  );
33
- useEffect(() => {
34
- const cancel = (e) => {
35
- e.preventDefault();
36
- e.stopPropagation();
37
- close();
38
- };
39
- dialogRef.current?.addEventListener("cancel", cancel, { capture: true });
40
- return () => {
41
- dialogRef.current?.removeEventListener("cancel", cancel, { capture: true });
42
- };
43
- }, []);
44
- useTimeoutEffect(() => {
38
+ useLayoutEffect(() => {
45
39
  if (!dialogRef.current?.open) {
46
40
  dialogRef.current?.showModal();
47
41
  }
48
- }, 30);
42
+ }, []);
49
43
  useTimeoutEffect(() => {
50
44
  setOpened(true);
51
- }, 120);
45
+ }, openDelay > 0 ? openDelay : void 0);
52
46
  const styles = overlay({
53
- level: overlayLevel
47
+ fullscreen,
48
+ withBackdrop
54
49
  });
50
+ let targetBackdropOpacity = overlayLevel > 0 ? "50%" : "60%";
51
+ if (backdrop?.opacity !== void 0) {
52
+ targetBackdropOpacity = `${backdrop.opacity * 100}%`;
53
+ }
55
54
  return /* @__PURE__ */ jsx(
56
55
  m.dialog,
57
56
  {
58
57
  ref: useMergedRef(dialogRef, ref),
59
- className: cx(RemoveScroll.classNames.fullWidth, styles.dialog, classes?.dialog, className),
58
+ className: cx(RemoveScroll.classNames.fullWidth, classes?.dialog, className, styles.dialog),
60
59
  layout: true,
61
60
  style: {
62
61
  // @ts-ignore
@@ -66,28 +65,35 @@ const Overlay = forwardRef(({
66
65
  initial: {
67
66
  [backdropBlur]: "0px",
68
67
  [backdropOpacity]: "0%",
69
- scale: overlayLevel > 0 ? 0.9 : 1.075,
68
+ scale: 0.95,
69
+ originY: 0,
70
+ translateY: -20,
70
71
  opacity: 0
71
72
  },
72
73
  animate: {
73
74
  [backdropBlur]: overlayLevel > 0 ? "4px" : "8px",
74
- [backdropOpacity]: overlayLevel > 0 ? "50%" : "60%",
75
+ [backdropOpacity]: targetBackdropOpacity,
75
76
  scale: 1,
76
77
  opacity: 1,
78
+ translateY: 0,
77
79
  transition: {
78
80
  delay: 0.075
79
81
  }
80
82
  },
81
83
  exit: {
82
- scale: 1.2,
83
84
  opacity: 0,
85
+ scale: 0.98,
86
+ translateY: -20,
87
+ transition: {
88
+ duration: 0.1
89
+ },
84
90
  [backdropBlur]: "0px",
85
91
  [backdropOpacity]: "0%"
86
92
  }
87
93
  } : {
88
94
  initial: {
89
95
  [backdropBlur]: "8px",
90
- [backdropOpacity]: "60%"
96
+ [backdropOpacity]: targetBackdropOpacity
91
97
  }
92
98
  },
93
99
  onClick: (e) => {
@@ -97,6 +103,11 @@ const Overlay = forwardRef(({
97
103
  return;
98
104
  }
99
105
  },
106
+ onCancel: (e) => {
107
+ e.preventDefault();
108
+ e.stopPropagation();
109
+ close();
110
+ },
100
111
  onDoubleClick: stopPropagation,
101
112
  onPointerDown: stopPropagation,
102
113
  onClose: (e) => {
@@ -104,7 +115,7 @@ const Overlay = forwardRef(({
104
115
  close();
105
116
  },
106
117
  ...rest,
107
- children: /* @__PURE__ */ jsx(RemoveScroll, { forwardProps: true, removeScrollBar: false, children: /* @__PURE__ */ jsx("div", { className: cx(styles.body, "overlay-body", classes?.body), children: opened && /* @__PURE__ */ jsx(Fragment, { children }) }) })
118
+ children: /* @__PURE__ */ jsx(RemoveScroll, { forwardProps: true, removeScrollBar: false, children: /* @__PURE__ */ jsx("div", { className: cx(classes?.body, styles.body, "overlay-body"), children: opened && /* @__PURE__ */ jsx(Fragment, { children }) }) })
108
119
  }
109
120
  );
110
121
  });
@@ -1,4 +1,4 @@
1
- import { Fqn } from '@likec4/core';
1
+ import { Fqn } from '@likec4/core/types';
2
2
  import { ActorLogicFrom, ActorRefFrom, SnapshotFrom, StateMachine, ActorRefFromLogic, CallbackActorLogic, EventObject, NonReducibleUnknown, Values, MetaObject } from 'xstate';
3
3
  import { Overlays } from './types';
4
4
  import { ElementDetailsLogic } from './element-details/actor';
@@ -1,6 +1,7 @@
1
1
  import { RelationshipDetailsActorRef } 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 { 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
  relationId: RelationId;
38
39
  color: Color | undefined;
39
40
  label: string | null;
@@ -46,7 +46,7 @@ const selectSubject = (state) => ({
46
46
  const SyncRelationshipDetailsXYFlow = memo(() => {
47
47
  const actor = useRelationshipDetailsActor();
48
48
  const subject = useSelector(actor, selectSubject, deepEqual);
49
- const likec4model = useLikeC4Model(true);
49
+ const likec4model = useLikeC4Model();
50
50
  const view = likec4model.findView(subject.viewId) ?? null;
51
51
  const data = useMemo(() => {
52
52
  let data2;
@@ -170,14 +170,14 @@ const topLeftPanelselector = ({ context }) => ({
170
170
  });
171
171
  const TopLeftPanel = memo(() => {
172
172
  const { subject, viewId } = useRelationshipDetailsState(topLeftPanelselector, deepEqual);
173
- const likec4model = useLikeC4Model(true);
173
+ const likec4model = useLikeC4Model();
174
174
  const view = likec4model.findView(viewId);
175
175
  if (!view || !view.isDiagram()) {
176
176
  return null;
177
177
  }
178
178
  const edges = [...view.edges()];
179
179
  let edge = "edgeId" in subject && isTruthy(subject.edgeId) ? edges.find((e) => e.id === subject.edgeId) : find(edges, (e) => e.source.element?.id === subject.source && e.target.element?.id === subject.target) || find(edges, (e) => {
180
- return (e.source.element?.id === subject.source || isAncestor(e.source.element?.id ?? "--", subject.source ?? "__")) && (e.target.element?.id === subject.target || isAncestor(e.target.element?.id ?? "", subject.target ?? "__"));
180
+ return (e.source.element?.id === subject.source || isAncestor(e.source.element?.id ?? "__", subject.source ?? "__")) && (e.target.element?.id === subject.target || isAncestor(e.target.element?.id ?? "__", subject.target ?? "__"));
181
181
  });
182
182
  if (!edge) {
183
183
  return null;
@@ -1,4 +1,4 @@
1
- import { Color, DiagramNode, Fqn, IconUrl, RelationId, RelationshipLineType, ViewId } from '@likec4/core';
1
+ import { Color, DiagramNode, Fqn, IconUrl, 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 RelationshipDetailsTypes {
@@ -10,7 +10,7 @@ export declare namespace RelationshipDetailsTypes {
10
10
  in: string[];
11
11
  out: string[];
12
12
  };
13
- type ElementNodeData = Base.NodeData & NonOptional<Pick<DiagramNode, 'title' | 'technology' | 'description' | 'color' | 'shape' | 'width' | 'height' | 'navigateTo' | 'style'>> & {
13
+ type ElementNodeData = Base.NodeData & NonOptional<Pick<DiagramNode, 'title' | 'technology' | 'description' | 'color' | 'shape' | 'width' | 'height' | 'navigateTo' | 'style' | 'tags'>> & {
14
14
  column: Column;
15
15
  fqn: Fqn;
16
16
  icon: IconUrl;
@@ -7,7 +7,7 @@ import { MinZoom } from '../../base/const.js';
7
7
  import { updateEdges } from '../../base/updateEdges.js';
8
8
  import { updateNodes } from '../../base/updateNodes.js';
9
9
  import { layoutResultToXYFlow } from './layout-to-xyflow.js';
10
- import { Base } from '../../base/types.js';
10
+ import { setDimmed, setHovered, setData } from '../../base/types.Base.js';
11
11
 
12
12
  function inputToSubject(input) {
13
13
  if ("edgeId" in input) {
@@ -161,12 +161,12 @@ const relationshipDetailsLogic = setup({
161
161
  );
162
162
  return context.xyedges.map((edge) => {
163
163
  if (edge.id === event.edge.id) {
164
- return Base.setData(edge, {
164
+ return setData(edge, {
165
165
  hovered: true,
166
166
  dimmed: false
167
167
  });
168
168
  }
169
- return hasDimmed && !edge.selected ? Base.setDimmed(edge, "immediate") : edge;
169
+ return hasDimmed && !edge.selected ? setDimmed(edge, "immediate") : edge;
170
170
  });
171
171
  }
172
172
  }),
@@ -180,7 +180,7 @@ const relationshipDetailsLogic = setup({
180
180
  assign({
181
181
  xyedges: ({ context, event }) => context.xyedges.map((edge) => {
182
182
  if (edge.id === event.edge.id) {
183
- return Base.setHovered(edge, false);
183
+ return setHovered(edge, false);
184
184
  }
185
185
  return edge;
186
186
  })
@@ -191,7 +191,7 @@ const relationshipDetailsLogic = setup({
191
191
  },
192
192
  "dim.nonhovered.edges": {
193
193
  actions: assign({
194
- xyedges: ({ context }) => context.xyedges.map((edge) => Base.setDimmed(edge, edge.data.hovered !== true))
194
+ xyedges: ({ context }) => context.xyedges.map((edge) => setDimmed(edge, edge.data.hovered !== true))
195
195
  })
196
196
  },
197
197
  "undim.edges": {
@@ -200,10 +200,10 @@ const relationshipDetailsLogic = setup({
200
200
  const hasSelected = context.xyedges.some((edge) => edge.selected === true);
201
201
  if (hasSelected) {
202
202
  return context.xyedges.map(
203
- (edge) => Base.setDimmed(edge, edge.selected !== true ? edge.data.dimmed || "immediate" : false)
203
+ (edge) => setDimmed(edge, edge.selected !== true ? edge.data.dimmed || "immediate" : false)
204
204
  );
205
205
  }
206
- return context.xyedges.map(Base.setDimmed(false));
206
+ return context.xyedges.map(setDimmed(false));
207
207
  }
208
208
  })
209
209
  },
@@ -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 { 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
  relationId: RelationId;
36
37
  color: Color | undefined;
37
38
  label: string | null;
@@ -2,6 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { ElementActions } from './ElementActions.js';
3
3
  import { Handle } from '@xyflow/react';
4
4
  import { Position } from '@xyflow/system';
5
+ import { useEnabledFeatures } from '../../../context/DiagramFeatures.js';
5
6
  import { useDiagram } from '../../../hooks/useDiagram.js';
6
7
  import { customNode } from '../../../base/primitives/customNode.js';
7
8
  import { CompoundNodeContainer } from '../../../base/primitives/compound/CompoundNodeContainer.js';
@@ -9,6 +10,7 @@ import { CompoundTitle } from '../../../base/primitives/compound/CompoundTitle.j
9
10
  import { ElementNodeContainer } from '../../../base/primitives/element/ElementNodeContainer.js';
10
11
  import { ElementShape } from '../../../base/primitives/element/ElementShape.js';
11
12
  import { ElementTitle } from '../../../base/primitives/element/ElementTitle.js';
13
+ import { ElementTags } from '../../../base/primitives/element/ElementTags.js';
12
14
  import { ElementDetailsButton } from '../../../base/primitives/element/ElementDetailsButton.js';
13
15
 
14
16
  const ElementDetailsButtonWithHandler = (props) => {
@@ -25,9 +27,11 @@ const ElementDetailsButtonWithHandler = (props) => {
25
27
  );
26
28
  };
27
29
  const ElementNode = customNode((props) => {
30
+ const { enableElementTags } = useEnabledFeatures();
28
31
  return /* @__PURE__ */ jsxs(ElementNodeContainer, { nodeProps: props, children: [
29
32
  /* @__PURE__ */ jsx(ElementShape, { ...props }),
30
33
  /* @__PURE__ */ jsx(ElementTitle, { ...props }),
34
+ enableElementTags && /* @__PURE__ */ jsx(ElementTags, { ...props }),
31
35
  /* @__PURE__ */ jsx(ElementDetailsButtonWithHandler, { ...props }),
32
36
  /* @__PURE__ */ jsx(ElementActions, { ...props }),
33
37
  /* @__PURE__ */ jsx(ElementPorts, { ...props })
@@ -3,6 +3,7 @@ import { RelationshipDetailsActorRef, RelationshipDetailsSnapshot, Events } from
3
3
  import { Context, ReactNode, CSSProperties } from 'react';
4
4
  import { GeneralHelpers, ViewportHelperFunctions, ReactFlowState } from '@xyflow/react';
5
5
  import { EdgeMarkerType, HandleType } from '@xyflow/system';
6
+ import { Dimmed } from '../../base/types.Base';
6
7
  export declare const RelationshipDetailsActorContext: Context<RelationshipDetailsActorRef | null>;
7
8
  export declare function useRelationshipDetailsActor(): RelationshipDetailsActorRef;
8
9
  export declare function useRelationshipDetailsState<T = unknown>(selector: (state: RelationshipDetailsSnapshot) => T, compare?: (a: NoInfer<T>, b: NoInfer<T>) => boolean): T;
@@ -50,7 +51,7 @@ export declare function useRelationshipDetails(): {
50
51
  data: {
51
52
  hovered?: boolean;
52
53
  active?: boolean;
53
- dimmed?: import("../../base").Base.Dimmed;
54
+ dimmed?: Dimmed;
54
55
  relationId: RelationId;
55
56
  color: Color | undefined;
56
57
  label: string | null;
@@ -93,7 +94,7 @@ export declare function useRelationshipDetails(): {
93
94
  data: {
94
95
  hovered?: boolean;
95
96
  active?: boolean;
96
- dimmed?: import("../../base").Base.Dimmed;
97
+ dimmed?: Dimmed;
97
98
  relationId: RelationId;
98
99
  color: Color | undefined;
99
100
  label: string | null;
@@ -133,7 +134,7 @@ export declare function useRelationshipDetails(): {
133
134
  data: {
134
135
  hovered?: boolean;
135
136
  active?: boolean;
136
- dimmed?: import("../../base").Base.Dimmed;
137
+ dimmed?: Dimmed;
137
138
  relationId: RelationId;
138
139
  color: Color | undefined;
139
140
  label: string | null;
@@ -172,7 +173,7 @@ export declare function useRelationshipDetails(): {
172
173
  data: {
173
174
  hovered?: boolean;
174
175
  active?: boolean;
175
- dimmed?: import("../../base").Base.Dimmed;
176
+ dimmed?: Dimmed;
176
177
  relationId: RelationId;
177
178
  color: Color | undefined;
178
179
  label: string | null;
@@ -211,7 +212,7 @@ export declare function useRelationshipDetails(): {
211
212
  data: {
212
213
  hovered?: boolean;
213
214
  active?: boolean;
214
- dimmed?: import("../../base").Base.Dimmed;
215
+ dimmed?: Dimmed;
215
216
  relationId: RelationId;
216
217
  color: Color | undefined;
217
218
  label: string | null;
@@ -250,7 +251,7 @@ export declare function useRelationshipDetails(): {
250
251
  data: {
251
252
  hovered?: boolean;
252
253
  active?: boolean;
253
- dimmed?: import("../../base").Base.Dimmed;
254
+ dimmed?: Dimmed;
254
255
  relationId: RelationId;
255
256
  color: Color | undefined;
256
257
  label: string | null;
@@ -289,7 +290,7 @@ export declare function useRelationshipDetails(): {
289
290
  data: {
290
291
  hovered?: boolean;
291
292
  active?: boolean;
292
- dimmed?: import("../../base").Base.Dimmed;
293
+ dimmed?: Dimmed;
293
294
  relationId: RelationId;
294
295
  color: Color | undefined;
295
296
  label: string | null;
@@ -329,7 +330,7 @@ export declare function useRelationshipDetails(): {
329
330
  data: {
330
331
  hovered?: boolean;
331
332
  active?: boolean;
332
- dimmed?: import("../../base").Base.Dimmed;
333
+ dimmed?: Dimmed;
333
334
  relationId: RelationId;
334
335
  color: Color | undefined;
335
336
  label: string | null;
@@ -368,7 +369,7 @@ export declare function useRelationshipDetails(): {
368
369
  data: {
369
370
  hovered?: boolean;
370
371
  active?: boolean;
371
- dimmed?: import("../../base").Base.Dimmed;
372
+ dimmed?: Dimmed;
372
373
  relationId: RelationId;
373
374
  color: Color | undefined;
374
375
  label: string | null;
@@ -93,6 +93,7 @@ function layoutResultToXYFlow(layout) {
93
93
  icon: node.icon ?? "none",
94
94
  ports: node.ports,
95
95
  style: node.style,
96
+ tags: node.tags,
96
97
  ...navigateTo
97
98
  }
98
99
  }
@@ -236,11 +236,13 @@ function layoutRelationshipDetails(data, scope) {
236
236
  return {
237
237
  id,
238
238
  parent: parentId ?? null,
239
+ x: position.x,
240
+ y: position.y,
239
241
  position: [position.x, position.y],
240
242
  title: element.title,
241
243
  description: element.description,
242
244
  technology: element.technology,
243
- tags: null,
245
+ tags: [...element.tags],
244
246
  links: null,
245
247
  color: inheritFromNodeOrAncestor?.color ?? element.color,
246
248
  shape: inheritFromNode?.shape ?? element.shape,