@likec4/diagram 1.19.1 → 1.20.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 (582) hide show
  1. package/dist/LikeC4Diagram.css.d.ts +0 -1
  2. package/dist/LikeC4Diagram.css.js +1 -5
  3. package/dist/LikeC4Diagram.d.ts +1 -4
  4. package/dist/LikeC4Diagram.js +102 -147
  5. package/dist/LikeC4Diagram.props.d.ts +10 -16
  6. package/dist/LikeC4Search.js +7 -15
  7. package/dist/StaticLikeC4Diagram.d.ts +1 -1
  8. package/dist/base/Background.d.ts +7 -0
  9. package/dist/{xyflow/XYFlowBackground.js → base/Background.js} +5 -6
  10. package/dist/base/BaseXYFlow.d.ts +14 -0
  11. package/dist/base/BaseXYFlow.js +146 -0
  12. package/dist/base/example/RelationshipsBrowser.d.ts +6 -0
  13. package/dist/base/example/_types.d.ts +20 -0
  14. package/dist/base/example/custom.d.ts +71 -0
  15. package/dist/base/example/useViewToNodesEdges.d.ts +6 -0
  16. package/dist/base/index.d.ts +2 -0
  17. package/dist/base/primitives/NodeHandles.d.ts +4 -0
  18. package/dist/base/primitives/NodeHandles.js +14 -0
  19. package/dist/base/primitives/compound/CompoundActionButton.css.d.ts +3 -0
  20. package/dist/base/primitives/compound/CompoundActionButton.css.js +9 -0
  21. package/dist/base/primitives/compound/CompoundActionButton.d.ts +7 -0
  22. package/dist/base/primitives/compound/CompoundActionButton.js +48 -0
  23. package/dist/base/primitives/compound/CompoundDetailsButton.css.d.ts +3 -0
  24. package/dist/base/primitives/compound/CompoundDetailsButton.css.js +9 -0
  25. package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +7 -0
  26. package/dist/base/primitives/compound/CompoundDetailsButton.js +50 -0
  27. package/dist/base/primitives/compound/CompoundNodeContainer.css.d.ts +9 -0
  28. package/dist/base/primitives/compound/CompoundNodeContainer.css.js +17 -0
  29. package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +26 -0
  30. package/dist/base/primitives/compound/CompoundNodeContainer.js +86 -0
  31. package/dist/base/primitives/compound/CompoundTitle.css.d.ts +2 -0
  32. package/dist/base/primitives/compound/CompoundTitle.css.js +7 -0
  33. package/dist/base/primitives/compound/CompoundTitle.d.ts +6 -0
  34. package/dist/base/primitives/compound/CompoundTitle.js +20 -0
  35. package/dist/base/primitives/customEdge.d.ts +41 -0
  36. package/dist/base/primitives/customEdge.js +13 -0
  37. package/dist/base/primitives/customNode.d.ts +7 -0
  38. package/dist/base/primitives/customNode.js +10 -0
  39. package/dist/base/primitives/edge/EdgeActionButton.d.ts +7 -0
  40. package/dist/base/primitives/edge/EdgeActionButton.js +24 -0
  41. package/dist/base/primitives/edge/EdgeContainer.d.ts +10 -0
  42. package/dist/base/primitives/edge/EdgeContainer.js +35 -0
  43. package/dist/{xyflow/edges/edges.css.d.ts → base/primitives/edge/EdgeLabel.css.d.ts} +5 -9
  44. package/dist/base/primitives/edge/EdgeLabel.css.js +25 -0
  45. package/dist/base/primitives/edge/EdgeLabel.d.ts +51 -0
  46. package/dist/base/primitives/edge/EdgeLabel.js +90 -0
  47. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.d.ts +2 -0
  48. package/dist/{xyflow → base/primitives/edge}/EdgeMarkers.js +29 -1
  49. package/dist/base/primitives/edge/EdgePath.d.ts +44 -0
  50. package/dist/base/primitives/edge/EdgePath.js +77 -0
  51. package/dist/base/primitives/edge/edge.css.d.ts +6 -0
  52. package/dist/base/primitives/edge/edge.css.js +14 -0
  53. package/dist/base/primitives/element/ElementActionButtons.css.d.ts +3 -0
  54. package/dist/base/primitives/element/ElementActionButtons.css.js +9 -0
  55. package/dist/base/primitives/element/ElementActionButtons.d.ts +13 -0
  56. package/dist/base/primitives/element/ElementActionButtons.js +62 -0
  57. package/dist/base/primitives/element/ElementDetailsButton.css.d.ts +3 -0
  58. package/dist/base/primitives/element/ElementDetailsButton.css.js +9 -0
  59. package/dist/base/primitives/element/ElementDetailsButton.d.ts +7 -0
  60. package/dist/base/primitives/element/ElementDetailsButton.js +54 -0
  61. package/dist/base/primitives/element/ElementNodeContainer.css.d.ts +3 -0
  62. package/dist/base/primitives/element/ElementNodeContainer.css.js +7 -0
  63. package/dist/base/primitives/element/ElementNodeContainer.d.ts +26 -0
  64. package/dist/base/primitives/element/ElementNodeContainer.js +60 -0
  65. package/dist/base/primitives/element/ElementShape.css.d.ts +6 -0
  66. package/dist/base/primitives/element/ElementShape.css.js +14 -0
  67. package/dist/base/primitives/element/ElementShape.d.ts +28 -0
  68. package/dist/{xyflow/nodes/element/ElementShapeSvg.js → base/primitives/element/ElementShape.js} +23 -7
  69. package/dist/base/primitives/element/ElementTitle.css.d.ts +8 -0
  70. package/dist/base/primitives/element/ElementTitle.css.js +19 -0
  71. package/dist/base/primitives/element/ElementTitle.d.ts +10 -0
  72. package/dist/base/primitives/element/ElementTitle.js +66 -0
  73. package/dist/base/primitives/index.d.ts +17 -0
  74. package/dist/base/types.d.ts +90 -0
  75. package/dist/base/types.js +54 -0
  76. package/dist/base/updateEdges.d.ts +3 -0
  77. package/dist/base/updateEdges.js +31 -0
  78. package/dist/base/updateNodes.d.ts +3 -0
  79. package/dist/base/updateNodes.js +36 -0
  80. package/dist/base/xyflowMachine.d.ts +212 -0
  81. package/dist/context/DiagramEventHandlers.d.ts +10 -0
  82. package/dist/context/DiagramEventHandlers.js +49 -0
  83. package/dist/context/DiagramFeatures.d.ts +31 -0
  84. package/dist/context/DiagramFeatures.js +140 -0
  85. package/dist/{ui → context}/FramerMotionConfig.js +2 -4
  86. package/dist/context/IconRenderer.d.ts +11 -0
  87. package/dist/{xyflow/nodes/shared/ElementIcon.js → context/IconRenderer.js} +14 -14
  88. package/dist/context/RootContainer.d.ts +9 -0
  89. package/dist/context/RootContainer.js +20 -0
  90. package/dist/context/index.d.ts +7 -0
  91. package/dist/globals.css.js +0 -87
  92. package/dist/hooks/index.d.ts +7 -5
  93. package/dist/hooks/useCurrentViewId.d.ts +2 -0
  94. package/dist/hooks/useCurrentViewId.js +8 -0
  95. package/dist/hooks/useDiagram.d.ts +10725 -0
  96. package/dist/hooks/useDiagram.js +119 -0
  97. package/dist/hooks/useDiagramActor.d.ts +5 -0
  98. package/dist/hooks/useDiagramActor.js +21 -0
  99. package/dist/hooks/useDiagramContext.d.ts +3 -0
  100. package/dist/hooks/useDiagramContext.js +10 -0
  101. package/dist/hooks/useMantinePortalProps.js +2 -2
  102. package/dist/hooks/useXYFlow.d.ts +195 -37
  103. package/dist/hooks/useXYFlow.js +4 -6
  104. package/dist/index.d.ts +3 -2
  105. package/dist/index.js +5 -6
  106. package/dist/likec4diagram/DiagramActor.d.ts +7 -0
  107. package/dist/likec4diagram/DiagramActor.js +71 -0
  108. package/dist/likec4diagram/DiagramUI.d.ts +2 -0
  109. package/dist/likec4diagram/DiagramUI.js +22 -0
  110. package/dist/likec4diagram/XYFlow.d.ts +6 -0
  111. package/dist/likec4diagram/XYFlow.js +122 -0
  112. package/dist/likec4diagram/custom/edges/NotePopover.css.d.ts +2 -0
  113. package/dist/likec4diagram/custom/edges/NotePopover.css.js +7 -0
  114. package/dist/likec4diagram/custom/edges/NotePopover.d.ts +4 -0
  115. package/dist/likec4diagram/custom/edges/NotePopover.js +101 -0
  116. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +55 -0
  117. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +307 -0
  118. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.js +4 -4
  119. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.d.ts +5 -5
  120. package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.js +51 -53
  121. package/dist/likec4diagram/custom/edges/edges.css.d.ts +2 -0
  122. package/dist/likec4diagram/custom/edges/edges.css.js +7 -0
  123. package/dist/likec4diagram/custom/edges/utils.d.ts +22 -0
  124. package/dist/likec4diagram/custom/edges/utils.js +25 -0
  125. package/dist/likec4diagram/custom/index.d.ts +57 -0
  126. package/dist/likec4diagram/custom/index.js +7 -0
  127. package/dist/likec4diagram/custom/nodes/CompoundActions.d.ts +5 -0
  128. package/dist/likec4diagram/custom/nodes/CompoundActions.js +25 -0
  129. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +7 -0
  130. package/dist/likec4diagram/custom/nodes/ElementActions.js +69 -0
  131. package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +10 -0
  132. package/dist/likec4diagram/custom/nodes/nodeTypes.js +94 -0
  133. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.d.ts +21 -0
  134. package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +159 -0
  135. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.d.ts +7 -0
  136. package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +128 -0
  137. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.d.ts +7 -0
  138. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +149 -0
  139. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +8 -0
  140. package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +66 -0
  141. package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +40 -0
  142. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +131 -0
  143. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.d.ts +1 -0
  144. package/dist/likec4diagram/custom/nodes/toolbar/styles.css.js +5 -0
  145. package/dist/likec4diagram/state/actorContext.d.ts +50849 -0
  146. package/dist/likec4diagram/state/actorContext.js +12 -0
  147. package/dist/{state → likec4diagram/state}/aligners.d.ts +4 -1
  148. package/dist/{state → likec4diagram/state}/aligners.js +31 -5
  149. package/dist/likec4diagram/state/assign.d.ts +18 -0
  150. package/dist/likec4diagram/state/assign.js +343 -0
  151. package/dist/likec4diagram/state/hotkeyActor.d.ts +5 -0
  152. package/dist/likec4diagram/state/hotkeyActor.js +18 -0
  153. package/dist/likec4diagram/state/inspector.d.ts +5 -0
  154. package/dist/likec4diagram/state/machine.d.ts +10751 -0
  155. package/dist/likec4diagram/state/machine.js +783 -0
  156. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +113 -0
  157. package/dist/likec4diagram/state/syncManualLayoutActor.js +178 -0
  158. package/dist/likec4diagram/state/utils.d.ts +8 -0
  159. package/dist/likec4diagram/state/utils.js +48 -0
  160. package/dist/likec4diagram/types.d.ts +74 -0
  161. package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.js +11 -10
  162. package/dist/likec4diagram/ui/controls/Controls.d.ts +2 -0
  163. package/dist/likec4diagram/ui/controls/Controls.js +102 -0
  164. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.d.ts +2 -0
  165. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +43 -0
  166. package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.js +11 -11
  167. package/dist/likec4diagram/ui/controls/NavigationButtons.d.ts +1 -0
  168. package/dist/likec4diagram/ui/controls/NavigationButtons.js +92 -0
  169. package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.js +2 -1
  170. package/dist/{ui/top-left → likec4diagram/ui/controls}/styles.css.d.ts +1 -1
  171. package/dist/likec4diagram/ui/controls/styles.css.js +17 -0
  172. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.css.js +11 -0
  173. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.d.ts +1 -0
  174. package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.js +3 -3
  175. package/dist/likec4diagram/ui/diagram-title/Link.d.ts +4 -0
  176. package/dist/likec4diagram/ui/index.d.ts +2 -0
  177. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +13 -0
  178. package/dist/likec4diagram/ui/notation/NotationPanel.d.ts +2 -0
  179. package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.js +23 -31
  180. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.js +4 -4
  181. package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.js +19 -44
  182. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.d.ts +11 -6
  183. package/dist/{xyflow → likec4diagram}/useLayoutConstraints.js +17 -12
  184. package/dist/likec4diagram/useViewToNodesEdges.d.ts +11 -0
  185. package/dist/likec4diagram/useViewToNodesEdges.js +245 -0
  186. package/dist/likec4model/index.d.ts +1 -1
  187. package/dist/likec4model/useLikeC4Model.d.ts +1 -11
  188. package/dist/likec4model/useLikeC4Model.js +1 -39
  189. package/dist/overlays/Overlays.js +61 -105
  190. package/dist/overlays/element-details/ElementDetailsCard.js +111 -116
  191. package/dist/overlays/element-details/TabPanelDeployments.js +4 -7
  192. package/dist/overlays/element-details/TabPanelRelationships.css.js +0 -2
  193. package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
  194. package/dist/overlays/element-details/TabPanelRelationships.js +35 -64
  195. package/dist/overlays/element-details/TabPanelStructure.d.ts +2 -2
  196. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  197. package/dist/overlays/overlay/Overlay.css.d.ts +2 -0
  198. package/dist/overlays/overlay/Overlay.css.js +93 -0
  199. package/dist/overlays/overlay/Overlay.d.ts +8 -0
  200. package/dist/overlays/overlay/Overlay.js +86 -0
  201. package/dist/overlays/relationship-details/RelationshipDetails.d.ts +5 -0
  202. package/dist/overlays/relationship-details/RelationshipDetails.js +189 -0
  203. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.css.d.ts +1 -0
  204. package/dist/overlays/relationship-details/SelectEdge.css.js +17 -0
  205. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.d.ts +1 -1
  206. package/dist/overlays/{edge-details → relationship-details}/SelectEdge.js +8 -8
  207. package/dist/overlays/relationship-details/_types.d.ts +36 -0
  208. package/dist/overlays/relationship-details/actor.d.ts +41 -0
  209. package/dist/overlays/relationship-details/actor.js +113 -0
  210. package/dist/overlays/relationship-details/custom/ElementActions.d.ts +5 -0
  211. package/dist/overlays/relationship-details/custom/ElementActions.js +33 -0
  212. package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +49 -0
  213. package/dist/overlays/relationship-details/custom/edgeTypes.js +51 -0
  214. package/dist/overlays/relationship-details/custom/index.d.ts +2 -0
  215. package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +39 -0
  216. package/dist/overlays/relationship-details/custom/nodeTypes.js +89 -0
  217. package/dist/overlays/relationship-details/custom/styles.css.d.ts +1 -0
  218. package/dist/overlays/relationship-details/hooks.d.ts +59 -0
  219. package/dist/overlays/relationship-details/hooks.js +46 -0
  220. package/dist/overlays/{edge-details/use-layouted-edge-details.d.ts → relationship-details/useLayoutedDetails.d.ts} +4 -6
  221. package/dist/overlays/{edge-details/use-layouted-edge-details.js → relationship-details/useLayoutedDetails.js} +68 -64
  222. package/dist/overlays/relationships-browser/-useRelationshipsView.d.ts +39 -0
  223. package/dist/overlays/relationships-browser/-useRelationshipsView.js +488 -0
  224. package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +5 -0
  225. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +209 -0
  226. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.css.d.ts +1 -0
  227. package/dist/overlays/relationships-browser/SelectElement.css.js +9 -0
  228. package/dist/overlays/relationships-browser/SelectElement.d.ts +7 -0
  229. package/dist/overlays/{relationships-of → relationships-browser}/SelectElement.js +11 -7
  230. package/dist/overlays/relationships-browser/_types.d.ts +40 -0
  231. package/dist/overlays/relationships-browser/actor.d.ts +66 -0
  232. package/dist/overlays/relationships-browser/actor.js +159 -0
  233. package/dist/overlays/relationships-browser/custom/ElementActions.d.ts +5 -0
  234. package/dist/overlays/relationships-browser/custom/ElementActions.js +43 -0
  235. package/dist/overlays/relationships-browser/custom/EmptyNode.d.ts +5 -0
  236. package/dist/overlays/{relationships-of/xyflow → relationships-browser/custom}/EmptyNode.js +1 -3
  237. package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +46 -0
  238. package/dist/overlays/relationships-browser/custom/edgeTypes.js +51 -0
  239. package/dist/overlays/relationships-browser/custom/index.d.ts +2 -0
  240. package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +45 -0
  241. package/dist/overlays/relationships-browser/custom/nodeTypes.js +93 -0
  242. package/dist/overlays/relationships-browser/custom/styles.css.d.ts +1 -0
  243. package/dist/overlays/relationships-browser/custom/styles.css.js +5 -0
  244. package/dist/overlays/relationships-browser/hooks.d.ts +62 -0
  245. package/dist/overlays/relationships-browser/hooks.js +46 -0
  246. package/dist/overlays/relationships-browser/useViewToNodesEdges.d.ts +10 -0
  247. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +160 -0
  248. package/dist/style.css +1 -1
  249. package/dist/theme-vars.css.js +1 -0
  250. package/dist/utils/index.d.ts +4 -0
  251. package/dist/{xyflow/utils.d.ts → utils/xyflow.d.ts} +4 -4
  252. package/dist/{xyflow/utils.js → utils/xyflow.js} +14 -20
  253. package/package.json +24 -21
  254. package/src/LikeC4Diagram.css.ts +21 -15
  255. package/src/LikeC4Diagram.props.ts +14 -21
  256. package/src/LikeC4Diagram.tsx +105 -150
  257. package/src/LikeC4Search.tsx +21 -28
  258. package/src/StaticLikeC4Diagram.tsx +0 -1
  259. package/src/{xyflow/XYFlowBackground.tsx → base/Background.tsx} +8 -8
  260. package/src/base/BaseXYFlow.tsx +200 -0
  261. package/src/{xyflow → base}/const.ts +1 -1
  262. package/src/base/example/RelationshipsBrowser.tsx +62 -0
  263. package/src/base/example/_types.ts +71 -0
  264. package/src/base/example/custom.tsx +58 -0
  265. package/src/base/example/useViewToNodesEdges.ts +193 -0
  266. package/src/base/index.ts +10 -0
  267. package/src/base/primitives/NodeHandles.tsx +18 -0
  268. package/src/base/primitives/compound/CompoundActionButton.css.ts +55 -0
  269. package/src/base/primitives/compound/CompoundActionButton.tsx +52 -0
  270. package/src/base/primitives/compound/CompoundDetailsButton.css.ts +56 -0
  271. package/src/base/primitives/compound/CompoundDetailsButton.tsx +54 -0
  272. package/src/base/primitives/compound/CompoundNodeContainer.css.ts +161 -0
  273. package/src/base/primitives/compound/CompoundNodeContainer.tsx +95 -0
  274. package/src/base/primitives/compound/CompoundTitle.css.ts +43 -0
  275. package/src/base/primitives/compound/CompoundTitle.tsx +29 -0
  276. package/src/base/primitives/customEdge.ts +32 -0
  277. package/src/base/primitives/customNode.ts +21 -0
  278. package/src/base/primitives/edge/EdgeActionButton.tsx +27 -0
  279. package/src/base/primitives/edge/EdgeContainer.tsx +48 -0
  280. package/src/base/primitives/edge/EdgeLabel.css.ts +196 -0
  281. package/src/base/primitives/edge/EdgeLabel.tsx +136 -0
  282. package/src/{xyflow → base/primitives/edge}/EdgeMarkers.tsx +29 -1
  283. package/src/base/primitives/edge/EdgePath.tsx +89 -0
  284. package/src/base/primitives/edge/edge.css.ts +122 -0
  285. package/src/base/primitives/element/ElementActionButtons.css.ts +48 -0
  286. package/src/base/primitives/element/ElementActionButtons.tsx +73 -0
  287. package/src/base/primitives/element/ElementDetailsButton.css.ts +54 -0
  288. package/src/base/primitives/element/ElementDetailsButton.tsx +59 -0
  289. package/src/base/primitives/element/ElementNodeContainer.css.ts +47 -0
  290. package/src/base/primitives/element/ElementNodeContainer.tsx +72 -0
  291. package/src/base/primitives/element/ElementShape.css.ts +134 -0
  292. package/src/{xyflow/nodes/element/ElementShapeSvg.tsx → base/primitives/element/ElementShape.tsx} +64 -19
  293. package/src/base/primitives/element/ElementTitle.css.ts +156 -0
  294. package/src/base/primitives/element/ElementTitle.tsx +76 -0
  295. package/src/base/primitives/index.ts +17 -0
  296. package/src/base/types.ts +169 -0
  297. package/src/base/updateEdges.ts +40 -0
  298. package/src/base/updateNodes.ts +46 -0
  299. package/src/base/xyflowMachine.ts +75 -0
  300. package/src/context/DiagramEventHandlers.tsx +53 -0
  301. package/src/context/DiagramFeatures.tsx +162 -0
  302. package/src/{ui → context}/FramerMotionConfig.tsx +2 -6
  303. package/src/context/IconRenderer.tsx +45 -0
  304. package/src/context/RootContainer.tsx +31 -0
  305. package/src/context/index.ts +14 -0
  306. package/src/globals.css.ts +32 -32
  307. package/src/hooks/index.ts +7 -5
  308. package/src/hooks/useCurrentViewId.ts +8 -0
  309. package/src/hooks/useDiagram.ts +129 -0
  310. package/src/hooks/useDiagramActor.ts +25 -0
  311. package/src/hooks/useDiagramContext.ts +11 -0
  312. package/src/hooks/useMantinePortalProps.ts +2 -2
  313. package/src/hooks/useXYFlow.ts +12 -38
  314. package/src/index.ts +3 -7
  315. package/src/likec4diagram/DiagramActor.tsx +79 -0
  316. package/src/likec4diagram/DiagramUI.tsx +28 -0
  317. package/src/likec4diagram/XYFlow.tsx +137 -0
  318. package/src/likec4diagram/custom/edges/NotePopover.css.ts +27 -0
  319. package/src/likec4diagram/custom/edges/NotePopover.tsx +96 -0
  320. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +355 -0
  321. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.ts +7 -7
  322. package/src/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.tsx +91 -70
  323. package/src/likec4diagram/custom/edges/edges.css.ts +39 -0
  324. package/src/likec4diagram/custom/edges/utils.ts +126 -0
  325. package/src/likec4diagram/custom/index.tsx +8 -0
  326. package/src/likec4diagram/custom/nodes/CompoundActions.tsx +27 -0
  327. package/src/likec4diagram/custom/nodes/ElementActions.tsx +74 -0
  328. package/src/likec4diagram/custom/nodes/nodeTypes.tsx +107 -0
  329. package/src/likec4diagram/custom/nodes/toolbar/ColorButton.tsx +175 -0
  330. package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +122 -0
  331. package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +140 -0
  332. package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +77 -0
  333. package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +143 -0
  334. package/src/likec4diagram/custom/nodes/toolbar/styles.css.ts +9 -0
  335. package/src/likec4diagram/state/actorContext.ts +8 -0
  336. package/src/{state → likec4diagram/state}/aligners.ts +67 -40
  337. package/src/likec4diagram/state/assign.ts +384 -0
  338. package/src/likec4diagram/state/hotkeyActor.ts +20 -0
  339. package/src/likec4diagram/state/inspector.ts +23 -0
  340. package/src/likec4diagram/state/machine.ts +946 -0
  341. package/src/likec4diagram/state/syncManualLayoutActor.ts +219 -0
  342. package/src/likec4diagram/state/utils.ts +52 -0
  343. package/src/likec4diagram/types.ts +144 -0
  344. package/src/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.tsx +32 -28
  345. package/src/likec4diagram/ui/controls/Controls.tsx +107 -0
  346. package/src/likec4diagram/ui/controls/LayoutDriftNotification.tsx +46 -0
  347. package/src/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.tsx +16 -16
  348. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +83 -0
  349. package/src/{ui/top-left → likec4diagram/ui/controls}/_shared.ts +4 -3
  350. package/src/{ui/top-left → likec4diagram/ui/controls}/styles.css.ts +17 -17
  351. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.ts +11 -11
  352. package/src/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.tsx +6 -5
  353. package/src/likec4diagram/ui/diagram-title/Link.tsx +40 -0
  354. package/src/likec4diagram/ui/index.ts +2 -0
  355. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.css.ts +18 -18
  356. package/src/{ui → likec4diagram/ui}/notation/NotationPanel.tsx +44 -44
  357. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.ts +16 -16
  358. package/src/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.tsx +29 -49
  359. package/src/{xyflow → likec4diagram}/useLayoutConstraints.ts +54 -43
  360. package/src/likec4diagram/useViewToNodesEdges.ts +297 -0
  361. package/src/likec4model/index.ts +0 -6
  362. package/src/likec4model/useLikeC4Model.ts +1 -43
  363. package/src/overlays/Overlays.tsx +201 -147
  364. package/src/overlays/element-details/ElementDetailsCard.css.ts +58 -58
  365. package/src/overlays/element-details/ElementDetailsCard.tsx +143 -128
  366. package/src/overlays/element-details/TabPanelDeployments.css.ts +14 -14
  367. package/src/overlays/element-details/TabPanelDeployments.tsx +22 -22
  368. package/src/overlays/element-details/TabPanelRelationships.css.ts +19 -19
  369. package/src/overlays/element-details/TabPanelRelationships.tsx +45 -28
  370. package/src/overlays/element-details/TabPanelStructure.css.ts +7 -7
  371. package/src/overlays/element-details/TabPanelStructure.tsx +11 -11
  372. package/src/overlays/overlay/Overlay.css.ts +73 -0
  373. package/src/overlays/overlay/Overlay.tsx +99 -0
  374. package/src/overlays/relationship-details/RelationshipDetails.tsx +234 -0
  375. package/src/overlays/{edge-details → relationship-details}/SelectEdge.css.ts +20 -13
  376. package/src/overlays/{edge-details → relationship-details}/SelectEdge.tsx +14 -14
  377. package/src/overlays/relationship-details/_types.ts +73 -0
  378. package/src/overlays/relationship-details/actor.ts +162 -0
  379. package/src/overlays/relationship-details/custom/ElementActions.tsx +45 -0
  380. package/src/overlays/relationship-details/custom/edgeTypes.tsx +49 -0
  381. package/src/overlays/relationship-details/custom/index.tsx +2 -0
  382. package/src/overlays/relationship-details/custom/nodeTypes.tsx +108 -0
  383. package/src/overlays/relationship-details/custom/styles.css.ts +13 -0
  384. package/src/overlays/relationship-details/hooks.ts +48 -0
  385. package/src/overlays/{edge-details/use-layouted-edge-details.ts → relationship-details/useLayoutedDetails.ts} +128 -114
  386. package/src/overlays/relationships-browser/-useRelationshipsView.ts +642 -0
  387. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +247 -0
  388. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.css.ts +12 -5
  389. package/src/overlays/{relationships-of → relationships-browser}/SelectElement.tsx +19 -17
  390. package/src/overlays/relationships-browser/_types.ts +89 -0
  391. package/src/overlays/relationships-browser/actor.ts +224 -0
  392. package/src/overlays/relationships-browser/custom/ElementActions.tsx +44 -0
  393. package/src/overlays/relationships-browser/custom/EmptyNode.tsx +18 -0
  394. package/src/overlays/relationships-browser/custom/edgeTypes.tsx +49 -0
  395. package/src/overlays/relationships-browser/custom/index.tsx +2 -0
  396. package/src/overlays/relationships-browser/custom/nodeTypes.tsx +109 -0
  397. package/src/overlays/relationships-browser/custom/styles.css.ts +13 -0
  398. package/src/overlays/relationships-browser/hooks.ts +48 -0
  399. package/src/overlays/relationships-browser/useViewToNodesEdges.ts +209 -0
  400. package/src/utils/index.ts +15 -0
  401. package/src/{xyflow/utils.ts → utils/xyflow.ts} +22 -8
  402. package/dist/_virtual/_commonjsHelpers.js +0 -6
  403. package/dist/controls/Text.d.ts +0 -2
  404. package/dist/controls/Text.js +0 -7
  405. package/dist/controls/action-button-bar/ActionButtonBar.css.d.ts +0 -1
  406. package/dist/controls/action-button-bar/ActionButtonBar.css.js +0 -5
  407. package/dist/controls/action-button-bar/ActionButtonBar.d.ts +0 -9
  408. package/dist/controls/action-button-bar/ActionButtonBar.js +0 -100
  409. package/dist/controls/action-button-bar/useActionButtonBarCtx.d.ts +0 -10
  410. package/dist/controls/action-button-bar/useActionButtonBarCtx.js +0 -9
  411. package/dist/controls/action-buttons/ActionButton.css.d.ts +0 -1
  412. package/dist/controls/action-buttons/ActionButton.css.js +0 -5
  413. package/dist/controls/action-buttons/ActionButton.d.ts +0 -9
  414. package/dist/controls/action-buttons/ActionButton.js +0 -66
  415. package/dist/controls/action-buttons/ActionButtons.d.ts +0 -12
  416. package/dist/controls/action-buttons/ActionButtons.js +0 -99
  417. package/dist/hooks/useDiagramState.d.ts +0 -6
  418. package/dist/hooks/useDiagramState.js +0 -27
  419. package/dist/overlays/OverlayContext.d.ts +0 -10
  420. package/dist/overlays/OverlayContext.js +0 -9
  421. package/dist/overlays/Overlays.css.d.ts +0 -3
  422. package/dist/overlays/Overlays.css.js +0 -7
  423. package/dist/overlays/edge-details/EdgeDetailsXYFlow.d.ts +0 -5
  424. package/dist/overlays/edge-details/EdgeDetailsXYFlow.js +0 -185
  425. package/dist/overlays/edge-details/SelectEdge.css.js +0 -17
  426. package/dist/overlays/edge-details/_types.d.ts +0 -14
  427. package/dist/overlays/edge-details/xyflow/CompoundNode.d.ts +0 -5
  428. package/dist/overlays/edge-details/xyflow/CompoundNode.js +0 -76
  429. package/dist/overlays/edge-details/xyflow/ElementNode.d.ts +0 -5
  430. package/dist/overlays/edge-details/xyflow/ElementNode.js +0 -159
  431. package/dist/overlays/edge-details/xyflow/RelationshipEdge.d.ts +0 -3
  432. package/dist/overlays/edge-details/xyflow/RelationshipEdge.js +0 -84
  433. package/dist/overlays/edge-details/xyflow/styles.css.d.ts +0 -9
  434. package/dist/overlays/edge-details/xyflow/styles.css.js +0 -21
  435. package/dist/overlays/index.d.ts +0 -1
  436. package/dist/overlays/relationships-of/RelationshipsOverlay.d.ts +0 -5
  437. package/dist/overlays/relationships-of/RelationshipsOverlay.js +0 -193
  438. package/dist/overlays/relationships-of/RelationshipsXYFlow.d.ts +0 -19
  439. package/dist/overlays/relationships-of/RelationshipsXYFlow.js +0 -290
  440. package/dist/overlays/relationships-of/SelectElement.css.js +0 -7
  441. package/dist/overlays/relationships-of/SelectElement.d.ts +0 -7
  442. package/dist/overlays/relationships-of/_types.d.ts +0 -28
  443. package/dist/overlays/relationships-of/use-layouted-relationships.d.ts +0 -22
  444. package/dist/overlays/relationships-of/use-layouted-relationships.js +0 -496
  445. package/dist/overlays/relationships-of/xyflow/CompoundNode.d.ts +0 -6
  446. package/dist/overlays/relationships-of/xyflow/CompoundNode.js +0 -120
  447. package/dist/overlays/relationships-of/xyflow/ElementNode.d.ts +0 -6
  448. package/dist/overlays/relationships-of/xyflow/ElementNode.js +0 -194
  449. package/dist/overlays/relationships-of/xyflow/EmptyNode.d.ts +0 -5
  450. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.d.ts +0 -3
  451. package/dist/overlays/relationships-of/xyflow/RelationshipEdge.js +0 -123
  452. package/dist/overlays/relationships-of/xyflow/styles.css.d.ts +0 -14
  453. package/dist/overlays/relationships-of/xyflow/styles.css.js +0 -24
  454. package/dist/overlays/shared/xyflow/RelationshipEdge.css.d.ts +0 -4
  455. package/dist/overlays/shared/xyflow/RelationshipEdge.css.js +0 -12
  456. package/dist/overlays/shared/xyflow/_types.d.ts +0 -77
  457. package/dist/state/DiagramContext.d.ts +0 -1609
  458. package/dist/state/DiagramContext.js +0 -101
  459. package/dist/state/diagram-to-xyflow.d.ts +0 -11
  460. package/dist/state/diagram-to-xyflow.js +0 -113
  461. package/dist/state/diagramStore.d.ts +0 -1705
  462. package/dist/state/diagramStore.js +0 -808
  463. package/dist/state/diagramStore.layout.d.ts +0 -4
  464. package/dist/state/diagramStore.layout.js +0 -56
  465. package/dist/ui/DiagramTitlePanel.css.js +0 -11
  466. package/dist/ui/DiagramTitlePanel.d.ts +0 -1
  467. package/dist/ui/notation/NotationPanel.css.js +0 -16
  468. package/dist/ui/notation/NotationPanel.d.ts +0 -1
  469. package/dist/ui/top-left/TopLeftPanel.d.ts +0 -4
  470. package/dist/ui/top-left/TopLeftPanel.js +0 -211
  471. package/dist/ui/top-left/styles.css.js +0 -17
  472. package/dist/xyflow/FitviewOnDiagramChange.d.ts +0 -4
  473. package/dist/xyflow/FitviewOnDiagramChange.js +0 -72
  474. package/dist/xyflow/SelectEdgesOnNodeFocus.d.ts +0 -1
  475. package/dist/xyflow/SelectEdgesOnNodeFocus.js +0 -96
  476. package/dist/xyflow/XYFlow.d.ts +0 -8
  477. package/dist/xyflow/XYFlow.js +0 -145
  478. package/dist/xyflow/XYFlowBackground.d.ts +0 -10
  479. package/dist/xyflow/XYFlowInner.d.ts +0 -8
  480. package/dist/xyflow/XYFlowInner.js +0 -41
  481. package/dist/xyflow/edges/EdgeLabel.d.ts +0 -7
  482. package/dist/xyflow/edges/EdgeLabel.js +0 -160
  483. package/dist/xyflow/edges/RelationshipEdge.d.ts +0 -6
  484. package/dist/xyflow/edges/RelationshipEdge.js +0 -443
  485. package/dist/xyflow/edges/edges.css.js +0 -37
  486. package/dist/xyflow/edges/utils.d.ts +0 -16
  487. package/dist/xyflow/edges/utils.js +0 -24
  488. package/dist/xyflow/nodes/AnimateVariants.d.ts +0 -1313
  489. package/dist/xyflow/nodes/AnimateVariants.js +0 -123
  490. package/dist/xyflow/nodes/Node.css.d.ts +0 -3
  491. package/dist/xyflow/nodes/Node.css.js +0 -9
  492. package/dist/xyflow/nodes/compound/CompoundNode.css.d.ts +0 -14
  493. package/dist/xyflow/nodes/compound/CompoundNode.css.js +0 -27
  494. package/dist/xyflow/nodes/compound/CompoundNode.d.ts +0 -6
  495. package/dist/xyflow/nodes/compound/CompoundNode.js +0 -216
  496. package/dist/xyflow/nodes/compound/index.d.ts +0 -1
  497. package/dist/xyflow/nodes/element/ElementLink.css.d.ts +0 -3
  498. package/dist/xyflow/nodes/element/ElementLink.d.ts +0 -6
  499. package/dist/xyflow/nodes/element/ElementNode.d.ts +0 -6
  500. package/dist/xyflow/nodes/element/ElementNode.js +0 -190
  501. package/dist/xyflow/nodes/element/ElementShapeSvg.d.ts +0 -17
  502. package/dist/xyflow/nodes/element/element.css.d.ts +0 -18
  503. package/dist/xyflow/nodes/element/element.css.js +0 -31
  504. package/dist/xyflow/nodes/element/index.d.ts +0 -1
  505. package/dist/xyflow/nodes/shared/ElementIcon.d.ts +0 -8
  506. package/dist/xyflow/nodes/shared/Toolbar.d.ts +0 -9
  507. package/dist/xyflow/nodes/shared/Toolbar.js +0 -436
  508. package/dist/xyflow/types.d.ts +0 -36
  509. package/dist/xyflow/useXYFlowEvents.d.ts +0 -160
  510. package/dist/xyflow/useXYFlowEvents.js +0 -275
  511. package/src/controls/Text.ts +0 -5
  512. package/src/controls/action-button-bar/ActionButtonBar.css.ts +0 -13
  513. package/src/controls/action-button-bar/ActionButtonBar.tsx +0 -138
  514. package/src/controls/action-button-bar/useActionButtonBarCtx.ts +0 -13
  515. package/src/controls/action-buttons/ActionButton.css.ts +0 -29
  516. package/src/controls/action-buttons/ActionButton.tsx +0 -66
  517. package/src/controls/action-buttons/ActionButtons.tsx +0 -138
  518. package/src/hooks/useDiagramState.ts +0 -36
  519. package/src/overlays/OverlayContext.tsx +0 -11
  520. package/src/overlays/Overlays.css.ts +0 -136
  521. package/src/overlays/edge-details/EdgeDetailsXYFlow.tsx +0 -255
  522. package/src/overlays/edge-details/_types.ts +0 -18
  523. package/src/overlays/edge-details/xyflow/CompoundNode.tsx +0 -72
  524. package/src/overlays/edge-details/xyflow/ElementNode.tsx +0 -152
  525. package/src/overlays/edge-details/xyflow/RelationshipEdge.tsx +0 -85
  526. package/src/overlays/edge-details/xyflow/styles.css.ts +0 -144
  527. package/src/overlays/index.tsx +0 -1
  528. package/src/overlays/relationships-of/RelationshipsOverlay.tsx +0 -185
  529. package/src/overlays/relationships-of/RelationshipsXYFlow.tsx +0 -378
  530. package/src/overlays/relationships-of/_types.ts +0 -40
  531. package/src/overlays/relationships-of/use-layouted-relationships.ts +0 -699
  532. package/src/overlays/relationships-of/xyflow/CompoundNode.tsx +0 -124
  533. package/src/overlays/relationships-of/xyflow/ElementNode.tsx +0 -194
  534. package/src/overlays/relationships-of/xyflow/EmptyNode.tsx +0 -19
  535. package/src/overlays/relationships-of/xyflow/RelationshipEdge.tsx +0 -127
  536. package/src/overlays/relationships-of/xyflow/styles.css.ts +0 -214
  537. package/src/overlays/shared/xyflow/RelationshipEdge.css.ts +0 -60
  538. package/src/overlays/shared/xyflow/_types.ts +0 -87
  539. package/src/state/DiagramContext.tsx +0 -107
  540. package/src/state/diagram-to-xyflow.ts +0 -150
  541. package/src/state/diagramStore.layout.ts +0 -66
  542. package/src/state/diagramStore.ts +0 -1099
  543. package/src/ui/top-left/TopLeftPanel.tsx +0 -220
  544. package/src/xyflow/FitviewOnDiagramChange.tsx +0 -83
  545. package/src/xyflow/SelectEdgesOnNodeFocus.tsx +0 -106
  546. package/src/xyflow/XYFlow.tsx +0 -179
  547. package/src/xyflow/XYFlowInner.tsx +0 -48
  548. package/src/xyflow/edges/EdgeLabel.tsx +0 -193
  549. package/src/xyflow/edges/RelationshipEdge.tsx +0 -547
  550. package/src/xyflow/edges/edges.css.ts +0 -288
  551. package/src/xyflow/edges/utils.ts +0 -153
  552. package/src/xyflow/nodes/AnimateVariants.ts +0 -143
  553. package/src/xyflow/nodes/Node.css.ts +0 -44
  554. package/src/xyflow/nodes/compound/CompoundNode.css.ts +0 -258
  555. package/src/xyflow/nodes/compound/CompoundNode.tsx +0 -226
  556. package/src/xyflow/nodes/compound/index.ts +0 -1
  557. package/src/xyflow/nodes/element/ElementLink.css.ts +0 -67
  558. package/src/xyflow/nodes/element/ElementLink.tsx +0 -97
  559. package/src/xyflow/nodes/element/ElementNode.tsx +0 -208
  560. package/src/xyflow/nodes/element/element.css.ts +0 -369
  561. package/src/xyflow/nodes/element/index.ts +0 -1
  562. package/src/xyflow/nodes/shared/ElementIcon.tsx +0 -43
  563. package/src/xyflow/nodes/shared/Toolbar.tsx +0 -496
  564. package/src/xyflow/types.ts +0 -57
  565. package/src/xyflow/useXYFlowEvents.ts +0 -315
  566. /package/dist/{xyflow → base}/const.d.ts +0 -0
  567. /package/dist/{xyflow → base}/const.js +0 -0
  568. /package/dist/{ui → context}/EnsureMantine.d.ts +0 -0
  569. /package/dist/{ui → context}/EnsureMantine.js +0 -0
  570. /package/dist/{ui → context}/FramerMotionConfig.d.ts +0 -0
  571. /package/dist/{xyflow → likec4diagram/custom}/edges/RelationshipsDropdownMenu.css.d.ts +0 -0
  572. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ChangeAutoLayoutButton.d.ts +0 -0
  573. /package/dist/{ui/top-left → likec4diagram/ui/controls}/ManualLayoutToolsButton.d.ts +0 -0
  574. /package/dist/{ui/top-left → likec4diagram/ui/controls}/_shared.d.ts +0 -0
  575. /package/dist/{ui → likec4diagram/ui/diagram-title}/DiagramTitlePanel.css.d.ts +0 -0
  576. /package/dist/{ui → likec4diagram/ui/diagram-title}/Link.js +0 -0
  577. /package/dist/{ui → likec4diagram/ui}/notation/NotationPanel.css.d.ts +0 -0
  578. /package/dist/{ui → likec4diagram/ui}/notation/index.d.ts +0 -0
  579. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.css.d.ts +0 -0
  580. /package/dist/{ui → likec4diagram/ui/walkthrough}/DynamicViewWalkthrough.d.ts +0 -0
  581. /package/src/{ui → context}/EnsureMantine.tsx +0 -0
  582. /package/src/{ui → likec4diagram/ui}/notation/index.ts +0 -0
@@ -0,0 +1,54 @@
1
+ import { style } from '@vanilla-extract/css'
2
+ import { vars } from '../../../theme-vars'
3
+
4
+ export const container = style({
5
+ position: 'absolute',
6
+ top: 2,
7
+ right: 2,
8
+ zIndex: 10,
9
+ selectors: {
10
+ [`:where([data-likec4-shape='browser']) &`]: {
11
+ right: 5,
12
+ },
13
+ ':where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) &': {
14
+ top: 14,
15
+ },
16
+ ':where([data-likec4-shape="queue"]) &': {
17
+ top: 1,
18
+ right: 12,
19
+ },
20
+ },
21
+ })
22
+
23
+ export const actionIconWrapper = style({
24
+ width: 'min-content',
25
+ height: 'min-content',
26
+ // display: 'flex',
27
+ // justifyContent: 'center',
28
+ // alignItems: 'center',
29
+ })
30
+
31
+ export const actionIcon = style({
32
+ pointerEvents: 'all',
33
+ color: vars.element.loContrast,
34
+ cursor: 'pointer',
35
+ backgroundColor: 'var(--ai-bg)',
36
+ 'vars': {
37
+ '--ai-bg-idle': `color-mix(in srgb , ${vars.element.fill}, transparent 99%)`,
38
+ '--ai-bg': `var(--ai-bg-idle)`,
39
+ '--ai-bg-hover': `color-mix(in srgb , ${vars.element.fill} 65%, ${vars.element.stroke})`,
40
+ '--ai-hover': `color-mix(in srgb , ${vars.element.fill} 50%, ${vars.element.stroke})`,
41
+ },
42
+ boxShadow: '1px 1px 3px 0px transparent',
43
+ ':hover': {
44
+ boxShadow: '1px 1px 3px 0px rgba(0, 0, 0, 0.15)',
45
+ },
46
+ // selectors: {
47
+ // [`:where([data-hovered='true']) &`]: {
48
+ // // boxShadow: '1px 1px 3px 0px rgba(0, 0, 0, 0.15)',
49
+ // // vars: {
50
+ // // '--ai-bg': `var(--ai-bg-hover)`,
51
+ // // },
52
+ // },
53
+ // },
54
+ })
@@ -0,0 +1,59 @@
1
+ import { ActionIcon, Box } from '@mantine/core'
2
+ import { IconId } from '@tabler/icons-react'
3
+ import clsx from 'clsx'
4
+ import { m } from 'framer-motion'
5
+ import { stopPropagation } from '../../../utils/xyflow'
6
+ import type { NodeProps } from '../../types'
7
+ import * as css from './ElementDetailsButton.css'
8
+
9
+ type ElementDetailsButtonProps = NodeProps & {
10
+ icon?: React.ReactNode
11
+ onClick: (e: React.MouseEvent) => void
12
+ }
13
+
14
+ export function ElementDetailsButton({
15
+ selected = false,
16
+ data: {
17
+ hovered: isHovered = false,
18
+ },
19
+ icon,
20
+ onClick,
21
+ }: ElementDetailsButtonProps) {
22
+ return (
23
+ <Box className={clsx(css.container, 'details-button')}>
24
+ <Box
25
+ className={clsx('nodrag nopan', css.actionIconWrapper)}
26
+ component={m.div}
27
+ initial={false}
28
+ style={{
29
+ originX: 0.45,
30
+ originY: 0.55,
31
+ }}
32
+ animate={(isHovered || selected)
33
+ ? {
34
+ scale: 1.2,
35
+ opacity: 0.7,
36
+ }
37
+ : {
38
+ scale: 1,
39
+ opacity: 0.5,
40
+ }}
41
+ whileHover={{
42
+ scale: 1.4,
43
+ opacity: 1,
44
+ }}
45
+ whileTap={{ scale: 1.15 }}
46
+ >
47
+ <ActionIcon
48
+ className={css.actionIcon}
49
+ size={'md'}
50
+ radius="md"
51
+ onClick={onClick}
52
+ onDoubleClick={stopPropagation}
53
+ >
54
+ {icon ?? <IconId stroke={1.8} style={{ width: '75%' }} />}
55
+ </ActionIcon>
56
+ </Box>
57
+ </Box>
58
+ )
59
+ }
@@ -0,0 +1,47 @@
1
+ import { createVar, fallbackVar, globalStyle, style } from '@vanilla-extract/css'
2
+ import { transitions, vars } from '../../../theme-vars'
3
+
4
+ export const stokeFillMix = createVar('stroke-fill-mix')
5
+
6
+ export const container = style({
7
+ // position: 'absolute',
8
+ // top: 0,
9
+ // left: 0,
10
+ position: 'relative',
11
+ width: '100%',
12
+ height: '100%',
13
+ padding: 0,
14
+ margin: 0,
15
+ display: 'flex',
16
+ alignItems: 'center',
17
+ justifyContent: 'center',
18
+ vars: {
19
+ [stokeFillMix]: `color-mix(in srgb, ${vars.element.stroke} 90%, ${vars.element.fill})`,
20
+ },
21
+ // selectors: {
22
+ // ':where(.react-flow__node.selected) &': {
23
+ // willChange: 'transform',
24
+ // },
25
+ // },
26
+ // Catch pointer below the element
27
+ ':after': {
28
+ content: ' ',
29
+ position: 'absolute',
30
+ top: '100%',
31
+ left: 0,
32
+ right: 0,
33
+ height: 20,
34
+ background: 'transparent',
35
+ pointerEvents: 'all',
36
+ },
37
+ })
38
+
39
+ export const dimmed = style({})
40
+
41
+ globalStyle(`.react-flow__node:has(${dimmed})`, {
42
+ opacity: 0.25,
43
+ transition: 'opacity 400ms ease-in-out, filter 500ms ease-in-out',
44
+ transitionDelay: '50ms',
45
+ filter: `grayscale(0.85) ${fallbackVar(vars.safariAnimationHook, 'blur(2px)')}`,
46
+ willChange: 'opacity, filter',
47
+ })
@@ -0,0 +1,72 @@
1
+ import type { DiagramNode } from '@likec4/core'
2
+ import { type BoxProps, Box, createPolymorphicComponent } from '@mantine/core'
3
+ import clsx from 'clsx'
4
+ import { m } from 'framer-motion'
5
+ import { type PropsWithChildren, forwardRef } from 'react'
6
+ import type { NodeProps } from '../../types'
7
+ import * as css from './ElementNodeContainer.css'
8
+
9
+ type RequiredData = Pick<
10
+ DiagramNode,
11
+ | 'color'
12
+ | 'shape'
13
+ >
14
+
15
+ type ElementNodeContainerProps =
16
+ & BoxProps
17
+ & PropsWithChildren<{
18
+ nodeProps: NodeProps<RequiredData>
19
+ }>
20
+
21
+ export const ElementNodeContainer = createPolymorphicComponent<'div', ElementNodeContainerProps>(
22
+ forwardRef<HTMLDivElement, ElementNodeContainerProps>(({
23
+ nodeProps: {
24
+ selected = false,
25
+ selectable = false,
26
+ data: {
27
+ hovered: isHovered = false,
28
+ dimmed: isDimmed = false,
29
+ ...data
30
+ },
31
+ },
32
+ children,
33
+ ...rest
34
+ }, ref) => {
35
+ let scale = 1
36
+ switch (true) {
37
+ case isHovered:
38
+ scale = 1.05
39
+ break
40
+ case selected:
41
+ scale = 1.02
42
+ break
43
+ }
44
+
45
+ return (
46
+ <Box
47
+ component={m.div}
48
+ ref={ref}
49
+ className={clsx([
50
+ css.container,
51
+ isDimmed && css.dimmed,
52
+ 'likec4-element-node',
53
+ ])}
54
+ initial={false}
55
+ layoutRoot
56
+ {...selectable && {
57
+ animate: {
58
+ scale,
59
+ },
60
+ whileTap: { scale: 0.98 },
61
+ }}
62
+ data-hovered={isHovered}
63
+ data-likec4-color={data.color}
64
+ data-likec4-shape={data.shape}
65
+ {...rest}
66
+ >
67
+ {children}
68
+ </Box>
69
+ )
70
+ }),
71
+ )
72
+ ElementNodeContainer.displayName = 'ElementNodeContainer'
@@ -0,0 +1,134 @@
1
+ import { createVar, fallbackVar, globalStyle, keyframes, style } from '@vanilla-extract/css'
2
+ import { easings, mantine, vars } from '../../../theme-vars'
3
+ import { container, stokeFillMix } from './ElementNodeContainer.css'
4
+
5
+ const indicatorKeyframes = keyframes({
6
+ 'from': {
7
+ strokeOpacity: 0.8,
8
+ },
9
+ 'to': {
10
+ strokeOpacity: 0.5,
11
+ },
12
+ })
13
+
14
+ const outlineColor = fallbackVar(
15
+ mantine.colors.primaryColors.outline,
16
+ mantine.colors.primaryColors.filled,
17
+ vars.element.stroke,
18
+ )
19
+
20
+ const indicatorStroke = createVar('indicator-stroke')
21
+
22
+ export const indicator = style({
23
+ stroke: indicatorStroke,
24
+ fill: 'none',
25
+ transformOrigin: 'center center',
26
+ strokeWidth: 6,
27
+ animationDuration: '1s',
28
+ animationIterationCount: 'infinite',
29
+ animationDirection: 'alternate',
30
+ strokeOpacity: 0.8,
31
+ visibility: 'hidden',
32
+ pointerEvents: 'none',
33
+ vars: {
34
+ [indicatorStroke]: vars.element.loContrast,
35
+ },
36
+ selectors: {
37
+ ':where(.react-flow__node.selected) &': {
38
+ visibility: 'visible',
39
+ animationName: fallbackVar(vars.safariAnimationHook, indicatorKeyframes),
40
+ },
41
+ [`:where(.react-flow__node:focus-visible, ${container}:focus-visible) &`]: {
42
+ strokeWidth: 10,
43
+ stroke: outlineColor,
44
+ visibility: 'visible',
45
+ },
46
+ ':where([data-likec4-shape="queue"], [data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) &': {
47
+ strokeWidth: 10,
48
+ },
49
+ [`:where([data-mantine-color-scheme='light']) &`]: {
50
+ vars: {
51
+ [indicatorStroke]: `color-mix(in srgb, ${vars.element.fill} 50%, #3c3c3c)`,
52
+ },
53
+ },
54
+ },
55
+ })
56
+
57
+ export const fillElementFill = style({
58
+ fill: vars.element.fill,
59
+ })
60
+
61
+ export const fillElementStroke = style({
62
+ fill: vars.element.stroke,
63
+ })
64
+
65
+ export const fillMixStroke = style({
66
+ fill: fallbackVar(stokeFillMix, `color-mix(in srgb, ${vars.element.stroke} 90%, ${vars.element.fill})`),
67
+ })
68
+
69
+ const filterShadow = createVar('filter-shadow')
70
+
71
+ const shapeBase = style({
72
+ top: 0,
73
+ left: 0,
74
+ position: 'absolute',
75
+ width: '100%',
76
+ height: '100%',
77
+ pointerEvents: 'none',
78
+ fill: vars.element.fill,
79
+ stroke: vars.element.stroke,
80
+ overflow: 'visible',
81
+ zIndex: -1,
82
+ })
83
+
84
+ export const shapeSvgMultiple = style([shapeBase, {
85
+ transformOrigin: '50% 25%',
86
+ transform: 'translate(14px, 14px) perspective(300px) translateZ(-8px)',
87
+ filter: ' brightness(0.65) saturate(0.8)',
88
+ stroke: 'none',
89
+ selectors: {
90
+ // [`:where(.react-flow__node.selected, .react-flow__node:focus-visible, ${container}:focus-visible) &`]: {
91
+ // visibility: 'hidden',
92
+ // },
93
+ ':where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) &': {
94
+ transformOrigin: '50% 100%',
95
+ },
96
+ ':where([data-likec4-shape="queue"]) &': {
97
+ transformOrigin: '75% 25%',
98
+ // transform: 'translate(14px,15px) perspective(200px) translateZ(-2px)',
99
+ },
100
+ },
101
+ // filter: 'brightness(0.5)'
102
+ }])
103
+ globalStyle(`.${shapeSvgMultiple} ${fillMixStroke}`, {
104
+ fill: vars.element.fill,
105
+ })
106
+ export const shapeSvg = style([shapeBase, {
107
+ filter: filterShadow,
108
+ transition: `fill 120ms linear, filter 130ms ${easings.inOut}`,
109
+ transitionDelay: '0ms',
110
+ vars: {
111
+ [filterShadow]: `
112
+ drop-shadow(0 2px 1px rgba(0, 0, 0, 0.21))
113
+ drop-shadow(0 1px 1px color-mix(in srgb, ${vars.element.stroke} 40%, transparent))
114
+ drop-shadow(0 5px 3px rgba(0, 0, 0, 0.1))
115
+ `,
116
+ },
117
+ selectors: {
118
+ [`:where([data-hovered='true']) &`]: {
119
+ vars: {
120
+ [filterShadow]: `
121
+ drop-shadow(0 2px 1px rgba(0, 0, 0, 0.25))
122
+ drop-shadow(0 8px 3px rgba(0, 0, 0, 0.1))
123
+ drop-shadow(0 10px 10px rgba(0, 0, 0, 0.05))
124
+
125
+ `,
126
+ },
127
+ },
128
+ [`:where(.react-flow__node.selected, .react-flow__node:focus-visible, ${container}:focus-visible) &`]: {
129
+ vars: {
130
+ [filterShadow]: `none`,
131
+ },
132
+ },
133
+ },
134
+ }])
@@ -1,6 +1,7 @@
1
- import { type ElementShape, nonexhaustive } from '@likec4/core'
2
- import { toDomPrecision } from '../../utils'
3
- import { fillElementFill, fillMixStroke } from './element.css'
1
+ import { type DiagramNode, type ElementShape, nonexhaustive } from '@likec4/core'
2
+ import { toDomPrecision } from '../../../utils/xyflow'
3
+ import type { NodeProps } from '../../types'
4
+ import * as css from './ElementShape.css'
4
5
 
5
6
  export function cylinderSVGPath(diameter: number, height: number, tilt = 0.065) {
6
7
  const radius = Math.round(diameter / 2)
@@ -21,7 +22,7 @@ export function cylinderSVGPath(diameter: number, height: number, tilt = 0.065)
21
22
  return {
22
23
  path,
23
24
  ry,
24
- rx
25
+ rx,
25
26
  }
26
27
  }
27
28
 
@@ -43,7 +44,7 @@ function queueSVGPath(width: number, height: number, tilt = 0.185) {
43
44
  return {
44
45
  path,
45
46
  ry,
46
- rx
47
+ rx,
47
48
  }
48
49
  }
49
50
 
@@ -51,16 +52,16 @@ const PersonIcon = {
51
52
  width: 115,
52
53
  height: 120,
53
54
  path:
54
- `M57.9197 0C10.9124 0 33.5766 54.75 33.5766 54.75C38.6131 62.25 45.3285 60.75 45.3285 66C45.3285 70.5 39.4526 72 33.5766 72.75C24.3431 72.75 15.9489 71.25 7.55474 84.75C2.51825 93 0 120 0 120H115C115 120 112.482 93 108.285 84.75C99.8905 70.5 91.4963 72.75 82.2628 72C76.3869 71.25 70.5109 69.75 70.5109 65.25C70.5109 60.75 77.2263 62.25 82.2628 54C82.2628 54.75 104.927 0 57.9197 0V0Z`
55
+ `M57.9197 0C10.9124 0 33.5766 54.75 33.5766 54.75C38.6131 62.25 45.3285 60.75 45.3285 66C45.3285 70.5 39.4526 72 33.5766 72.75C24.3431 72.75 15.9489 71.25 7.55474 84.75C2.51825 93 0 120 0 120H115C115 120 112.482 93 108.285 84.75C99.8905 70.5 91.4963 72.75 82.2628 72C76.3869 71.25 70.5109 69.75 70.5109 65.25C70.5109 60.75 77.2263 62.25 82.2628 54C82.2628 54.75 104.927 0 57.9197 0V0Z`,
55
56
  } as const
56
57
 
57
- type ElementShapeSvgProps = {
58
+ type ElementShapeProps = {
58
59
  shape: ElementShape
59
60
  w: number
60
61
  h: number
61
62
  }
62
63
 
63
- export function ElementShapeSvg({ shape, w, h }: ElementShapeSvgProps) {
64
+ function ElementShapeSvg({ shape, w, h }: ElementShapeProps) {
64
65
  switch (shape) {
65
66
  case 'mobile': {
66
67
  return (
@@ -69,10 +70,10 @@ export function ElementShapeSvg({ shape, w, h }: ElementShapeSvgProps) {
69
70
  width={w}
70
71
  height={h}
71
72
  rx={6}
72
- className={fillMixStroke}
73
+ className={css.fillMixStroke}
73
74
  strokeWidth={0}
74
75
  />
75
- <g className={fillElementFill} strokeWidth={0}>
76
+ <g className={css.fillElementFill} strokeWidth={0}>
76
77
  <circle cx={17} cy={h / 2} r={12} />
77
78
  <rect x={33} y={12} width={w - 44} height={h - 24} rx={5} />
78
79
  </g>
@@ -86,10 +87,10 @@ export function ElementShapeSvg({ shape, w, h }: ElementShapeSvgProps) {
86
87
  width={w}
87
88
  height={h}
88
89
  rx={6}
89
- className={fillMixStroke}
90
+ className={css.fillMixStroke}
90
91
  strokeWidth={0}
91
92
  />
92
- <g className={fillElementFill} strokeWidth={0}>
93
+ <g className={css.fillElementFill} strokeWidth={0}>
93
94
  <circle cx={16} cy={17} r={7} />
94
95
  <circle cx={36} cy={17} r={7} />
95
96
  <circle cx={56} cy={17} r={7} />
@@ -113,7 +114,7 @@ export function ElementShapeSvg({ shape, w, h }: ElementShapeSvgProps) {
113
114
  width={PersonIcon.width}
114
115
  height={PersonIcon.height}
115
116
  viewBox={`0 0 ${PersonIcon.width} ${PersonIcon.height}`}
116
- className={fillMixStroke}
117
+ className={css.fillMixStroke}
117
118
  >
118
119
  <path
119
120
  strokeWidth={0}
@@ -127,7 +128,7 @@ export function ElementShapeSvg({ shape, w, h }: ElementShapeSvgProps) {
127
128
  return (
128
129
  <>
129
130
  <path d={path} strokeWidth={2} />
130
- <ellipse cx={rx} cy={ry} ry={ry - 0.75} rx={rx} className={fillMixStroke} strokeWidth={2} />
131
+ <ellipse cx={rx} cy={ry} ry={ry - 0.75} rx={rx} className={css.fillMixStroke} strokeWidth={2} />
131
132
  </>
132
133
  )
133
134
  }
@@ -137,7 +138,7 @@ export function ElementShapeSvg({ shape, w, h }: ElementShapeSvgProps) {
137
138
  return (
138
139
  <>
139
140
  <path d={path} strokeWidth={2} />
140
- <ellipse cx={rx} cy={ry} ry={ry} rx={rx - 0.75} className={fillMixStroke} strokeWidth={2} />
141
+ <ellipse cx={rx} cy={ry} ry={ry} rx={rx - 0.75} className={css.fillMixStroke} strokeWidth={2} />
141
142
  </>
142
143
  )
143
144
  }
@@ -156,19 +157,61 @@ export function ElementShapeSvg({ shape, w, h }: ElementShapeSvgProps) {
156
157
  }
157
158
  }
158
159
 
160
+ type Data = Pick<
161
+ DiagramNode,
162
+ | 'shape'
163
+ | 'width'
164
+ | 'height'
165
+ >
166
+
167
+ // type ElementShapePrimitiveProps = NodeProps<Data> & {
168
+ type ElementShapePrimitiveProps = {
169
+ data: Data
170
+ width?: number
171
+ height?: number
172
+ isMultiple?: boolean | undefined
173
+ /**
174
+ * @default true
175
+ */
176
+ withSelectedIndicator?: boolean | undefined
177
+ }
178
+
179
+ export function ElementShape(
180
+ { data, width, height, isMultiple = false, withSelectedIndicator = true }: ElementShapePrimitiveProps,
181
+ ) {
182
+ let w = !!width && width > 10 ? width : data.width
183
+ let h = !!height && height > 10 ? height : data.height
184
+ return (
185
+ <>
186
+ {isMultiple && (
187
+ <svg className={css.shapeSvgMultiple} viewBox={`0 0 ${w} ${h}`}>
188
+ <ElementShapeSvg shape={data.shape} w={w} h={h} />
189
+ </svg>
190
+ )}
191
+ <svg className={css.shapeSvg} viewBox={`0 0 ${w} ${h}`}>
192
+ {withSelectedIndicator && <SelectedIndicator shape={data.shape} w={w} h={h} />}
193
+ <ElementShapeSvg shape={data.shape} w={w} h={h} />
194
+ </svg>
195
+ </>
196
+ )
197
+ }
198
+
159
199
  /**
160
200
  * When element is selected, this component is used to render the indicator
161
201
  */
162
- export function SelectedIndicator({ shape, w, h }: ElementShapeSvgProps) {
202
+ export function SelectedIndicator({ shape, w, h }: ElementShapeProps) {
203
+ let svg
163
204
  switch (shape) {
164
205
  case 'queue':
165
- return <path d={queueSVGPath(w, h).path} />
206
+ svg = <path d={queueSVGPath(w, h).path} />
207
+ break
166
208
  case 'storage':
167
209
  case 'cylinder': {
168
- return <path d={cylinderSVGPath(w, h).path} />
210
+ svg = <path d={cylinderSVGPath(w, h).path} />
211
+ break
169
212
  }
170
213
  default: {
171
- return (
214
+ svg = (
172
215
  <rect
173
216
  x={-1}
174
217
  y={-1}
@@ -176,6 +219,8 @@ export function SelectedIndicator({ shape, w, h }: ElementShapeSvgProps) {
176
219
  height={h + 2}
177
220
  rx={6} />
178
221
  )
222
+ break
179
223
  }
180
224
  }
225
+ return <g className={css.indicator}>{svg}</g>
181
226
  }
@@ -0,0 +1,156 @@
1
+ import { rem } from '@mantine/core'
2
+ import { createVar, globalStyle, style } from '@vanilla-extract/css'
3
+ import { vars } from '../../../theme-vars'
4
+
5
+ export const hasIcon = style({})
6
+
7
+ const textAlign = createVar('text-align')
8
+ export const iconSize = createVar('icon-size')
9
+
10
+ export const title = style({
11
+ flex: '0 0 auto',
12
+ fontFamily: vars.element.font,
13
+ fontOpticalSizing: 'auto',
14
+ fontStyle: 'normal',
15
+ textAlign: textAlign,
16
+ fontWeight: 500,
17
+ fontSize: 19,
18
+ lineHeight: 1.15,
19
+ textWrap: 'balance',
20
+ color: vars.element.hiContrast,
21
+ whiteSpaceCollapse: 'preserve-breaks',
22
+ })
23
+
24
+ export const description = style({
25
+ flex: '0 1 auto',
26
+ fontFamily: vars.element.font,
27
+ fontOpticalSizing: 'auto',
28
+ fontStyle: 'normal',
29
+ fontWeight: 400,
30
+ fontSize: 14,
31
+ lineHeight: 1.2,
32
+ textAlign: textAlign,
33
+ textWrap: 'pretty',
34
+ color: vars.element.loContrast,
35
+ whiteSpaceCollapse: 'preserve-breaks',
36
+ textOverflow: 'ellipsis',
37
+ overflow: 'hidden',
38
+ selectors: {
39
+ [`:where(${hasIcon}) &`]: {
40
+ textWrap: 'wrap',
41
+ },
42
+ },
43
+ })
44
+
45
+ export const technology = style({
46
+ flex: '0 0 auto',
47
+ fontFamily: vars.element.font,
48
+ fontOpticalSizing: 'auto',
49
+ fontStyle: 'normal',
50
+ fontWeight: 400,
51
+ fontSize: 12,
52
+ lineHeight: 1.125,
53
+ textAlign: textAlign,
54
+ textWrap: 'balance',
55
+ opacity: 0.92,
56
+ color: vars.element.loContrast,
57
+ selectors: {
58
+ [`:where([data-hovered='true']) &`]: {
59
+ opacity: 1,
60
+ },
61
+ },
62
+ })
63
+
64
+ export const elementDataContainer = style({
65
+ flex: '1',
66
+ height: 'fit-content',
67
+ display: 'flex',
68
+ alignItems: 'center',
69
+ justifyContent: 'center',
70
+ flexDirection: 'row',
71
+ padding: rem(24),
72
+ overflow: 'hidden',
73
+ gap: rem(10),
74
+ vars: {
75
+ [iconSize]: '48px',
76
+ },
77
+ selectors: {
78
+ ':where([data-likec4-shape="queue"], [data-likec4-shape="mobile"]) &': {
79
+ paddingLeft: 40,
80
+ paddingRight: 20,
81
+ },
82
+ ':where([data-likec4-shape="cylinder"], [data-likec4-shape="storage"]) &': {
83
+ paddingTop: 30,
84
+ },
85
+ ':where([data-likec4-shape="browser"]) &': {
86
+ paddingTop: 32,
87
+ paddingBottom: 28,
88
+ },
89
+ // [`&:is(${hasIcon})`]: {
90
+ // paddingLeft: 40,
91
+ // paddingRight: 20
92
+ // },
93
+ [`.likec4-element-node:not(:is([data-likec4-shape="queue"],[data-likec4-shape="mobile"])) &:is(${hasIcon})`]: {
94
+ paddingLeft: 24,
95
+ paddingRight: 18,
96
+ },
97
+ [`&:has(${description}, ${technology})`]: {
98
+ gap: rem(16),
99
+ vars: {
100
+ [iconSize]: '60px',
101
+ },
102
+ },
103
+ },
104
+ })
105
+
106
+ export const elementTextData = style({
107
+ height: 'fit-content',
108
+ width: 'max-content',
109
+ display: 'flex',
110
+ flexDirection: 'column',
111
+ alignItems: 'stretch',
112
+ justifyContent: 'center',
113
+ flexWrap: 'nowrap',
114
+ overflow: 'hidden',
115
+ gap: rem(8),
116
+ 'vars': {
117
+ [textAlign]: 'center',
118
+ },
119
+ selectors: {
120
+ [`&:has(${description}):has(${technology})`]: {
121
+ gap: rem(6),
122
+ },
123
+ [`:where(${hasIcon}) &`]: {
124
+ minWidth: 'calc(100% - 160px)',
125
+ alignItems: 'flex-start',
126
+ 'vars': {
127
+ [textAlign]: 'left',
128
+ },
129
+ },
130
+ },
131
+ })
132
+
133
+ export const elementIcon = style({
134
+ flex: `0 0 ${iconSize}`,
135
+ height: iconSize,
136
+ width: iconSize,
137
+ display: 'flex',
138
+ alignItems: 'center',
139
+ justifyContent: 'center',
140
+ mixBlendMode: 'hard-light',
141
+ alignSelf: 'flex-start',
142
+ })
143
+ globalStyle(`${elementIcon} svg, ${elementIcon} img`, {
144
+ width: '100%',
145
+ height: 'auto',
146
+ maxHeight: '100%',
147
+ pointerEvents: 'none',
148
+ filter: `
149
+ drop-shadow(0 0 3px rgb(0 0 0 / 12%))
150
+ drop-shadow(0 1px 8px rgb(0 0 0 / 8%))
151
+ drop-shadow(1px 1px 16px rgb(0 0 0 / 3%))
152
+ `,
153
+ })
154
+ globalStyle(`${elementIcon} img`, {
155
+ objectFit: 'contain',
156
+ })