@likec4/diagram 1.55.1 → 1.56.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 (343) hide show
  1. package/dist/LikeC4Diagram.js +148 -194
  2. package/dist/LikeC4ModelProvider.js +13 -9
  3. package/dist/LikeC4ProjectsOverview.js +24 -30
  4. package/dist/LikeC4ProjectsProvider.js +33 -26
  5. package/dist/LikeC4Styles.js +40 -57
  6. package/dist/LikeC4View.js +156 -196
  7. package/dist/ReactLikeC4.js +43 -65
  8. package/dist/StaticLikeC4Diagram.js +36 -41
  9. package/dist/_virtual/_rolldown/runtime.js +17 -0
  10. package/dist/adhoc-editor/EditorPanel.js +102 -101
  11. package/dist/adhoc-editor/ElementsTree.js +113 -139
  12. package/dist/adhoc-editor/LikeC4AdHocViewEditor.js +77 -70
  13. package/dist/adhoc-editor/components/Tree.d.ts +2 -2
  14. package/dist/adhoc-editor/components/Tree.js +205 -288
  15. package/dist/adhoc-editor/hooks.js +28 -23
  16. package/dist/adhoc-editor/index.js +2 -1
  17. package/dist/adhoc-editor/state/ActorProvider.js +33 -36
  18. package/dist/adhoc-editor/state/actor.editor.js +148 -186
  19. package/dist/adhoc-editor/state/actor.js +12 -14
  20. package/dist/adhoc-editor/state/actor.layouter.js +49 -65
  21. package/dist/adhoc-editor/state/actor.types.js +19 -23
  22. package/dist/adhoc-editor/state/panel.js +112 -127
  23. package/dist/adhoc-editor/state/utils.js +22 -29
  24. package/dist/adhoc-editor/useElementsTree.js +89 -121
  25. package/dist/base/Background.js +26 -29
  26. package/dist/base/Base.js +34 -41
  27. package/dist/base/BaseXYFlow.js +135 -165
  28. package/dist/base/const.js +18 -19
  29. package/dist/base/updateEdges.js +38 -57
  30. package/dist/base/updateNodes.js +46 -65
  31. package/dist/base-primitives/Markdown.d.ts +1 -1
  32. package/dist/base-primitives/Markdown.js +32 -47
  33. package/dist/base-primitives/NodeHandles.js +39 -49
  34. package/dist/base-primitives/compound/CompoundActionButton.js +49 -69
  35. package/dist/base-primitives/compound/CompoundDetailsButton.js +39 -64
  36. package/dist/base-primitives/compound/CompoundNodeContainer.js +46 -66
  37. package/dist/base-primitives/compound/CompoundTitle.js +15 -12
  38. package/dist/base-primitives/compound/actionbtns.css.js +9 -18
  39. package/dist/base-primitives/edge/EdgeActionButton.js +17 -19
  40. package/dist/base-primitives/edge/EdgeContainer.js +29 -48
  41. package/dist/base-primitives/edge/EdgeLabel.js +44 -65
  42. package/dist/base-primitives/edge/EdgeLabelContainer.js +35 -73
  43. package/dist/base-primitives/edge/EdgeMarkers.js +157 -215
  44. package/dist/base-primitives/edge/EdgePath.js +62 -115
  45. package/dist/base-primitives/element/ElementActionButtons.js +92 -81
  46. package/dist/base-primitives/element/ElementData.js +107 -126
  47. package/dist/base-primitives/element/ElementDetailsButton.js +78 -98
  48. package/dist/base-primitives/element/ElementNodeContainer.js +51 -82
  49. package/dist/base-primitives/element/ElementShape.js +331 -317
  50. package/dist/base-primitives/element/ElementTags.d.ts +1 -1
  51. package/dist/base-primitives/element/ElementTags.js +133 -193
  52. package/dist/base-primitives/memoEdge.js +11 -10
  53. package/dist/base-primitives/memoNode.js +16 -20
  54. package/dist/components/ErrorFallback.js +111 -75
  55. package/dist/components/GithubIcon.js +14 -16
  56. package/dist/components/Link.js +99 -113
  57. package/dist/components/Logo.js +38 -41
  58. package/dist/components/NavigationLink.js +15 -23
  59. package/dist/components/NavigationPanel.js +26 -47
  60. package/dist/components/PortalToContainer.js +16 -10
  61. package/dist/components/RootContainer.js +35 -31
  62. package/dist/components/SearchControl.css.js +65 -75
  63. package/dist/components/SearchControl.js +36 -14
  64. package/dist/components/ViewNotFound.js +22 -29
  65. package/dist/context/CurrentViewModelProvider.js +11 -9
  66. package/dist/context/DefaultMantineProvider.js +45 -72
  67. package/dist/context/DiagramEventHandlers.js +43 -48
  68. package/dist/context/DiagramFeatures.js +73 -69
  69. package/dist/context/EnsureMantine.js +13 -16
  70. package/dist/context/FramerMotionConfig.js +17 -11
  71. package/dist/context/IconRenderer.js +90 -106
  72. package/dist/context/LikeC4ModelContext.js +14 -10
  73. package/dist/context/LikeC4ProjectsContext.js +7 -6
  74. package/dist/context/RootContainerContext.d.ts +2 -5
  75. package/dist/context/RootContainerContext.js +24 -26
  76. package/dist/context/TagStylesContext.js +49 -57
  77. package/dist/custom/customNodes.js +224 -28
  78. package/dist/custom/index.js +41 -40
  79. package/dist/editor/LikeC4EditorCallbacks.js +4 -2
  80. package/dist/editor/LikeC4EditorProvider.js +32 -7
  81. package/dist/editor/applyChangesToManualLayout.js +144 -163
  82. package/dist/editor/editorActor.actions.js +122 -138
  83. package/dist/editor/editorActor.setup.js +30 -36
  84. package/dist/editor/editorActor.states.js +209 -263
  85. package/dist/editor/hotkeyActor.js +18 -17
  86. package/dist/editor/useEditorActorLogic.js +31 -43
  87. package/dist/hooks/safeContext.js +17 -17
  88. package/dist/hooks/useCallbackRef.js +18 -11
  89. package/dist/hooks/useCurrentView.js +16 -7
  90. package/dist/hooks/useCurrentViewModel.js +14 -9
  91. package/dist/hooks/useDiagram.js +55 -37
  92. package/dist/hooks/useDiagramCompareLayout.js +77 -81
  93. package/dist/hooks/useId.js +8 -6
  94. package/dist/hooks/useLikeC4ElementsTree.js +22 -21
  95. package/dist/hooks/useLikeC4Model.js +21 -20
  96. package/dist/hooks/useLikeC4Project.js +40 -29
  97. package/dist/hooks/useLikeC4Styles.js +6 -6
  98. package/dist/hooks/useMantinePortalProps.js +10 -6
  99. package/dist/hooks/useOverlaysActor.js +7 -6
  100. package/dist/hooks/useSearchActor.js +7 -6
  101. package/dist/hooks/useSetState.js +21 -19
  102. package/dist/hooks/useUpdateEffect.js +18 -29
  103. package/dist/hooks/useXYFlow.js +13 -15
  104. package/dist/index.js +24 -23
  105. package/dist/likec4diagram/DiagramUI.js +33 -37
  106. package/dist/likec4diagram/DiagramXYFlow.js +215 -224
  107. package/dist/likec4diagram/convert-to-xyflow.js +21 -22
  108. package/dist/likec4diagram/custom/edges/EdgeDrifts.js +22 -32
  109. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +275 -372
  110. package/dist/likec4diagram/custom/edges/SequenceStepEdge.js +71 -75
  111. package/dist/likec4diagram/custom/edges/edges.css.js +41 -47
  112. package/dist/likec4diagram/custom/edges/useControlPoints.js +52 -56
  113. package/dist/likec4diagram/custom/edges/useRelationshipEdgePath.js +54 -76
  114. package/dist/likec4diagram/custom/index.js +17 -17
  115. package/dist/likec4diagram/custom/nodes/CompoundActions.js +19 -26
  116. package/dist/likec4diagram/custom/nodes/ElementActions.js +131 -82
  117. package/dist/likec4diagram/custom/nodes/NodeDrifts.js +20 -26
  118. package/dist/likec4diagram/custom/nodes/NodeNotes.js +215 -273
  119. package/dist/likec4diagram/custom/nodes/SequenceActorNode.js +131 -147
  120. package/dist/likec4diagram/custom/nodes/nodes.js +135 -146
  121. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +155 -159
  122. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +58 -86
  123. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +108 -164
  124. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +56 -68
  125. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +3 -6
  126. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +97 -102
  127. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +13 -13
  128. package/dist/likec4diagram/custom/nodes/toolbar/types.js +6 -5
  129. package/dist/likec4diagram/custom/nodes/toolbar/useHandlers.js +36 -41
  130. package/dist/likec4diagram/relationship-popover/RelationshipPopover.js +510 -541
  131. package/dist/likec4diagram/relationship-popover/actor.js +113 -152
  132. package/dist/likec4diagram/relationship-popover/components.js +39 -43
  133. package/dist/likec4diagram/state/DiagramActorProvider.js +135 -136
  134. package/dist/likec4diagram/state/aligners.js +283 -360
  135. package/dist/likec4diagram/state/assign.js +84 -108
  136. package/dist/likec4diagram/state/createViewChange.js +72 -92
  137. package/dist/likec4diagram/state/diagram-api.js +224 -152
  138. package/dist/likec4diagram/state/hotkeyActor.js +54 -45
  139. package/dist/likec4diagram/state/machine.actions.js +709 -821
  140. package/dist/likec4diagram/state/machine.actions.layout.js +154 -183
  141. package/dist/likec4diagram/state/machine.js +113 -134
  142. package/dist/likec4diagram/state/machine.setup.js +104 -113
  143. package/dist/likec4diagram/state/machine.state.initializing.js +54 -54
  144. package/dist/likec4diagram/state/machine.state.navigating.js +192 -227
  145. package/dist/likec4diagram/state/machine.state.ready.focused.js +72 -88
  146. package/dist/likec4diagram/state/machine.state.ready.idle.js +79 -98
  147. package/dist/likec4diagram/state/machine.state.ready.js +126 -202
  148. package/dist/likec4diagram/state/machine.state.ready.printing.js +38 -39
  149. package/dist/likec4diagram/state/machine.state.ready.walkthrough.js +153 -193
  150. package/dist/likec4diagram/state/mediaPrintActor.js +20 -16
  151. package/dist/likec4diagram/state/persistence.js +20 -21
  152. package/dist/likec4diagram/state/utils.js +131 -162
  153. package/dist/likec4diagram/ui/LayoutDriftFrame.js +53 -64
  154. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +58 -80
  155. package/dist/likec4diagram/ui/notation/NotationPanel.js +183 -214
  156. package/dist/likec4diagram/useLayoutConstraints.js +386 -433
  157. package/dist/likec4diagram/xyflow-diagram/diagram-view.js +216 -227
  158. package/dist/likec4diagram/xyflow-sequence/const.js +11 -7
  159. package/dist/likec4diagram/xyflow-sequence/sequence-layout.js +177 -180
  160. package/dist/navigationpanel/NavigationPanel.js +113 -123
  161. package/dist/navigationpanel/NavigationPanelControls.js +124 -150
  162. package/dist/navigationpanel/NavigationPanelDropdown.js +365 -477
  163. package/dist/navigationpanel/_common.d.ts +4 -10
  164. package/dist/navigationpanel/_common.js +57 -70
  165. package/dist/navigationpanel/actor.js +153 -236
  166. package/dist/navigationpanel/comparepanel/CompareActionsMenu.js +66 -83
  167. package/dist/navigationpanel/comparepanel/ComparePanel.js +135 -164
  168. package/dist/navigationpanel/comparepanel/ComparePanelControls.js +50 -58
  169. package/dist/navigationpanel/comparepanel/DriftsSummary.js +207 -254
  170. package/dist/navigationpanel/comparepanel/LayoutTypeSwitcher.js +33 -35
  171. package/dist/navigationpanel/controls/DetailsControls.js +219 -246
  172. package/dist/navigationpanel/controls/LayoutWarning.js +89 -100
  173. package/dist/navigationpanel/controls/LogoButton.js +46 -70
  174. package/dist/navigationpanel/controls/NavigationButtons.js +35 -52
  175. package/dist/navigationpanel/controls/OpenSource.js +27 -25
  176. package/dist/navigationpanel/controls/SearchControl.js +50 -61
  177. package/dist/navigationpanel/controls/ToggleReadonly.js +84 -81
  178. package/dist/navigationpanel/dropdown/ProjectsMenu.js +69 -87
  179. package/dist/navigationpanel/editorpanel/CenterCamera.js +17 -13
  180. package/dist/navigationpanel/editorpanel/ChangeAutoLayoutButton.js +182 -154
  181. package/dist/navigationpanel/editorpanel/EditorPanel.js +47 -45
  182. package/dist/navigationpanel/editorpanel/ManualLayoutToolsButton.js +122 -173
  183. package/dist/navigationpanel/editorpanel/ToggleReadonly.js +20 -13
  184. package/dist/navigationpanel/editorpanel/_common.d.ts +3 -6
  185. package/dist/navigationpanel/editorpanel/_common.js +13 -13
  186. package/dist/navigationpanel/editorpanel/styles.js +58 -75
  187. package/dist/navigationpanel/hooks.js +35 -29
  188. package/dist/navigationpanel/styles.css.js +20 -28
  189. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.js +107 -134
  190. package/dist/navigationpanel/walkthrough/DynamicViewControls.d.ts +8 -8
  191. package/dist/navigationpanel/walkthrough/DynamicViewControls.js +105 -120
  192. package/dist/navigationpanel/walkthrough/WalkthroughPanel.js +75 -83
  193. package/dist/overlays/Overlays.js +94 -112
  194. package/dist/overlays/element-details/ElementDetails.js +22 -28
  195. package/dist/overlays/element-details/ElementDetailsCard.css.js +198 -221
  196. package/dist/overlays/element-details/ElementDetailsCard.js +517 -499
  197. package/dist/overlays/element-details/MetadataValue.js +210 -250
  198. package/dist/overlays/element-details/TabPanelDeployments.css.js +40 -60
  199. package/dist/overlays/element-details/TabPanelDeployments.js +185 -178
  200. package/dist/overlays/element-details/TabPanelRelationships.css.js +63 -71
  201. package/dist/overlays/element-details/TabPanelRelationships.js +155 -140
  202. package/dist/overlays/element-details/TabPanelStructure.css.js +29 -33
  203. package/dist/overlays/element-details/TabPanelStructure.js +93 -93
  204. package/dist/overlays/element-details/actor.js +45 -55
  205. package/dist/overlays/element-details/actorContext.js +12 -10
  206. package/dist/overlays/overlay/Overlay.js +104 -151
  207. package/dist/overlays/overlaysActor.js +213 -264
  208. package/dist/overlays/relationship-details/RelationshipDetails.js +270 -253
  209. package/dist/overlays/relationship-details/SelectEdge.css.js +62 -74
  210. package/dist/overlays/relationship-details/SelectEdge.js +146 -126
  211. package/dist/overlays/relationship-details/actor.js +242 -303
  212. package/dist/overlays/relationship-details/compute.js +109 -135
  213. package/dist/overlays/relationship-details/custom/ElementActions.js +43 -56
  214. package/dist/overlays/relationship-details/custom/edgeTypes.js +43 -49
  215. package/dist/overlays/relationship-details/custom/nodeTypes.js +93 -119
  216. package/dist/overlays/relationship-details/hooks.js +44 -38
  217. package/dist/overlays/relationship-details/layout-to-xyflow.js +119 -141
  218. package/dist/overlays/relationship-details/layout.js +275 -304
  219. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +319 -321
  220. package/dist/overlays/relationships-browser/SelectElement.css.js +18 -21
  221. package/dist/overlays/relationships-browser/SelectElement.js +192 -218
  222. package/dist/overlays/relationships-browser/actor.js +364 -462
  223. package/dist/overlays/relationships-browser/const.js +7 -6
  224. package/dist/overlays/relationships-browser/custom/ElementActions.js +60 -63
  225. package/dist/overlays/relationships-browser/custom/EmptyNode.js +25 -29
  226. package/dist/overlays/relationships-browser/custom/edgeTypes.js +66 -99
  227. package/dist/overlays/relationships-browser/custom/nodeTypes.js +98 -123
  228. package/dist/overlays/relationships-browser/hooks.js +49 -51
  229. package/dist/overlays/relationships-browser/layout.js +413 -465
  230. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +141 -157
  231. package/dist/projects-overview/ProjectsOverview.js +56 -55
  232. package/dist/projects-overview/ProjectsOverviewXY.js +105 -94
  233. package/dist/projects-overview/actor.js +252 -345
  234. package/dist/projects-overview/context.js +8 -7
  235. package/dist/projects-overview/custom/edgeTypes.js +22 -21
  236. package/dist/projects-overview/custom/nodeTypes.js +38 -42
  237. package/dist/projects-overview/hooks.js +9 -9
  238. package/dist/projects-overview/layouted-to-xyflow.js +46 -42
  239. package/dist/projects-overview/panel/ProjectsOverviewPanel.js +7 -9
  240. package/dist/projects-overview/persistence.js +22 -22
  241. package/dist/search/Search.js +199 -181
  242. package/dist/search/SearchContext.js +16 -15
  243. package/dist/search/XStateSearchAdapter.js +68 -62
  244. package/dist/search/components/ElementsColumn.css.js +50 -68
  245. package/dist/search/components/ElementsColumn.js +248 -290
  246. package/dist/search/components/PickView.js +116 -140
  247. package/dist/search/components/SearchByTags.js +76 -94
  248. package/dist/search/components/SearchInput.js +187 -209
  249. package/dist/search/components/ViewsColum.js +151 -141
  250. package/dist/search/components/ViewsColumn.css.js +12 -26
  251. package/dist/search/components/_shared.css.js +127 -153
  252. package/dist/search/components/styles.css.js +47 -53
  253. package/dist/search/components/utils.js +44 -47
  254. package/dist/search/hooks.js +10 -10
  255. package/dist/search/searchActor.js +93 -128
  256. package/dist/shadowroot/ShadowRoot.js +66 -78
  257. package/dist/shadowroot/styles.css.js +56 -66
  258. package/dist/styles-font2.js +4 -0
  259. package/dist/styles2.js +4 -0
  260. package/dist/utils/index.js +5 -0
  261. package/dist/utils/roundDpr.js +19 -15
  262. package/dist/utils/view-bounds.js +48 -55
  263. package/dist/utils/xyflow.js +143 -113
  264. package/package.json +12 -13
  265. package/styles-font.css +1 -1
  266. package/styles-min.css +1 -1
  267. package/styles-xyflow.css +1 -1
  268. package/styles.css +1 -1
  269. package/dist/_virtual/_commonjsHelpers.js +0 -3
  270. package/dist/_virtual/assign-f10db67b.cjs.js +0 -3
  271. package/dist/_virtual/log-30abbb83.cjs.js +0 -3
  272. package/dist/_virtual/raise-f051f097.cjs.js +0 -3
  273. package/dist/_virtual/store-cfe7da62.cjs.js +0 -3
  274. package/dist/_virtual/xstate-actions.cjs.js +0 -5
  275. package/dist/_virtual/xstate-actions.cjs2.js +0 -3
  276. package/dist/_virtual/xstate-dev.cjs.js +0 -3
  277. package/dist/_virtual/xstate-guards.cjs.js +0 -5
  278. package/dist/_virtual/xstate-guards.cjs2.js +0 -3
  279. package/dist/_virtual/xstate-store-react.cjs.js +0 -5
  280. package/dist/_virtual/xstate-store-react.cjs2.js +0 -3
  281. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/createReactComponent.js +0 -41
  282. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.js +0 -30
  283. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertTriangle.js +0 -14
  284. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDownRight.js +0 -14
  285. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowLeft.js +0 -14
  286. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js +0 -14
  287. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconBolt.js +0 -14
  288. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconBrowser.js +0 -14
  289. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.js +0 -14
  290. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronDown.js +0 -14
  291. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js +0 -14
  292. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js +0 -14
  293. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.js +0 -14
  294. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconCylinder.js +0 -14
  295. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconDeviceMobile.js +0 -14
  296. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconDirectionSignFilled.js +0 -14
  297. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js +0 -14
  298. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js +0 -14
  299. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconFileText.js +0 -14
  300. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconFocusCentered.js +0 -14
  301. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconFolderFilled.js +0 -14
  302. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconHelpCircle.js +0 -14
  303. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js +0 -14
  304. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js +0 -14
  305. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignBottom.js +0 -14
  306. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignCenter.js +0 -14
  307. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignLeft.js +0 -14
  308. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignMiddle.js +0 -14
  309. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignRight.js +0 -14
  310. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignTop.js +0 -14
  311. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutBoardSplit.js +0 -14
  312. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutCollage.js +0 -14
  313. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutDashboard.js +0 -14
  314. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLink.js +0 -14
  315. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLock.js +0 -14
  316. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconLockOpen2.js +0 -14
  317. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlayFilled.js +0 -14
  318. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipBackFilled.js +0 -14
  319. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipForwardFilled.js +0 -14
  320. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerStopFilled.js +0 -14
  321. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconRectangularPrism.js +0 -14
  322. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconReorder.js +0 -14
  323. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconRouteOff.js +0 -14
  324. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js +0 -14
  325. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.js +0 -14
  326. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js +0 -14
  327. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconStarFilled.js +0 -14
  328. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconTarget.js +0 -14
  329. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconTransform.js +0 -14
  330. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.js +0 -14
  331. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconUser.js +0 -14
  332. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconX.js +0 -14
  333. package/dist/node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js +0 -14
  334. package/dist/node_modules/.pnpm/@xstate_store@3.17.1_react@19.2.4/node_modules/@xstate/store/dist/store-cfe7da62.cjs.js +0 -761
  335. package/dist/node_modules/.pnpm/@xstate_store@3.17.1_react@19.2.4/node_modules/@xstate/store/react/dist/xstate-store-react.cjs.js +0 -180
  336. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/actions/dist/xstate-actions.cjs.js +0 -37
  337. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/dev/dist/xstate-dev.cjs.js +0 -59
  338. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/dist/assign-f10db67b.cjs.js +0 -140
  339. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/dist/log-30abbb83.cjs.js +0 -401
  340. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/dist/raise-f051f097.cjs.js +0 -2830
  341. package/dist/node_modules/.pnpm/xstate@5.30.0/node_modules/xstate/guards/dist/xstate-guards.cjs.js +0 -26
  342. package/dist/styles-font.css2.js +0 -3
  343. package/dist/styles.css2.js +0 -3
@@ -1,510 +1,528 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { cx, css } from '@likec4/styles/css';
3
- import { HStack } from '@likec4/styles/jsx';
4
- import { RemoveScroll, Text, CloseButton, Badge, ActionIconGroup, ActionIcon, Tabs, TabsList, TabsTab, TabsPanel, ScrollArea, Box, Stack, Tooltip as Tooltip$1, Flex, Divider as Divider$1, UnstyledButton, Group, ThemeIcon } from '@mantine/core';
5
- import { useViewportSize, useSessionStorage } from '@mantine/hooks';
6
- import { useDebouncedCallback, useTimeoutEffect } from '@react-hookz/web';
7
- import { useDragControls, useMotionValue, m } from 'motion/react';
8
- import { useState, useCallback, useRef } from 'react';
9
- import { pipe, map, partition, only, clamp, isNullish, entries } from 'remeda';
10
- import { ElementTag } from '../../base-primitives/element/ElementTags.js';
11
- import { Link } from '../../components/Link.js';
12
- import { useCurrentViewModel } from '../../hooks/useCurrentViewModel.js';
13
- import '@xstate/react';
14
- import 'fast-equals';
15
- import { useDiagram } from '../../hooks/safeContext.js';
16
- import { useCallbackRef } from '../../hooks/useCallbackRef.js';
17
- import { elementIcon, card, cardHeader, title, tabsPanel, tabsTab, tabsList, tabsRoot, propertiesGrid, resizeHandle, backdropOpacity, backdropBlur, dialog, propertyLabel, viewButton, viewButtonTitle } from './ElementDetailsCard.css.js';
18
- import { MetadataProvider, MetadataValue } from './MetadataValue.js';
19
- import { TabPanelDeployments } from './TabPanelDeployments.js';
20
- import { TabPanelRelationships } from './TabPanelRelationships.js';
21
- import { TabPanelStructure } from './TabPanelStructure.js';
22
- import { useUpdateEffect } from '../../hooks/useUpdateEffect.js';
23
- import { IconRenderer } from '../../context/IconRenderer.js';
24
- import { stopPropagation } from '../../utils/xyflow.js';
25
- import IconExternalLink from '../../node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js';
26
- import { IfEnabled, DiagramFeatures } from '../../context/DiagramFeatures.js';
27
- import IconFileSymlink from '../../node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js';
28
- import IconZoomScan from '../../node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js';
29
- import { Markdown } from '../../base-primitives/Markdown.js';
30
- import IconStack2 from '../../node_modules/.pnpm/@tabler_icons-react@3.40.0_react@19.2.4/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js';
31
-
32
- const Divider = Divider$1.withProps({
33
- mb: 8,
34
- labelPosition: "left",
35
- variant: "dashed"
1
+ import "../../_virtual/_rolldown/runtime.js";
2
+ import { IconRenderer } from "../../context/IconRenderer.js";
3
+ import { useCallbackRef as useCallbackRef$1 } from "../../hooks/useCallbackRef.js";
4
+ import { useUpdateEffect as useUpdateEffect$1 } from "../../hooks/useUpdateEffect.js";
5
+ import { stopPropagation } from "../../utils/xyflow.js";
6
+ import { DiagramFeatures, IfEnabled } from "../../context/DiagramFeatures.js";
7
+ import { useDiagram } from "../../hooks/safeContext.js";
8
+ import { useCurrentViewModel } from "../../hooks/useCurrentViewModel.js";
9
+ import { Markdown } from "../../base-primitives/Markdown.js";
10
+ import { ElementTag } from "../../base-primitives/element/ElementTags.js";
11
+ import { Link } from "../../components/Link.js";
12
+ import { backdropBlur, backdropOpacity, card, cardHeader, dialog, elementIcon, propertiesGrid, propertyLabel, resizeHandle, tabsList, tabsPanel, tabsRoot, tabsTab, title, viewButton, viewButtonTitle } from "./ElementDetailsCard.css.js";
13
+ import { MetadataProvider, MetadataValue } from "./MetadataValue.js";
14
+ import { TabPanelDeployments } from "./TabPanelDeployments.js";
15
+ import { TabPanelRelationships } from "./TabPanelRelationships.js";
16
+ import { TabPanelStructure } from "./TabPanelStructure.js";
17
+ import { css, cx } from "@likec4/styles/css";
18
+ import { IconExternalLink, IconFileSymlink, IconStack2, IconZoomScan } from "@tabler/icons-react";
19
+ import { useCallback, useRef, useState } from "react";
20
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
21
+ import { useDebouncedCallback, useTimeoutEffect } from "@react-hookz/web";
22
+ import { clamp, entries, isNullish, map, only, partition, pipe } from "remeda";
23
+ import { ActionIcon, ActionIconGroup, Badge, Box, CloseButton, Divider, Flex, Group, RemoveScroll, ScrollArea, Stack, Tabs, TabsList, TabsPanel, TabsTab, Text, ThemeIcon, Tooltip, UnstyledButton } from "@mantine/core";
24
+ import { m, useDragControls, useMotionValue } from "motion/react";
25
+ import { useSessionStorage, useViewportSize } from "@mantine/hooks";
26
+ import { HStack } from "@likec4/styles/jsx";
27
+ //#region src/overlays/element-details/ElementDetailsCard.tsx
28
+ var Divider$1 = Divider.withProps({
29
+ mb: 8,
30
+ labelPosition: "left",
31
+ variant: "dashed"
36
32
  });
37
- const Tooltip = Tooltip$1.withProps({
38
- color: "dark",
39
- fz: "xs",
40
- openDelay: 400,
41
- closeDelay: 150,
42
- label: "",
43
- children: null,
44
- offset: 4
33
+ var Tooltip$1 = Tooltip.withProps({
34
+ color: "dark",
35
+ fz: "xs",
36
+ openDelay: 400,
37
+ closeDelay: 150,
38
+ label: "",
39
+ children: null,
40
+ offset: 4
45
41
  });
46
- const SmallLabel = Text.withProps({
47
- component: "div",
48
- fz: 11,
49
- fw: 500,
50
- c: "dimmed",
51
- lh: 1
42
+ var SmallLabel = Text.withProps({
43
+ component: "div",
44
+ fz: 11,
45
+ fw: 500,
46
+ c: "dimmed",
47
+ lh: 1
52
48
  });
53
- const PropertyLabel = Text.withProps({
54
- component: "div",
55
- fz: "xs",
56
- c: "dimmed",
57
- className: propertyLabel
49
+ var PropertyLabel = Text.withProps({
50
+ component: "div",
51
+ fz: "xs",
52
+ c: "dimmed",
53
+ className: propertyLabel
58
54
  });
59
- const MIN_PADDING = 24;
60
- const TABS = ["Properties", "Relationships", "Views", "Structure", "Deployments"];
61
- function ElementDetailsCard({
62
- viewId,
63
- fromNode,
64
- rectFromNode,
65
- fqn,
66
- onClose
67
- }) {
68
- const [opened, setOpened] = useState(false);
69
- const windowSize = useViewportSize();
70
- const windowWidth = windowSize.width || window.innerWidth || 1200, windowHeight = windowSize.height || window.innerHeight || 800;
71
- const [activeTab, setActiveTab] = useSessionStorage({
72
- key: `likec4:element-details:active-tab`,
73
- defaultValue: "Properties"
74
- });
75
- const diagram = useDiagram();
76
- const viewModel = useCurrentViewModel();
77
- const nodeModel = fromNode ? viewModel.findNode(fromNode) : viewModel.findNodeWithElement(fqn);
78
- const elementModel = viewModel.$model.element(fqn);
79
- const [viewsOf, otherViews] = pipe(
80
- [...elementModel.views()],
81
- map((v) => v.$view),
82
- partition((v) => v._type === "element" && v.viewOf === fqn)
83
- );
84
- let defaultView = nodeModel?.navigateTo?.$view ?? elementModel.defaultView?.$view ?? null;
85
- if (defaultView?.id === viewId) {
86
- defaultView = null;
87
- }
88
- const defaultLink = only(elementModel.links);
89
- const controls = useDragControls();
90
- const isCompound = (nodeModel?.$node.children?.length ?? 0) > 0;
91
- const _width = Math.min(700, windowWidth - MIN_PADDING * 2);
92
- const _height = Math.min(650, windowHeight - MIN_PADDING * 2);
93
- const fromPosition = rectFromNode ? {
94
- x: rectFromNode.x + (isCompound ? rectFromNode.width - _width / 2 : rectFromNode.width / 2),
95
- y: rectFromNode.y + (isCompound ? 0 : rectFromNode.height / 2)
96
- } : {
97
- x: windowWidth / 2,
98
- y: windowHeight / 2
99
- };
100
- const fromScale = rectFromNode ? Math.min(rectFromNode.width / _width, rectFromNode.height / _height, 0.9) : 1;
101
- const left = Math.round(
102
- clamp(fromPosition.x - _width / 2, {
103
- min: MIN_PADDING,
104
- max: windowWidth - _width - MIN_PADDING
105
- })
106
- );
107
- const top = Math.round(
108
- clamp(fromPosition.y - (isCompound ? 0 : 60), {
109
- min: MIN_PADDING,
110
- max: windowHeight - _height - MIN_PADDING
111
- })
112
- );
113
- const originX = clamp((fromPosition.x - left) / _width, {
114
- min: 0.1,
115
- max: 0.9
116
- });
117
- const originY = clamp((fromPosition.y - top) / _height, {
118
- min: 0.1,
119
- max: 0.9
120
- });
121
- const width = useMotionValue(_width);
122
- const height = useMotionValue(_height);
123
- useUpdateEffect(() => {
124
- width.set(_width);
125
- height.set(_height);
126
- }, [_width, _height]);
127
- const handleDrag = useCallback((_, info) => {
128
- width.set(Math.max(width.get() + info.delta.x, 320));
129
- height.set(Math.max(height.get() + info.delta.y, 300));
130
- }, [width, height]);
131
- const ref = useRef(null);
132
- const close = useDebouncedCallback(
133
- useCallbackRef(onClose),
134
- [],
135
- 50
136
- );
137
- const triggerClose = useCallbackRef((event) => {
138
- event?.stopPropagation();
139
- close();
140
- });
141
- const notation = nodeModel?.$node.notation ?? null;
142
- const elementIcon$1 = IconRenderer({
143
- element: {
144
- id: fqn,
145
- title: elementModel.title,
146
- icon: nodeModel?.icon ?? elementModel.icon
147
- },
148
- className: elementIcon
149
- });
150
- useTimeoutEffect(() => {
151
- if (!ref.current?.open) {
152
- ref.current?.showModal();
153
- }
154
- }, 20);
155
- useTimeoutEffect(() => {
156
- setOpened(true);
157
- }, 220);
158
- return /* @__PURE__ */ jsx(
159
- m.dialog,
160
- {
161
- ref,
162
- className: cx(dialog, RemoveScroll.classNames.fullWidth),
163
- layout: true,
164
- initial: {
165
- [backdropBlur]: "0px",
166
- [backdropOpacity]: "5%"
167
- },
168
- animate: {
169
- [backdropBlur]: "3px",
170
- [backdropOpacity]: "60%"
171
- },
172
- exit: {
173
- [backdropBlur]: "0px",
174
- [backdropOpacity]: "0%",
175
- transition: {
176
- duration: 0.1
177
- }
178
- },
179
- onClick: (e) => {
180
- e.stopPropagation();
181
- if (e.target?.nodeName?.toUpperCase() === "DIALOG") {
182
- ref.current?.close();
183
- }
184
- },
185
- onDoubleClick: stopPropagation,
186
- onPointerDown: stopPropagation,
187
- onClose: triggerClose,
188
- children: /* @__PURE__ */ jsx(RemoveScroll, { forwardProps: true, removeScrollBar: false, children: /* @__PURE__ */ jsxs(
189
- m.div,
190
- {
191
- layout: true,
192
- layoutRoot: true,
193
- drag: true,
194
- dragControls: controls,
195
- dragElastic: 0,
196
- dragMomentum: false,
197
- dragListener: false,
198
- "data-likec4-color": nodeModel?.color ?? elementModel.color,
199
- className: card,
200
- initial: {
201
- top,
202
- left,
203
- width: _width,
204
- height: _height,
205
- opacity: 0,
206
- originX,
207
- originY,
208
- scale: Math.max(fromScale, 0.65)
209
- },
210
- animate: {
211
- opacity: 1,
212
- scale: 1
213
- },
214
- exit: {
215
- opacity: 0,
216
- scale: 0.9,
217
- translateY: -10,
218
- transition: {
219
- duration: 0.1
220
- }
221
- },
222
- style: {
223
- width,
224
- height
225
- },
226
- children: [
227
- /* @__PURE__ */ jsxs("div", { className: cardHeader, onPointerDown: (e) => controls.start(e), children: [
228
- /* @__PURE__ */ jsxs(HStack, { alignItems: "start", justify: "space-between", gap: "sm", mb: "sm", flexWrap: "nowrap", children: [
229
- /* @__PURE__ */ jsxs(
230
- HStack,
231
- {
232
- alignItems: "start",
233
- gap: "sm",
234
- style: { cursor: "default", minWidth: 0, overflow: "hidden" },
235
- flexWrap: "nowrap",
236
- children: [
237
- elementIcon$1,
238
- /* @__PURE__ */ jsxs("div", { style: { minWidth: 0, overflow: "hidden" }, children: [
239
- /* @__PURE__ */ jsx(Tooltip, { label: elementModel.title, openDelay: 600, position: "bottom-start", children: /* @__PURE__ */ jsx(
240
- Text,
241
- {
242
- component: "div",
243
- className: title,
244
- children: elementModel.title
245
- }
246
- ) }),
247
- notation && /* @__PURE__ */ jsx(Text, { component: "div", c: "dimmed", fz: "sm", fw: 500, lh: 1.3, lineClamp: 1, children: notation })
248
- ] })
249
- ]
250
- }
251
- ),
252
- /* @__PURE__ */ jsx(CloseButton, { size: "lg", onClick: triggerClose })
253
- ] }),
254
- /* @__PURE__ */ jsxs(HStack, { alignItems: "baseline", gap: "sm", flexWrap: "nowrap", children: [
255
- /* @__PURE__ */ jsxs("div", { children: [
256
- /* @__PURE__ */ jsx(SmallLabel, { children: "kind" }),
257
- /* @__PURE__ */ jsx(
258
- Badge,
259
- {
260
- radius: "sm",
261
- size: "sm",
262
- fw: 600,
263
- color: "gray",
264
- style: {
265
- cursor: "pointer"
266
- },
267
- onClick: (e) => {
268
- e.stopPropagation();
269
- diagram.openSearch(`kind:${elementModel.kind}`);
270
- },
271
- children: elementModel.kind
272
- }
273
- )
274
- ] }),
275
- /* @__PURE__ */ jsxs("div", { style: { flex: 1, minWidth: 0, overflow: "hidden" }, children: [
276
- /* @__PURE__ */ jsx(SmallLabel, { children: "tags" }),
277
- /* @__PURE__ */ jsx(
278
- ElementTags,
279
- {
280
- tags: elementModel.tags,
281
- onClick: (tag) => diagram.openSearch(`#${tag}`)
282
- }
283
- )
284
- ] }),
285
- /* @__PURE__ */ jsxs(
286
- ActionIconGroup,
287
- {
288
- style: {
289
- alignSelf: "flex-start"
290
- },
291
- children: [
292
- defaultLink && /* @__PURE__ */ jsx(
293
- ActionIcon,
294
- {
295
- component: "a",
296
- href: defaultLink.url,
297
- target: "_blank",
298
- size: "lg",
299
- variant: "default",
300
- radius: "sm",
301
- children: /* @__PURE__ */ jsx(IconExternalLink, { stroke: 1.6, style: { width: "65%" } })
302
- }
303
- ),
304
- /* @__PURE__ */ jsx(IfEnabled, { feature: "Vscode", children: /* @__PURE__ */ jsx(Tooltip, { label: "Open source", children: /* @__PURE__ */ jsx(
305
- ActionIcon,
306
- {
307
- size: "lg",
308
- variant: "default",
309
- radius: "sm",
310
- onClick: (e) => {
311
- e.stopPropagation();
312
- diagram.openSource({
313
- element: elementModel.id
314
- });
315
- },
316
- children: /* @__PURE__ */ jsx(IconFileSymlink, { stroke: 1.8, style: { width: "62%" } })
317
- }
318
- ) }) }),
319
- defaultView && /* @__PURE__ */ jsx(Tooltip, { label: "Open default view", children: /* @__PURE__ */ jsx(
320
- ActionIcon,
321
- {
322
- size: "lg",
323
- variant: "default",
324
- radius: "sm",
325
- onClick: (e) => {
326
- e.stopPropagation();
327
- diagram.navigateTo(defaultView.id, fromNode ?? void 0);
328
- },
329
- children: /* @__PURE__ */ jsx(IconZoomScan, { style: { width: "70%" } })
330
- }
331
- ) })
332
- ]
333
- }
334
- )
335
- ] })
336
- ] }),
337
- /* @__PURE__ */ jsx(MetadataProvider, { children: /* @__PURE__ */ jsxs(
338
- Tabs,
339
- {
340
- value: activeTab,
341
- onChange: (v) => setActiveTab(v),
342
- variant: "none",
343
- classNames: {
344
- root: tabsRoot,
345
- list: tabsList,
346
- tab: tabsTab,
347
- panel: tabsPanel
348
- },
349
- children: [
350
- /* @__PURE__ */ jsx(TabsList, { children: TABS.map((tab) => /* @__PURE__ */ jsx(TabsTab, { value: tab, children: tab }, tab)) }),
351
- /* @__PURE__ */ jsx(TabsPanel, { value: "Properties", children: /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "y", type: "scroll", offsetScrollbars: true, children: /* @__PURE__ */ jsxs(Box, { className: propertiesGrid, pt: "xs", children: [
352
- elementModel.hasSummary && /* @__PURE__ */ jsxs(Fragment, { children: [
353
- /* @__PURE__ */ jsx(PropertyLabel, { children: "summary" }),
354
- /* @__PURE__ */ jsx(Markdown, { value: elementModel.summary })
355
- ] }),
356
- /* @__PURE__ */ jsxs(Fragment, { children: [
357
- /* @__PURE__ */ jsx(PropertyLabel, { children: "description" }),
358
- /* @__PURE__ */ jsx(
359
- Markdown,
360
- {
361
- value: elementModel.description,
362
- emptyText: "no description"
363
- }
364
- )
365
- ] }),
366
- elementModel.technology && /* @__PURE__ */ jsx(ElementProperty, { title: "technology", children: elementModel.technology }),
367
- elementModel.links.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
368
- /* @__PURE__ */ jsx(PropertyLabel, { children: "links" }),
369
- /* @__PURE__ */ jsx(HStack, { gap: "xs", flexWrap: "wrap", children: elementModel.links.map((link, i) => /* @__PURE__ */ jsx(Link, { value: link }, i)) })
370
- ] }),
371
- elementModel.$element.metadata && /* @__PURE__ */ jsx(ElementMetata, { value: elementModel.$element.metadata })
372
- ] }) }) }),
373
- /* @__PURE__ */ jsx(TabsPanel, { value: "Relationships", children: /* @__PURE__ */ jsx(
374
- DiagramFeatures,
375
- {
376
- overrides: {
377
- enableRelationshipBrowser: false,
378
- enableNavigateTo: false
379
- },
380
- children: opened && activeTab === "Relationships" && /* @__PURE__ */ jsx(
381
- TabPanelRelationships,
382
- {
383
- element: elementModel,
384
- node: nodeModel ?? null
385
- }
386
- )
387
- }
388
- ) }),
389
- /* @__PURE__ */ jsx(TabsPanel, { value: "Views", children: /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "y", type: "auto", children: /* @__PURE__ */ jsxs(Stack, { gap: "lg", children: [
390
- viewsOf.length > 0 && /* @__PURE__ */ jsxs(Box, { children: [
391
- /* @__PURE__ */ jsx(Divider, { label: "views of the element (scoped)" }),
392
- /* @__PURE__ */ jsx(Stack, { gap: "sm", children: viewsOf.map((view) => /* @__PURE__ */ jsx(
393
- ViewButton,
394
- {
395
- view,
396
- onNavigateTo: (to) => diagram.navigateTo(to, fromNode ?? void 0)
397
- },
398
- view.id
399
- )) })
400
- ] }),
401
- otherViews.length > 0 && /* @__PURE__ */ jsxs(Box, { children: [
402
- /* @__PURE__ */ jsx(Divider, { label: "views including this element" }),
403
- /* @__PURE__ */ jsx(Stack, { gap: "sm", children: otherViews.map((view) => /* @__PURE__ */ jsx(
404
- ViewButton,
405
- {
406
- view,
407
- onNavigateTo: (to) => diagram.navigateTo(to, fromNode ?? void 0)
408
- },
409
- view.id
410
- )) })
411
- ] })
412
- ] }) }) }),
413
- /* @__PURE__ */ jsx(TabsPanel, { value: "Structure", children: /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "y", type: "auto", children: /* @__PURE__ */ jsx(TabPanelStructure, { element: elementModel }) }) }),
414
- /* @__PURE__ */ jsx(TabsPanel, { value: "Deployments", children: /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "y", type: "auto", children: /* @__PURE__ */ jsx(TabPanelDeployments, { elementFqn: elementModel.id }) }) })
415
- ]
416
- }
417
- ) }),
418
- /* @__PURE__ */ jsx(
419
- m.div,
420
- {
421
- className: resizeHandle,
422
- drag: true,
423
- dragElastic: 0,
424
- dragMomentum: false,
425
- onDrag: handleDrag,
426
- dragConstraints: { top: 0, left: 0, right: 0, bottom: 0 }
427
- }
428
- )
429
- ]
430
- }
431
- ) })
432
- }
433
- );
55
+ var MIN_PADDING = 24;
56
+ var TABS = [
57
+ "Properties",
58
+ "Relationships",
59
+ "Views",
60
+ "Structure",
61
+ "Deployments"
62
+ ];
63
+ function ElementDetailsCard({ viewId, fromNode, rectFromNode, fqn, onClose }) {
64
+ const [opened, setOpened] = useState(false);
65
+ const windowSize = useViewportSize();
66
+ const windowWidth = windowSize.width || window.innerWidth || 1200;
67
+ const windowHeight = windowSize.height || window.innerHeight || 800;
68
+ const [activeTab, setActiveTab] = useSessionStorage({
69
+ key: `likec4:element-details:active-tab`,
70
+ defaultValue: "Properties"
71
+ });
72
+ const diagram = useDiagram();
73
+ const viewModel = useCurrentViewModel();
74
+ const nodeModel = fromNode ? viewModel.findNode(fromNode) : viewModel.findNodeWithElement(fqn);
75
+ const elementModel = viewModel.$model.element(fqn);
76
+ const [viewsOf, otherViews] = pipe([...elementModel.views()], map((v) => v.$view), partition((v) => v._type === "element" && v.viewOf === fqn));
77
+ let defaultView = nodeModel?.navigateTo?.$view ?? elementModel.defaultView?.$view ?? null;
78
+ if (defaultView?.id === viewId) defaultView = null;
79
+ const defaultLink = only(elementModel.links);
80
+ const controls = useDragControls();
81
+ const isCompound = (nodeModel?.$node.children?.length ?? 0) > 0;
82
+ const _width = Math.min(700, windowWidth - MIN_PADDING * 2);
83
+ const _height = Math.min(650, windowHeight - MIN_PADDING * 2);
84
+ const fromPosition = rectFromNode ? {
85
+ x: rectFromNode.x + (isCompound ? rectFromNode.width - _width / 2 : rectFromNode.width / 2),
86
+ y: rectFromNode.y + (isCompound ? 0 : rectFromNode.height / 2)
87
+ } : {
88
+ x: windowWidth / 2,
89
+ y: windowHeight / 2
90
+ };
91
+ const fromScale = rectFromNode ? Math.min(rectFromNode.width / _width, rectFromNode.height / _height, .9) : 1;
92
+ const left = Math.round(clamp(fromPosition.x - _width / 2, {
93
+ min: MIN_PADDING,
94
+ max: windowWidth - _width - MIN_PADDING
95
+ }));
96
+ const top = Math.round(clamp(fromPosition.y - (isCompound ? 0 : 60), {
97
+ min: MIN_PADDING,
98
+ max: windowHeight - _height - MIN_PADDING
99
+ }));
100
+ const originX = clamp((fromPosition.x - left) / _width, {
101
+ min: .1,
102
+ max: .9
103
+ });
104
+ const originY = clamp((fromPosition.y - top) / _height, {
105
+ min: .1,
106
+ max: .9
107
+ });
108
+ const width = useMotionValue(_width);
109
+ const height = useMotionValue(_height);
110
+ useUpdateEffect$1(() => {
111
+ width.set(_width);
112
+ height.set(_height);
113
+ }, [_width, _height]);
114
+ const handleDrag = useCallback((_, info) => {
115
+ width.set(Math.max(width.get() + info.delta.x, 320));
116
+ height.set(Math.max(height.get() + info.delta.y, 300));
117
+ }, [width, height]);
118
+ const ref = useRef(null);
119
+ const close = useDebouncedCallback(useCallbackRef$1(onClose), [], 50);
120
+ const triggerClose = useCallbackRef$1((event) => {
121
+ event?.stopPropagation();
122
+ close();
123
+ });
124
+ const notation = nodeModel?.$node.notation ?? null;
125
+ const elementIcon$1 = IconRenderer({
126
+ element: {
127
+ id: fqn,
128
+ title: elementModel.title,
129
+ icon: nodeModel?.icon ?? elementModel.icon
130
+ },
131
+ className: elementIcon
132
+ });
133
+ useTimeoutEffect(() => {
134
+ if (!ref.current?.open) ref.current?.showModal();
135
+ }, 20);
136
+ /**
137
+ * This delay improves "enter" animations,
138
+ * if current tab is "Relationships"
139
+ */
140
+ useTimeoutEffect(() => {
141
+ setOpened(true);
142
+ }, 220);
143
+ return /* @__PURE__ */ jsx(m.dialog, {
144
+ ref,
145
+ className: cx(dialog, RemoveScroll.classNames.fullWidth),
146
+ layout: true,
147
+ initial: {
148
+ [backdropBlur]: "0px",
149
+ [backdropOpacity]: "5%"
150
+ },
151
+ animate: {
152
+ [backdropBlur]: "3px",
153
+ [backdropOpacity]: "60%"
154
+ },
155
+ exit: {
156
+ [backdropBlur]: "0px",
157
+ [backdropOpacity]: "0%",
158
+ transition: { duration: .1 }
159
+ },
160
+ onClick: (e) => {
161
+ e.stopPropagation();
162
+ if (e.target?.nodeName?.toUpperCase() === "DIALOG") ref.current?.close();
163
+ },
164
+ onDoubleClick: stopPropagation,
165
+ onPointerDown: stopPropagation,
166
+ onClose: triggerClose,
167
+ children: /* @__PURE__ */ jsx(RemoveScroll, {
168
+ forwardProps: true,
169
+ removeScrollBar: false,
170
+ children: /* @__PURE__ */ jsxs(m.div, {
171
+ layout: true,
172
+ layoutRoot: true,
173
+ drag: true,
174
+ dragControls: controls,
175
+ dragElastic: 0,
176
+ dragMomentum: false,
177
+ dragListener: false,
178
+ "data-likec4-color": nodeModel?.color ?? elementModel.color,
179
+ className: card,
180
+ initial: {
181
+ top,
182
+ left,
183
+ width: _width,
184
+ height: _height,
185
+ opacity: 0,
186
+ originX,
187
+ originY,
188
+ scale: Math.max(fromScale, .65)
189
+ },
190
+ animate: {
191
+ opacity: 1,
192
+ scale: 1
193
+ },
194
+ exit: {
195
+ opacity: 0,
196
+ scale: .9,
197
+ translateY: -10,
198
+ transition: { duration: .1 }
199
+ },
200
+ style: {
201
+ width,
202
+ height
203
+ },
204
+ children: [
205
+ /* @__PURE__ */ jsxs("div", {
206
+ className: cardHeader,
207
+ onPointerDown: (e) => controls.start(e),
208
+ children: [/* @__PURE__ */ jsxs(HStack, {
209
+ alignItems: "start",
210
+ justify: "space-between",
211
+ gap: "sm",
212
+ mb: "sm",
213
+ flexWrap: "nowrap",
214
+ children: [/* @__PURE__ */ jsxs(HStack, {
215
+ alignItems: "start",
216
+ gap: "sm",
217
+ style: {
218
+ cursor: "default",
219
+ minWidth: 0,
220
+ overflow: "hidden"
221
+ },
222
+ flexWrap: "nowrap",
223
+ children: [elementIcon$1, /* @__PURE__ */ jsxs("div", {
224
+ style: {
225
+ minWidth: 0,
226
+ overflow: "hidden"
227
+ },
228
+ children: [/* @__PURE__ */ jsx(Tooltip$1, {
229
+ label: elementModel.title,
230
+ openDelay: 600,
231
+ position: "bottom-start",
232
+ children: /* @__PURE__ */ jsx(Text, {
233
+ component: "div",
234
+ className: title,
235
+ children: elementModel.title
236
+ })
237
+ }), notation && /* @__PURE__ */ jsx(Text, {
238
+ component: "div",
239
+ c: "dimmed",
240
+ fz: "sm",
241
+ fw: 500,
242
+ lh: 1.3,
243
+ lineClamp: 1,
244
+ children: notation
245
+ })]
246
+ })]
247
+ }), /* @__PURE__ */ jsx(CloseButton, {
248
+ size: "lg",
249
+ onClick: triggerClose
250
+ })]
251
+ }), /* @__PURE__ */ jsxs(HStack, {
252
+ alignItems: "baseline",
253
+ gap: "sm",
254
+ flexWrap: "nowrap",
255
+ children: [
256
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(SmallLabel, { children: "kind" }), /* @__PURE__ */ jsx(Badge, {
257
+ radius: "sm",
258
+ size: "sm",
259
+ fw: 600,
260
+ color: "gray",
261
+ style: { cursor: "pointer" },
262
+ onClick: (e) => {
263
+ e.stopPropagation();
264
+ diagram.openSearch(`kind:${elementModel.kind}`);
265
+ },
266
+ children: elementModel.kind
267
+ })] }),
268
+ /* @__PURE__ */ jsxs("div", {
269
+ style: {
270
+ flex: 1,
271
+ minWidth: 0,
272
+ overflow: "hidden"
273
+ },
274
+ children: [/* @__PURE__ */ jsx(SmallLabel, { children: "tags" }), /* @__PURE__ */ jsx(ElementTags, {
275
+ tags: elementModel.tags,
276
+ onClick: (tag) => diagram.openSearch(`#${tag}`)
277
+ })]
278
+ }),
279
+ /* @__PURE__ */ jsxs(ActionIconGroup, {
280
+ style: { alignSelf: "flex-start" },
281
+ children: [
282
+ defaultLink && /* @__PURE__ */ jsx(ActionIcon, {
283
+ component: "a",
284
+ href: defaultLink.url,
285
+ target: "_blank",
286
+ size: "lg",
287
+ variant: "default",
288
+ radius: "sm",
289
+ children: /* @__PURE__ */ jsx(IconExternalLink, {
290
+ stroke: 1.6,
291
+ style: { width: "65%" }
292
+ })
293
+ }),
294
+ /* @__PURE__ */ jsx(IfEnabled, {
295
+ feature: "Vscode",
296
+ children: /* @__PURE__ */ jsx(Tooltip$1, {
297
+ label: "Open source",
298
+ children: /* @__PURE__ */ jsx(ActionIcon, {
299
+ size: "lg",
300
+ variant: "default",
301
+ radius: "sm",
302
+ onClick: (e) => {
303
+ e.stopPropagation();
304
+ diagram.openSource({ element: elementModel.id });
305
+ },
306
+ children: /* @__PURE__ */ jsx(IconFileSymlink, {
307
+ stroke: 1.8,
308
+ style: { width: "62%" }
309
+ })
310
+ })
311
+ })
312
+ }),
313
+ defaultView && /* @__PURE__ */ jsx(Tooltip$1, {
314
+ label: "Open default view",
315
+ children: /* @__PURE__ */ jsx(ActionIcon, {
316
+ size: "lg",
317
+ variant: "default",
318
+ radius: "sm",
319
+ onClick: (e) => {
320
+ e.stopPropagation();
321
+ diagram.navigateTo(defaultView.id, fromNode ?? void 0);
322
+ },
323
+ children: /* @__PURE__ */ jsx(IconZoomScan, { style: { width: "70%" } })
324
+ })
325
+ })
326
+ ]
327
+ })
328
+ ]
329
+ })]
330
+ }),
331
+ /* @__PURE__ */ jsx(MetadataProvider, { children: /* @__PURE__ */ jsxs(Tabs, {
332
+ value: activeTab,
333
+ onChange: (v) => setActiveTab(v),
334
+ variant: "none",
335
+ classNames: {
336
+ root: tabsRoot,
337
+ list: tabsList,
338
+ tab: tabsTab,
339
+ panel: tabsPanel
340
+ },
341
+ children: [
342
+ /* @__PURE__ */ jsx(TabsList, { children: TABS.map((tab) => /* @__PURE__ */ jsx(TabsTab, {
343
+ value: tab,
344
+ children: tab
345
+ }, tab)) }),
346
+ /* @__PURE__ */ jsx(TabsPanel, {
347
+ value: "Properties",
348
+ children: /* @__PURE__ */ jsx(ScrollArea, {
349
+ scrollbars: "y",
350
+ type: "scroll",
351
+ offsetScrollbars: true,
352
+ children: /* @__PURE__ */ jsxs(Box, {
353
+ className: propertiesGrid,
354
+ pt: "xs",
355
+ children: [
356
+ elementModel.hasSummary && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(PropertyLabel, { children: "summary" }), /* @__PURE__ */ jsx(Markdown, { value: elementModel.summary })] }),
357
+ /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(PropertyLabel, { children: "description" }), /* @__PURE__ */ jsx(Markdown, {
358
+ value: elementModel.description,
359
+ emptyText: "no description"
360
+ })] }),
361
+ elementModel.technology && /* @__PURE__ */ jsx(ElementProperty, {
362
+ title: "technology",
363
+ children: elementModel.technology
364
+ }),
365
+ elementModel.links.length > 0 && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(PropertyLabel, { children: "links" }), /* @__PURE__ */ jsx(HStack, {
366
+ gap: "xs",
367
+ flexWrap: "wrap",
368
+ children: elementModel.links.map((link, i) => /* @__PURE__ */ jsx(Link, { value: link }, i))
369
+ })] }),
370
+ elementModel.$element.metadata && /* @__PURE__ */ jsx(ElementMetata, { value: elementModel.$element.metadata })
371
+ ]
372
+ })
373
+ })
374
+ }),
375
+ /* @__PURE__ */ jsx(TabsPanel, {
376
+ value: "Relationships",
377
+ children: /* @__PURE__ */ jsx(DiagramFeatures, {
378
+ overrides: {
379
+ enableRelationshipBrowser: false,
380
+ enableNavigateTo: false
381
+ },
382
+ children: opened && activeTab === "Relationships" && /* @__PURE__ */ jsx(TabPanelRelationships, {
383
+ element: elementModel,
384
+ node: nodeModel ?? null
385
+ })
386
+ })
387
+ }),
388
+ /* @__PURE__ */ jsx(TabsPanel, {
389
+ value: "Views",
390
+ children: /* @__PURE__ */ jsx(ScrollArea, {
391
+ scrollbars: "y",
392
+ type: "auto",
393
+ children: /* @__PURE__ */ jsxs(Stack, {
394
+ gap: "lg",
395
+ children: [viewsOf.length > 0 && /* @__PURE__ */ jsxs(Box, { children: [/* @__PURE__ */ jsx(Divider$1, { label: "views of the element (scoped)" }), /* @__PURE__ */ jsx(Stack, {
396
+ gap: "sm",
397
+ children: viewsOf.map((view) => /* @__PURE__ */ jsx(ViewButton, {
398
+ view,
399
+ onNavigateTo: (to) => diagram.navigateTo(to, fromNode ?? void 0)
400
+ }, view.id))
401
+ })] }), otherViews.length > 0 && /* @__PURE__ */ jsxs(Box, { children: [/* @__PURE__ */ jsx(Divider$1, { label: "views including this element" }), /* @__PURE__ */ jsx(Stack, {
402
+ gap: "sm",
403
+ children: otherViews.map((view) => /* @__PURE__ */ jsx(ViewButton, {
404
+ view,
405
+ onNavigateTo: (to) => diagram.navigateTo(to, fromNode ?? void 0)
406
+ }, view.id))
407
+ })] })]
408
+ })
409
+ })
410
+ }),
411
+ /* @__PURE__ */ jsx(TabsPanel, {
412
+ value: "Structure",
413
+ children: /* @__PURE__ */ jsx(ScrollArea, {
414
+ scrollbars: "y",
415
+ type: "auto",
416
+ children: /* @__PURE__ */ jsx(TabPanelStructure, { element: elementModel })
417
+ })
418
+ }),
419
+ /* @__PURE__ */ jsx(TabsPanel, {
420
+ value: "Deployments",
421
+ children: /* @__PURE__ */ jsx(ScrollArea, {
422
+ scrollbars: "y",
423
+ type: "auto",
424
+ children: /* @__PURE__ */ jsx(TabPanelDeployments, { elementFqn: elementModel.id })
425
+ })
426
+ })
427
+ ]
428
+ }) }),
429
+ /* @__PURE__ */ jsx(m.div, {
430
+ className: resizeHandle,
431
+ drag: true,
432
+ dragElastic: 0,
433
+ dragMomentum: false,
434
+ onDrag: handleDrag,
435
+ dragConstraints: {
436
+ top: 0,
437
+ left: 0,
438
+ right: 0,
439
+ bottom: 0
440
+ }
441
+ })
442
+ ]
443
+ })
444
+ })
445
+ });
434
446
  }
435
- const ViewButton = ({
436
- view,
437
- onNavigateTo
438
- }) => {
439
- return /* @__PURE__ */ jsx(UnstyledButton, { className: viewButton, onClick: (e) => onNavigateTo(view.id, e), children: /* @__PURE__ */ jsxs(Group, { gap: 6, align: "start", wrap: "nowrap", children: [
440
- /* @__PURE__ */ jsx(ThemeIcon, { size: "sm", variant: "transparent", children: view._type === "deployment" ? /* @__PURE__ */ jsx(IconStack2, { stroke: 1.8 }) : /* @__PURE__ */ jsx(IconZoomScan, { stroke: 1.8 }) }),
441
- /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { component: "div", className: viewButtonTitle, lineClamp: 1, children: view.title || "untitled" }) })
442
- ] }) });
447
+ var ViewButton = ({ view, onNavigateTo }) => {
448
+ return /* @__PURE__ */ jsx(UnstyledButton, {
449
+ className: viewButton,
450
+ onClick: (e) => onNavigateTo(view.id, e),
451
+ children: /* @__PURE__ */ jsxs(Group, {
452
+ gap: 6,
453
+ align: "start",
454
+ wrap: "nowrap",
455
+ children: [/* @__PURE__ */ jsx(ThemeIcon, {
456
+ size: "sm",
457
+ variant: "transparent",
458
+ children: view._type === "deployment" ? /* @__PURE__ */ jsx(IconStack2, { stroke: 1.8 }) : /* @__PURE__ */ jsx(IconZoomScan, { stroke: 1.8 })
459
+ }), /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, {
460
+ component: "div",
461
+ className: viewButtonTitle,
462
+ lineClamp: 1,
463
+ children: view.title || "untitled"
464
+ }) })]
465
+ })
466
+ });
443
467
  };
444
- function ElementProperty({
445
- title,
446
- emptyValue = `undefined`,
447
- children,
448
- style,
449
- ...props
450
- }) {
451
- return /* @__PURE__ */ jsxs(Fragment, { children: [
452
- /* @__PURE__ */ jsx(PropertyLabel, { children: title }),
453
- /* @__PURE__ */ jsx(
454
- Text,
455
- {
456
- component: "div",
457
- ...isNullish(children) && { c: "dimmed" },
458
- fz: "md",
459
- style: {
460
- whiteSpace: "preserve-breaks",
461
- userSelect: "all",
462
- ...style
463
- },
464
- ...props,
465
- children: children || emptyValue
466
- }
467
- )
468
- ] });
468
+ function ElementProperty({ title, emptyValue = `undefined`, children, style, ...props }) {
469
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(PropertyLabel, { children: title }), /* @__PURE__ */ jsx(Text, {
470
+ component: "div",
471
+ ...isNullish(children) && { c: "dimmed" },
472
+ fz: "md",
473
+ style: {
474
+ whiteSpace: "preserve-breaks",
475
+ userSelect: "all",
476
+ ...style
477
+ },
478
+ ...props,
479
+ children: children || emptyValue
480
+ })] });
469
481
  }
470
- function ElementMetata({
471
- value: metadata
472
- }) {
473
- const metadataEntries = entries(metadata).sort(([a], [b]) => a.localeCompare(b));
474
- return /* @__PURE__ */ jsx(MetadataProvider, { children: /* @__PURE__ */ jsxs(Fragment, { children: [
475
- /* @__PURE__ */ jsx(PropertyLabel, { style: { justifySelf: "end", textAlign: "right" }, children: "metadata" }),
476
- /* @__PURE__ */ jsx(
477
- Box,
478
- {
479
- className: css({
480
- display: "grid",
481
- gridTemplateColumns: "min-content 1fr",
482
- gridAutoRows: "min-content",
483
- gap: `[12px 16px]`,
484
- alignItems: "baseline",
485
- justifyItems: "stretch"
486
- }),
487
- children: metadataEntries.map(([key, value]) => /* @__PURE__ */ jsx(MetadataValue, { label: key, value }, key))
488
- }
489
- )
490
- ] }) });
482
+ function ElementMetata({ value: metadata }) {
483
+ const metadataEntries = entries(metadata).sort(([a], [b]) => a.localeCompare(b));
484
+ return /* @__PURE__ */ jsx(MetadataProvider, { children: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(PropertyLabel, {
485
+ style: {
486
+ justifySelf: "end",
487
+ textAlign: "right"
488
+ },
489
+ children: "metadata"
490
+ }), /* @__PURE__ */ jsx(Box, {
491
+ className: css({
492
+ display: "grid",
493
+ gridTemplateColumns: "min-content 1fr",
494
+ gridAutoRows: "min-content",
495
+ gap: `[12px 16px]`,
496
+ alignItems: "baseline",
497
+ justifyItems: "stretch"
498
+ }),
499
+ children: metadataEntries.map(([key, value]) => /* @__PURE__ */ jsx(MetadataValue, {
500
+ label: key,
501
+ value
502
+ }, key))
503
+ })] }) });
491
504
  }
492
505
  function ElementTags({ tags, onClick }) {
493
- return /* @__PURE__ */ jsxs(Flex, { gap: 4, flex: 1, mt: 6, wrap: "wrap", children: [
494
- tags.map((tag) => /* @__PURE__ */ jsx(
495
- ElementTag,
496
- {
497
- tag,
498
- cursor: "pointer",
499
- onClick: (e) => {
500
- e.stopPropagation();
501
- onClick(tag);
502
- }
503
- },
504
- tag
505
- )),
506
- tags.length === 0 && /* @__PURE__ */ jsx(Badge, { radius: "sm", size: "sm", fw: 600, color: "gray", children: "—" })
507
- ] });
506
+ return /* @__PURE__ */ jsxs(Flex, {
507
+ gap: 4,
508
+ flex: 1,
509
+ mt: 6,
510
+ wrap: "wrap",
511
+ children: [tags.map((tag) => /* @__PURE__ */ jsx(ElementTag, {
512
+ tag,
513
+ cursor: "pointer",
514
+ onClick: (e) => {
515
+ e.stopPropagation();
516
+ onClick(tag);
517
+ }
518
+ }, tag)), tags.length === 0 && /* @__PURE__ */ jsx(Badge, {
519
+ radius: "sm",
520
+ size: "sm",
521
+ fw: 600,
522
+ color: "gray",
523
+ children: "—"
524
+ })]
525
+ });
508
526
  }
509
-
527
+ //#endregion
510
528
  export { ElementDetailsCard };