@likec4/diagram 1.30.0 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +324 -5
- package/bundle/chunk-BvTQaUYl.js +21851 -0
- package/bundle/custom.js +65 -0
- package/bundle/index.js +19910 -40570
- package/dist/LikeC4CustomColors.d.ts +2 -7
- package/dist/LikeC4CustomColors.js +17 -6
- package/dist/LikeC4Diagram.d.ts +3 -2
- package/dist/LikeC4Diagram.js +14 -16
- package/dist/LikeC4Diagram.props.d.ts +34 -23
- package/dist/LikeC4ModelProvider.d.ts +5 -4
- package/dist/LikeC4ModelProvider.js +0 -1
- package/dist/StaticLikeC4Diagram.d.ts +3 -2
- package/dist/StaticLikeC4Diagram.js +2 -2
- package/dist/base/BaseXYFlow.js +8 -8
- package/dist/base/const.d.ts +1 -1
- package/dist/base/const.js +1 -1
- package/dist/base/index.d.ts +2 -1
- package/dist/base/primitives/compound/CompoundActionButton.d.ts +3 -2
- package/dist/base/primitives/compound/CompoundActionButton.js +2 -1
- package/dist/base/primitives/compound/CompoundDetailsButton.d.ts +3 -2
- package/dist/base/primitives/compound/CompoundDetailsButton.js +2 -1
- package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +7 -3
- package/dist/base/primitives/compound/CompoundNodeContainer.js +3 -2
- package/dist/base/primitives/compound/CompoundTitle.d.ts +1 -1
- package/dist/base/primitives/compound/CompoundTitle.js +2 -1
- package/dist/base/primitives/customEdge.d.ts +2 -35
- package/dist/base/primitives/customEdge.js +2 -2
- package/dist/base/primitives/customNode.d.ts +2 -2
- package/dist/base/primitives/customNode.js +9 -2
- package/dist/base/primitives/edge/EdgeContainer.d.ts +1 -1
- package/dist/base/primitives/edge/EdgeContainer.js +0 -1
- package/dist/base/primitives/edge/EdgeLabel.css.js +1 -0
- package/dist/base/primitives/edge/EdgeLabel.d.ts +3 -3
- package/dist/base/primitives/edge/EdgeLabel.js +6 -5
- package/dist/base/primitives/edge/EdgeLabelContainer.d.ts +1 -1
- package/dist/base/primitives/edge/EdgeLabelContainer.js +0 -2
- package/dist/base/primitives/edge/EdgeMarkers.d.ts +1 -1
- package/dist/base/primitives/edge/EdgePath.d.ts +1 -1
- package/dist/base/primitives/edge/EdgePath.js +2 -2
- package/dist/base/primitives/element/ElementActionButtons.js +10 -9
- package/dist/base/primitives/element/ElementDetailsButton.js +2 -1
- package/dist/base/primitives/element/ElementNodeContainer.d.ts +24 -22
- package/dist/base/primitives/element/ElementNodeContainer.js +66 -68
- package/dist/base/primitives/element/ElementShape.d.ts +8 -4
- package/dist/base/primitives/element/ElementShape.js +4 -3
- package/dist/base/primitives/element/ElementTags.d.ts +14 -0
- package/dist/base/primitives/element/ElementTags.js +176 -0
- package/dist/base/primitives/element/ElementTitle.css.d.ts +1 -1
- package/dist/base/primitives/element/ElementTitle.d.ts +5 -4
- package/dist/base/primitives/element/ElementTitle.js +6 -7
- package/dist/base/primitives/index.d.ts +1 -0
- package/dist/base/types.Base.d.ts +54 -0
- package/dist/base/types.Base.js +48 -0
- package/dist/base/types.d.ts +3 -53
- package/dist/bundle/LikeC4View.d.ts +2 -1
- package/dist/bundle/LikeC4View.js +13 -8
- package/dist/bundle/LikeC4View.props.d.ts +20 -5
- package/dist/bundle/ReactLikeC4.d.ts +4 -7
- package/dist/bundle/ReactLikeC4.js +4 -4
- package/dist/bundle/ShadowRoot.js +3 -3
- package/dist/bundle/custom.d.ts +1 -0
- package/dist/bundle/index.d.ts +3 -1
- package/dist/bundle/index.js +9 -0
- package/dist/bundle/styles.css.js +5 -5
- package/dist/components/ErrorFallback.d.ts +2 -0
- package/dist/components/ErrorFallback.js +29 -0
- package/dist/components/SearchControl.js +2 -2
- package/dist/context/ControlsCustomLayout.js +0 -1
- package/dist/context/DiagramEventHandlers.d.ts +6 -5
- package/dist/context/DiagramEventHandlers.js +5 -5
- package/dist/context/DiagramFeatures.d.ts +3 -5
- package/dist/context/DiagramFeatures.js +11 -40
- package/dist/context/EnsureMantine.js +9 -4
- package/dist/context/FramerMotionConfig.js +0 -1
- package/dist/context/IconRenderer.js +8 -11
- package/dist/context/ReduceGraphics.js +6 -6
- package/dist/context/RootContainer.js +10 -6
- package/dist/context/TagStylesContext.d.ts +7 -0
- package/dist/context/TagStylesContext.js +85 -0
- package/dist/context/index.d.ts +1 -1
- package/dist/custom/components.d.ts +5 -0
- package/dist/custom/customNodes.d.ts +228 -0
- package/dist/custom/hooks.d.ts +10 -0
- package/dist/custom/index.d.ts +4 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/safeContext.js +3 -3
- package/dist/hooks/useCurrentViewId.d.ts +5 -1
- package/dist/hooks/useCurrentViewId.js +1 -2
- package/dist/hooks/useDiagram.d.ts +77 -12572
- package/dist/hooks/useDiagram.js +9 -7
- package/dist/hooks/useMantinePortalProps.d.ts +2 -2
- package/dist/hooks/useMantinePortalProps.js +2 -2
- package/dist/hooks/useSearchActor.d.ts +2 -0
- package/dist/hooks/useSearchActor.js +10 -0
- package/dist/hooks/useSetState.js +3 -3
- package/dist/hooks/useUpdateEffect.js +3 -1
- package/dist/hooks/useXYFlow.d.ts +75 -73
- package/dist/hooks/useXYFlow.js +7 -3
- package/dist/index.d.ts +2 -4
- package/dist/index.js +8 -3
- package/dist/likec4diagram/DiagramUI.js +9 -4
- package/dist/likec4diagram/DiagramXYFlow.d.ts +4 -3
- package/dist/likec4diagram/DiagramXYFlow.js +124 -109
- package/dist/likec4diagram/custom/edges/NotePopover.js +2 -2
- package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +12 -15
- package/dist/likec4diagram/custom/edges/RelationshipEdge.js +16 -8
- package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +19 -15
- package/dist/likec4diagram/custom/index.d.ts +18 -21
- package/dist/likec4diagram/custom/index.js +3 -3
- package/dist/likec4diagram/custom/nodes/CompoundActions.js +2 -2
- package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +27 -4
- package/dist/likec4diagram/custom/nodes/ElementActions.js +67 -53
- package/dist/likec4diagram/custom/nodes/index.d.ts +8 -0
- package/dist/likec4diagram/custom/nodes/nodes.d.ts +10 -0
- package/dist/likec4diagram/custom/nodes/nodes.js +105 -0
- package/dist/likec4diagram/custom/nodes/toolbar/ColorButton.js +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/CompoundToolbar.js +6 -7
- package/dist/likec4diagram/custom/nodes/toolbar/ElementToolbar.js +3 -3
- package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.d.ts +3 -2
- package/dist/likec4diagram/custom/nodes/toolbar/Toolbar.js +2 -2
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +5 -5
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.js +2 -2
- package/dist/likec4diagram/types.d.ts +18 -10
- package/dist/likec4diagram/ui/controls/ChangeAutoLayoutButton.js +4 -4
- package/dist/likec4diagram/ui/controls/Controls.js +14 -6
- package/dist/likec4diagram/ui/diagram-title/DiagramTitlePanel.js +2 -2
- package/dist/likec4diagram/ui/notation/NotationPanel.js +7 -9
- package/dist/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.js +4 -4
- package/dist/likec4diagram/useLayoutConstraints.js +3 -4
- package/dist/likec4diagram/useViewToNodesEdges.d.ts +5 -3
- package/dist/likec4diagram/useViewToNodesEdges.js +22 -30
- package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
- package/dist/likec4model/LikeC4ModelContext.js +2 -2
- package/dist/likec4model/useLikeC4ElementsTree.d.ts +1 -1
- package/dist/likec4model/useLikeC4ElementsTree.js +4 -4
- package/dist/likec4model/useLikeC4Model.d.ts +22 -10
- package/dist/likec4model/useLikeC4Model.js +13 -9
- package/dist/overlays/Overlays.d.ts +2 -3
- package/dist/overlays/Overlays.js +9 -33
- package/dist/overlays/element-details/ElementDetailsCard.css.js +13 -9
- package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
- package/dist/overlays/element-details/ElementDetailsCard.js +110 -110
- package/dist/overlays/element-details/TabPanelDeployments.d.ts +1 -1
- package/dist/overlays/element-details/TabPanelDeployments.js +5 -5
- package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
- package/dist/overlays/element-details/TabPanelRelationships.js +2 -2
- package/dist/overlays/element-details/TabPanelStructure.d.ts +1 -1
- package/dist/overlays/element-details/TabPanelStructure.js +3 -3
- package/dist/overlays/element-details/actor.d.ts +5482 -18265
- package/dist/overlays/element-details/actor.js +0 -2
- package/dist/overlays/element-details/actorContext.js +3 -3
- package/dist/overlays/overlay/Overlay.css.d.ts +57 -2
- package/dist/overlays/overlay/Overlay.css.js +76 -39
- package/dist/overlays/overlay/Overlay.d.ts +23 -1
- package/dist/overlays/overlay/Overlay.js +40 -29
- package/dist/overlays/overlaysActor.d.ts +5 -3
- package/dist/overlays/overlaysActor.js +2 -1
- package/dist/overlays/relationship-details/RelationshipDetails.d.ts +6 -9
- package/dist/overlays/relationship-details/RelationshipDetails.js +15 -15
- package/dist/overlays/relationship-details/SelectEdge.js +2 -3
- package/dist/overlays/relationship-details/_types.d.ts +7 -6
- package/dist/overlays/relationship-details/actor.d.ts +3 -3
- package/dist/overlays/relationship-details/actor.js +7 -7
- package/dist/overlays/relationship-details/compute.js +3 -3
- package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +6 -9
- package/dist/overlays/relationship-details/custom/edgeTypes.js +2 -2
- package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +3 -31
- package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -0
- package/dist/overlays/relationship-details/hooks.d.ts +28 -27
- package/dist/overlays/relationship-details/hooks.js +4 -4
- package/dist/overlays/relationship-details/layout-to-xyflow.js +1 -0
- package/dist/overlays/relationship-details/layout.js +5 -4
- package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +6 -9
- package/dist/overlays/relationships-browser/RelationshipsBrowser.js +8 -8
- package/dist/overlays/relationships-browser/SelectElement.js +6 -6
- package/dist/overlays/relationships-browser/_types.d.ts +7 -6
- package/dist/overlays/relationships-browser/actor.d.ts +64 -429
- package/dist/overlays/relationships-browser/actor.js +7 -7
- package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +6 -9
- package/dist/overlays/relationships-browser/custom/edgeTypes.js +2 -2
- package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +17 -18
- package/dist/overlays/relationships-browser/custom/nodeTypes.js +5 -2
- package/dist/overlays/relationships-browser/hooks.d.ts +4 -61
- package/dist/overlays/relationships-browser/hooks.js +4 -4
- package/dist/overlays/relationships-browser/layout.d.ts +2 -2
- package/dist/overlays/relationships-browser/layout.js +13 -10
- package/dist/overlays/relationships-browser/useViewToNodesEdges.js +4 -3
- package/dist/search/Search.d.ts +5 -0
- package/dist/search/Search.js +192 -0
- package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.js +0 -1
- package/dist/search/components/ElementsColumn.d.ts +2 -0
- package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.js +26 -25
- package/dist/search/components/PickView.d.ts +4 -0
- package/dist/search/components/PickView.js +135 -0
- package/dist/search/components/SearchByTags.d.ts +1 -0
- package/dist/search/components/SearchByTags.js +116 -0
- package/dist/search/components/SearchInput.d.ts +2 -0
- package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +53 -35
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +14 -13
- package/dist/search/components/_shared.css.d.ts +4 -0
- package/dist/{likec4diagram/ui/search → search/components}/_shared.css.js +26 -35
- package/dist/{likec4diagram/ui/search/LikeC4Search.css.d.ts → search/components/styles.css.d.ts} +0 -2
- package/dist/search/components/styles.css.js +60 -0
- package/dist/{likec4diagram/ui/search → search/components}/utils.d.ts +1 -0
- package/dist/{likec4diagram/ui/search → search/components}/utils.js +7 -1
- package/dist/search/hooks.d.ts +16 -0
- package/dist/search/hooks.js +35 -0
- package/dist/search/searchActor.d.ts +90 -0
- package/dist/search/searchActor.js +75 -0
- package/dist/state/DiagramActorProvider.d.ts +9 -7
- package/dist/state/DiagramActorProvider.js +24 -18
- package/dist/state/assign.d.ts +0 -1
- package/dist/state/assign.js +9 -19
- package/dist/state/diagram-machine.d.ts +749 -10678
- package/dist/state/diagram-machine.js +121 -55
- package/dist/state/hotkeyActor.d.ts +4 -2
- package/dist/state/syncManualLayoutActor.d.ts +15 -4
- package/dist/state/syncManualLayoutActor.js +2 -1
- package/dist/state/types.d.ts +7 -4
- package/dist/state/utils.d.ts +3 -1
- package/dist/state/utils.js +3 -0
- package/dist/styles-font.css +1 -0
- package/dist/styles-min.css +1 -0
- package/dist/styles-xyflow.css +1 -0
- package/dist/styles.css +1 -0
- package/dist/styles.css2.js +3 -0
- package/package.json +50 -25
- package/panda.buildinfo.json +1002 -0
- package/src/LikeC4CustomColors.tsx +21 -6
- package/src/LikeC4Diagram.props.ts +42 -31
- package/src/LikeC4Diagram.tsx +21 -20
- package/src/LikeC4ModelProvider.tsx +7 -6
- package/src/StaticLikeC4Diagram.tsx +9 -6
- package/src/base/Background.tsx +0 -4
- package/src/base/const.ts +1 -1
- package/src/base/index.ts +2 -1
- package/src/base/primitives/compound/CompoundActionButton.tsx +9 -5
- package/src/base/primitives/compound/CompoundDetailsButton.tsx +9 -5
- package/src/base/primitives/compound/CompoundNodeContainer.tsx +8 -7
- package/src/base/primitives/compound/CompoundTitle.tsx +3 -2
- package/src/base/primitives/customEdge.ts +1 -1
- package/src/base/primitives/{customNode.ts → customNode.tsx} +11 -3
- package/src/base/primitives/edge/EdgeContainer.tsx +2 -1
- package/src/base/primitives/edge/EdgeLabel.css.ts +1 -0
- package/src/base/primitives/edge/EdgeLabel.tsx +20 -15
- package/src/base/primitives/edge/EdgeLabelContainer.tsx +1 -1
- package/src/base/primitives/edge/EdgeMarkers.tsx +2 -1
- package/src/base/primitives/edge/EdgePath.tsx +1 -1
- package/src/base/primitives/element/ElementActionButtons.tsx +11 -10
- package/src/base/primitives/element/ElementDetailsButton.tsx +2 -1
- package/src/base/primitives/element/ElementNodeContainer.tsx +87 -80
- package/src/base/primitives/element/ElementShape.tsx +12 -10
- package/src/base/primitives/element/ElementTags.tsx +182 -0
- package/src/base/primitives/element/ElementTitle.tsx +21 -15
- package/src/base/primitives/index.ts +1 -0
- package/src/base/types.Base.ts +104 -0
- package/src/base/types.ts +4 -106
- package/src/bundle/LikeC4View.props.ts +23 -5
- package/src/bundle/LikeC4View.tsx +20 -19
- package/src/bundle/ReactLikeC4.tsx +15 -27
- package/src/bundle/custom.ts +1 -0
- package/src/bundle/index.ts +20 -1
- package/src/bundle/styles.css.ts +1 -1
- package/src/components/ErrorFallback.tsx +30 -0
- package/src/components/SearchControl.tsx +1 -1
- package/src/context/DiagramEventHandlers.tsx +5 -4
- package/src/context/DiagramFeatures.tsx +15 -30
- package/src/context/EnsureMantine.tsx +13 -3
- package/src/context/IconRenderer.tsx +2 -5
- package/src/context/ReduceGraphics.tsx +6 -6
- package/src/context/RootContainer.tsx +9 -3
- package/src/context/TagStylesContext.tsx +96 -0
- package/src/context/index.ts +0 -1
- package/src/custom/components.ts +49 -0
- package/src/custom/customNodes.tsx +254 -0
- package/src/custom/hooks.ts +36 -0
- package/src/custom/index.ts +5 -0
- package/src/hooks/index.ts +1 -1
- package/src/hooks/useCurrentViewId.ts +6 -1
- package/src/hooks/useDiagram.ts +131 -18
- package/src/hooks/useMantinePortalProps.ts +10 -1
- package/src/hooks/useSearchActor.ts +11 -0
- package/src/hooks/useUpdateEffect.ts +7 -4
- package/src/hooks/useXYFlow.ts +5 -0
- package/src/index.ts +4 -8
- package/src/likec4diagram/DiagramUI.tsx +5 -0
- package/src/likec4diagram/DiagramXYFlow.tsx +135 -115
- package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +10 -1
- package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +17 -14
- package/src/likec4diagram/custom/{index.tsx → index.ts} +2 -2
- package/src/likec4diagram/custom/nodes/CompoundActions.tsx +2 -2
- package/src/likec4diagram/custom/nodes/ElementActions.tsx +100 -57
- package/src/likec4diagram/custom/nodes/index.ts +17 -0
- package/src/likec4diagram/custom/nodes/nodes.tsx +127 -0
- package/src/likec4diagram/custom/nodes/toolbar/CompoundToolbar.tsx +3 -4
- package/src/likec4diagram/custom/nodes/toolbar/ElementToolbar.tsx +3 -3
- package/src/likec4diagram/custom/nodes/toolbar/Toolbar.tsx +5 -4
- package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +11 -3
- package/src/likec4diagram/types.ts +24 -12
- package/src/likec4diagram/ui/controls/Controls.tsx +11 -4
- package/src/likec4diagram/ui/diagram-title/DiagramTitlePanel.tsx +1 -1
- package/src/likec4diagram/ui/notation/NotationPanel.tsx +3 -4
- package/src/likec4diagram/ui/walkthrough/DynamicViewWalkthrough.tsx +1 -1
- package/src/likec4diagram/useViewToNodesEdges.ts +36 -36
- package/src/likec4model/LikeC4ModelContext.ts +2 -2
- package/src/likec4model/useLikeC4ElementsTree.ts +4 -2
- package/src/likec4model/useLikeC4Model.ts +18 -16
- package/src/overlays/Overlays.tsx +7 -35
- package/src/overlays/element-details/ElementDetailsCard.css.ts +14 -22
- package/src/overlays/element-details/ElementDetailsCard.tsx +43 -34
- package/src/overlays/element-details/TabPanelDeployments.tsx +3 -2
- package/src/overlays/element-details/TabPanelRelationships.tsx +2 -1
- package/src/overlays/element-details/TabPanelStructure.tsx +1 -1
- package/src/overlays/element-details/actor.ts +2 -2
- package/src/overlays/overlay/Overlay.css.ts +75 -38
- package/src/overlays/overlay/Overlay.tsx +45 -29
- package/src/overlays/overlaysActor.ts +5 -4
- package/src/overlays/relationship-details/RelationshipDetails.tsx +5 -5
- package/src/overlays/relationship-details/SelectEdge.tsx +0 -2
- package/src/overlays/relationship-details/_types.ts +18 -14
- package/src/overlays/relationship-details/custom/edgeTypes.tsx +2 -2
- package/src/overlays/relationship-details/custom/nodeTypes.tsx +4 -0
- package/src/overlays/relationship-details/layout-to-xyflow.ts +1 -0
- package/src/overlays/relationship-details/layout.ts +3 -1
- package/src/overlays/relationships-browser/SelectElement.tsx +1 -1
- package/src/overlays/relationships-browser/_types.ts +20 -16
- package/src/overlays/relationships-browser/actor.ts +2 -2
- package/src/overlays/relationships-browser/custom/edgeTypes.tsx +2 -2
- package/src/overlays/relationships-browser/custom/nodeTypes.tsx +5 -2
- package/src/overlays/relationships-browser/layout.ts +12 -7
- package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -4
- package/src/search/Search.tsx +237 -0
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +25 -25
- package/src/search/components/PickView.tsx +140 -0
- package/src/search/components/SearchByTags.tsx +109 -0
- package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +63 -36
- package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +17 -18
- package/src/{likec4diagram/ui/search → search/components}/_shared.css.ts +26 -37
- package/src/{likec4diagram/ui/search/LikeC4Search.css.ts → search/components/styles.css.ts} +9 -36
- package/src/{likec4diagram/ui/search → search/components}/utils.ts +7 -0
- package/src/search/hooks.ts +41 -0
- package/src/search/searchActor.ts +99 -0
- package/src/state/DiagramActorProvider.tsx +36 -25
- package/src/state/assign.ts +10 -10
- package/src/state/diagram-machine.ts +128 -60
- package/src/state/hotkeyActor.ts +4 -2
- package/src/state/syncManualLayoutActor.ts +10 -4
- package/src/state/types.ts +11 -3
- package/src/state/utils.ts +7 -3
- package/src/styles-min.css +2 -0
- package/src/styles-xyflow.css +1 -0
- package/dist/_virtual/_commonjsHelpers.js +0 -5
- package/dist/_virtual/default-map.js +0 -7
- package/dist/_virtual/index.js +0 -5
- package/dist/_virtual/index2.js +0 -3
- package/dist/_virtual/react.production.js +0 -3
- package/dist/_virtual/set.js +0 -5
- package/dist/_virtual/set2.js +0 -3
- package/dist/base/types.js +0 -54
- package/dist/base/xyflowMachine.d.ts +0 -212
- package/dist/likec4diagram/custom/nodes/nodeTypes.d.ts +0 -8
- package/dist/likec4diagram/custom/nodes/nodeTypes.js +0 -92
- package/dist/likec4diagram/ui/search/ElementsColumn.d.ts +0 -1
- package/dist/likec4diagram/ui/search/LikeC4Search.css.js +0 -87
- package/dist/likec4diagram/ui/search/LikeC4Search.d.ts +0 -2
- package/dist/likec4diagram/ui/search/LikeC4Search.js +0 -267
- package/dist/likec4diagram/ui/search/SearchInput.d.ts +0 -1
- package/dist/likec4diagram/ui/search/_shared.css.d.ts +0 -4
- package/dist/likec4diagram/ui/search/state.d.ts +0 -19
- package/dist/likec4diagram/ui/search/state.js +0 -64
- package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/default-map.js +0 -172
- package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js +0 -369
- package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.production.js +0 -556
- package/dist/node_modules/.pnpm/react@19.1.0/node_modules/react/index.js +0 -15
- package/dist/packages/core/src/compute-view/relationships-view/compute.js +0 -123
- package/dist/packages/core/src/compute-view/relationships-view/utils.js +0 -68
- package/dist/packages/core/src/errors/index.js +0 -15
- package/dist/packages/core/src/model/connection/model/ConnectionModel.js +0 -121
- package/dist/packages/core/src/model/connection/model/find.js +0 -39
- package/dist/packages/core/src/model/connection/ops.js +0 -7
- package/dist/packages/core/src/utils/const.js +0 -3
- package/dist/packages/core/src/utils/fqn.js +0 -51
- package/dist/packages/core/src/utils/guards.js +0 -7
- package/dist/packages/core/src/utils/iterable/filter.js +0 -21
- package/dist/packages/core/src/utils/iterable/find.js +0 -21
- package/dist/packages/core/src/utils/iterable/map.js +0 -18
- package/dist/packages/core/src/utils/iterable/some.js +0 -21
- package/dist/packages/core/src/utils/iterable/to.js +0 -14
- package/dist/packages/core/src/utils/set.js +0 -48
- package/dist/packages/core/src/utils/string-hash.js +0 -13
- package/dist/styles.css.js +0 -3
- package/src/base/xyflowMachine.ts +0 -75
- package/src/likec4diagram/custom/nodes/nodeTypes.tsx +0 -109
- package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
- package/src/likec4diagram/ui/search/state.ts +0 -78
- /package/dist/{likec4diagram/ui/search → search/components}/ElementsColumn.css.d.ts +0 -0
- /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.d.ts +0 -0
- /package/dist/{likec4diagram/ui/search → search/components}/ViewsColumn.css.js +0 -0
- /package/dist/{bundle/font.css.js → styles-font.css2.js} +0 -0
- /package/src/{likec4diagram/ui/search → search/components}/ViewsColumn.css.ts +0 -0
- /package/src/{bundle/font.css → styles-font.css} +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { DiagramEdge, DiagramNode, Fqn, IconUrl, ViewId } from '@likec4/core'
|
|
1
|
+
import type { DeploymentFqn, DiagramEdge, DiagramNode, Fqn, IconUrl, ViewId } from '@likec4/core/types'
|
|
2
2
|
import type { XYPosition } from '@xyflow/system'
|
|
3
3
|
import type { OptionalKeysOf, Simplify } from 'type-fest'
|
|
4
|
-
import type { Base } from '../base'
|
|
5
|
-
import type { ReactFlowEdge, ReactFlowNode } from '../base/types'
|
|
4
|
+
import type { Base, ReactFlowEdge, ReactFlowNode } from '../base/types'
|
|
6
5
|
|
|
7
6
|
type NonOptional<T extends object> = Simplify<
|
|
8
7
|
& {
|
|
@@ -14,7 +13,8 @@ type NonOptional<T extends object> = Simplify<
|
|
|
14
13
|
>
|
|
15
14
|
|
|
16
15
|
export namespace Types {
|
|
17
|
-
export type LeafNodeData =
|
|
16
|
+
export type LeafNodeData =
|
|
17
|
+
& Base.NodeData
|
|
18
18
|
& NonOptional<
|
|
19
19
|
Pick<
|
|
20
20
|
DiagramNode,
|
|
@@ -28,14 +28,18 @@ export namespace Types {
|
|
|
28
28
|
| 'level'
|
|
29
29
|
| 'height'
|
|
30
30
|
| 'style'
|
|
31
|
+
| 'tags'
|
|
31
32
|
| 'position'
|
|
32
33
|
>
|
|
33
34
|
>
|
|
34
35
|
& {
|
|
36
|
+
/**
|
|
37
|
+
* View this node belongs to
|
|
38
|
+
*/
|
|
39
|
+
viewId: ViewId
|
|
35
40
|
isMultiple?: boolean | undefined
|
|
36
41
|
icon: string | null
|
|
37
42
|
}
|
|
38
|
-
>
|
|
39
43
|
|
|
40
44
|
/**
|
|
41
45
|
* Represents element from logical model
|
|
@@ -56,12 +60,13 @@ export namespace Types {
|
|
|
56
60
|
& LeafNodeData
|
|
57
61
|
& {
|
|
58
62
|
navigateTo: ViewId | null
|
|
59
|
-
deploymentFqn:
|
|
63
|
+
deploymentFqn: DeploymentFqn
|
|
60
64
|
// If set - this node refers to a model element
|
|
61
65
|
modelFqn: Fqn | null
|
|
62
66
|
}
|
|
63
67
|
|
|
64
|
-
export type CompoundNodeData =
|
|
68
|
+
export type CompoundNodeData =
|
|
69
|
+
& Base.NodeData
|
|
65
70
|
& NonOptional<
|
|
66
71
|
Pick<
|
|
67
72
|
DiagramNode,
|
|
@@ -70,14 +75,18 @@ export namespace Types {
|
|
|
70
75
|
| 'color'
|
|
71
76
|
| 'shape'
|
|
72
77
|
| 'style'
|
|
78
|
+
| 'tags'
|
|
73
79
|
| 'position'
|
|
74
80
|
>
|
|
75
81
|
>
|
|
76
82
|
& {
|
|
83
|
+
/**
|
|
84
|
+
* View this node belongs to
|
|
85
|
+
*/
|
|
86
|
+
viewId: ViewId
|
|
77
87
|
depth: number
|
|
78
88
|
icon?: IconUrl
|
|
79
89
|
}
|
|
80
|
-
>
|
|
81
90
|
|
|
82
91
|
export type CompoundElementNodeData = CompoundNodeData & {
|
|
83
92
|
modelFqn: Fqn
|
|
@@ -89,7 +98,7 @@ export namespace Types {
|
|
|
89
98
|
}
|
|
90
99
|
|
|
91
100
|
export type CompoundDeploymentNodeData = CompoundNodeData & {
|
|
92
|
-
deploymentFqn:
|
|
101
|
+
deploymentFqn: DeploymentFqn
|
|
93
102
|
/**
|
|
94
103
|
* If set - this node refers to a model element
|
|
95
104
|
*/
|
|
@@ -116,8 +125,9 @@ export namespace Types {
|
|
|
116
125
|
|
|
117
126
|
export type NodeData = Node['data']
|
|
118
127
|
|
|
119
|
-
export type RelationshipEdgeData =
|
|
120
|
-
|
|
128
|
+
export type RelationshipEdgeData = Simplify<
|
|
129
|
+
& Base.EdgeData
|
|
130
|
+
& NonOptional<
|
|
121
131
|
Pick<
|
|
122
132
|
DiagramEdge,
|
|
123
133
|
| 'id'
|
|
@@ -133,7 +143,8 @@ export namespace Types {
|
|
|
133
143
|
| 'navigateTo'
|
|
134
144
|
| 'notes'
|
|
135
145
|
>
|
|
136
|
-
>
|
|
146
|
+
>
|
|
147
|
+
& {
|
|
137
148
|
labelXY: XYPosition | null
|
|
138
149
|
controlPoints: XYPosition[] | undefined | null
|
|
139
150
|
}
|
|
@@ -142,4 +153,5 @@ export namespace Types {
|
|
|
142
153
|
export type RelationshipEdge = ReactFlowEdge<RelationshipEdgeData, 'relationship'>
|
|
143
154
|
|
|
144
155
|
export type Edge = RelationshipEdge
|
|
156
|
+
export type EdgeData = RelationshipEdgeData
|
|
145
157
|
}
|
|
@@ -3,12 +3,12 @@ import { ActionIconGroup, Badge, Box, Group, Loader, Stack } from '@mantine/core
|
|
|
3
3
|
import { IconFileSymlink, IconFocusCentered, IconMenu2 } from '@tabler/icons-react'
|
|
4
4
|
import { LayoutGroup, m } from 'motion/react'
|
|
5
5
|
import { memo } from 'react'
|
|
6
|
+
import { SearchControl } from '../../../components/SearchControl'
|
|
6
7
|
import { useDiagramEventHandlers, useEnabledFeatures } from '../../../context'
|
|
7
8
|
import { type ControlsCustomLayout, useControlsCustomLayout } from '../../../context/ControlsCustomLayout'
|
|
8
9
|
import { useMantinePortalProps } from '../../../hooks'
|
|
9
10
|
import { useDiagram, useDiagramContext, useDiagramSyncLayoutState } from '../../../hooks/useDiagram'
|
|
10
11
|
import { stopPropagation } from '../../../utils'
|
|
11
|
-
import { LikeC4Search } from '../search/LikeC4Search'
|
|
12
12
|
import { ActionIcon, Tooltip } from './_shared'
|
|
13
13
|
import { ChangeAutoLayoutButton } from './ChangeAutoLayoutButton'
|
|
14
14
|
import { LayoutDriftNotification } from './LayoutDriftNotification'
|
|
@@ -68,8 +68,7 @@ const ControlsDefaultLayout: ControlsCustomLayout = ({
|
|
|
68
68
|
)
|
|
69
69
|
|
|
70
70
|
export const Controls = memo(() => {
|
|
71
|
-
const {
|
|
72
|
-
viewId: c.view.id,
|
|
71
|
+
const { hasLayoutDrift, viewportChanged, isNotActiveWalkthrough } = useDiagramContext(c => ({
|
|
73
72
|
hasLayoutDrift: c.view.hasLayoutDrift ?? false,
|
|
74
73
|
viewportChanged: c.viewportChangedManually,
|
|
75
74
|
isNotActiveWalkthrough: c.activeWalkthrough === null,
|
|
@@ -103,7 +102,14 @@ export const Controls = memo(() => {
|
|
|
103
102
|
</ActionIcon>
|
|
104
103
|
)}
|
|
105
104
|
navigationButtons={enableNavigationButtons && <NavigationButtons />}
|
|
106
|
-
search={enableSearch &&
|
|
105
|
+
search={enableSearch && (
|
|
106
|
+
<SearchControl
|
|
107
|
+
onClick={e => {
|
|
108
|
+
e.stopPropagation()
|
|
109
|
+
diagram.openSearch()
|
|
110
|
+
}}
|
|
111
|
+
/>
|
|
112
|
+
)}
|
|
107
113
|
syncInProgressBadge={<SyncLayoutBadge />}
|
|
108
114
|
actionsGroup={
|
|
109
115
|
<ActionIconGroup className={css.actionIconGroup} orientation="vertical">
|
|
@@ -112,6 +118,7 @@ export const Controls = memo(() => {
|
|
|
112
118
|
<ActionIcon
|
|
113
119
|
onClick={e => {
|
|
114
120
|
e.stopPropagation()
|
|
121
|
+
const viewId = diagram.currentView.id
|
|
115
122
|
onOpenSource?.({ view: viewId })
|
|
116
123
|
}}>
|
|
117
124
|
<IconFileSymlink stroke={1.5} />
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { cx as clsx } from '@likec4/styles/css'
|
|
1
2
|
import { Button, Card, CardSection, Group, Spoiler, Stack, Text } from '@mantine/core'
|
|
2
3
|
import { useLocalStorage } from '@mantine/hooks'
|
|
3
4
|
import { IconMenu } from '@tabler/icons-react'
|
|
4
|
-
import clsx from 'clsx'
|
|
5
5
|
import { AnimatePresence, m } from 'motion/react'
|
|
6
6
|
import { Link } from '../../../components/Link'
|
|
7
7
|
import { useDiagramContext } from '../../../hooks/useDiagram'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type ComputedNode, type
|
|
2
|
-
import { css, cx } from '@likec4/styles/css'
|
|
1
|
+
import { type ComputedNode, type NodeNotation as ElementNotationData } from '@likec4/core'
|
|
2
|
+
import { css, cx, cx as clsx } from '@likec4/styles/css'
|
|
3
3
|
import {
|
|
4
4
|
ActionIcon,
|
|
5
5
|
Badge,
|
|
@@ -19,7 +19,6 @@ import {
|
|
|
19
19
|
} from '@mantine/core'
|
|
20
20
|
import { useLocalStorage } from '@mantine/hooks'
|
|
21
21
|
import { IconAlertTriangle, IconArrowDownRight, IconHelpCircle } from '@tabler/icons-react'
|
|
22
|
-
import clsx from 'clsx'
|
|
23
22
|
import { AnimatePresence, m } from 'motion/react'
|
|
24
23
|
import { memo, useState } from 'react'
|
|
25
24
|
import { ceil, isNonNullish } from 'remeda'
|
|
@@ -123,7 +122,7 @@ const ElementNotation = ({ value }: { value: ElementNotationData }) => {
|
|
|
123
122
|
|
|
124
123
|
const selector = (s: DiagramContext) => ({
|
|
125
124
|
id: s.view.id,
|
|
126
|
-
notations: s.view.notation?.
|
|
125
|
+
notations: s.view.notation?.nodes ?? [],
|
|
127
126
|
isVisible: true,
|
|
128
127
|
// isVisible: isNullish(s.focusedNodeId ?? s.activeWalkthrough),
|
|
129
128
|
})
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { cx as clsx } from '@likec4/styles/css'
|
|
1
2
|
import { Badge, Box, Button, ButtonGroup } from '@mantine/core'
|
|
2
3
|
import {
|
|
3
4
|
IconPlayerPlayFilled,
|
|
@@ -5,7 +6,6 @@ import {
|
|
|
5
6
|
IconPlayerSkipForwardFilled,
|
|
6
7
|
IconPlayerStopFilled,
|
|
7
8
|
} from '@tabler/icons-react'
|
|
8
|
-
import clsx from 'clsx'
|
|
9
9
|
import { AnimatePresence, m } from 'motion/react'
|
|
10
10
|
import { isNonNull, isTruthy } from 'remeda'
|
|
11
11
|
import { useXYStore } from '../../../hooks'
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type DiagramEdge,
|
|
3
|
+
type DiagramNode,
|
|
3
4
|
type DiagramView,
|
|
4
5
|
type EdgeId,
|
|
5
6
|
type Fqn,
|
|
6
7
|
type NodeId,
|
|
7
8
|
type WhereOperator,
|
|
8
|
-
|
|
9
|
-
ElementKind,
|
|
9
|
+
GroupElementKind,
|
|
10
10
|
invariant,
|
|
11
11
|
nonNullable,
|
|
12
12
|
Queue,
|
|
13
13
|
whereOperatorAsPredicate,
|
|
14
14
|
} from '@likec4/core'
|
|
15
|
-
import {
|
|
15
|
+
import { useCustomCompareMemo } from '@react-hookz/web'
|
|
16
|
+
import { deepEqual, shallowEqual } from 'fast-equals'
|
|
16
17
|
import { hasAtLeast, pick } from 'remeda'
|
|
17
18
|
import { ZIndexes } from '../base/const'
|
|
18
19
|
import type { Types } from './types'
|
|
19
20
|
|
|
20
21
|
// const nodeZIndex = (node: DiagramNode) => node.level - (node.children.length > 0 ? 1 : 0)
|
|
21
22
|
function viewToNodesEdge(opts: {
|
|
22
|
-
view: Pick<DiagramView, 'id' | 'nodes' | 'edges' | '
|
|
23
|
-
where: WhereOperator
|
|
23
|
+
view: Pick<DiagramView, 'id' | 'nodes' | 'edges' | '_type'>
|
|
24
|
+
where: WhereOperator | null
|
|
24
25
|
nodesSelectable: boolean
|
|
25
26
|
}): {
|
|
26
27
|
xynodes: Types.Node[]
|
|
@@ -30,7 +31,7 @@ function viewToNodesEdge(opts: {
|
|
|
30
31
|
view,
|
|
31
32
|
nodesSelectable: selectable,
|
|
32
33
|
} = opts
|
|
33
|
-
const isDynamicView = view.
|
|
34
|
+
const isDynamicView = view._type === 'dynamic',
|
|
34
35
|
xynodes = [] as Types.Node[],
|
|
35
36
|
xyedges = [] as Types.Edge[],
|
|
36
37
|
nodeLookup = new Map<Fqn, DiagramNode>()
|
|
@@ -73,7 +74,7 @@ function viewToNodesEdge(opts: {
|
|
|
73
74
|
let next: TraverseItem | undefined
|
|
74
75
|
while ((next = queue.dequeue())) {
|
|
75
76
|
const { node, parent } = next
|
|
76
|
-
const isCompound = hasAtLeast(node.children, 1) || node.kind ==
|
|
77
|
+
const isCompound = hasAtLeast(node.children, 1) || node.kind == GroupElementKind
|
|
77
78
|
if (isCompound) {
|
|
78
79
|
for (const child of node.children) {
|
|
79
80
|
queue.enqueue({ node: nodeById(child), parent: node })
|
|
@@ -93,8 +94,8 @@ function viewToNodesEdge(opts: {
|
|
|
93
94
|
|
|
94
95
|
const base = {
|
|
95
96
|
id,
|
|
96
|
-
selectable: selectable && node.kind !==
|
|
97
|
-
focusable: selectable && node.kind !==
|
|
97
|
+
selectable: selectable && node.kind !== GroupElementKind,
|
|
98
|
+
focusable: selectable && node.kind !== GroupElementKind,
|
|
98
99
|
deletable: false,
|
|
99
100
|
position,
|
|
100
101
|
zIndex: isCompound ? ZIndexes.Compound : ZIndexes.Element,
|
|
@@ -104,13 +105,14 @@ function viewToNodesEdge(opts: {
|
|
|
104
105
|
},
|
|
105
106
|
initialWidth: node.width,
|
|
106
107
|
initialHeight: node.height,
|
|
107
|
-
hidden: node.kind !==
|
|
108
|
+
hidden: node.kind !== GroupElementKind && !visiblePredicate(node),
|
|
108
109
|
...(parent && {
|
|
109
110
|
parentId: ns + parent.id,
|
|
110
111
|
}),
|
|
111
112
|
} satisfies Omit<Types.Node, 'data' | 'type'>
|
|
112
113
|
|
|
113
114
|
const compoundData = {
|
|
115
|
+
viewId: view.id,
|
|
114
116
|
id: node.id,
|
|
115
117
|
title: node.title,
|
|
116
118
|
color: node.color,
|
|
@@ -118,10 +120,12 @@ function viewToNodesEdge(opts: {
|
|
|
118
120
|
style: node.style,
|
|
119
121
|
depth: node.depth ?? 0,
|
|
120
122
|
icon: node.icon ?? 'none',
|
|
123
|
+
tags: node.tags ?? null,
|
|
121
124
|
position: node.position,
|
|
122
125
|
} satisfies Types.CompoundNodeData
|
|
123
126
|
|
|
124
127
|
const leafNodeData = {
|
|
128
|
+
viewId: view.id,
|
|
125
129
|
id: node.id,
|
|
126
130
|
title: node.title,
|
|
127
131
|
technology: node.technology,
|
|
@@ -133,11 +137,12 @@ function viewToNodesEdge(opts: {
|
|
|
133
137
|
shape: node.shape,
|
|
134
138
|
style: node.style,
|
|
135
139
|
icon: node.icon ?? null,
|
|
140
|
+
tags: node.tags,
|
|
136
141
|
position: node.position,
|
|
137
142
|
isMultiple: node.style?.multiple ?? false,
|
|
138
143
|
} satisfies Types.LeafNodeData
|
|
139
144
|
|
|
140
|
-
if (node.kind ===
|
|
145
|
+
if (node.kind === GroupElementKind) {
|
|
141
146
|
xynodes.push({
|
|
142
147
|
...base,
|
|
143
148
|
type: 'view-group',
|
|
@@ -150,8 +155,8 @@ function viewToNodesEdge(opts: {
|
|
|
150
155
|
continue
|
|
151
156
|
}
|
|
152
157
|
|
|
153
|
-
const modelFqn =
|
|
154
|
-
const deploymentFqn =
|
|
158
|
+
const modelFqn = node.modelRef ?? null
|
|
159
|
+
const deploymentFqn = node.deploymentRef ?? null
|
|
155
160
|
if (!modelFqn && !deploymentFqn) {
|
|
156
161
|
console.error('Invalid node', node)
|
|
157
162
|
throw new Error('Element should have either modelRef or deploymentRef')
|
|
@@ -267,29 +272,24 @@ function viewToNodesEdge(opts: {
|
|
|
267
272
|
xyedges,
|
|
268
273
|
}
|
|
269
274
|
}
|
|
270
|
-
|
|
271
|
-
export function useViewToNodesEdges({
|
|
272
|
-
view: {
|
|
273
|
-
id,
|
|
274
|
-
nodes,
|
|
275
|
-
edges,
|
|
276
|
-
__ = 'element',
|
|
277
|
-
},
|
|
278
|
-
...opts
|
|
279
|
-
}: {
|
|
275
|
+
type ViewToNodesEdgeInput = {
|
|
280
276
|
view: DiagramView
|
|
281
|
-
where: WhereOperator
|
|
277
|
+
where: WhereOperator | null
|
|
282
278
|
nodesSelectable: boolean
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
279
|
+
}
|
|
280
|
+
const viewToNodesEdgeEqual = (a: ViewToNodesEdgeInput, b: ViewToNodesEdgeInput) => (
|
|
281
|
+
a.view.id === b.view.id
|
|
282
|
+
&& a.view._type === b.view._type
|
|
283
|
+
&& a.nodesSelectable === b.nodesSelectable
|
|
284
|
+
&& shallowEqual(a.view.nodes, b.view.nodes)
|
|
285
|
+
&& shallowEqual(a.view.edges, b.view.edges)
|
|
286
|
+
&& deepEqual(a.where, b.where)
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
export function useViewToNodesEdges(params: ViewToNodesEdgeInput) {
|
|
290
|
+
return useCustomCompareMemo(
|
|
291
|
+
() => viewToNodesEdge(params),
|
|
292
|
+
[params],
|
|
293
|
+
([a], [b]) => !!a && !!b && viewToNodesEdgeEqual(a, b),
|
|
294
|
+
)
|
|
295
295
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { LikeC4Model } from '@likec4/core'
|
|
1
|
+
import type { LikeC4Model } from '@likec4/core/model'
|
|
2
2
|
import { createContext } from 'react'
|
|
3
3
|
|
|
4
|
-
export const LikeC4ModelContext = createContext<LikeC4Model | null>(null)
|
|
4
|
+
export const LikeC4ModelContext = createContext<LikeC4Model<any> | null>(null)
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type LikeC4Model } from '@likec4/core/model'
|
|
2
|
+
import { type Fqn, type ViewId } from '@likec4/core/types'
|
|
3
|
+
import { compareNatural } from '@likec4/core/utils'
|
|
2
4
|
import { useMemo } from 'react'
|
|
3
5
|
import { useLikeC4Model } from './useLikeC4Model'
|
|
4
6
|
|
|
@@ -25,7 +27,7 @@ function buildNode(
|
|
|
25
27
|
* If `viewId` is provided, returns the tree of elements in the view.
|
|
26
28
|
*/
|
|
27
29
|
export function useLikeC4ElementsTree(viewId?: ViewId): LikeC4ModelTreeNodeData[] {
|
|
28
|
-
const model = useLikeC4Model(
|
|
30
|
+
const model = useLikeC4Model()
|
|
29
31
|
return useMemo(() => {
|
|
30
32
|
if (viewId) {
|
|
31
33
|
const view = model.view(viewId)
|
|
@@ -1,26 +1,28 @@
|
|
|
1
|
-
import type { LikeC4Model } from '@likec4/core'
|
|
1
|
+
import type { aux, LikeC4Model } from '@likec4/core/model'
|
|
2
2
|
import { useContext } from 'react'
|
|
3
|
-
import {
|
|
3
|
+
import { isString } from 'remeda'
|
|
4
4
|
import { LikeC4ModelContext } from './LikeC4ModelContext'
|
|
5
5
|
|
|
6
|
-
export function useLikeC4Model(): LikeC4Model
|
|
7
|
-
export function useLikeC4Model(
|
|
8
|
-
export function useLikeC4Model(
|
|
9
|
-
|
|
10
|
-
export function useLikeC4Model
|
|
11
|
-
export function useLikeC4Model(
|
|
12
|
-
export function useLikeC4Model(strict: boolean, type: 'layouted'): LikeC4Model.Layouted | null
|
|
13
|
-
export function useLikeC4Model(strict: boolean, type: 'computed'): LikeC4Model.Computed | null
|
|
14
|
-
export function useLikeC4Model(strict: boolean, type: 'layouted' | 'computed' | undefined): LikeC4Model | null
|
|
15
|
-
export function useLikeC4Model(strict?: boolean, type?: 'layouted' | 'computed') {
|
|
6
|
+
export function useLikeC4Model<A extends aux.Any = aux.Unknown>(): LikeC4Model<A>
|
|
7
|
+
export function useLikeC4Model<A extends aux.Any = aux.Unknown>(type: 'layouted'): LikeC4Model.Layouted<A>
|
|
8
|
+
export function useLikeC4Model<A extends aux.Any = aux.Unknown>(type: 'computed'): LikeC4Model.Computed<A>
|
|
9
|
+
// dprint-ignore
|
|
10
|
+
export function useLikeC4Model<A extends aux.Any = aux.Unknown>(type: 'layouted' | 'computed' | undefined): LikeC4Model<A>
|
|
11
|
+
export function useLikeC4Model(type?: 'layouted' | 'computed') {
|
|
16
12
|
const model = useContext(LikeC4ModelContext)
|
|
17
13
|
|
|
18
|
-
if (
|
|
19
|
-
throw new Error(
|
|
14
|
+
if (!model) {
|
|
15
|
+
throw new Error('No LikeC4Model found in context')
|
|
20
16
|
}
|
|
21
17
|
|
|
22
|
-
if (
|
|
23
|
-
throw new Error(
|
|
18
|
+
if (isString(type) && model.stage !== type) {
|
|
19
|
+
throw new Error(`Invalid LikeC4ModelContext, expected "${type}" but got "${model.stage}" in context`)
|
|
24
20
|
}
|
|
21
|
+
|
|
25
22
|
return model
|
|
26
23
|
}
|
|
24
|
+
|
|
25
|
+
export function useLikeC4Specification() {
|
|
26
|
+
const model = useLikeC4Model()
|
|
27
|
+
return model.$data.specification
|
|
28
|
+
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { nonexhaustive } from '@likec4/core'
|
|
2
|
-
import { Box, Button, Code, Group, Notification, ScrollAreaAutosize } from '@mantine/core'
|
|
3
|
-
import { IconX } from '@tabler/icons-react'
|
|
4
2
|
import { useSelector } from '@xstate/react'
|
|
5
3
|
import { animate } from 'motion'
|
|
6
4
|
import { AnimatePresence, LayoutGroup, useReducedMotionConfig } from 'motion/react'
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
5
|
+
import { useEffect, useMemo } from 'react'
|
|
6
|
+
import { ErrorBoundary } from 'react-error-boundary'
|
|
9
7
|
import { isNonNullish } from 'remeda'
|
|
10
8
|
import type { AnyActorRef } from 'xstate'
|
|
9
|
+
import { ErrorFallback } from '../components/ErrorFallback'
|
|
11
10
|
import { DiagramFeatures } from '../context'
|
|
12
11
|
import { useXYStore } from '../hooks'
|
|
13
12
|
import { ElementDetails } from './element-details/ElementDetails'
|
|
@@ -16,32 +15,6 @@ import { type OverlaysActorRef, type OverlaysActorSnapshot } from './overlaysAct
|
|
|
16
15
|
import { RelationshipDetails } from './relationship-details/RelationshipDetails'
|
|
17
16
|
import { RelationshipsBrowser } from './relationships-browser/RelationshipsBrowser'
|
|
18
17
|
|
|
19
|
-
function Fallback({ error, resetErrorBoundary }: FallbackProps) {
|
|
20
|
-
const errorString = error instanceof Error ? error.message : 'Unknown error'
|
|
21
|
-
return (
|
|
22
|
-
<Box pos={'fixed'} top={0} left={0} w={'100%'} p={0} style={{ zIndex: 1000 }}>
|
|
23
|
-
<Notification
|
|
24
|
-
icon={<IconX style={{ width: 16, height: 16 }} />}
|
|
25
|
-
styles={{
|
|
26
|
-
icon: {
|
|
27
|
-
alignSelf: 'flex-start',
|
|
28
|
-
},
|
|
29
|
-
}}
|
|
30
|
-
color={'red'}
|
|
31
|
-
title={'Oops, something went wrong'}
|
|
32
|
-
p={'xl'}
|
|
33
|
-
withCloseButton={false}>
|
|
34
|
-
<ScrollAreaAutosize maw={'100%'} mah={400}>
|
|
35
|
-
<Code block>{errorString}</Code>
|
|
36
|
-
</ScrollAreaAutosize>
|
|
37
|
-
<Group gap={'xs'} mt="xl">
|
|
38
|
-
<Button color="gray" size="xs" variant="light" onClick={() => resetErrorBoundary()}>Reset</Button>
|
|
39
|
-
</Group>
|
|
40
|
-
</Notification>
|
|
41
|
-
</Box>
|
|
42
|
-
)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
18
|
const selectOverlays = (s: OverlaysActorSnapshot) => {
|
|
46
19
|
return s.context.overlays.map((overlay) => {
|
|
47
20
|
switch (overlay.type) {
|
|
@@ -77,7 +50,7 @@ const compareSelectOverlays = <T extends ReturnType<typeof selectOverlays>>(a: T
|
|
|
77
50
|
})
|
|
78
51
|
}
|
|
79
52
|
|
|
80
|
-
export
|
|
53
|
+
export function Overlays({ overlaysActorRef }: { overlaysActorRef: OverlaysActorRef }) {
|
|
81
54
|
const xyflowDomNode = useXYStore(s => s.domNode)
|
|
82
55
|
const xyflowRendererDom = useMemo(() => xyflowDomNode?.querySelector('.react-flow__renderer') ?? null, [
|
|
83
56
|
xyflowDomNode,
|
|
@@ -85,7 +58,7 @@ export const Overlays = memo(({ overlaysActorRef }: { overlaysActorRef: Overlays
|
|
|
85
58
|
const overlays = useSelector(overlaysActorRef, selectOverlays, compareSelectOverlays)
|
|
86
59
|
const isMotionReduced = useReducedMotionConfig() ?? false
|
|
87
60
|
|
|
88
|
-
const isActiveOverlay = overlays.
|
|
61
|
+
const isActiveOverlay = overlays.some((overlay) => overlay.type === 'elementDetails')
|
|
89
62
|
|
|
90
63
|
useEffect(() => {
|
|
91
64
|
if (!xyflowRendererDom || isMotionReduced) return
|
|
@@ -136,7 +109,7 @@ export const Overlays = memo(({ overlaysActorRef }: { overlaysActorRef: Overlays
|
|
|
136
109
|
|
|
137
110
|
return (
|
|
138
111
|
<DiagramFeatures.Overlays>
|
|
139
|
-
<ErrorBoundary FallbackComponent={
|
|
112
|
+
<ErrorBoundary FallbackComponent={ErrorFallback} onReset={() => overlaysActorRef.send({ type: 'close.all' })}>
|
|
140
113
|
<LayoutGroup>
|
|
141
114
|
<AnimatePresence>
|
|
142
115
|
{overlaysReact}
|
|
@@ -145,5 +118,4 @@ export const Overlays = memo(({ overlaysActorRef }: { overlaysActorRef: Overlays
|
|
|
145
118
|
</ErrorBoundary>
|
|
146
119
|
</DiagramFeatures.Overlays>
|
|
147
120
|
)
|
|
148
|
-
}
|
|
149
|
-
Overlays.displayName = 'Overlays'
|
|
121
|
+
}
|
|
@@ -27,17 +27,20 @@ export const card = css({
|
|
|
27
27
|
pointerEvents: 'all',
|
|
28
28
|
gap: 'lg',
|
|
29
29
|
justifyContent: 'stretch',
|
|
30
|
-
backgroundColor:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
30
|
+
backgroundColor: {
|
|
31
|
+
base: 'mantine.colors.body',
|
|
32
|
+
_dark: 'mantine.colors.dark[6]',
|
|
33
|
+
},
|
|
34
|
+
border: `none`,
|
|
35
|
+
backgroundImage: `
|
|
36
|
+
linear-gradient(180deg,
|
|
37
|
+
color-mix(in srgb, {colors.likec4.palette.fill} 60%, transparent),
|
|
38
|
+
color-mix(in srgb, {colors.likec4.palette.fill} 20%, transparent) 8px,
|
|
39
|
+
color-mix(in srgb, {colors.likec4.palette.fill} 14%, transparent) 20px,
|
|
40
|
+
transparent 80px
|
|
41
|
+
),
|
|
42
|
+
linear-gradient(180deg, {colors.likec4.palette.fill}, {colors.likec4.palette.fill} 4px, transparent 4px)
|
|
43
|
+
`,
|
|
41
44
|
'& .react-flow__attribution': {
|
|
42
45
|
display: 'none',
|
|
43
46
|
},
|
|
@@ -145,17 +148,6 @@ export const viewButtonTitle = css({
|
|
|
145
148
|
fontWeight: 500,
|
|
146
149
|
lineHeight: '1.4',
|
|
147
150
|
})
|
|
148
|
-
// globalStyle(`${viewButton} .tabler-icon`, {
|
|
149
|
-
// width: '85%',
|
|
150
|
-
// })
|
|
151
|
-
// globalStyle(`${viewButton} .tabler-icon`, {
|
|
152
|
-
// width: '85%',
|
|
153
|
-
// opacity: 0.75
|
|
154
|
-
// })
|
|
155
|
-
|
|
156
|
-
// globalStyle(`${whereLight} ${viewButton} .mantine-Button-label`, {
|
|
157
|
-
// color: mantine.colors.dark[3]
|
|
158
|
-
// })
|
|
159
151
|
|
|
160
152
|
export const tabsRoot = css({
|
|
161
153
|
flex: 1,
|