@likec4/diagram 1.32.2 → 1.34.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 (166) hide show
  1. package/README.md +25 -0
  2. package/bundle/{chunk-DlHyKoeo.js → chunk-Dd7et66b.js} +533 -487
  3. package/bundle/custom.js +53 -50
  4. package/bundle/index.js +471 -311
  5. package/dist/LikeC4Diagram.props.d.ts +1 -1
  6. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  7. package/dist/base/primitives/MarkdownBlock.d.ts +27 -0
  8. package/dist/base/primitives/MarkdownBlock.js +42 -0
  9. package/dist/base/primitives/compound/CompoundActionButton.js +1 -1
  10. package/dist/base/primitives/compound/CompoundDetailsButton.js +1 -1
  11. package/dist/base/primitives/edge/EdgeActionButton.js +1 -1
  12. package/dist/base/primitives/element/ElementDetailsButton.js +1 -1
  13. package/dist/base/primitives/element/ElementTags.d.ts +1 -1
  14. package/dist/base/primitives/element/ElementTags.js +116 -125
  15. package/dist/base/primitives/element/ElementTitle.css.js +6 -1
  16. package/dist/base/primitives/element/ElementTitle.d.ts +3 -2
  17. package/dist/base/primitives/element/ElementTitle.js +9 -6
  18. package/dist/base/primitives/index.d.ts +1 -0
  19. package/dist/bundle/LikeC4View.d.ts +1 -1
  20. package/dist/bundle/LikeC4View.js +1 -1
  21. package/dist/bundle/LikeC4View.props.d.ts +1 -1
  22. package/dist/bundle/ReactLikeC4.d.ts +1 -1
  23. package/dist/bundle/custom.js +31 -0
  24. package/dist/bundle/index.js +1 -0
  25. package/dist/components/ErrorFallback.js +1 -1
  26. package/dist/components/Link.js +2 -1
  27. package/dist/components/SearchControl.js +1 -1
  28. package/dist/context/DiagramFeatures.d.ts +3 -2
  29. package/dist/context/DiagramFeatures.js +16 -1
  30. package/dist/context/IconRenderer.js +6 -1
  31. package/dist/context/TagStylesContext.js +1 -1
  32. package/dist/custom/components.d.ts +2 -2
  33. package/dist/custom/customNodes.js +18 -0
  34. package/dist/custom/hooks.d.ts +3 -3
  35. package/dist/custom/index.js +31 -0
  36. package/dist/hooks/safeContext.js +1 -1
  37. package/dist/hooks/useXYFlow.d.ts +2 -1
  38. package/dist/index.d.ts +4 -6
  39. package/dist/index.js +1 -0
  40. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +5 -2
  41. package/dist/likec4diagram/custom/nodes/ElementActions.js +2 -1
  42. package/dist/likec4diagram/custom/nodes/nodes.js +3 -3
  43. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +2 -1
  44. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +2 -1
  45. package/dist/likec4diagram/types.d.ts +3 -2
  46. package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +1 -1
  47. package/dist/likec4diagram/ui/controls/Controls.js +3 -1
  48. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +1 -1
  49. package/dist/likec4diagram/ui/controls/ManualLayoutToolsButton.js +9 -1
  50. package/dist/likec4diagram/ui/controls/NavigationButtons.js +2 -1
  51. package/dist/likec4diagram/ui/controls/ToggleReadonly.js +2 -1
  52. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +19 -15
  53. package/dist/likec4diagram/ui/notation/NotationPanel.js +3 -1
  54. package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +4 -1
  55. package/dist/likec4diagram/useViewToNodesEdges.js +2 -2
  56. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/createReactComponent.js +41 -0
  57. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.js +30 -0
  58. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertTriangle.js +13 -0
  59. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDownRight.js +13 -0
  60. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js +13 -0
  61. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconBrowser.js +13 -0
  62. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.js +13 -0
  63. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js +13 -0
  64. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js +13 -0
  65. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.js +13 -0
  66. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconCylinder.js +13 -0
  67. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconDeviceMobile.js +13 -0
  68. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js +13 -0
  69. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js +13 -0
  70. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconFocusCentered.js +13 -0
  71. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconHelpCircle.js +13 -0
  72. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js +13 -0
  73. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js +13 -0
  74. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignBottom.js +13 -0
  75. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignCenter.js +13 -0
  76. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignLeft.js +13 -0
  77. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignMiddle.js +13 -0
  78. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignRight.js +13 -0
  79. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignTop.js +13 -0
  80. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutBoardSplit.js +13 -0
  81. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutCollage.js +13 -0
  82. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutDashboard.js +13 -0
  83. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLock.js +13 -0
  84. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLockOpen2.js +13 -0
  85. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconMenu.js +13 -0
  86. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconMenu2.js +13 -0
  87. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlayFilled.js +13 -0
  88. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipBackFilled.js +13 -0
  89. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipForwardFilled.js +13 -0
  90. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerStopFilled.js +13 -0
  91. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconRectangularPrism.js +13 -0
  92. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconReorder.js +13 -0
  93. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconRouteOff.js +13 -0
  94. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js +13 -0
  95. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.js +13 -0
  96. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js +13 -0
  97. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconTarget.js +13 -0
  98. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconTransform.js +13 -0
  99. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconUser.js +13 -0
  100. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconX.js +13 -0
  101. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js +13 -0
  102. package/dist/overlays/element-details/ElementDetailsCard.css.js +4 -2
  103. package/dist/overlays/element-details/ElementDetailsCard.js +127 -12
  104. package/dist/overlays/element-details/TabPanelDeployments.js +3 -1
  105. package/dist/overlays/element-details/TabPanelRelationships.js +3 -1
  106. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  107. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +2 -2
  108. package/dist/overlays/relationship-details/RelationshipDetails.js +3 -1
  109. package/dist/overlays/relationship-details/SelectEdge.js +2 -1
  110. package/dist/overlays/relationship-details/_types.d.ts +4 -3
  111. package/dist/overlays/relationship-details/actor.d.ts +2 -2
  112. package/dist/overlays/relationship-details/custom/ElementActions.js +3 -1
  113. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +2 -2
  114. package/dist/overlays/relationship-details/hooks.d.ts +10 -10
  115. package/dist/overlays/relationship-details/layout-to-xyflow.js +4 -4
  116. package/dist/overlays/relationship-details/layout.d.ts +5 -3
  117. package/dist/overlays/relationship-details/layout.js +2 -2
  118. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +3 -1
  119. package/dist/overlays/relationships-browser/SelectElement.js +2 -1
  120. package/dist/overlays/relationships-browser/_types.d.ts +3 -2
  121. package/dist/overlays/relationships-browser/custom/ElementActions.js +3 -1
  122. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +3 -3
  123. package/dist/overlays/relationships-browser/layout.d.ts +4 -3
  124. package/dist/overlays/relationships-browser/layout.js +3 -3
  125. package/dist/search/components/ElementsColumn.js +2 -2
  126. package/dist/search/components/PickView.js +1 -1
  127. package/dist/search/components/SearchByTags.js +1 -1
  128. package/dist/search/components/SearchInput.js +1 -1
  129. package/dist/search/components/ViewsColum.js +4 -3
  130. package/dist/state/DiagramActorProvider.js +9 -1
  131. package/dist/state/diagram-machine.js +1 -1
  132. package/dist/styles-min.css +1 -1
  133. package/dist/styles.css +1 -1
  134. package/dist/styles.css2.js +1 -1
  135. package/package.json +25 -19
  136. package/panda.buildinfo.json +881 -862
  137. package/src/LikeC4Diagram.props.ts +1 -1
  138. package/src/StaticLikeC4Diagram.tsx +1 -1
  139. package/src/base/primitives/MarkdownBlock.tsx +66 -0
  140. package/src/base/primitives/element/ElementTags.tsx +118 -116
  141. package/src/base/primitives/element/ElementTitle.css.ts +7 -1
  142. package/src/base/primitives/element/ElementTitle.tsx +14 -9
  143. package/src/base/primitives/index.ts +1 -0
  144. package/src/bundle/LikeC4View.props.ts +1 -1
  145. package/src/bundle/LikeC4View.tsx +1 -1
  146. package/src/bundle/ReactLikeC4.tsx +1 -1
  147. package/src/context/DiagramFeatures.tsx +7 -7
  148. package/src/custom/components.ts +2 -0
  149. package/src/custom/hooks.ts +5 -0
  150. package/src/hooks/useXYFlow.ts +9 -1
  151. package/src/index.ts +18 -6
  152. package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +1 -1
  153. package/src/likec4diagram/types.ts +2 -2
  154. package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +21 -16
  155. package/src/likec4diagram/useViewToNodesEdges.ts +2 -1
  156. package/src/overlays/element-details/ElementDetailsCard.css.ts +3 -1
  157. package/src/overlays/element-details/ElementDetailsCard.tsx +101 -17
  158. package/src/overlays/relationship-details/_types.ts +12 -3
  159. package/src/overlays/relationship-details/layout-to-xyflow.ts +3 -2
  160. package/src/overlays/relationship-details/layout.ts +7 -4
  161. package/src/overlays/relationships-browser/_types.ts +2 -1
  162. package/src/overlays/relationships-browser/layout.ts +7 -4
  163. package/src/search/components/ElementsColumn.tsx +1 -1
  164. package/src/search/components/ViewsColum.tsx +2 -2
  165. package/src/state/DiagramActorProvider.tsx +10 -2
  166. package/src/state/diagram-machine.ts +1 -1
@@ -0,0 +1,13 @@
1
+ import createReactComponent from '../createReactComponent.js';
2
+
3
+ /**
4
+ * @license @tabler/icons-react v3.31.0 - MIT
5
+ *
6
+ * This source code is licensed under the MIT license.
7
+ * See the LICENSE file in the root directory of this source tree.
8
+ */
9
+
10
+
11
+ var IconZoomScan = createReactComponent("outline", "zoom-scan", "IconZoomScan", [["path", { "d": "M4 8v-2a2 2 0 0 1 2 -2h2", "key": "svg-0" }], ["path", { "d": "M4 16v2a2 2 0 0 0 2 2h2", "key": "svg-1" }], ["path", { "d": "M16 4h2a2 2 0 0 1 2 2v2", "key": "svg-2" }], ["path", { "d": "M16 20h2a2 2 0 0 0 2 -2v-2", "key": "svg-3" }], ["path", { "d": "M8 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0", "key": "svg-4" }], ["path", { "d": "M16 16l-2.5 -2.5", "key": "svg-5" }]]);
12
+
13
+ export { IconZoomScan as default };
@@ -212,12 +212,14 @@ const propertiesGrid = css({
212
212
  display: "grid",
213
213
  gridTemplateColumns: "min-content 1fr",
214
214
  gridAutoRows: "min-content max-content",
215
- gap: `[20px 16px]`,
215
+ gap: `[24px 20px]`,
216
216
  alignItems: "baseline",
217
217
  justifyItems: "stretch"
218
218
  });
219
219
  const propertyLabel = css({
220
- justifySelf: "end"
220
+ justifySelf: "end",
221
+ textAlign: "right",
222
+ userSelect: "none"
221
223
  });
222
224
  const resizeHandle = css({
223
225
  position: "absolute",
@@ -1,12 +1,11 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { cx, css } from '@likec4/styles/css';
3
- import { RemoveScroll, Card, Group, Text, CloseButton, Badge, Flex, ActionIconGroup, ActionIcon, Tooltip as Tooltip$1, Tabs, TabsList, TabsTab, TabsPanel, ScrollArea, Box, Stack, Divider as Divider$1, Code, UnstyledButton, ThemeIcon } from '@mantine/core';
3
+ import { RemoveScroll, Card, Group, Text, CloseButton, Badge, Flex, ActionIconGroup, ActionIcon, Tooltip as Tooltip$1, Tabs, TabsList, TabsTab, TabsPanel, ScrollArea, Box, Stack, Divider as Divider$1, ScrollAreaAutosize, UnstyledButton, ThemeIcon } from '@mantine/core';
4
4
  import { useViewportSize, useSessionStorage } from '@mantine/hooks';
5
5
  import { useSyncedRef, useDebouncedCallback, useTimeoutEffect } from '@react-hookz/web';
6
- import { IconExternalLink, IconFileSymlink, IconZoomScan, IconStack2 } from '@tabler/icons-react';
7
6
  import { useDragControls, useMotionValue, m } from 'motion/react';
8
7
  import { useState, useCallback, useRef } from 'react';
9
- import { pipe, map, partition, only, clamp, isNullish } from 'remeda';
8
+ import { pipe, map, partition, only, clamp, isNullish, entries } from 'remeda';
10
9
  import { ElementTag } from '../../base/primitives/element/ElementTags.js';
11
10
  import { Link } from '../../components/Link.js';
12
11
  import { useDiagram } from '../../hooks/useDiagram.js';
@@ -18,7 +17,12 @@ import { useLikeC4Model } from '../../likec4model/useLikeC4Model.js';
18
17
  import { useUpdateEffect } from '../../hooks/useUpdateEffect.js';
19
18
  import { IconRenderer } from '../../context/IconRenderer.js';
20
19
  import { stopPropagation } from '../../utils/xyflow.js';
20
+ import IconExternalLink from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js';
21
21
  import { IfEnabled, DiagramFeatures } from '../../context/DiagramFeatures.js';
22
+ import IconFileSymlink from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js';
23
+ import IconZoomScan from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
24
+ import { MarkdownBlock } from '../../base/primitives/MarkdownBlock.js';
25
+ import IconStack2 from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js';
22
26
 
23
27
  const Divider = Divider$1.withProps({
24
28
  mb: 8,
@@ -255,7 +259,23 @@ function ElementDetailsCard({
255
259
  /* @__PURE__ */ jsxs(Group, { align: "baseline", gap: "sm", wrap: "nowrap", children: [
256
260
  /* @__PURE__ */ jsxs("div", { children: [
257
261
  /* @__PURE__ */ jsx(SmallLabel, { children: "kind" }),
258
- /* @__PURE__ */ jsx(Badge, { radius: "sm", size: "sm", fw: 600, color: "gray", children: elementModel.kind })
262
+ /* @__PURE__ */ jsx(
263
+ Badge,
264
+ {
265
+ radius: "sm",
266
+ size: "sm",
267
+ fw: 600,
268
+ color: "gray",
269
+ style: {
270
+ cursor: "pointer"
271
+ },
272
+ onClick: (e) => {
273
+ e.stopPropagation();
274
+ diagram.openSearch(`kind:${elementModel.kind}`);
275
+ },
276
+ children: elementModel.kind
277
+ }
278
+ )
259
279
  ] }),
260
280
  /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
261
281
  /* @__PURE__ */ jsx(SmallLabel, { children: "tags" }),
@@ -304,6 +324,9 @@ function ElementDetailsCard({
304
324
  radius: "sm",
305
325
  onClick: (e) => {
306
326
  e.stopPropagation();
327
+ diagram.openSource({
328
+ element: elementModel.id
329
+ });
307
330
  },
308
331
  children: /* @__PURE__ */ jsx(IconFileSymlink, { stroke: 1.8, style: { width: "62%" } })
309
332
  }
@@ -340,8 +363,17 @@ function ElementDetailsCard({
340
363
  },
341
364
  children: [
342
365
  /* @__PURE__ */ jsx(TabsList, { children: TABS.map((tab) => /* @__PURE__ */ jsx(TabsTab, { value: tab, children: tab }, tab)) }),
343
- /* @__PURE__ */ jsx(TabsPanel, { value: "Properties", children: /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "y", type: "auto", children: /* @__PURE__ */ jsxs(Box, { className: propertiesGrid, pt: "xs", children: [
344
- /* @__PURE__ */ jsx(ElementProperty, { title: "description", emptyValue: "no description", children: elementModel.description }),
366
+ /* @__PURE__ */ jsx(TabsPanel, { value: "Properties", children: /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "y", type: "scroll", offsetScrollbars: true, children: /* @__PURE__ */ jsxs(Box, { className: propertiesGrid, pt: "xs", children: [
367
+ /* @__PURE__ */ jsxs(Fragment, { children: [
368
+ /* @__PURE__ */ jsx(PropertyLabel, { children: "description" }),
369
+ /* @__PURE__ */ jsx(
370
+ MarkdownBlock,
371
+ {
372
+ value: elementModel.description,
373
+ emptyText: "no description"
374
+ }
375
+ )
376
+ ] }),
345
377
  elementModel.technology && /* @__PURE__ */ jsx(ElementProperty, { title: "technology", children: elementModel.technology }),
346
378
  elementModel.links.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
347
379
  /* @__PURE__ */ jsx(PropertyLabel, { children: "links" }),
@@ -417,10 +449,7 @@ const ViewButton = ({
417
449
  }) => {
418
450
  return /* @__PURE__ */ jsx(UnstyledButton, { className: viewButton, onClick: (e) => onNavigateTo(view.id, e), children: /* @__PURE__ */ jsxs(Group, { gap: 6, align: "start", wrap: "nowrap", children: [
419
451
  /* @__PURE__ */ jsx(ThemeIcon, { size: "sm", variant: "transparent", children: view._type === "deployment" ? /* @__PURE__ */ jsx(IconStack2, { stroke: 1.8 }) : /* @__PURE__ */ jsx(IconZoomScan, { stroke: 1.8 }) }),
420
- /* @__PURE__ */ jsxs(Box, { children: [
421
- /* @__PURE__ */ jsx(Text, { component: "div", className: viewButtonTitle, lineClamp: 1, children: view.title || "untitled" }),
422
- view.description && /* @__PURE__ */ jsx(Text, { component: "div", mt: 2, fz: "xs", c: "dimmed", lh: 1.4, lineClamp: 1, children: view.description })
423
- ] })
452
+ /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { component: "div", className: viewButtonTitle, lineClamp: 1, children: view.title || "untitled" }) })
424
453
  ] }) });
425
454
  };
426
455
  function ElementProperty({
@@ -440,6 +469,7 @@ function ElementProperty({
440
469
  fz: "md",
441
470
  style: {
442
471
  whiteSpace: "preserve-breaks",
472
+ userSelect: "all",
443
473
  ...style
444
474
  },
445
475
  ...props,
@@ -449,11 +479,96 @@ function ElementProperty({
449
479
  ] });
450
480
  }
451
481
  function ElementMetata({
452
- value
482
+ value: metadata
453
483
  }) {
454
484
  return /* @__PURE__ */ jsxs(Fragment, { children: [
455
485
  /* @__PURE__ */ jsx(PropertyLabel, { children: "metadata" }),
456
- /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Code, { block: true, children: JSON.stringify(value, null, 2) }) })
486
+ /* @__PURE__ */ jsx(
487
+ Box,
488
+ {
489
+ className: css({
490
+ flex: 1,
491
+ display: "grid",
492
+ gridTemplateColumns: "min-content 1fr",
493
+ gridAutoRows: "min-content max-content",
494
+ gap: `[4px 4px]`,
495
+ alignItems: "baseline",
496
+ justifyItems: "stretch",
497
+ paddingRight: "2xs"
498
+ }),
499
+ children: entries(metadata).map(([key, value]) => /* @__PURE__ */ jsxs(
500
+ "div",
501
+ {
502
+ className: cx(
503
+ "group",
504
+ css({
505
+ display: "contents"
506
+ })
507
+ ),
508
+ children: [
509
+ /* @__PURE__ */ jsxs(
510
+ "div",
511
+ {
512
+ className: css({
513
+ fontSize: "sm",
514
+ fontWeight: 500,
515
+ justifySelf: "end",
516
+ whiteSpace: "nowrap"
517
+ }),
518
+ children: [
519
+ key,
520
+ ":"
521
+ ]
522
+ }
523
+ ),
524
+ /* @__PURE__ */ jsx(
525
+ "div",
526
+ {
527
+ className: css({}),
528
+ children: /* @__PURE__ */ jsx(
529
+ ScrollAreaAutosize,
530
+ {
531
+ type: "auto",
532
+ mah: 200,
533
+ overscrollBehavior: "none",
534
+ className: css({
535
+ transitionProperty: "all",
536
+ transitionDuration: "fast",
537
+ transitionTimingFunction: "inOut",
538
+ rounded: "sm",
539
+ color: "mantine.colors.gray[8]",
540
+ _dark: {
541
+ color: "mantine.colors.dark[1]"
542
+ },
543
+ _groupHover: {
544
+ transitionTimingFunction: "out",
545
+ color: "mantine.colors.defaultColor",
546
+ background: "mantine.colors.defaultHover"
547
+ }
548
+ }),
549
+ children: /* @__PURE__ */ jsx(
550
+ "div",
551
+ {
552
+ className: css({
553
+ fontSize: "sm",
554
+ padding: "2xs",
555
+ whiteSpace: "pre",
556
+ fontFamily: "[var(--mantine-font-family-monospace)]",
557
+ userSelect: "all"
558
+ }),
559
+ children: value
560
+ }
561
+ )
562
+ }
563
+ )
564
+ }
565
+ )
566
+ ]
567
+ },
568
+ key
569
+ ))
570
+ }
571
+ )
457
572
  ] });
458
573
  }
459
574
 
@@ -1,11 +1,13 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useTree, Alert, Tree, Box, rem, Button, Group, Text, ThemeIcon, Menu } from '@mantine/core';
3
- import { IconInfoCircle, IconTarget, IconZoomScan } from '@tabler/icons-react';
4
3
  import { memo, useMemo, useEffect } from 'react';
5
4
  import { useDiagram } from '../../hooks/useDiagram.js';
6
5
  import { useLikeC4Model } from '../../likec4model/useLikeC4Model.js';
7
6
  import { treeNodeLabel, treeNode, nodeLabel, instanceLabel } from './TabPanelDeployments.css.js';
7
+ import IconInfoCircle from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js';
8
+ import IconTarget from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconTarget.js';
8
9
  import { stopPropagation } from '../../utils/xyflow.js';
10
+ import IconZoomScan from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
9
11
 
10
12
  const DeploymentNodeRenderer = ({
11
13
  node
@@ -1,7 +1,6 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { nameFromFqn } from '@likec4/core';
3
3
  import { Stack, Group, Box, ThemeIcon, Text, Tooltip as Tooltip$1, ActionIcon, Paper } from '@mantine/core';
4
- import { IconArrowRight, IconInfoCircle, IconExternalLink } from '@tabler/icons-react';
5
4
  import { useSelector } from '@xstate/react';
6
5
  import { useState } from 'react';
7
6
  import { unique } from 'remeda';
@@ -9,6 +8,9 @@ import { useOverlaysActorRef } from '../../hooks/useOverlaysActor.js';
9
8
  import { RelationshipsBrowser } from '../relationships-browser/RelationshipsBrowser.js';
10
9
  import { useElementDetailsActorRef } from './actorContext.js';
11
10
  import { fqn, xyflow, relationshipStat } from './TabPanelRelationships.css.js';
11
+ import IconArrowRight from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js';
12
+ import IconInfoCircle from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js';
13
+ import IconExternalLink from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js';
12
14
 
13
15
  const Tooltip = Tooltip$1.withProps({
14
16
  color: "dark",
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useTree, Alert, Anchor, Tree, Box, Text, Pill } from '@mantine/core';
3
- import { IconInfoCircle } from '@tabler/icons-react';
4
3
  import { useMemo, useEffect } from 'react';
5
4
  import { treeNodeLabel, elementLabel } from './TabPanelStructure.css.js';
5
+ import IconInfoCircle from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js';
6
6
 
7
7
  const ElementLabel = ({
8
8
  element
@@ -2,7 +2,7 @@ import { RelationshipDetailsActorRef } from './actor';
2
2
  import { FunctionComponent, CSSProperties, ReactNode } from 'react';
3
3
  import { Position } from '@xyflow/system';
4
4
  import { EdgeData, Dimmed } from '../../base/types.Base';
5
- import { RelationId, Color, ViewId, RelationshipLineType } from '@likec4/core';
5
+ import { RelationId, Color, ViewId, RelationshipLineType, RichTextOrEmpty } from '@likec4/core';
6
6
  export declare const edgeTypes: {
7
7
  relationship: FunctionComponent<{
8
8
  id: string;
@@ -39,9 +39,9 @@ export declare const edgeTypes: {
39
39
  color: Color | undefined;
40
40
  label: string | null;
41
41
  technology?: string | undefined | undefined;
42
- description?: string | undefined | undefined;
43
42
  navigateTo: ViewId | null;
44
43
  line: RelationshipLineType;
44
+ description: RichTextOrEmpty;
45
45
  };
46
46
  }>;
47
47
  };
@@ -3,7 +3,6 @@ import { invariant, nonNullable, isAncestor } from '@likec4/core';
3
3
  import { cx } from '@likec4/styles/css';
4
4
  import { ActionIcon, Group } from '@mantine/core';
5
5
  import { useCallbackRef, useStateHistory } from '@mantine/hooks';
6
- import { IconX, IconChevronLeft, IconChevronRight } from '@tabler/icons-react';
7
6
  import { useSelector } from '@xstate/react';
8
7
  import { ReactFlowProvider, Panel, useStoreApi, useReactFlow } from '@xyflow/react';
9
8
  import { deepEqual } from 'fast-equals';
@@ -18,6 +17,9 @@ import { layoutRelationshipDetails } from './layout.js';
18
17
  import { SelectEdge } from './SelectEdge.js';
19
18
  import { RelationshipEdge } from './custom/edgeTypes.js';
20
19
  import { CompoundNode, ElementNode } from './custom/nodeTypes.js';
20
+ import IconX from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconX.js';
21
+ import IconChevronLeft from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js';
22
+ import IconChevronRight from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js';
21
23
 
22
24
  const nodeTypes = {
23
25
  element: ElementNode,
@@ -1,9 +1,10 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Popover, PopoverTarget, Button, Box, Text, ThemeIcon, PopoverDropdown, ScrollAreaAutosize } from '@mantine/core';
3
- import { IconArrowRight, IconSelector } from '@tabler/icons-react';
4
3
  import { useRef } from 'react';
5
4
  import { useRelationshipDetails } from './hooks.js';
6
5
  import { edgeSource, edgeTarget, scrollArea, edgeGrid, edgeRow, edgeArrow, edgeLabel } from './SelectEdge.css.js';
6
+ import IconArrowRight from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js';
7
+ import IconSelector from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.js';
7
8
 
8
9
  const SelectEdge = ({
9
10
  edge,
@@ -1,4 +1,4 @@
1
- import { Color, DiagramNode, Fqn, IconUrl, RelationId, RelationshipLineType, ViewId } from '@likec4/core/types';
1
+ import { Color, DiagramNode, Fqn, IconUrl, RelationId, RelationshipLineType, RichTextOrEmpty, 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,11 +10,12 @@ 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' | 'tags'>> & {
13
+ type ElementNodeData = Base.NodeData & NonOptional<Pick<DiagramNode, 'title' | 'technology' | 'color' | 'shape' | 'width' | 'height' | 'navigateTo' | 'style' | 'tags'>> & {
14
14
  column: Column;
15
15
  fqn: Fqn;
16
16
  icon: IconUrl;
17
17
  ports: Ports;
18
+ description: RichTextOrEmpty;
18
19
  };
19
20
  type CompoundNodeData = Base.NodeData & NonOptional<Pick<DiagramNode, 'title' | 'color' | 'style'>> & {
20
21
  column: Column;
@@ -32,9 +33,9 @@ export declare namespace RelationshipDetailsTypes {
32
33
  color: Color | undefined;
33
34
  label: string | null;
34
35
  technology?: string | undefined;
35
- description?: string | undefined;
36
36
  navigateTo: ViewId | null;
37
37
  line: RelationshipLineType;
38
+ description: RichTextOrEmpty;
38
39
  }>;
39
40
  type Edge = ReactFlowEdge<EdgeData, 'relationship'>;
40
41
  }
@@ -1,4 +1,4 @@
1
- import { BBox, EdgeId, ExclusiveUnion, Fqn, ViewId, RelationId, Color, RelationshipLineType } from '@likec4/core';
1
+ import { BBox, EdgeId, ExclusiveUnion, Fqn, ViewId, RelationId, Color, RelationshipLineType, RichTextOrEmpty } from '@likec4/core';
2
2
  import { EdgeChange, NodeChange, ReactFlowInstance, useStoreApi } from '@xyflow/react';
3
3
  import { ActorLogicFrom, ActorRefFromLogic, SnapshotFrom, StateMachine, Values, NonReducibleUnknown, EventObject, MetaObject, AnyActorLogic, ConditionalRequired, InputFrom, RequiredLogicInput, IsNotNever, ActorRef, MachineSnapshot, AnyActorRef, StateValue, AnyEventObject, ActionFunction, CancelAction } from 'xstate';
4
4
  import { Base } from '../../base';
@@ -628,9 +628,9 @@ export declare const relationshipDetailsLogic: StateMachine<Readonly<{
628
628
  color: Color | undefined;
629
629
  label: string | null;
630
630
  technology?: string | undefined | undefined;
631
- description?: string | undefined | undefined;
632
631
  navigateTo: ViewId | null;
633
632
  line: RelationshipLineType;
633
+ description: RichTextOrEmpty;
634
634
  };
635
635
  }[];
636
636
  bounds: BBox;
@@ -1,9 +1,11 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { IconZoomScan, IconTransform, IconFileSymlink } from '@tabler/icons-react';
3
2
  import { useEnabledFeatures } from '../../../context/DiagramFeatures.js';
4
3
  import { useCurrentViewId } from '../../../hooks/useCurrentViewId.js';
5
4
  import { useDiagram } from '../../../hooks/useDiagram.js';
6
5
  import { ElementActionButtons } from '../../../base/primitives/element/ElementActionButtons.js';
6
+ import IconZoomScan from '../../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
7
+ import IconTransform from '../../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconTransform.js';
8
+ import IconFileSymlink from '../../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js';
7
9
 
8
10
  const ElementActions = (props) => {
9
11
  const { enableNavigateTo, enableVscode } = useEnabledFeatures();
@@ -1,7 +1,7 @@
1
1
  import { FunctionComponent, CSSProperties, ReactNode } from 'react';
2
2
  import { Position } from '@xyflow/system';
3
3
  import { EdgeData, Dimmed } from '../../../base/types.Base';
4
- import { RelationId, Color, ViewId, RelationshipLineType } from '@likec4/core';
4
+ import { RelationId, Color, ViewId, RelationshipLineType, RichTextOrEmpty } from '@likec4/core';
5
5
  export declare const RelationshipEdge: FunctionComponent<{
6
6
  id: string;
7
7
  selected?: boolean;
@@ -37,8 +37,8 @@ export declare const RelationshipEdge: FunctionComponent<{
37
37
  color: Color | undefined;
38
38
  label: string | null;
39
39
  technology?: string | undefined | undefined;
40
- description?: string | undefined | undefined;
41
40
  navigateTo: ViewId | null;
42
41
  line: RelationshipLineType;
42
+ description: RichTextOrEmpty;
43
43
  };
44
44
  }>;
@@ -1,4 +1,4 @@
1
- import { EdgeId, Fqn, ViewId, RelationId, Color, RelationshipLineType, BBox } from '@likec4/core';
1
+ import { EdgeId, Fqn, ViewId, RelationId, Color, RelationshipLineType, RichTextOrEmpty, BBox } from '@likec4/core';
2
2
  import { RelationshipDetailsActorRef, RelationshipDetailsSnapshot, Events } from './actor';
3
3
  import { Context, ReactNode, CSSProperties } from 'react';
4
4
  import { GeneralHelpers, ViewportHelperFunctions, ReactFlowState } from '@xyflow/react';
@@ -56,9 +56,9 @@ export declare function useRelationshipDetails(): {
56
56
  color: Color | undefined;
57
57
  label: string | null;
58
58
  technology?: string | undefined | undefined;
59
- description?: string | undefined | undefined;
60
59
  navigateTo: ViewId | null;
61
60
  line: RelationshipLineType;
61
+ description: RichTextOrEmpty;
62
62
  };
63
63
  }> & ViewportHelperFunctions & {
64
64
  viewportInitialized: boolean;
@@ -99,9 +99,9 @@ export declare function useRelationshipDetails(): {
99
99
  color: Color | undefined;
100
100
  label: string | null;
101
101
  technology?: string | undefined | undefined;
102
- description?: string | undefined | undefined;
103
102
  navigateTo: ViewId | null;
104
103
  line: RelationshipLineType;
104
+ description: RichTextOrEmpty;
105
105
  };
106
106
  }>;
107
107
  setState: (partial: ReactFlowState<import("./_types").RelationshipDetailsTypes.Node, {
@@ -139,9 +139,9 @@ export declare function useRelationshipDetails(): {
139
139
  color: Color | undefined;
140
140
  label: string | null;
141
141
  technology?: string | undefined | undefined;
142
- description?: string | undefined | undefined;
143
142
  navigateTo: ViewId | null;
144
143
  line: RelationshipLineType;
144
+ description: RichTextOrEmpty;
145
145
  };
146
146
  }> | Partial< ReactFlowState<import("./_types").RelationshipDetailsTypes.Node, {
147
147
  id: string;
@@ -178,9 +178,9 @@ export declare function useRelationshipDetails(): {
178
178
  color: Color | undefined;
179
179
  label: string | null;
180
180
  technology?: string | undefined | undefined;
181
- description?: string | undefined | undefined;
182
181
  navigateTo: ViewId | null;
183
182
  line: RelationshipLineType;
183
+ description: RichTextOrEmpty;
184
184
  };
185
185
  }>> | ((state: ReactFlowState<import("./_types").RelationshipDetailsTypes.Node, {
186
186
  id: string;
@@ -217,9 +217,9 @@ export declare function useRelationshipDetails(): {
217
217
  color: Color | undefined;
218
218
  label: string | null;
219
219
  technology?: string | undefined | undefined;
220
- description?: string | undefined | undefined;
221
220
  navigateTo: ViewId | null;
222
221
  line: RelationshipLineType;
222
+ description: RichTextOrEmpty;
223
223
  };
224
224
  }>) => ReactFlowState<import("./_types").RelationshipDetailsTypes.Node, {
225
225
  id: string;
@@ -256,9 +256,9 @@ export declare function useRelationshipDetails(): {
256
256
  color: Color | undefined;
257
257
  label: string | null;
258
258
  technology?: string | undefined | undefined;
259
- description?: string | undefined | undefined;
260
259
  navigateTo: ViewId | null;
261
260
  line: RelationshipLineType;
261
+ description: RichTextOrEmpty;
262
262
  };
263
263
  }> | Partial< ReactFlowState<import("./_types").RelationshipDetailsTypes.Node, {
264
264
  id: string;
@@ -295,9 +295,9 @@ export declare function useRelationshipDetails(): {
295
295
  color: Color | undefined;
296
296
  label: string | null;
297
297
  technology?: string | undefined | undefined;
298
- description?: string | undefined | undefined;
299
298
  navigateTo: ViewId | null;
300
299
  line: RelationshipLineType;
300
+ description: RichTextOrEmpty;
301
301
  };
302
302
  }>>), replace?: boolean | undefined) => void;
303
303
  subscribe: (listener: (state: ReactFlowState<import("./_types").RelationshipDetailsTypes.Node, {
@@ -335,9 +335,9 @@ export declare function useRelationshipDetails(): {
335
335
  color: Color | undefined;
336
336
  label: string | null;
337
337
  technology?: string | undefined | undefined;
338
- description?: string | undefined | undefined;
339
338
  navigateTo: ViewId | null;
340
339
  line: RelationshipLineType;
340
+ description: RichTextOrEmpty;
341
341
  };
342
342
  }>, prevState: ReactFlowState<import("./_types").RelationshipDetailsTypes.Node, {
343
343
  id: string;
@@ -374,9 +374,9 @@ export declare function useRelationshipDetails(): {
374
374
  color: Color | undefined;
375
375
  label: string | null;
376
376
  technology?: string | undefined | undefined;
377
- description?: string | undefined | undefined;
378
377
  navigateTo: ViewId | null;
379
378
  line: RelationshipLineType;
379
+ description: RichTextOrEmpty;
380
380
  };
381
381
  }>) => void) => () => void;
382
382
  } | null;
@@ -1,4 +1,4 @@
1
- import { Queue, nonNullable } from '@likec4/core';
1
+ import { Queue, nonNullable, RichText } from '@likec4/core';
2
2
  import { hasAtLeast } from 'remeda';
3
3
  import { ZIndexes } from '../../base/const.js';
4
4
 
@@ -85,7 +85,7 @@ function layoutResultToXYFlow(layout) {
85
85
  fqn,
86
86
  title: node.title,
87
87
  technology: node.technology,
88
- description: node.description,
88
+ description: RichText.from(node.description),
89
89
  height: node.height,
90
90
  width: node.width,
91
91
  color: node.color,
@@ -131,8 +131,8 @@ function layoutResultToXYFlow(layout) {
131
131
  color,
132
132
  navigateTo,
133
133
  line,
134
- ...technology && { technology },
135
- ...description && { description }
134
+ description: RichText.from(description),
135
+ ...technology && { technology }
136
136
  }
137
137
  });
138
138
  }
@@ -1,4 +1,4 @@
1
- import { DiagramEdge, DiagramNode, DiagramView, Fqn, RelationId } from '@likec4/core/types';
1
+ import { DiagramEdge, DiagramNode, DiagramView, Fqn, RelationId, RichTextOrEmpty } from '@likec4/core/types';
2
2
  import { AnyAux, LikeC4ViewModel } from '@likec4/core/model';
3
3
  import { RelationshipDetailsTypes } from './_types';
4
4
  import { RelationshipDetailsViewData } from './compute';
@@ -8,15 +8,17 @@ export type LayoutResult = {
8
8
  bounds: DiagramView['bounds'];
9
9
  };
10
10
  export declare namespace LayoutResult {
11
- type Node = Omit<DiagramNode, 'modelRef' | 'deploymentRef' | 'inEdges' | 'outEdges'> & {
11
+ type Node = Omit<DiagramNode, 'modelRef' | 'description' | 'deploymentRef' | 'inEdges' | 'outEdges'> & {
12
+ description: RichTextOrEmpty;
12
13
  modelRef: Fqn;
13
14
  column: RelationshipDetailsTypes.Column;
14
15
  ports: RelationshipDetailsTypes.Ports;
15
16
  };
16
- type Edge = Omit<DiagramEdge, 'relations'> & {
17
+ type Edge = Omit<DiagramEdge, 'relations' | 'description'> & {
17
18
  relationId: RelationId;
18
19
  sourceHandle: string;
19
20
  targetHandle: string;
21
+ description: RichTextOrEmpty;
20
22
  };
21
23
  }
22
24
  export declare function layoutRelationshipDetails(data: RelationshipDetailsViewData, scope: LikeC4ViewModel<AnyAux> | null): LayoutResult;
@@ -1,6 +1,6 @@
1
1
  import { treeFromElements } from '@likec4/core/compute-view/relationships';
2
2
  import dagre from '@dagrejs/dagre';
3
- import { invariant } from '@likec4/core';
3
+ import { RichText, invariant } from '@likec4/core';
4
4
  import { ifind, DefaultMap } from '@likec4/core/utils';
5
5
  import { pipe, filter, mapToObj, find, map, tap, reduce, sortBy, prop } from 'remeda';
6
6
 
@@ -240,7 +240,7 @@ function layoutRelationshipDetails(data, scope) {
240
240
  y: position.y,
241
241
  position: [position.x, position.y],
242
242
  title: element.title,
243
- description: element.description,
243
+ description: RichText.from(element.description),
244
244
  technology: element.technology,
245
245
  tags: [...element.tags],
246
246
  links: null,
@@ -2,7 +2,6 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { cx } from '@likec4/styles/css';
3
3
  import { ActionIcon, Group } from '@mantine/core';
4
4
  import { useCallbackRef, useStateHistory } from '@mantine/hooks';
5
- import { IconX, IconChevronLeft, IconChevronRight } from '@tabler/icons-react';
6
5
  import { ReactFlowProvider, useStoreApi, useReactFlow, Panel } from '@xyflow/react';
7
6
  import { shallowEqual } from 'fast-equals';
8
7
  import { LayoutGroup, AnimatePresence, m } from 'motion/react';
@@ -13,6 +12,9 @@ import { useRelationshipsView } from './layout.js';
13
12
  import { SelectElement } from './SelectElement.js';
14
13
  import { RelationshipEdge } from './custom/edgeTypes.js';
15
14
  import { EmptyNode, CompoundNode, ElementNode } from './custom/nodeTypes.js';
15
+ import IconX from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconX.js';
16
+ import IconChevronLeft from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js';
17
+ import IconChevronRight from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js';
16
18
 
17
19
  const nodeTypes = {
18
20
  element: ElementNode,
@@ -1,13 +1,14 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { ancestorsFqn } from '@likec4/core';
3
3
  import { useTree, Group, Box, Popover, PopoverTarget, Button, Text, PopoverDropdown, ScrollAreaAutosize, Tree, ActionIcon, Tooltip, SegmentedControl } from '@mantine/core';
4
- import { IconSelector, IconChevronRight } from '@tabler/icons-react';
5
4
  import { memo, useRef, useEffect } from 'react';
6
5
  import { useRelationshipsBrowser, useRelationshipsBrowserState } from './hooks.js';
7
6
  import * as SelectElement_css from './SelectElement.css.js';
8
7
  import { scrollArea } from './SelectElement.css.js';
9
8
  import { useLikeC4Model } from '../../likec4model/useLikeC4Model.js';
10
9
  import { useLikeC4ElementsTree } from '../../likec4model/useLikeC4ElementsTree.js';
10
+ import IconSelector from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.js';
11
+ import IconChevronRight from '../../node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js';
11
12
 
12
13
  const selector2 = (state) => {
13
14
  const subjectExistsInScope = state.context.layouted?.subjectExistsInScope ?? false;