@likec4/diagram 1.31.0 → 1.32.1
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/bundle/{chunk-BBzMXzCg.js → chunk-DlHyKoeo.js} +1700 -1206
- package/bundle/custom.js +51 -47
- package/bundle/index.js +5495 -5428
- package/dist/LikeC4CustomColors.d.ts +2 -7
- package/dist/LikeC4CustomColors.js +17 -6
- package/dist/LikeC4Diagram.d.ts +3 -2
- package/dist/LikeC4Diagram.js +10 -14
- package/dist/LikeC4Diagram.props.d.ts +41 -24
- package/dist/LikeC4ModelProvider.d.ts +5 -4
- package/dist/StaticLikeC4Diagram.d.ts +3 -2
- package/dist/StaticLikeC4Diagram.js +2 -2
- package/dist/base/BaseXYFlow.js +5 -5
- 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.js +2 -1
- package/dist/base/primitives/compound/CompoundDetailsButton.js +2 -1
- package/dist/base/primitives/compound/CompoundTitle.d.ts +1 -1
- package/dist/base/primitives/compound/CompoundTitle.js +2 -1
- package/dist/base/primitives/edge/EdgeContainer.d.ts +1 -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 -4
- package/dist/base/primitives/edge/EdgeLabelContainer.d.ts +1 -1
- package/dist/base/primitives/edge/EdgeMarkers.d.ts +1 -1
- package/dist/base/primitives/edge/EdgePath.d.ts +1 -1
- package/dist/base/primitives/element/ElementActionButtons.js +10 -9
- package/dist/base/primitives/element/ElementDetailsButton.js +2 -1
- package/dist/base/primitives/element/ElementShape.d.ts +1 -1
- 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.d.ts +5 -4
- package/dist/base/primitives/element/ElementTitle.js +6 -6
- 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 +2 -52
- package/dist/bundle/LikeC4View.d.ts +2 -1
- package/dist/bundle/LikeC4View.js +22 -19
- package/dist/bundle/LikeC4View.props.d.ts +15 -4
- package/dist/bundle/ReactLikeC4.d.ts +4 -7
- package/dist/bundle/ReactLikeC4.js +10 -8
- package/dist/bundle/index.js +1 -1
- package/dist/components/ErrorFallback.d.ts +2 -0
- package/dist/components/ErrorFallback.js +29 -0
- package/dist/context/DiagramEventHandlers.d.ts +6 -5
- package/dist/context/DiagramFeatures.d.ts +2 -2
- package/dist/context/DiagramFeatures.js +3 -31
- package/dist/context/EnsureMantine.js +1 -1
- package/dist/context/IconRenderer.js +1 -4
- package/dist/context/RootContainer.js +5 -1
- package/dist/context/TagStylesContext.d.ts +7 -0
- package/dist/context/TagStylesContext.js +85 -0
- package/dist/custom/components.d.ts +1 -1
- package/dist/custom/customNodes.d.ts +32 -17
- package/dist/custom/hooks.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/useDiagram.d.ts +73 -38
- package/dist/hooks/useDiagram.js +7 -3
- package/dist/hooks/useMantinePortalProps.d.ts +2 -2
- package/dist/hooks/useSearchActor.d.ts +2 -0
- package/dist/hooks/useSearchActor.js +10 -0
- package/dist/hooks/useUpdateEffect.js +3 -0
- package/dist/hooks/useXYFlow.d.ts +39 -37
- package/dist/hooks/useXYFlow.js +5 -1
- package/dist/index.js +1 -1
- package/dist/likec4diagram/DiagramUI.js +7 -2
- package/dist/likec4diagram/DiagramXYFlow.d.ts +4 -3
- package/dist/likec4diagram/DiagramXYFlow.js +107 -110
- package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +7 -6
- package/dist/likec4diagram/custom/edges/RelationshipEdge.js +8 -0
- package/dist/likec4diagram/custom/edges/RelationshipsDropdownMenu.js +7 -5
- package/dist/likec4diagram/custom/index.d.ts +7 -6
- package/dist/likec4diagram/custom/nodes/nodes.js +39 -26
- package/dist/likec4diagram/custom/nodes/toolbar/_shared.d.ts +7 -7
- package/dist/likec4diagram/types.d.ts +5 -5
- package/dist/likec4diagram/ui/controls/Controls.js +12 -4
- package/dist/likec4diagram/ui/notation/NotationPanel.js +1 -1
- package/dist/likec4diagram/useViewToNodesEdges.d.ts +5 -3
- package/dist/likec4diagram/useViewToNodesEdges.js +20 -30
- package/dist/likec4model/LikeC4ModelContext.d.ts +2 -2
- package/dist/likec4model/index.d.ts +1 -1
- package/dist/likec4model/useLikeC4ElementsTree.js +1 -1
- package/dist/likec4model/useLikeC4Model.d.ts +23 -10
- package/dist/likec4model/useLikeC4Model.js +22 -7
- package/dist/overlays/Overlays.js +4 -27
- package/dist/overlays/element-details/ElementDetailsCard.d.ts +1 -1
- package/dist/overlays/element-details/ElementDetailsCard.js +19 -12
- package/dist/overlays/element-details/TabPanelDeployments.d.ts +1 -1
- package/dist/overlays/element-details/TabPanelDeployments.js +1 -1
- package/dist/overlays/element-details/TabPanelRelationships.d.ts +1 -1
- package/dist/overlays/element-details/TabPanelStructure.d.ts +1 -1
- package/dist/overlays/element-details/actor.d.ts +288 -286
- 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 +12 -0
- package/dist/overlays/overlay/Overlay.js +58 -27
- package/dist/overlays/overlaysActor.d.ts +1 -1
- package/dist/overlays/relationship-details/RelationshipDetails.d.ts +3 -2
- package/dist/overlays/relationship-details/RelationshipDetails.js +3 -3
- package/dist/overlays/relationship-details/_types.d.ts +2 -2
- package/dist/overlays/relationship-details/actor.js +7 -7
- package/dist/overlays/relationship-details/custom/edgeTypes.d.ts +3 -2
- package/dist/overlays/relationship-details/custom/nodeTypes.js +4 -0
- package/dist/overlays/relationship-details/hooks.d.ts +10 -9
- package/dist/overlays/relationship-details/layout-to-xyflow.js +1 -0
- package/dist/overlays/relationship-details/layout.js +3 -1
- package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +3 -2
- package/dist/overlays/relationships-browser/SelectElement.js +1 -1
- package/dist/overlays/relationships-browser/_types.d.ts +2 -2
- package/dist/overlays/relationships-browser/actor.d.ts +1 -1
- package/dist/overlays/relationships-browser/actor.js +7 -7
- package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +3 -2
- package/dist/overlays/relationships-browser/custom/nodeTypes.d.ts +8 -5
- package/dist/overlays/relationships-browser/custom/nodeTypes.js +4 -0
- package/dist/overlays/relationships-browser/layout.d.ts +2 -2
- package/dist/overlays/relationships-browser/layout.js +10 -6
- package/dist/overlays/relationships-browser/useViewToNodesEdges.js +4 -3
- package/dist/search/Search.d.ts +4 -0
- package/dist/search/Search.js +173 -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 +119 -0
- package/dist/search/components/SearchInput.d.ts +2 -0
- package/dist/{likec4diagram/ui/search → search/components}/SearchInput.js +61 -40
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.d.ts +3 -2
- package/dist/{likec4diagram/ui/search → search/components}/ViewsColum.js +25 -17
- 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/search/components/utils.d.ts +5 -0
- package/dist/search/components/utils.js +58 -0
- package/dist/search/hooks.d.ts +10 -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 +645 -183
- package/dist/state/diagram-machine.js +127 -60
- package/dist/state/syncManualLayoutActor.d.ts +2 -2
- package/dist/state/types.d.ts +2 -0
- package/dist/state/utils.d.ts +2 -0
- package/dist/state/utils.js +3 -0
- package/dist/styles-min.css +1 -1
- package/dist/styles-xyflow.css +1 -1
- package/dist/styles.css +1 -1
- package/dist/styles.css2.js +1 -1
- package/package.json +20 -19
- package/panda.buildinfo.json +171 -148
- package/src/LikeC4CustomColors.tsx +21 -6
- package/src/LikeC4Diagram.props.ts +48 -32
- package/src/LikeC4Diagram.tsx +19 -20
- package/src/LikeC4ModelProvider.tsx +6 -5
- package/src/StaticLikeC4Diagram.tsx +8 -6
- package/src/base/const.ts +1 -1
- package/src/base/index.ts +2 -1
- package/src/base/primitives/compound/CompoundActionButton.tsx +2 -1
- package/src/base/primitives/compound/CompoundDetailsButton.tsx +2 -1
- package/src/base/primitives/compound/CompoundTitle.tsx +3 -2
- 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/ElementShape.tsx +2 -1
- 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 +2 -99
- package/src/bundle/LikeC4View.props.ts +17 -4
- package/src/bundle/LikeC4View.tsx +27 -36
- package/src/bundle/ReactLikeC4.tsx +16 -36
- package/src/components/ErrorFallback.tsx +30 -0
- package/src/context/DiagramEventHandlers.tsx +5 -4
- package/src/context/DiagramFeatures.tsx +3 -22
- package/src/context/EnsureMantine.tsx +1 -1
- package/src/context/IconRenderer.tsx +1 -4
- package/src/context/RootContainer.tsx +9 -3
- package/src/context/TagStylesContext.tsx +96 -0
- package/src/custom/components.ts +2 -0
- package/src/custom/customNodes.tsx +29 -14
- package/src/custom/hooks.ts +2 -0
- package/src/hooks/index.ts +1 -1
- package/src/hooks/useCurrentViewId.ts +1 -4
- package/src/hooks/useDiagram.ts +104 -12
- 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/likec4diagram/DiagramUI.tsx +5 -0
- package/src/likec4diagram/DiagramXYFlow.tsx +118 -121
- package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +9 -0
- package/src/likec4diagram/custom/edges/RelationshipsDropdownMenu.tsx +10 -9
- package/src/likec4diagram/custom/nodes/nodes.tsx +45 -43
- package/src/likec4diagram/custom/nodes/toolbar/_shared.tsx +11 -3
- package/src/likec4diagram/types.ts +5 -3
- package/src/likec4diagram/ui/controls/Controls.tsx +11 -4
- package/src/likec4diagram/ui/notation/NotationPanel.tsx +2 -2
- package/src/likec4diagram/useViewToNodesEdges.ts +34 -36
- package/src/likec4model/LikeC4ModelContext.ts +2 -2
- package/src/likec4model/index.ts +2 -0
- package/src/likec4model/useLikeC4ElementsTree.ts +1 -1
- package/src/likec4model/useLikeC4Model.ts +32 -16
- package/src/overlays/Overlays.tsx +5 -32
- package/src/overlays/element-details/ElementDetailsCard.tsx +25 -18
- 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 +61 -29
- package/src/overlays/overlaysActor.ts +1 -1
- package/src/overlays/relationship-details/RelationshipDetails.tsx +4 -4
- package/src/overlays/relationship-details/_types.ts +2 -1
- 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 +2 -1
- package/src/overlays/relationships-browser/custom/nodeTypes.tsx +4 -0
- package/src/overlays/relationships-browser/layout.ts +12 -7
- package/src/overlays/relationships-browser/useViewToNodesEdges.ts +4 -4
- package/src/search/Search.tsx +220 -0
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.css.ts +0 -29
- package/src/{likec4diagram/ui/search → search/components}/ElementsColumn.tsx +28 -29
- package/src/search/components/PickView.tsx +134 -0
- package/src/search/components/SearchByTags.tsx +112 -0
- package/src/{likec4diagram/ui/search → search/components}/SearchInput.tsx +72 -42
- package/src/{likec4diagram/ui/search → search/components}/ViewsColum.tsx +29 -22
- 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/search/components/utils.ts +64 -0
- package/src/search/hooks.ts +38 -0
- package/src/search/searchActor.ts +99 -0
- package/src/state/DiagramActorProvider.tsx +37 -25
- package/src/state/assign.ts +10 -10
- package/src/state/diagram-machine.ts +123 -58
- package/src/state/syncManualLayoutActor.ts +1 -1
- package/src/state/types.ts +2 -0
- package/src/state/utils.ts +4 -0
- package/dist/base/types.js +0 -54
- 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/state.d.ts +0 -19
- package/dist/likec4diagram/ui/search/state.js +0 -63
- package/dist/likec4diagram/ui/search/utils.d.ts +0 -3
- package/dist/likec4diagram/ui/search/utils.js +0 -20
- package/src/likec4diagram/ui/search/LikeC4Search.tsx +0 -301
- package/src/likec4diagram/ui/search/state.ts +0 -78
- package/src/likec4diagram/ui/search/utils.ts +0 -20
- /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/{likec4diagram/ui/search → search/components}/_shared.css.d.ts +0 -0
- /package/src/{likec4diagram/ui/search → search/components}/ViewsColumn.css.ts +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createSafeContext } from '@mantine/core'
|
|
2
|
+
import { useSelector } from '@xstate/react'
|
|
3
|
+
import { useCallback, useDeferredValue } from 'react'
|
|
4
|
+
import type { SearchActorRef, SearchActorSnapshot } from './searchActor'
|
|
5
|
+
|
|
6
|
+
export const [SearchActorContext, useSearchActor] = createSafeContext<SearchActorRef>('SearchActorContext')
|
|
7
|
+
|
|
8
|
+
const selectSearchValue = (s: SearchActorSnapshot) => s.context.searchValue
|
|
9
|
+
export function useSearch(): [string, (search: string) => void] {
|
|
10
|
+
const searchActorRef = useSearchActor()
|
|
11
|
+
const searchValue = useSelector(searchActorRef, selectSearchValue)
|
|
12
|
+
const updateSearch = useCallback((search: string) => {
|
|
13
|
+
searchActorRef.send({ type: 'change.search', search })
|
|
14
|
+
}, [searchActorRef])
|
|
15
|
+
return [searchValue, updateSearch]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const selectNormalizedSearchValue = (s: SearchActorSnapshot) => {
|
|
19
|
+
const v = s.context.searchValue.trim().toLowerCase()
|
|
20
|
+
return v.length > 1 ? v : ''
|
|
21
|
+
}
|
|
22
|
+
export function useNormalizedSearch() {
|
|
23
|
+
const searchActorRef = useSearchActor()
|
|
24
|
+
return useDeferredValue(useSelector(searchActorRef, selectNormalizedSearchValue))
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function useUpdateSearch() {
|
|
28
|
+
const searchActorRef = useSearchActor()
|
|
29
|
+
return useCallback((search: string) => {
|
|
30
|
+
searchActorRef.send({ type: 'change.search', search })
|
|
31
|
+
}, [searchActorRef])
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const selectPickViewFor = (s: SearchActorSnapshot) => s.context.pickViewFor
|
|
35
|
+
export function usePickViewFor() {
|
|
36
|
+
const searchActorRef = useSearchActor()
|
|
37
|
+
return useSelector(searchActorRef, selectPickViewFor)
|
|
38
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { Fqn } from '@likec4/core/types'
|
|
2
|
+
import {
|
|
3
|
+
type ActorLogicFrom,
|
|
4
|
+
type ActorRefFrom,
|
|
5
|
+
type SnapshotFrom,
|
|
6
|
+
assertEvent,
|
|
7
|
+
assign,
|
|
8
|
+
setup,
|
|
9
|
+
} from 'xstate'
|
|
10
|
+
|
|
11
|
+
export type SearchActorEvent =
|
|
12
|
+
| { type: 'open'; search?: string | undefined }
|
|
13
|
+
| { type: 'close' }
|
|
14
|
+
| { type: 'change.search'; search: string }
|
|
15
|
+
| { type: 'pickview.open'; elementFqn: Fqn }
|
|
16
|
+
| { type: 'pickview.close' }
|
|
17
|
+
|
|
18
|
+
export interface SearchContext {
|
|
19
|
+
openedWithSearch: string | null
|
|
20
|
+
searchValue: string
|
|
21
|
+
pickViewFor: Fqn | null
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const _searchActorLogic = setup({
|
|
25
|
+
types: {
|
|
26
|
+
context: {} as SearchContext,
|
|
27
|
+
events: {} as SearchActorEvent,
|
|
28
|
+
},
|
|
29
|
+
actions: {
|
|
30
|
+
'change searchValue': assign({
|
|
31
|
+
searchValue: ({ event, context }) => {
|
|
32
|
+
assertEvent(event, ['change.search', 'open'])
|
|
33
|
+
return event.search ?? context.searchValue
|
|
34
|
+
},
|
|
35
|
+
}),
|
|
36
|
+
'reset pickViewFor': assign({
|
|
37
|
+
pickViewFor: () => null,
|
|
38
|
+
}),
|
|
39
|
+
},
|
|
40
|
+
}).createMachine({
|
|
41
|
+
id: 'search',
|
|
42
|
+
context: {
|
|
43
|
+
openedWithSearch: null,
|
|
44
|
+
searchValue: '',
|
|
45
|
+
pickViewFor: null,
|
|
46
|
+
},
|
|
47
|
+
initial: 'inactive',
|
|
48
|
+
on: {
|
|
49
|
+
'close': {
|
|
50
|
+
target: '.inactive',
|
|
51
|
+
actions: 'reset pickViewFor',
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
states: {
|
|
55
|
+
inactive: {
|
|
56
|
+
on: {
|
|
57
|
+
'open': {
|
|
58
|
+
target: 'opened',
|
|
59
|
+
actions: [
|
|
60
|
+
assign({
|
|
61
|
+
openedWithSearch: ({ event }) => event.search ?? null,
|
|
62
|
+
searchValue: ({ event, context }) => event.search ?? context.searchValue,
|
|
63
|
+
}),
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
opened: {
|
|
69
|
+
on: {
|
|
70
|
+
'open': {
|
|
71
|
+
actions: 'change searchValue',
|
|
72
|
+
},
|
|
73
|
+
'change.search': {
|
|
74
|
+
actions: 'change searchValue',
|
|
75
|
+
},
|
|
76
|
+
'pickview.open': {
|
|
77
|
+
target: 'pickView',
|
|
78
|
+
actions: assign({
|
|
79
|
+
pickViewFor: ({ event }) => event.elementFqn,
|
|
80
|
+
}),
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
pickView: {
|
|
85
|
+
on: {
|
|
86
|
+
'pickview.close': {
|
|
87
|
+
target: 'opened',
|
|
88
|
+
actions: 'reset pickViewFor',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
export interface SearchActorLogic extends ActorLogicFrom<typeof _searchActorLogic> {}
|
|
96
|
+
export const searchActorLogic: SearchActorLogic = _searchActorLogic
|
|
97
|
+
|
|
98
|
+
export type SearchActorSnapshot = SnapshotFrom<SearchActorLogic>
|
|
99
|
+
export interface SearchActorRef extends ActorRefFrom<SearchActorLogic> {}
|
|
@@ -1,43 +1,48 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
1
|
+
import type { DiagramView, WhereOperator } from '@likec4/core/types'
|
|
2
|
+
import { useLogger } from '@mantine/hooks'
|
|
3
3
|
import { useActorRef, useSelector } from '@xstate/react'
|
|
4
4
|
import { useStoreApi } from '@xyflow/react'
|
|
5
5
|
import { shallowEqual } from 'fast-equals'
|
|
6
|
-
import { type PropsWithChildren, useEffect } from 'react'
|
|
6
|
+
import { type PropsWithChildren, useEffect, useRef } from 'react'
|
|
7
7
|
import { useDiagramEventHandlersRef } from '../context/DiagramEventHandlers'
|
|
8
8
|
import { DiagramFeatures, useEnabledFeatures } from '../context/DiagramFeatures'
|
|
9
9
|
import { DiagramActorContextProvider } from '../hooks/safeContext'
|
|
10
|
-
import {
|
|
10
|
+
import type { PaddingWithUnit } from '../LikeC4Diagram.props'
|
|
11
11
|
import type { Types } from '../likec4diagram/types'
|
|
12
12
|
import { useViewToNodesEdges } from '../likec4diagram/useViewToNodesEdges'
|
|
13
|
-
import { type
|
|
13
|
+
import { type DiagramMachine, diagramMachine } from './diagram-machine'
|
|
14
14
|
import { syncManualLayoutActorLogic } from './syncManualLayoutActor'
|
|
15
15
|
import type { DiagramActorSnapshot } from './types'
|
|
16
16
|
|
|
17
17
|
const selectToggledFeatures = (state: DiagramActorSnapshot) => state.context.toggledFeatures
|
|
18
|
-
type ActorContextInput = Omit<Input, 'xystore' | 'xynodes' | 'xyedges'>
|
|
19
18
|
export function DiagramActorProvider({
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
view,
|
|
20
|
+
zoomable,
|
|
21
|
+
pannable,
|
|
22
|
+
fitViewPadding,
|
|
23
|
+
nodesSelectable,
|
|
24
24
|
where,
|
|
25
25
|
children,
|
|
26
26
|
}: PropsWithChildren<{
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
view: DiagramView
|
|
28
|
+
zoomable: boolean
|
|
29
|
+
pannable: boolean
|
|
30
|
+
fitViewPadding: PaddingWithUnit
|
|
31
|
+
nodesSelectable: boolean
|
|
32
|
+
where: WhereOperator | null
|
|
29
33
|
}>) {
|
|
30
34
|
const handlersRef = useDiagramEventHandlersRef()
|
|
31
35
|
const xystore = useStoreApi<Types.Node, Types.Edge>()
|
|
32
36
|
|
|
33
|
-
const
|
|
34
|
-
|
|
37
|
+
const machineRef = useRef<DiagramMachine | null>(null)
|
|
38
|
+
if (!machineRef.current) {
|
|
39
|
+
machineRef.current = diagramMachine.provide({
|
|
35
40
|
actions: {
|
|
36
41
|
'trigger:NavigateTo': ((_, { viewId }) => {
|
|
37
42
|
// Slightly defer callback for better responsiveness
|
|
38
43
|
setTimeout(() => {
|
|
39
|
-
handlersRef.current.onNavigateTo?.(viewId
|
|
40
|
-
},
|
|
44
|
+
handlersRef.current.onNavigateTo?.(viewId)
|
|
45
|
+
}, 40)
|
|
41
46
|
}),
|
|
42
47
|
|
|
43
48
|
'trigger:OnChange': ((_, params) => {
|
|
@@ -57,35 +62,42 @@ export function DiagramActorProvider({
|
|
|
57
62
|
},
|
|
58
63
|
}),
|
|
59
64
|
},
|
|
60
|
-
})
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const actorRef = useActorRef(
|
|
69
|
+
machineRef.current,
|
|
61
70
|
{
|
|
62
|
-
id: `diagram
|
|
71
|
+
id: `diagram`,
|
|
63
72
|
systemId: 'diagram',
|
|
64
73
|
// ...inspector,
|
|
65
74
|
input: {
|
|
66
75
|
xystore,
|
|
67
76
|
view,
|
|
68
|
-
|
|
77
|
+
zoomable,
|
|
78
|
+
pannable,
|
|
79
|
+
fitViewPadding,
|
|
80
|
+
nodesSelectable,
|
|
69
81
|
},
|
|
70
82
|
},
|
|
71
83
|
)
|
|
72
84
|
|
|
73
85
|
const features = useEnabledFeatures()
|
|
74
|
-
useUpdateEffect(() => {
|
|
75
|
-
actorRef.send({ type: 'update.inputs', inputs })
|
|
76
|
-
}, [inputs])
|
|
77
|
-
|
|
78
86
|
useEffect(() => {
|
|
79
87
|
actorRef.send({ type: 'update.features', features })
|
|
80
88
|
}, [features])
|
|
81
89
|
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
actorRef.send({ type: 'update.inputs', inputs: { zoomable, pannable, fitViewPadding, nodesSelectable } })
|
|
92
|
+
}, [zoomable, pannable, fitViewPadding, nodesSelectable])
|
|
93
|
+
|
|
82
94
|
const { xyedges, xynodes } = useViewToNodesEdges({
|
|
83
95
|
view,
|
|
84
96
|
where,
|
|
85
|
-
nodesSelectable
|
|
97
|
+
nodesSelectable,
|
|
86
98
|
})
|
|
87
99
|
|
|
88
|
-
|
|
100
|
+
useEffect(() => {
|
|
89
101
|
actorRef.send({ type: 'update.view', view, xyedges, xynodes })
|
|
90
102
|
}, [view, xyedges, xynodes])
|
|
91
103
|
|
package/src/state/assign.ts
CHANGED
|
@@ -140,16 +140,16 @@ export function focusNodesEdges(params: ActionArg): Partial<DiagramContext> {
|
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
export function unfocusNodesEdges({ context }: ActionArg): Partial<DiagramContext> {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
143
|
+
// export function unfocusNodesEdges({ context }: ActionArg): Partial<DiagramContext> {
|
|
144
|
+
// const { xynodes, xyedges } = context
|
|
145
|
+
// return {
|
|
146
|
+
// xynodes: xynodes.map(Base.setDimmed(false)),
|
|
147
|
+
// xyedges: xyedges.map(Base.setData({
|
|
148
|
+
// dimmed: false,
|
|
149
|
+
// active: false,
|
|
150
|
+
// })),
|
|
151
|
+
// }
|
|
152
|
+
// }
|
|
153
153
|
|
|
154
154
|
export function updateNavigationHistory({ context, event }: ActionArg): Partial<DiagramContext> {
|
|
155
155
|
assertEvent(event, 'update.view')
|