@likec4/diagram 1.44.0 → 1.45.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 (134) hide show
  1. package/bundle/index.js +18160 -17671
  2. package/dist/LikeC4Diagram.js +7 -5
  3. package/dist/LikeC4Diagram.props.d.ts +9 -8
  4. package/dist/LikeC4Styles.js +0 -3
  5. package/dist/LikeC4View.d.ts +3 -3
  6. package/dist/LikeC4View.js +7 -3
  7. package/dist/ReactLikeC4.d.ts +2 -2
  8. package/dist/base/Base.d.ts +1 -1
  9. package/dist/base/updateEdges.js +25 -15
  10. package/dist/base/updateNodes.d.ts +14 -0
  11. package/dist/base/updateNodes.js +51 -18
  12. package/dist/base-primitives/Markdown.d.ts +30 -4
  13. package/dist/base-primitives/Markdown.js +3 -2
  14. package/dist/base-primitives/compound/CompoundActionButton.d.ts +3 -2
  15. package/dist/base-primitives/compound/CompoundDetailsButton.d.ts +3 -2
  16. package/dist/base-primitives/edge/EdgeActionButton.d.ts +3 -2
  17. package/dist/base-primitives/edge/EdgeContainer.d.ts +1 -1
  18. package/dist/base-primitives/edge/EdgeContainer.js +4 -1
  19. package/dist/base-primitives/edge/EdgeLabel.d.ts +2 -2
  20. package/dist/base-primitives/edge/EdgePath.js +24 -4
  21. package/dist/base-primitives/element/ElementActionButtons.d.ts +3 -2
  22. package/dist/base-primitives/element/ElementActionButtons.js +2 -2
  23. package/dist/base-primitives/element/ElementData.d.ts +3 -3
  24. package/dist/base-primitives/element/ElementData.js +13 -7
  25. package/dist/base-primitives/element/ElementDetailsButton.d.ts +3 -2
  26. package/dist/base-primitives/element/ElementDetailsButton.js +3 -0
  27. package/dist/base-primitives/element/ElementShape.js +5 -5
  28. package/dist/base-primitives/element/ElementTags.d.ts +6 -4
  29. package/dist/context/DiagramFeatures.d.ts +1 -0
  30. package/dist/context/TagStylesContext.js +1 -1
  31. package/dist/custom/hooks.d.ts +2 -2
  32. package/dist/custom/index.js +1 -1
  33. package/dist/hooks/index.d.ts +2 -1
  34. package/dist/hooks/useDiagramCompareLayout.js +7 -2
  35. package/dist/hooks/useLikeC4Project.d.ts +6 -1
  36. package/dist/hooks/useLikeC4Project.js +14 -2
  37. package/dist/hooks/useMediaPrint.d.ts +6 -0
  38. package/dist/likec4diagram/DiagramXYFlow.js +11 -6
  39. package/dist/likec4diagram/custom/edges/EdgeDrifts.d.ts +6 -0
  40. package/dist/likec4diagram/custom/edges/EdgeDrifts.js +38 -0
  41. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +24 -14
  42. package/dist/likec4diagram/custom/edges/SequenceStepEdge.js +3 -1
  43. package/dist/likec4diagram/custom/edges/useControlPoints.js +3 -3
  44. package/dist/likec4diagram/custom/edges/useRelationshipEdgePath.js +5 -5
  45. package/dist/likec4diagram/custom/nodes/NodeDrifts.d.ts +6 -0
  46. package/dist/likec4diagram/custom/nodes/{ElementNodeDrifts.js → NodeDrifts.js} +8 -4
  47. package/dist/likec4diagram/custom/nodes/SequenceActorNode.js +4 -2
  48. package/dist/likec4diagram/custom/nodes/index.d.ts +1 -0
  49. package/dist/likec4diagram/custom/nodes/nodes.js +64 -23
  50. package/dist/likec4diagram/relationship-popover/RelationshipPopover.js +3 -3
  51. package/dist/likec4diagram/relationship-popover/actor.d.ts +1 -1
  52. package/dist/likec4diagram/state/DiagramActorProvider.d.ts +2 -2
  53. package/dist/likec4diagram/state/DiagramActorProvider.js +0 -1
  54. package/dist/likec4diagram/state/assign.d.ts +10 -6
  55. package/dist/likec4diagram/state/assign.js +17 -192
  56. package/dist/likec4diagram/state/createViewChange.js +15 -26
  57. package/dist/likec4diagram/state/diagram-api.d.ts +2 -6
  58. package/dist/likec4diagram/state/diagram-api.js +2 -10
  59. package/dist/likec4diagram/state/hotkeyActor.d.ts +0 -7
  60. package/dist/likec4diagram/state/hotkeyActor.js +1 -17
  61. package/dist/likec4diagram/state/machine.actions.d.ts +430 -746
  62. package/dist/likec4diagram/state/machine.actions.js +193 -284
  63. package/dist/likec4diagram/state/machine.actions.layout.d.ts +579 -0
  64. package/dist/likec4diagram/state/machine.actions.layout.js +129 -0
  65. package/dist/likec4diagram/state/machine.d.ts +17 -3712
  66. package/dist/likec4diagram/state/machine.js +59 -73
  67. package/dist/likec4diagram/state/machine.setup.d.ts +61 -18
  68. package/dist/likec4diagram/state/machine.setup.js +27 -5
  69. package/dist/likec4diagram/state/machine.state.initializing.d.ts +25 -0
  70. package/dist/likec4diagram/state/machine.state.initializing.js +5 -5
  71. package/dist/likec4diagram/state/machine.state.navigating.d.ts +5 -108
  72. package/dist/likec4diagram/state/machine.state.navigating.js +167 -34
  73. package/dist/likec4diagram/state/machine.state.ready.d.ts +2316 -2851
  74. package/dist/likec4diagram/state/machine.state.ready.focused.d.ts +386 -0
  75. package/dist/likec4diagram/state/machine.state.ready.focused.js +85 -0
  76. package/dist/likec4diagram/state/machine.state.ready.idle.d.ts +474 -0
  77. package/dist/likec4diagram/state/machine.state.ready.idle.js +96 -0
  78. package/dist/likec4diagram/state/machine.state.ready.js +144 -319
  79. package/dist/likec4diagram/state/machine.state.ready.printing.d.ts +128 -0
  80. package/dist/likec4diagram/state/machine.state.ready.printing.js +40 -0
  81. package/dist/likec4diagram/state/machine.state.ready.walkthrough.d.ts +511 -0
  82. package/dist/likec4diagram/state/machine.state.ready.walkthrough.js +177 -0
  83. package/dist/likec4diagram/state/mediaPrintActor.d.ts +12 -0
  84. package/dist/likec4diagram/state/mediaPrintActor.js +18 -0
  85. package/dist/likec4diagram/state/syncManualLayoutActor.d.ts +6 -240
  86. package/dist/likec4diagram/state/syncManualLayoutActor.js +150 -89
  87. package/dist/likec4diagram/state/types.d.ts +5 -7
  88. package/dist/likec4diagram/state/utils.d.ts +15 -2
  89. package/dist/likec4diagram/state/utils.js +43 -3
  90. package/dist/likec4diagram/types.d.ts +8 -13
  91. package/dist/likec4diagram/ui/notation/NotationPanel.css.js +5 -2
  92. package/dist/likec4diagram/useLayoutConstraints.js +107 -102
  93. package/dist/likec4diagram/xyflow-diagram/diagram-view.js +12 -15
  94. package/dist/likec4diagram/xyflow-sequence/sequence-layout.js +11 -8
  95. package/dist/navigationpanel/NavigationPanel.js +5 -1
  96. package/dist/navigationpanel/actor.d.ts +4 -204
  97. package/dist/navigationpanel/actor.js +1 -1
  98. package/dist/navigationpanel/controls/ToggleReadonly.js +8 -3
  99. package/dist/navigationpanel/walkthrough/DynamicViewControls.d.ts +66 -66
  100. package/dist/navigationpanel/walkthrough/WalkthroughPanel.js +4 -3
  101. package/dist/overlays/element-details/ElementDetailsCard.css.js +3 -3
  102. package/dist/overlays/element-details/MetadataValue.d.ts +2 -1
  103. package/dist/overlays/element-details/actor.d.ts +8 -83
  104. package/dist/overlays/element-details/actor.js +0 -8
  105. package/dist/overlays/overlay/Overlay.js +10 -10
  106. package/dist/overlays/overlaysActor.d.ts +7 -392
  107. package/dist/overlays/overlaysActor.js +67 -46
  108. package/dist/overlays/relationship-details/_types.d.ts +3 -4
  109. package/dist/overlays/relationship-details/actor.d.ts +6 -562
  110. package/dist/overlays/relationship-details/actor.js +1 -0
  111. package/dist/overlays/relationship-details/layout-to-xyflow.js +3 -5
  112. package/dist/overlays/relationship-details/layout.d.ts +3 -3
  113. package/dist/overlays/relationship-details/layout.js +4 -4
  114. package/dist/overlays/relationships-browser/_types.d.ts +2 -3
  115. package/dist/overlays/relationships-browser/actor.d.ts +7 -739
  116. package/dist/overlays/relationships-browser/layout.d.ts +2 -2
  117. package/dist/overlays/relationships-browser/layout.js +3 -3
  118. package/dist/overlays/relationships-browser/useViewToNodesEdges.js +0 -3
  119. package/dist/overlays/types.d.ts +12 -13
  120. package/dist/search/components/_shared.css.d.ts +1 -1
  121. package/dist/search/searchActor.d.ts +3 -66
  122. package/dist/shadowroot/ShadowRoot.d.ts +5 -7
  123. package/dist/shadowroot/ShadowRoot.js +7 -5
  124. package/dist/styles.css2.js +1 -1
  125. package/dist/utils/vector.d.ts +5 -0
  126. package/dist/utils/vector.js +7 -0
  127. package/dist/utils/view-bounds.js +7 -6
  128. package/dist/utils/xyflow.d.ts +4 -2
  129. package/dist/utils/xyflow.js +18 -50
  130. package/package.json +19 -18
  131. package/panda.buildinfo.json +17 -5
  132. package/styles-min.css +1 -1
  133. package/styles.css +1 -1
  134. package/dist/likec4diagram/custom/nodes/ElementNodeDrifts.d.ts +0 -4
@@ -1,44 +1,177 @@
1
- import { updateNavigationHistory } from './assign.js';
2
- import { closeAllOverlays, closeSearch, stopSyncLayout, cancelFitDiagram, trigger, disableCompareWithLatest, findCorrespondingNode, xyflow, updateXYNodesEdges, ensureSyncLayout, raiseFitDiagram } from './machine.actions.js';
3
- import { machine } from './machine.setup.js';
4
- import { x as xstateActions_cjsExports } from '../../_virtual/xstate-actions.cjs.js';
1
+ import { BBox } from '@likec4/core/types';
2
+ import { invariant, nonNullable } from '@likec4/core/utils';
3
+ import { enqueueActions, assertEvent } from 'xstate';
4
+ import { mergeXYNodesEdges } from './assign.js';
5
+ import { disableCompareWithLatest } from './machine.actions.js';
6
+ import { machine, targetState } from './machine.setup.js';
7
+ import { calcViewportForBounds, findCorrespondingNode, nodeRef } from './utils.js';
8
+ import { cancelFitDiagram, raiseSetViewport, raiseFitDiagram } from './machine.actions.layout.js';
5
9
 
10
+ const handleBrowserForwardBackward = () => machine.assign(({ context, event }) => {
11
+ assertEvent(event, "update.view");
12
+ let {
13
+ lastOnNavigate,
14
+ navigationHistory: {
15
+ currentIndex,
16
+ history
17
+ }
18
+ } = context;
19
+ const stepCurrent = history[currentIndex];
20
+ if (!stepCurrent || stepCurrent.viewId === event.view.id || !!lastOnNavigate) {
21
+ return {};
22
+ }
23
+ const stepBack = currentIndex > 0 ? nonNullable(history[currentIndex - 1]) : null;
24
+ if (stepBack && stepBack.viewId === event.view.id) {
25
+ return {
26
+ navigationHistory: {
27
+ currentIndex: currentIndex - 1,
28
+ history
29
+ },
30
+ lastOnNavigate: null
31
+ };
32
+ }
33
+ const stepForward = currentIndex < history.length - 1 ? nonNullable(history[currentIndex + 1]) : null;
34
+ if (stepForward && stepForward.viewId === event.view.id) {
35
+ return {
36
+ navigationHistory: {
37
+ currentIndex: currentIndex + 1,
38
+ history
39
+ },
40
+ lastOnNavigate: null
41
+ };
42
+ }
43
+ if (event.view._type === "element" && event.view.viewOf) {
44
+ const toRef = event.view.viewOf;
45
+ const existingNode = context.xynodes.find((n) => nodeRef(n) === toRef);
46
+ if (existingNode) {
47
+ return {
48
+ lastOnNavigate: {
49
+ fromView: context.view.id,
50
+ toView: event.view.id,
51
+ fromNode: existingNode.id
52
+ }
53
+ };
54
+ }
55
+ }
56
+ return {};
57
+ });
6
58
  const navigating = machine.createStateConfig({
7
- id: "navigating",
8
- entry: [
9
- closeAllOverlays(),
10
- closeSearch(),
11
- stopSyncLayout(),
12
- cancelFitDiagram(),
13
- trigger.navigateTo()
14
- ],
15
- on: {
16
- "update.view": {
17
- actions: xstateActions_cjsExports.enqueueActions(({ enqueue, context, event }) => {
18
- enqueue(disableCompareWithLatest());
59
+ id: targetState.navigating.slice(1),
60
+ always: {
61
+ target: targetState.idle,
62
+ actions: [
63
+ cancelFitDiagram(),
64
+ handleBrowserForwardBackward(),
65
+ disableCompareWithLatest(),
66
+ enqueueActions(({ enqueue, context, event }) => {
67
+ assertEvent(event, "update.view");
68
+ const {
69
+ xyflow,
70
+ xystore,
71
+ navigationHistory: {
72
+ currentIndex,
73
+ history
74
+ }
75
+ } = context;
76
+ invariant(xyflow, "xyflow is not initialized");
77
+ const calcZoomTowardsNextViewport = (nextViewport2) => {
78
+ const zoom = xyflow.getZoom();
79
+ const coef = nextViewport2.zoom < zoom ? 0.7 : 0.3;
80
+ return zoom + (nextViewport2.zoom - zoom) * coef;
81
+ };
82
+ const fromHistory = history[currentIndex];
83
+ if (fromHistory && fromHistory.viewId === event.view.id) {
84
+ console.log("Navigating: fromHistory", fromHistory);
85
+ enqueue.assign({
86
+ ...mergeXYNodesEdges(context, event),
87
+ dynamicViewVariant: fromHistory.dynamicViewVariant ?? context.dynamicViewVariant,
88
+ viewportChangedManually: fromHistory.viewportChangedManually
89
+ });
90
+ const wasFocused = fromHistory.focusedNode;
91
+ const wasActiveWalkthrough = fromHistory.activeWalkthrough;
92
+ const viewportBefore = fromHistory.viewportBefore;
93
+ if (viewportBefore && (wasFocused || wasActiveWalkthrough)) {
94
+ enqueue.assign({
95
+ viewport: viewportBefore.value,
96
+ viewportChangedManually: viewportBefore.wasChangedManually,
97
+ viewportBefore: null
98
+ });
99
+ }
100
+ const center = BBox.center(event.view.bounds);
101
+ const zoom = calcZoomTowardsNextViewport(fromHistory.viewport);
102
+ xyflow.setCenter(
103
+ center.x,
104
+ center.y,
105
+ { zoom, duration: 0 }
106
+ );
107
+ if (wasFocused) {
108
+ enqueue.raise({
109
+ type: "focus.node",
110
+ nodeId: wasFocused
111
+ }, { delay: 50 });
112
+ return;
113
+ }
114
+ if (wasActiveWalkthrough) {
115
+ enqueue.raise({
116
+ type: "walkthrough.start",
117
+ stepId: wasActiveWalkthrough
118
+ }, { delay: 50 });
119
+ return;
120
+ }
121
+ enqueue(raiseSetViewport({
122
+ delay: 80,
123
+ viewport: fromHistory.viewport
124
+ }));
125
+ return;
126
+ }
127
+ const nextViewport = calcViewportForBounds(
128
+ context,
129
+ event.view.bounds
130
+ );
19
131
  const { fromNode, toNode } = findCorrespondingNode(context, event);
20
132
  if (fromNode && toNode) {
21
- enqueue(
22
- xyflow.alignNodeFromToAfterNavigate({
23
- fromNode: fromNode.id,
24
- toPosition: {
25
- x: toNode.data.x,
26
- y: toNode.data.y
27
- }
28
- })
29
- );
133
+ const elFrom = xyflow.getInternalNode(fromNode.id);
134
+ const fromPoint = xyflow.flowToScreenPosition({
135
+ x: elFrom.internals.positionAbsolute.x,
136
+ y: elFrom.internals.positionAbsolute.y
137
+ });
138
+ const toPoint = xyflow.flowToScreenPosition({
139
+ x: toNode.data.x,
140
+ y: toNode.data.y
141
+ });
142
+ xystore.getState().panBy({
143
+ x: Math.round(fromPoint.x - toPoint.x),
144
+ y: Math.round(fromPoint.y - toPoint.y)
145
+ });
30
146
  } else {
31
- enqueue(
32
- xyflow.setViewportCenter()
147
+ const zoom = calcZoomTowardsNextViewport(nextViewport);
148
+ const center = BBox.center(event.view.bounds);
149
+ xyflow.setCenter(
150
+ center.x,
151
+ center.y,
152
+ { zoom, duration: 0 }
33
153
  );
34
154
  }
35
- enqueue.assign(updateNavigationHistory);
36
- enqueue(updateXYNodesEdges());
37
- enqueue(ensureSyncLayout());
38
- enqueue(raiseFitDiagram({ delay: 25 }));
39
- }),
40
- target: "#idle"
41
- }
155
+ const updatedHistory = currentIndex < history.length - 1 ? history.slice(0, currentIndex + 1) : [...history];
156
+ updatedHistory.push({
157
+ viewId: event.view.id,
158
+ viewport: { ...nextViewport },
159
+ viewportChangedManually: false
160
+ });
161
+ enqueue.assign({
162
+ ...mergeXYNodesEdges(context, event),
163
+ viewportChangedManually: false,
164
+ lastOnNavigate: null,
165
+ navigationHistory: {
166
+ currentIndex: updatedHistory.length - 1,
167
+ history: updatedHistory
168
+ }
169
+ });
170
+ enqueue(raiseFitDiagram({
171
+ delay: 100
172
+ }));
173
+ })
174
+ ]
42
175
  }
43
176
  });
44
177