@likec4/diagram 1.34.1 → 1.35.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 (266) hide show
  1. package/bundle/{chunk-Dd7et66b.js → chunk-C0Eg81Gj.js} +971 -1045
  2. package/bundle/custom.js +59 -55
  3. package/bundle/index.js +6656 -4263
  4. package/dist/LikeC4Diagram.props.d.ts +51 -4
  5. package/dist/LikeC4ModelProvider.d.ts +3 -3
  6. package/dist/base/BaseXYFlow.d.ts +2 -2
  7. package/dist/base/BaseXYFlow.js +3 -3
  8. package/dist/base/primitives/compound/CompoundActionButton.js +1 -1
  9. package/dist/base/primitives/compound/CompoundDetailsButton.js +1 -1
  10. package/dist/base/primitives/edge/EdgeActionButton.js +1 -1
  11. package/dist/base/primitives/element/ElementDetailsButton.js +1 -1
  12. package/dist/base/primitives/element/ElementNodeContainer.d.ts +3 -3
  13. package/dist/base/primitives/element/ElementTitle.js +9 -9
  14. package/dist/bundle/LikeC4View.js +3 -3
  15. package/dist/bundle/LikeC4View.props.d.ts +8 -4
  16. package/dist/bundle/custom.js +1 -0
  17. package/dist/bundle/index.js +1 -0
  18. package/dist/components/ErrorFallback.d.ts +2 -1
  19. package/dist/components/ErrorFallback.js +15 -2
  20. package/dist/components/Link.js +2 -2
  21. package/dist/components/NavigationLink.d.ts +6 -0
  22. package/dist/components/NavigationLink.js +25 -0
  23. package/dist/components/SearchControl.js +1 -1
  24. package/dist/context/ControlsCustomLayout.d.ts +0 -1
  25. package/dist/context/DiagramFeatures.d.ts +4 -1
  26. package/dist/context/IconRenderer.js +6 -6
  27. package/dist/custom/customNodes.js +10 -2
  28. package/dist/custom/hooks.d.ts +1 -0
  29. package/dist/custom/index.js +1 -0
  30. package/dist/hooks/useDiagram.d.ts +1 -2
  31. package/dist/hooks/useDiagram.js +1 -5
  32. package/dist/index.js +1 -0
  33. package/dist/likec4diagram/DiagramUI.js +8 -4
  34. package/dist/likec4diagram/DiagramXYFlow.js +1 -1
  35. package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +4 -4
  36. package/dist/likec4diagram/custom/nodes/ElementActions.js +2 -2
  37. package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +2 -2
  38. package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +2 -2
  39. package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +1 -1
  40. package/dist/likec4diagram/ui/controls/Controls.js +11 -15
  41. package/dist/likec4diagram/ui/controls/LayoutDriftNotification.js +1 -1
  42. package/dist/likec4diagram/ui/controls/ManualLayoutToolsButton.js +9 -9
  43. package/dist/likec4diagram/ui/controls/NavigationButtons.js +4 -2
  44. package/dist/likec4diagram/ui/controls/ToggleReadonly.js +2 -2
  45. package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +15 -13
  46. package/dist/likec4diagram/ui/notation/NotationPanel.js +3 -3
  47. package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +4 -4
  48. package/dist/likec4model/LikeC4ModelContext.d.ts +4 -1
  49. package/dist/likec4model/LikeC4ModelContext.js +2 -1
  50. package/dist/likec4model/index.d.ts +1 -0
  51. package/dist/likec4model/useCurrentViewModel.d.ts +2 -0
  52. package/dist/likec4model/useCurrentViewModel.js +12 -0
  53. package/dist/likec4model/useLikeC4Model.d.ts +2 -5
  54. package/dist/likec4model/useLikeC4Model.js +10 -16
  55. package/dist/navigationpanel/NavigationPanel.d.ts +2 -0
  56. package/dist/navigationpanel/NavigationPanel.js +124 -0
  57. package/dist/navigationpanel/NavigationPanelControls.d.ts +1 -0
  58. package/dist/navigationpanel/NavigationPanelControls.js +134 -0
  59. package/dist/navigationpanel/NavigationPanelDropdown.d.ts +1 -0
  60. package/dist/navigationpanel/NavigationPanelDropdown.js +436 -0
  61. package/dist/navigationpanel/_common.d.ts +15 -0
  62. package/dist/navigationpanel/_common.js +69 -0
  63. package/dist/navigationpanel/actor.d.ts +300 -0
  64. package/dist/navigationpanel/actor.js +240 -0
  65. package/dist/navigationpanel/controls/BurgerButton.d.ts +1 -0
  66. package/dist/navigationpanel/controls/BurgerButton.js +36 -0
  67. package/dist/navigationpanel/controls/NavigationButtons.d.ts +1 -0
  68. package/dist/navigationpanel/controls/NavigationButtons.js +44 -0
  69. package/dist/navigationpanel/controls/OpenSource.d.ts +1 -0
  70. package/dist/navigationpanel/controls/OpenSource.js +27 -0
  71. package/dist/navigationpanel/controls/SearchControl.d.ts +1 -0
  72. package/dist/navigationpanel/controls/SearchControl.js +68 -0
  73. package/dist/navigationpanel/controls/ToggleReadonly.d.ts +1 -0
  74. package/dist/navigationpanel/controls/ToggleReadonly.js +69 -0
  75. package/dist/navigationpanel/controls/index.d.ts +5 -0
  76. package/dist/navigationpanel/editorpanel/CenterCamera.d.ts +1 -0
  77. package/dist/navigationpanel/editorpanel/CenterCamera.js +12 -0
  78. package/dist/navigationpanel/editorpanel/ChangeAutoLayoutButton.d.ts +1 -0
  79. package/dist/navigationpanel/editorpanel/ChangeAutoLayoutButton.js +157 -0
  80. package/dist/navigationpanel/editorpanel/EditorPanel.d.ts +1 -0
  81. package/dist/navigationpanel/editorpanel/EditorPanel.js +48 -0
  82. package/dist/navigationpanel/editorpanel/LayoutDriftNotification.d.ts +1 -0
  83. package/dist/navigationpanel/editorpanel/LayoutDriftNotification.js +56 -0
  84. package/dist/navigationpanel/editorpanel/ManualLayoutToolsButton.d.ts +2 -0
  85. package/dist/navigationpanel/editorpanel/ManualLayoutToolsButton.js +174 -0
  86. package/dist/navigationpanel/editorpanel/_common.d.ts +6 -0
  87. package/dist/navigationpanel/editorpanel/_common.js +14 -0
  88. package/dist/navigationpanel/editorpanel/index.d.ts +1 -0
  89. package/dist/navigationpanel/editorpanel/styles.d.ts +8 -0
  90. package/dist/navigationpanel/editorpanel/styles.js +79 -0
  91. package/dist/navigationpanel/hooks.d.ts +20 -0
  92. package/dist/navigationpanel/hooks.js +38 -0
  93. package/dist/navigationpanel/index.d.ts +1 -0
  94. package/dist/navigationpanel/styles.css.d.ts +16 -0
  95. package/dist/navigationpanel/styles.css.js +32 -0
  96. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.d.ts +2 -0
  97. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.js +157 -0
  98. package/dist/navigationpanel/walkthrough/index.d.ts +1 -0
  99. package/dist/node_modules/.pnpm/{@tabler_icons-react@3.31.0_react@19.1.0 → @tabler_icons-react@3.34.1_react@19.1.1}/node_modules/@tabler/icons-react/dist/esm/createReactComponent.js +1 -1
  100. package/dist/node_modules/.pnpm/{@tabler_icons-react@3.31.0_react@19.1.0 → @tabler_icons-react@3.34.1_react@19.1.1}/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.js +1 -1
  101. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertTriangle.js +14 -0
  102. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDownRight.js +14 -0
  103. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowLeft.js +14 -0
  104. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js +14 -0
  105. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconBrowser.js +14 -0
  106. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.js +14 -0
  107. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js +14 -0
  108. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js +14 -0
  109. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.js +14 -0
  110. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconCylinder.js +14 -0
  111. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconDeviceMobile.js +14 -0
  112. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js +14 -0
  113. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js +14 -0
  114. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFocusCentered.js +14 -0
  115. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconFolderFilled.js +14 -0
  116. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconHelpCircle.js +14 -0
  117. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js +14 -0
  118. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js +14 -0
  119. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignBottom.js +14 -0
  120. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignCenter.js +14 -0
  121. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignLeft.js +14 -0
  122. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignMiddle.js +14 -0
  123. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignRight.js +14 -0
  124. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignTop.js +14 -0
  125. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutBoardSplit.js +14 -0
  126. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutCollage.js +14 -0
  127. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutDashboard.js +14 -0
  128. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLock.js +14 -0
  129. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconLockOpen2.js +14 -0
  130. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMenu.js +14 -0
  131. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconMenu2.js +14 -0
  132. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlayFilled.js +14 -0
  133. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipBackFilled.js +14 -0
  134. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipForwardFilled.js +14 -0
  135. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerStopFilled.js +14 -0
  136. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconRectangularPrism.js +14 -0
  137. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconReorder.js +14 -0
  138. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconRouteOff.js +14 -0
  139. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js +14 -0
  140. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.js +14 -0
  141. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js +14 -0
  142. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconStarFilled.js +14 -0
  143. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconTarget.js +14 -0
  144. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconTransform.js +14 -0
  145. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconUser.js +14 -0
  146. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconX.js +14 -0
  147. package/dist/node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js +14 -0
  148. package/dist/overlays/element-details/ElementDetailsCard.js +4 -4
  149. package/dist/overlays/element-details/TabPanelDeployments.js +3 -3
  150. package/dist/overlays/element-details/TabPanelRelationships.js +3 -3
  151. package/dist/overlays/element-details/TabPanelStructure.js +1 -1
  152. package/dist/overlays/relationship-details/RelationshipDetails.js +3 -3
  153. package/dist/overlays/relationship-details/SelectEdge.js +2 -2
  154. package/dist/overlays/relationship-details/custom/ElementActions.js +3 -3
  155. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +3 -3
  156. package/dist/overlays/relationships-browser/SelectElement.js +2 -2
  157. package/dist/overlays/relationships-browser/custom/ElementActions.js +3 -3
  158. package/dist/search/components/ElementsColumn.js +1 -1
  159. package/dist/search/components/PickView.js +1 -1
  160. package/dist/search/components/SearchByTags.js +1 -1
  161. package/dist/search/components/SearchInput.js +1 -1
  162. package/dist/search/components/ViewsColum.js +2 -2
  163. package/dist/state/DiagramActorProvider.d.ts +2 -2
  164. package/dist/state/DiagramActorProvider.js +48 -10
  165. package/dist/state/diagram-machine.d.ts +2 -2
  166. package/dist/styles-min.css +1 -1
  167. package/dist/styles.css +1 -1
  168. package/dist/styles.css2.js +1 -1
  169. package/package.json +16 -15
  170. package/panda.buildinfo.json +170 -134
  171. package/src/LikeC4Diagram.props.ts +51 -3
  172. package/src/LikeC4ModelProvider.tsx +3 -3
  173. package/src/base/BaseXYFlow.tsx +4 -4
  174. package/src/base/primitives/element/ElementNodeContainer.tsx +2 -2
  175. package/src/base/primitives/element/ElementTitle.tsx +4 -4
  176. package/src/bundle/LikeC4View.props.ts +14 -4
  177. package/src/bundle/LikeC4View.tsx +2 -2
  178. package/src/components/ErrorFallback.tsx +16 -1
  179. package/src/components/NavigationLink.tsx +31 -0
  180. package/src/context/ControlsCustomLayout.ts +0 -1
  181. package/src/context/DiagramFeatures.tsx +6 -1
  182. package/src/custom/customNodes.tsx +10 -2
  183. package/src/custom/hooks.ts +3 -0
  184. package/src/hooks/useDiagram.ts +0 -8
  185. package/src/likec4diagram/DiagramUI.tsx +9 -3
  186. package/src/likec4diagram/DiagramXYFlow.tsx +1 -1
  187. package/src/likec4diagram/ui/controls/Controls.tsx +8 -18
  188. package/src/likec4diagram/ui/controls/NavigationButtons.tsx +2 -0
  189. package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +14 -11
  190. package/src/likec4model/LikeC4ModelContext.ts +5 -1
  191. package/src/likec4model/index.ts +3 -0
  192. package/src/likec4model/useCurrentViewModel.ts +10 -0
  193. package/src/likec4model/useLikeC4Model.ts +17 -27
  194. package/src/navigationpanel/NavigationPanel.tsx +136 -0
  195. package/src/navigationpanel/NavigationPanelControls.tsx +155 -0
  196. package/src/navigationpanel/NavigationPanelDropdown.tsx +523 -0
  197. package/src/navigationpanel/_common.tsx +81 -0
  198. package/src/navigationpanel/actor.ts +321 -0
  199. package/src/navigationpanel/controls/BurgerButton.tsx +32 -0
  200. package/src/navigationpanel/controls/NavigationButtons.tsx +36 -0
  201. package/src/navigationpanel/controls/OpenSource.tsx +28 -0
  202. package/src/navigationpanel/controls/SearchControl.tsx +64 -0
  203. package/src/navigationpanel/controls/ToggleReadonly.tsx +66 -0
  204. package/src/navigationpanel/controls/index.ts +5 -0
  205. package/src/navigationpanel/editorpanel/CenterCamera.tsx +15 -0
  206. package/src/navigationpanel/editorpanel/ChangeAutoLayoutButton.tsx +199 -0
  207. package/src/navigationpanel/editorpanel/EditorPanel.tsx +49 -0
  208. package/src/navigationpanel/editorpanel/LayoutDriftNotification.tsx +56 -0
  209. package/src/navigationpanel/editorpanel/ManualLayoutToolsButton.tsx +151 -0
  210. package/src/navigationpanel/editorpanel/_common.tsx +14 -0
  211. package/src/navigationpanel/editorpanel/index.ts +1 -0
  212. package/src/navigationpanel/editorpanel/styles.ts +84 -0
  213. package/src/navigationpanel/hooks.tsx +70 -0
  214. package/src/navigationpanel/index.ts +1 -0
  215. package/src/navigationpanel/styles.css.ts +30 -0
  216. package/src/navigationpanel/walkthrough/ActiveWalkthroughControls.tsx +160 -0
  217. package/src/navigationpanel/walkthrough/index.tsx +1 -0
  218. package/src/state/DiagramActorProvider.tsx +60 -12
  219. package/src/state/diagram-machine.ts +2 -2
  220. package/dist/base/primitives/element/ElementTitle.css.d.ts +0 -34
  221. package/dist/base/primitives/element/ElementTitle.css.js +0 -201
  222. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertTriangle.js +0 -13
  223. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowDownRight.js +0 -13
  224. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js +0 -13
  225. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconBrowser.js +0 -13
  226. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.js +0 -13
  227. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js +0 -13
  228. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.js +0 -13
  229. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.js +0 -13
  230. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconCylinder.js +0 -13
  231. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconDeviceMobile.js +0 -13
  232. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconExternalLink.js +0 -13
  233. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconFileSymlink.js +0 -13
  234. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconFocusCentered.js +0 -13
  235. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconHelpCircle.js +0 -13
  236. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconId.js +0 -13
  237. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircle.js +0 -13
  238. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignBottom.js +0 -13
  239. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignCenter.js +0 -13
  240. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignLeft.js +0 -13
  241. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignMiddle.js +0 -13
  242. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignRight.js +0 -13
  243. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutAlignTop.js +0 -13
  244. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutBoardSplit.js +0 -13
  245. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutCollage.js +0 -13
  246. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLayoutDashboard.js +0 -13
  247. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLock.js +0 -13
  248. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconLockOpen2.js +0 -13
  249. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconMenu.js +0 -13
  250. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconMenu2.js +0 -13
  251. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlayFilled.js +0 -13
  252. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipBackFilled.js +0 -13
  253. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerSkipForwardFilled.js +0 -13
  254. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerStopFilled.js +0 -13
  255. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconRectangularPrism.js +0 -13
  256. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconReorder.js +0 -13
  257. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconRouteOff.js +0 -13
  258. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js +0 -13
  259. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconSelector.js +0 -13
  260. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconStack2.js +0 -13
  261. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconTarget.js +0 -13
  262. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconTransform.js +0 -13
  263. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconUser.js +0 -13
  264. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconX.js +0 -13
  265. package/dist/node_modules/.pnpm/@tabler_icons-react@3.31.0_react@19.1.0/node_modules/@tabler/icons-react/dist/esm/icons/IconZoomScan.js +0 -13
  266. package/src/base/primitives/element/ElementTitle.css.ts +0 -206
@@ -0,0 +1,523 @@
1
+ import { type LikeC4ViewsFolder, LikeC4ViewModel, normalizeViewPath, VIEW_FOLDERS_SEPARATOR } from '@likec4/core/model'
2
+ import type { ViewId } from '@likec4/core/types'
3
+ import { compareNaturalHierarchically, ifilter, ifirst, nonexhaustive, toArray } from '@likec4/core/utils'
4
+ import { css, cx } from '@likec4/styles/css'
5
+ import { Box, HStack, VStack } from '@likec4/styles/jsx'
6
+ import { hstack, vstack } from '@likec4/styles/patterns'
7
+ import {
8
+ Breadcrumbs,
9
+ Button,
10
+ createScopedKeydownHandler,
11
+ Divider,
12
+ Highlight,
13
+ Input,
14
+ PopoverDropdown,
15
+ rem,
16
+ ScrollAreaAutosize,
17
+ UnstyledButton,
18
+ } from '@mantine/core'
19
+ import { useThrottledCallback, useUncontrolled } from '@mantine/hooks'
20
+ import {
21
+ IconChevronRight,
22
+ IconFolderFilled,
23
+ IconSearch,
24
+ IconStack2,
25
+ IconStarFilled,
26
+ IconZoomScan,
27
+ } from '@tabler/icons-react'
28
+ import { useSelector } from '@xstate/react'
29
+ import { deepEqual } from 'fast-equals'
30
+ import type { ComponentPropsWithoutRef, KeyboardEventHandler } from 'react'
31
+ import { isArray, isEmpty, pipe, sort } from 'remeda'
32
+ import { type NavigationLinkProps, NavigationLink } from '../components/NavigationLink'
33
+ import { useLikeC4Model } from '../likec4model/useLikeC4Model'
34
+ import type { NavigationPanelActorContext } from './actor'
35
+ import { useNavigationActor, useNavigationActorContext, useNavigationActorRef } from './hooks'
36
+ import { breadcrumbTitle } from './styles.css'
37
+
38
+ const scopedKeydownHandler = createScopedKeydownHandler({
39
+ siblingSelector: '[data-likec4-focusable]',
40
+ parentSelector: '[data-likec4-breadcrumbs-dropdown]',
41
+ activateOnFocus: false,
42
+ loop: true,
43
+ orientation: 'vertical',
44
+ })
45
+
46
+ export function NavigationPanelDropdown() {
47
+ const actor = useNavigationActor()
48
+ const searchQuery = useSelector(actor.actorRef, s => s.context.searchQuery)
49
+
50
+ const setSearchQuery = useThrottledCallback((value: string) => {
51
+ actor.send({ type: 'searchQuery.change', value })
52
+ }, 250)
53
+
54
+ const hasSearchQuery = searchQuery.trim().length >= 2
55
+
56
+ return (
57
+ <PopoverDropdown
58
+ className={cx(
59
+ 'nowheel',
60
+ vstack({
61
+ layerStyle: 'likec4.dropdown',
62
+ gap: 'sm',
63
+ pointerEvents: 'all',
64
+ }),
65
+ )}
66
+ data-likec4-breadcrumbs-dropdown
67
+ onMouseLeave={() => actor.send({ type: 'dropdown.mouseLeave' })}
68
+ onMouseEnter={() => actor.send({ type: 'dropdown.mouseEnter' })}
69
+ >
70
+ <HStack gap="xs">
71
+ <SearchInput
72
+ value={searchQuery}
73
+ onChange={setSearchQuery}
74
+ data-likec4-focusable
75
+ onKeyDown={scopedKeydownHandler}
76
+ />
77
+ {
78
+ /* <Button
79
+ variant="default"
80
+ size={'xs'}
81
+ onClick={(e) => {
82
+ e.stopPropagation()
83
+ actor.send({ type: 'dropdown.dismiss' })
84
+ }}
85
+ >
86
+ Close
87
+ </Button> */
88
+ }
89
+ </HStack>
90
+ <ScrollAreaAutosize
91
+ scrollbars="xy"
92
+ type="auto"
93
+ offsetScrollbars="present"
94
+ classNames={{
95
+ root: css({
96
+ maxWidth: [
97
+ 'calc(100vw - 20px)',
98
+ 'calc(100cqw - 20px)',
99
+ ],
100
+ }),
101
+ }}
102
+ >
103
+ {hasSearchQuery
104
+ ? <SearchResults searchQuery={normalizeViewPath(searchQuery).toLowerCase()} />
105
+ : <FolderColumns />}
106
+ </ScrollAreaAutosize>
107
+ </PopoverDropdown>
108
+ )
109
+ }
110
+
111
+ const compare = compareNaturalHierarchically(VIEW_FOLDERS_SEPARATOR)
112
+ function SearchResults({ searchQuery }: { searchQuery: string }) {
113
+ const likec4model = useLikeC4Model()
114
+ const actor = useNavigationActor()
115
+ const isSearchByPath = searchQuery.includes(VIEW_FOLDERS_SEPARATOR)
116
+
117
+ const found = pipe(
118
+ likec4model.views(),
119
+ ifilter(v => {
120
+ // if search query contains folder separator, search in view data
121
+ if (isSearchByPath && v.$view.title) {
122
+ return normalizeViewPath(v.$view.title).toLowerCase().includes(searchQuery)
123
+ }
124
+ return v.id.toLowerCase().includes(searchQuery) || !!v.title?.toLowerCase().includes(searchQuery)
125
+ }),
126
+ ifirst(20),
127
+ toArray(),
128
+ sort((a, b) => compare(a.folder.path, b.folder.path)),
129
+ )
130
+ if (found.length === 0) return <div>no results</div>
131
+
132
+ const highlight = isSearchByPath ? searchQuery.split(VIEW_FOLDERS_SEPARATOR) : searchQuery
133
+
134
+ return (
135
+ <ScrollAreaAutosize
136
+ scrollbars="xy"
137
+ offsetScrollbars={false}
138
+ className={css({
139
+ width: '100%',
140
+ maxWidth: [
141
+ '70vw',
142
+ 'calc(100cqw - 250px)',
143
+ ],
144
+ maxHeight: [
145
+ '70vh',
146
+ 'calc(100cqh - 250px)',
147
+ ],
148
+ })}>
149
+ <VStack gap={1}>
150
+ {found.map(v => (
151
+ <FoundedView
152
+ key={v.id}
153
+ view={v}
154
+ highlight={highlight}
155
+ onClick={e => {
156
+ console.log('click')
157
+ e.stopPropagation()
158
+ actor.selectView(v.id)
159
+ }}
160
+ data-likec4-focusable
161
+ onKeyDown={scopedKeydownHandler}
162
+ />
163
+ ))}
164
+ </VStack>
165
+ </ScrollAreaAutosize>
166
+ )
167
+ }
168
+ interface FoundedViewProps {
169
+ view: LikeC4ViewModel
170
+ highlight: string | string[]
171
+ }
172
+
173
+ const foundedViewClass = hstack({
174
+ gap: '2xs',
175
+ rounded: 'sm',
176
+ px: 'xs',
177
+ py: '2xs',
178
+ _hover: {
179
+ backgroundColor: {
180
+ base: 'mantine.colors.gray[1]',
181
+ _dark: 'mantine.colors.dark[5]',
182
+ },
183
+ },
184
+ _focus: {
185
+ outline: 'none',
186
+ color: 'mantine.colors.primary.lightColor!',
187
+ backgroundColor: 'mantine.colors.primary.lightHover!',
188
+ },
189
+ })
190
+ const inheritColor = css({
191
+ _groupFocus: {
192
+ color: '[inherit!]',
193
+ transition: 'none',
194
+ },
195
+ })
196
+
197
+ function FoundedView(
198
+ { view, highlight, ...props }: FoundedViewProps & Omit<ComponentPropsWithoutRef<'button'>, keyof FoundedViewProps>,
199
+ ) {
200
+ const folder = view.folder
201
+
202
+ const viewIcon = ViewTypeIcon[view.id === 'index' ? 'index' : view._type]
203
+ const viewLabel = (
204
+ <Highlight
205
+ key={view.id}
206
+ component={'div'}
207
+ className={cx(
208
+ inheritColor,
209
+ breadcrumbTitle({ truncate: true }),
210
+ )}
211
+ maw={350}
212
+ highlight={highlight}
213
+ >
214
+ {view.title ?? view.id}
215
+ </Highlight>
216
+ )
217
+ const className = cx(
218
+ props.className,
219
+ 'group',
220
+ foundedViewClass,
221
+ )
222
+
223
+ if (folder.isRoot) {
224
+ return (
225
+ <UnstyledButton
226
+ {...props}
227
+ className={className}
228
+ >
229
+ {viewIcon}
230
+ {viewLabel}
231
+ </UnstyledButton>
232
+ )
233
+ }
234
+
235
+ const breadcrumbs = folder.breadcrumbs.map(b => (
236
+ <Highlight
237
+ key={b.path}
238
+ component={'div'}
239
+ className={cx(
240
+ css({
241
+ _groupHover: {
242
+ color: 'mantine.colors.dimmed',
243
+ },
244
+ }),
245
+ inheritColor,
246
+ breadcrumbTitle({ dimmed: true, truncate: true }),
247
+ )}
248
+ maw={170}
249
+ highlight={isArray(highlight) ? highlight : []}
250
+ >
251
+ {b.title}
252
+ </Highlight>
253
+ ))
254
+ breadcrumbs.push(
255
+ <HStack gap={4}>
256
+ {viewIcon}
257
+ {viewLabel}
258
+ </HStack>,
259
+ )
260
+
261
+ return (
262
+ <UnstyledButton
263
+ {...props}
264
+ className={className}
265
+ >
266
+ {folderIcon}
267
+ <Breadcrumbs separator={<IconChevronRight size={12} stroke={1.5} />} separatorMargin={3}>
268
+ {breadcrumbs}
269
+ </Breadcrumbs>
270
+ </UnstyledButton>
271
+ )
272
+ }
273
+
274
+ const btnRightSection = <IconChevronRight size={12} stroke={1.5} className="mantine-rotate-rtl" />
275
+ const folderIcon = (
276
+ <IconFolderFilled
277
+ size={16}
278
+ // stroke={1.5}
279
+ className={css({
280
+ opacity: {
281
+ base: 0.3,
282
+ _groupHover: 0.5,
283
+ _groupActive: 0.5,
284
+ },
285
+ })} />
286
+ )
287
+
288
+ const viewTypeIconCss = css({
289
+ opacity: {
290
+ base: 0.3,
291
+ _dark: 0.5,
292
+ _groupHover: 0.7,
293
+ _groupActive: 0.7,
294
+ },
295
+ })
296
+ const ViewTypeIcon = {
297
+ index: <IconStarFilled size={16} className={viewTypeIconCss} />,
298
+ element: (
299
+ <IconZoomScan
300
+ size={18}
301
+ stroke={2}
302
+ className={viewTypeIconCss} />
303
+ ),
304
+ deployment: <IconStack2 size={16} stroke={1.5} className={viewTypeIconCss} />,
305
+ dynamic: <IconStack2 size={16} stroke={1.5} className={viewTypeIconCss} />,
306
+ }
307
+
308
+ const ColumnScrollArea = ScrollAreaAutosize.withProps({
309
+ scrollbars: 'y',
310
+ className: css({
311
+ maxHeight: [
312
+ 'calc(100vh - 50px)',
313
+ 'calc(100cqh - 50px)',
314
+ ],
315
+ }),
316
+ })
317
+
318
+ type ColumnItem =
319
+ | {
320
+ type: 'folder'
321
+ folderPath: string
322
+ title: string
323
+ selected: boolean
324
+ }
325
+ | {
326
+ type: 'view'
327
+ viewType: 'element' | 'deployment' | 'dynamic' | 'index'
328
+ viewId: ViewId
329
+ title: string
330
+ description: string | null
331
+ selected: boolean
332
+ }
333
+ type FolderColumnData = {
334
+ folderPath: string
335
+ items: Array<ColumnItem>
336
+ }
337
+
338
+ function folderColumn(
339
+ folder: LikeC4ViewsFolder,
340
+ context: Pick<NavigationPanelActorContext, 'selectedFolder' | 'viewModel'>,
341
+ ): FolderColumnData {
342
+ return {
343
+ folderPath: folder.path,
344
+ items: [
345
+ ...folder.folders.map(s => ({
346
+ type: 'folder' as const,
347
+ folderPath: s.path,
348
+ title: s.title,
349
+ selected: context.selectedFolder.startsWith(s.path),
350
+ })),
351
+ ...folder.views.map(s => ({
352
+ type: 'view' as const,
353
+ viewType: s.id === 'index' ? 'index' as const : s._type,
354
+ viewId: s.id,
355
+ title: s.title ?? s.id,
356
+ description: s.description.nonEmpty && s.description.text || null,
357
+ selected: s.id === context.viewModel.id,
358
+ })),
359
+ ],
360
+ }
361
+ }
362
+
363
+ const selectColumns = (context: NavigationPanelActorContext): FolderColumnData[] => {
364
+ const viewModel = context.viewModel
365
+ const likec4model = viewModel.$model
366
+ const columns = [
367
+ folderColumn(likec4model.rootViewFolder, context),
368
+ ]
369
+ const folder = likec4model.viewFolder(context.selectedFolder)
370
+ if (!folder.isRoot) {
371
+ for (const b of folder.breadcrumbs) {
372
+ columns.push(folderColumn(b, context))
373
+ }
374
+ }
375
+ return columns
376
+ }
377
+
378
+ function FolderColumns() {
379
+ const columns = useNavigationActorContext(selectColumns, deepEqual)
380
+ return (
381
+ <HStack gap="xs" alignItems="stretch">
382
+ {columns.flatMap((column, i) => [
383
+ i > 0 && <Divider orientation="vertical" key={'divider' + i} />,
384
+ <FolderColumn key={column.folderPath} data={column} />,
385
+ ])}
386
+ </HStack>
387
+ )
388
+ }
389
+
390
+ function FolderColumn({ data }: { data: FolderColumnData }) {
391
+ const actor = useNavigationActorRef()
392
+
393
+ const onItemClicked = (item: ColumnItem) => (e: React.MouseEvent) => {
394
+ e.stopPropagation()
395
+ if (item.type === 'folder') {
396
+ actor.send({ type: 'select.folder', folderPath: item.folderPath })
397
+ } else {
398
+ actor.send({ type: 'select.view', viewId: item.viewId })
399
+ }
400
+ }
401
+
402
+ return (
403
+ <Box pb={'4'}>
404
+ <ColumnScrollArea>
405
+ <VStack gap={1}>
406
+ {data.items.map((item, i) => (
407
+ <FolderColumnItem
408
+ key={`${data.folderPath}/${item.type}/${i}`}
409
+ columnItem={item}
410
+ onClick={onItemClicked(item)}
411
+ />
412
+ ))}
413
+ </VStack>
414
+ </ColumnScrollArea>
415
+ </Box>
416
+ )
417
+ }
418
+
419
+ function FolderColumnItem({ columnItem, ...props }: { columnItem: ColumnItem } & NavigationLinkProps) {
420
+ switch (columnItem.type) {
421
+ case 'folder':
422
+ return (
423
+ <NavigationLink
424
+ key={columnItem.folderPath}
425
+ variant="light"
426
+ active={columnItem.selected}
427
+ label={columnItem.title}
428
+ leftSection={folderIcon}
429
+ rightSection={btnRightSection}
430
+ maw="300px"
431
+ miw="200px"
432
+ {...props}
433
+ />
434
+ )
435
+ case 'view':
436
+ return (
437
+ <NavigationLink
438
+ key={columnItem.viewId}
439
+ variant="filled"
440
+ active={columnItem.selected}
441
+ label={columnItem.title}
442
+ description={columnItem.description}
443
+ leftSection={ViewTypeIcon[columnItem.viewType]}
444
+ maw="300px"
445
+ miw="200px"
446
+ {...props}
447
+ />
448
+ )
449
+ default:
450
+ nonexhaustive(columnItem)
451
+ }
452
+ }
453
+
454
+ function SearchInput({ onKeyDown, ...props }: {
455
+ value?: string
456
+ defaultValue?: string
457
+ onChange?: (value: string) => void
458
+ onKeyDown?: KeyboardEventHandler<HTMLElement>
459
+ }) {
460
+ const [_value, handleChange] = useUncontrolled({
461
+ ...props,
462
+ finalValue: '',
463
+ })
464
+ return (
465
+ <Input
466
+ size="xs"
467
+ placeholder="Search by title or id"
468
+ variant="unstyled"
469
+ height={rem(26)}
470
+ value={_value}
471
+ onKeyDown={onKeyDown}
472
+ onChange={e => handleChange(e.currentTarget.value)}
473
+ classNames={{
474
+ wrapper: css({
475
+ flexGrow: 1,
476
+ backgroundColor: {
477
+ base: 'mantine.colors.gray[1]',
478
+ _dark: 'mantine.colors.dark[5]/80',
479
+ _hover: {
480
+ base: 'mantine.colors.gray[2]',
481
+ _dark: 'mantine.colors.dark[4]',
482
+ },
483
+ _focus: {
484
+ base: 'mantine.colors.gray[2]',
485
+ _dark: 'mantine.colors.dark[4]',
486
+ },
487
+ },
488
+ rounded: 'sm',
489
+ }),
490
+ input: css({
491
+ _placeholder: {
492
+ color: 'mantine.colors.dimmed',
493
+ },
494
+ _focus: {
495
+ outline: 'none',
496
+ },
497
+ }),
498
+ }}
499
+ style={{
500
+ ['--input-fz']: 'var(--mantine-font-size-sm)',
501
+ }}
502
+ leftSection={<IconSearch size={14} />}
503
+ rightSectionPointerEvents="all"
504
+ rightSectionWidth={'min-content'}
505
+ rightSection={!props.value || isEmpty(props.value)
506
+ ? null
507
+ : (
508
+ <Button
509
+ variant="subtle"
510
+ h="100%"
511
+ size={'compact-xs'}
512
+ color="gray"
513
+ onClick={(e) => {
514
+ e.stopPropagation()
515
+ handleChange('')
516
+ }}
517
+ >
518
+ clear
519
+ </Button>
520
+ )}
521
+ />
522
+ )
523
+ }
@@ -0,0 +1,81 @@
1
+ import { css, cx } from '@likec4/styles/css'
2
+ import {
3
+ type NavigationPanelActionIconVariant,
4
+ navigationPanelActionIcon,
5
+ } from '@likec4/styles/recipes'
6
+ import {
7
+ type ActionIconProps,
8
+ ActionIcon,
9
+ Breadcrumbs as MantineBreadcrumbs,
10
+ ThemeIcon,
11
+ Tooltip as MantineTooltip,
12
+ } from '@mantine/core'
13
+ import { IconChevronRight } from '@tabler/icons-react'
14
+ import type { HTMLMotionProps } from 'motion/react'
15
+ import * as m from 'motion/react-m'
16
+ import { forwardRef } from 'react'
17
+
18
+ export const Tooltip = MantineTooltip.withProps({
19
+ color: 'dark',
20
+ fz: 'xs',
21
+ openDelay: 600,
22
+ closeDelay: 120,
23
+ label: '',
24
+ children: null,
25
+ offset: 8,
26
+ withinPortal: false,
27
+ })
28
+
29
+ export const BreadcrumbsSeparator = () => (
30
+ <ThemeIcon
31
+ visibleFrom="sm"
32
+ variant="transparent"
33
+ size={16}
34
+ className={css({
35
+ color: {
36
+ base: 'mantine.colors.gray[5]',
37
+ _dark: 'mantine.colors.dark[3]',
38
+ },
39
+ })}>
40
+ <IconChevronRight />
41
+ </ThemeIcon>
42
+ )
43
+
44
+ export const Breadcrumbs = MantineBreadcrumbs.withProps({
45
+ separator: <BreadcrumbsSeparator />,
46
+ separatorMargin: 4,
47
+ })
48
+
49
+ export type PanelActionIconProps =
50
+ & Partial<NavigationPanelActionIconVariant>
51
+ & Omit<ActionIconProps, keyof NavigationPanelActionIconVariant>
52
+ & HTMLMotionProps<'button'>
53
+
54
+ export const PanelActionIcon = forwardRef<HTMLButtonElement, PanelActionIconProps>(({
55
+ variant = 'default',
56
+ className,
57
+ disabled = false,
58
+ ...others
59
+ }, ref) => (
60
+ <ActionIcon
61
+ size="md"
62
+ variant="transparent"
63
+ radius="sm"
64
+ component={m.button}
65
+ {...!disabled && {
66
+ whileHover: {
67
+ scale: 1.085,
68
+ },
69
+ whileTap: {
70
+ scale: 1,
71
+ translateY: 1,
72
+ },
73
+ }}
74
+ disabled={disabled}
75
+ {...others}
76
+ className={cx(
77
+ className,
78
+ navigationPanelActionIcon({ variant }),
79
+ )}
80
+ ref={ref} />
81
+ ))