likec4 0.41.0 → 0.42.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 (143) hide show
  1. package/dist/__app__/src/App.jsx +1 -1
  2. package/dist/__app__/src/components/view-page/ExportDiagram.jsx +72 -0
  3. package/dist/__app__/src/components/view-page/ViewActionsToolbar.jsx +38 -12
  4. package/dist/cli/index.js +51 -51
  5. package/package.json +6 -6
  6. package/dist/@likec4/diagrams/cjs/components/EmbeddedDiagram.js +0 -83
  7. package/dist/@likec4/diagrams/cjs/components/FullscreenDiagramBrowser.js +0 -50
  8. package/dist/@likec4/diagrams/cjs/components/index.js +0 -49
  9. package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/CloseButton.js +0 -44
  10. package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/FullscreenDiagram.js +0 -110
  11. package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/FullscreenDiagramTitle.js +0 -39
  12. package/dist/@likec4/diagrams/cjs/components/primitives/index.js +0 -38
  13. package/dist/@likec4/diagrams/cjs/components/primitives/responsive/ResponsiveDiagram.js +0 -56
  14. package/dist/@likec4/diagrams/cjs/components/types.js +0 -1
  15. package/dist/@likec4/diagrams/cjs/diagram/Diagram.js +0 -326
  16. package/dist/@likec4/diagrams/cjs/diagram/Edges.js +0 -121
  17. package/dist/@likec4/diagrams/cjs/diagram/Nodes.js +0 -204
  18. package/dist/@likec4/diagrams/cjs/diagram/icons/BrainIcon.js +0 -25
  19. package/dist/@likec4/diagrams/cjs/diagram/icons/ExternalLink.js +0 -82
  20. package/dist/@likec4/diagrams/cjs/diagram/icons/index.js +0 -27
  21. package/dist/@likec4/diagrams/cjs/diagram/index.js +0 -27
  22. package/dist/@likec4/diagrams/cjs/diagram/shapes/Browser.js +0 -67
  23. package/dist/@likec4/diagrams/cjs/diagram/shapes/Compound.js +0 -55
  24. package/dist/@likec4/diagrams/cjs/diagram/shapes/Cylinder.js +0 -71
  25. package/dist/@likec4/diagrams/cjs/diagram/shapes/Edge.js +0 -62
  26. package/dist/@likec4/diagrams/cjs/diagram/shapes/Mobile.js +0 -45
  27. package/dist/@likec4/diagrams/cjs/diagram/shapes/NodeIcon.js +0 -38
  28. package/dist/@likec4/diagrams/cjs/diagram/shapes/NodeLabel.js +0 -62
  29. package/dist/@likec4/diagrams/cjs/diagram/shapes/Person.js +0 -48
  30. package/dist/@likec4/diagrams/cjs/diagram/shapes/Queue.js +0 -72
  31. package/dist/@likec4/diagrams/cjs/diagram/shapes/Rectangle.js +0 -30
  32. package/dist/@likec4/diagrams/cjs/diagram/shapes/index.js +0 -54
  33. package/dist/@likec4/diagrams/cjs/diagram/shapes/types.js +0 -1
  34. package/dist/@likec4/diagrams/cjs/diagram/shapes/utils.js +0 -19
  35. package/dist/@likec4/diagrams/cjs/diagram/springs.js +0 -61
  36. package/dist/@likec4/diagrams/cjs/diagram/state/atoms.js +0 -63
  37. package/dist/@likec4/diagrams/cjs/diagram/state/gestures.js +0 -26
  38. package/dist/@likec4/diagrams/cjs/diagram/state/hooks.js +0 -36
  39. package/dist/@likec4/diagrams/cjs/diagram/state/index.js +0 -38
  40. package/dist/@likec4/diagrams/cjs/diagram/state/provider.js +0 -18
  41. package/dist/@likec4/diagrams/cjs/diagram/types.js +0 -1
  42. package/dist/@likec4/diagrams/cjs/hooks/index.js +0 -49
  43. package/dist/@likec4/diagrams/cjs/hooks/useDarkMode.js +0 -11
  44. package/dist/@likec4/diagrams/cjs/hooks/useDiagramApi.js +0 -27
  45. package/dist/@likec4/diagrams/cjs/hooks/useImageLoader.js +0 -68
  46. package/dist/@likec4/diagrams/cjs/hooks/useViewIdFromHash.js +0 -93
  47. package/dist/@likec4/diagrams/cjs/index.js +0 -51
  48. package/dist/@likec4/diagrams/cjs/konva-html.js +0 -93
  49. package/dist/@likec4/diagrams/cjs/konva-portal.js +0 -50
  50. package/dist/@likec4/diagrams/cjs/konva.js +0 -102
  51. package/dist/@likec4/diagrams/cjs/likec4.js +0 -91
  52. package/dist/@likec4/diagrams/components/EmbeddedDiagram.mjs +0 -77
  53. package/dist/@likec4/diagrams/components/FullscreenDiagramBrowser.mjs +0 -52
  54. package/dist/@likec4/diagrams/components/index.mjs +0 -4
  55. package/dist/@likec4/diagrams/components/primitives/fullscreen/CloseButton.mjs +0 -43
  56. package/dist/@likec4/diagrams/components/primitives/fullscreen/FullscreenDiagram.mjs +0 -116
  57. package/dist/@likec4/diagrams/components/primitives/fullscreen/FullscreenDiagramTitle.mjs +0 -32
  58. package/dist/@likec4/diagrams/components/primitives/index.mjs +0 -3
  59. package/dist/@likec4/diagrams/components/primitives/responsive/ResponsiveDiagram.mjs +0 -42
  60. package/dist/@likec4/diagrams/components/types.mjs +0 -0
  61. package/dist/@likec4/diagrams/diagram/Diagram.mjs +0 -307
  62. package/dist/@likec4/diagrams/diagram/Edges.mjs +0 -117
  63. package/dist/@likec4/diagrams/diagram/Nodes.mjs +0 -178
  64. package/dist/@likec4/diagrams/diagram/icons/BrainIcon.mjs +0 -20
  65. package/dist/@likec4/diagrams/diagram/icons/ExternalLink.mjs +0 -90
  66. package/dist/@likec4/diagrams/diagram/icons/index.mjs +0 -2
  67. package/dist/@likec4/diagrams/diagram/index.mjs +0 -2
  68. package/dist/@likec4/diagrams/diagram/shapes/Browser.mjs +0 -49
  69. package/dist/@likec4/diagrams/diagram/shapes/Compound.mjs +0 -48
  70. package/dist/@likec4/diagrams/diagram/shapes/Cylinder.mjs +0 -57
  71. package/dist/@likec4/diagrams/diagram/shapes/Edge.mjs +0 -63
  72. package/dist/@likec4/diagrams/diagram/shapes/Mobile.mjs +0 -33
  73. package/dist/@likec4/diagrams/diagram/shapes/NodeIcon.mjs +0 -28
  74. package/dist/@likec4/diagrams/diagram/shapes/NodeLabel.mjs +0 -59
  75. package/dist/@likec4/diagrams/diagram/shapes/Person.mjs +0 -42
  76. package/dist/@likec4/diagrams/diagram/shapes/Queue.mjs +0 -58
  77. package/dist/@likec4/diagrams/diagram/shapes/Rectangle.mjs +0 -20
  78. package/dist/@likec4/diagrams/diagram/shapes/index.mjs +0 -7
  79. package/dist/@likec4/diagrams/diagram/shapes/types.mjs +0 -0
  80. package/dist/@likec4/diagrams/diagram/shapes/utils.mjs +0 -12
  81. package/dist/@likec4/diagrams/diagram/springs.mjs +0 -57
  82. package/dist/@likec4/diagrams/diagram/state/atoms.mjs +0 -71
  83. package/dist/@likec4/diagrams/diagram/state/gestures.mjs +0 -19
  84. package/dist/@likec4/diagrams/diagram/state/hooks.mjs +0 -28
  85. package/dist/@likec4/diagrams/diagram/state/index.mjs +0 -3
  86. package/dist/@likec4/diagrams/diagram/state/provider.mjs +0 -7
  87. package/dist/@likec4/diagrams/diagram/types.mjs +0 -0
  88. package/dist/@likec4/diagrams/esm/components/EmbeddedDiagram.js +0 -77
  89. package/dist/@likec4/diagrams/esm/components/FullscreenDiagramBrowser.js +0 -52
  90. package/dist/@likec4/diagrams/esm/components/index.js +0 -4
  91. package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/CloseButton.js +0 -43
  92. package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/FullscreenDiagram.js +0 -116
  93. package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/FullscreenDiagramTitle.js +0 -32
  94. package/dist/@likec4/diagrams/esm/components/primitives/index.js +0 -3
  95. package/dist/@likec4/diagrams/esm/components/primitives/responsive/ResponsiveDiagram.js +0 -42
  96. package/dist/@likec4/diagrams/esm/components/types.js +0 -0
  97. package/dist/@likec4/diagrams/esm/diagram/Diagram.js +0 -307
  98. package/dist/@likec4/diagrams/esm/diagram/Edges.js +0 -117
  99. package/dist/@likec4/diagrams/esm/diagram/Nodes.js +0 -178
  100. package/dist/@likec4/diagrams/esm/diagram/icons/BrainIcon.js +0 -20
  101. package/dist/@likec4/diagrams/esm/diagram/icons/ExternalLink.js +0 -90
  102. package/dist/@likec4/diagrams/esm/diagram/icons/index.js +0 -2
  103. package/dist/@likec4/diagrams/esm/diagram/index.js +0 -2
  104. package/dist/@likec4/diagrams/esm/diagram/shapes/Browser.js +0 -49
  105. package/dist/@likec4/diagrams/esm/diagram/shapes/Compound.js +0 -48
  106. package/dist/@likec4/diagrams/esm/diagram/shapes/Cylinder.js +0 -57
  107. package/dist/@likec4/diagrams/esm/diagram/shapes/Edge.js +0 -63
  108. package/dist/@likec4/diagrams/esm/diagram/shapes/Mobile.js +0 -33
  109. package/dist/@likec4/diagrams/esm/diagram/shapes/NodeIcon.js +0 -28
  110. package/dist/@likec4/diagrams/esm/diagram/shapes/NodeLabel.js +0 -59
  111. package/dist/@likec4/diagrams/esm/diagram/shapes/Person.js +0 -42
  112. package/dist/@likec4/diagrams/esm/diagram/shapes/Queue.js +0 -58
  113. package/dist/@likec4/diagrams/esm/diagram/shapes/Rectangle.js +0 -20
  114. package/dist/@likec4/diagrams/esm/diagram/shapes/index.js +0 -7
  115. package/dist/@likec4/diagrams/esm/diagram/shapes/types.js +0 -0
  116. package/dist/@likec4/diagrams/esm/diagram/shapes/utils.js +0 -12
  117. package/dist/@likec4/diagrams/esm/diagram/springs.js +0 -57
  118. package/dist/@likec4/diagrams/esm/diagram/state/atoms.js +0 -71
  119. package/dist/@likec4/diagrams/esm/diagram/state/gestures.js +0 -19
  120. package/dist/@likec4/diagrams/esm/diagram/state/hooks.js +0 -28
  121. package/dist/@likec4/diagrams/esm/diagram/state/index.js +0 -3
  122. package/dist/@likec4/diagrams/esm/diagram/state/provider.js +0 -7
  123. package/dist/@likec4/diagrams/esm/diagram/types.js +0 -0
  124. package/dist/@likec4/diagrams/esm/hooks/index.js +0 -4
  125. package/dist/@likec4/diagrams/esm/hooks/useDarkMode.js +0 -5
  126. package/dist/@likec4/diagrams/esm/hooks/useDiagramApi.js +0 -27
  127. package/dist/@likec4/diagrams/esm/hooks/useImageLoader.js +0 -64
  128. package/dist/@likec4/diagrams/esm/hooks/useViewIdFromHash.js +0 -87
  129. package/dist/@likec4/diagrams/esm/index.js +0 -4
  130. package/dist/@likec4/diagrams/esm/konva-html.js +0 -74
  131. package/dist/@likec4/diagrams/esm/konva-portal.js +0 -34
  132. package/dist/@likec4/diagrams/esm/konva.js +0 -22
  133. package/dist/@likec4/diagrams/esm/likec4.js +0 -54
  134. package/dist/@likec4/diagrams/hooks/index.mjs +0 -4
  135. package/dist/@likec4/diagrams/hooks/useDarkMode.mjs +0 -5
  136. package/dist/@likec4/diagrams/hooks/useDiagramApi.mjs +0 -27
  137. package/dist/@likec4/diagrams/hooks/useImageLoader.mjs +0 -64
  138. package/dist/@likec4/diagrams/hooks/useViewIdFromHash.mjs +0 -87
  139. package/dist/@likec4/diagrams/index.mjs +0 -4
  140. package/dist/@likec4/diagrams/konva-html.mjs +0 -74
  141. package/dist/@likec4/diagrams/konva-portal.mjs +0 -34
  142. package/dist/@likec4/diagrams/konva.mjs +0 -33
  143. package/dist/@likec4/diagrams/likec4.mjs +0 -54
@@ -1,326 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Diagram = void 0;
7
- var _jsxRuntime = require("react/jsx-runtime");
8
- var _core = require("@likec4/core");
9
- var _esm = require("@react-hookz/web/esm");
10
- var _konva = require("@react-spring/konva");
11
- var _rambdax = require("rambdax");
12
- var _react = require("react");
13
- var _konva2 = require("../konva");
14
- var _Edges = require("./Edges");
15
- var _react2 = require("@use-gesture/react");
16
- var _Nodes = require("./Nodes");
17
- var _state = require("./state");
18
- const useGesture = (0, _react2.createUseGesture)([_react2.dragAction, _react2.pinchAction]);
19
- const useSyncedRef = value => {
20
- const ref = (0, _react.useRef)(value);
21
- Object.assign(ref.current, value);
22
- return ref;
23
- };
24
- const NoPadding = [0, 0, 0, 0];
25
- function diagramNodeId(konvaNode) {
26
- let shape = konvaNode;
27
- while (shape && shape.nodeType !== "Stage") {
28
- const name = shape.name();
29
- if (name !== "") {
30
- return name;
31
- }
32
- shape = shape.parent;
33
- }
34
- return null;
35
- }
36
- const Diagram = /* @__PURE__ */(0, _react.forwardRef)(({
37
- diagram,
38
- padding: _padding = NoPadding,
39
- pannable = true,
40
- zoomable = true,
41
- animate = true,
42
- initialPosition,
43
- onEdgeClick,
44
- onNodeClick,
45
- onNodeContextMenu,
46
- onStageClick,
47
- onStageContextMenu,
48
- width: _width,
49
- height: _height,
50
- ...props
51
- }, ref) => {
52
- const immediate = !animate;
53
- const id = diagram.id;
54
- const containerRef = (0, _react.useRef)(null);
55
- const stageRef = (0, _esm.useHookableRef)(null, value => {
56
- containerRef.current = value?.container() ?? null;
57
- if (containerRef.current) {
58
- containerRef.current.style.touchAction = "none";
59
- }
60
- return value;
61
- });
62
- const width = _width ?? diagram.width;
63
- const height = _height ?? diagram.height;
64
- const toCenterOnRect = centerTo => {
65
- const [paddingTop, paddingRight, paddingBottom, paddingLeft] = Array.isArray(_padding) ? _padding : [_padding, _padding, _padding, _padding];
66
- const container = stageRef.current?.container();
67
- const viewRect = {
68
- width: Math.min(container?.clientWidth ?? width, width) - paddingLeft - paddingRight,
69
- height: Math.min(container?.clientHeight ?? height, height) - paddingTop - paddingBottom
70
- },
71
- viewScale = Math.min(viewRect.width / centerTo.width, viewRect.height / centerTo.height),
72
- scale = (0, _rambdax.clamp)(0.1, 1, viewScale),
73
- centeringAjustment = {
74
- x: ((width - centerTo.width) * scale + viewRect.width) / 2,
75
- y: ((height - centerTo.height) * scale + viewRect.height) / 2
76
- },
77
- finalPosition = {
78
- x: Math.ceil(paddingLeft + centeringAjustment.x - centerTo.x * scale),
79
- y: Math.ceil(paddingTop + centeringAjustment.y - centerTo.y * scale)
80
- };
81
- return {
82
- ...finalPosition,
83
- scale
84
- };
85
- };
86
- const toFitDiagram = () => toCenterOnRect({
87
- x: 0,
88
- y: 0,
89
- width: diagram.width,
90
- height: diagram.height
91
- });
92
- const [stageProps, stageSpringApi] = (0, _konva.useSpring)(() => initialPosition ? {
93
- from: initialPosition,
94
- to: toFitDiagram()
95
- } : {
96
- from: toFitDiagram(),
97
- immediate
98
- });
99
- const centerOnRect = centerTo => {
100
- stageSpringApi.start({
101
- to: toCenterOnRect(centerTo),
102
- immediate
103
- });
104
- return;
105
- };
106
- const centerAndFit = (delay = 70, durationMs) => {
107
- stageSpringApi.start({
108
- to: toFitDiagram(),
109
- delay,
110
- config: durationMs ? {
111
- duration: durationMs,
112
- easing: _konva.easings.easeInOutCubic
113
- } : {},
114
- immediate
115
- });
116
- return;
117
- };
118
- const resetStageZoom = _immediate => {
119
- stageSpringApi.start({
120
- to: {
121
- x: 0,
122
- y: 0,
123
- scale: 1
124
- },
125
- immediate
126
- });
127
- return;
128
- };
129
- const refs = useSyncedRef({
130
- diagram,
131
- width,
132
- height,
133
- centerOnRect,
134
- centerAndFit,
135
- resetStageZoom
136
- });
137
- (0, _react.useImperativeHandle)(ref, () => ({
138
- get stage() {
139
- return (0, _core.nonNullable)(stageRef.current, "not mounted");
140
- },
141
- get diagramView() {
142
- return refs.current.diagram;
143
- },
144
- get container() {
145
- return (0, _core.nonNullable)(stageRef.current?.container(), "not mounted");
146
- },
147
- resetStageZoom: _immediate => {
148
- refs.current.resetStageZoom(_immediate);
149
- },
150
- centerOnNode: node => refs.current.centerOnRect({
151
- x: node.position[0],
152
- y: node.position[1],
153
- width: node.size.width,
154
- height: node.size.height
155
- }),
156
- centerAndFit: () => refs.current.centerAndFit()
157
- }), [refs, id, stageRef]);
158
- (0, _esm.useUpdateEffect)(() => {
159
- refs.current.centerAndFit(80, 650);
160
- }, [id, height, width]);
161
- (0, _react.useEffect)(() => {
162
- if (!zoomable) {
163
- return;
164
- }
165
- const handler = e => e.preventDefault();
166
- document.addEventListener("gesturestart", handler);
167
- document.addEventListener("gesturechange", handler);
168
- return () => {
169
- document.removeEventListener("gesturestart", handler);
170
- document.removeEventListener("gesturechange", handler);
171
- };
172
- }, [zoomable]);
173
- useGesture({
174
- onDragEnd: () => {
175
- _state.DiagramGesture.isDragging = false;
176
- },
177
- onDrag: state => {
178
- const {
179
- pinching,
180
- down,
181
- cancel,
182
- intentional,
183
- offset: [x, y]
184
- } = state;
185
- if (pinching) {
186
- return cancel();
187
- }
188
- if (intentional) {
189
- _state.DiagramGesture.isDragging = true;
190
- stageSpringApi.start({
191
- to: {
192
- x,
193
- y
194
- },
195
- immediate: immediate || down
196
- });
197
- }
198
- },
199
- onPinch: ({
200
- memo,
201
- first,
202
- last,
203
- origin: [ox, oy],
204
- movement: [ms],
205
- offset: [scale]
206
- }) => {
207
- if (first) {
208
- const stage = (0, _core.nonNullable)(stageRef.current);
209
- const {
210
- x: x2,
211
- y: y2
212
- } = stage.getAbsolutePosition();
213
- const tx = Math.round(ox - x2);
214
- const ty = Math.round(oy - y2);
215
- memo = [stage.x(), stage.y(), tx, ty];
216
- }
217
- const x = Math.round(memo[0] - (ms - 1) * memo[2]);
218
- const y = Math.round(memo[1] - (ms - 1) * memo[3]);
219
- stageSpringApi.start({
220
- to: {
221
- x,
222
- y,
223
- scale
224
- },
225
- immediate: immediate || !last || !first
226
- });
227
- return memo;
228
- }
229
- }, {
230
- target: containerRef,
231
- drag: {
232
- enabled: pannable,
233
- threshold: 4,
234
- from: () => [stageProps.x.get(), stageProps.y.get()],
235
- pointer: {
236
- buttons: -1,
237
- keys: false
238
- }
239
- },
240
- pinch: {
241
- pointer: {
242
- touch: true
243
- },
244
- enabled: zoomable,
245
- scaleBounds: {
246
- min: 0.2,
247
- max: 1.15
248
- },
249
- rubberband: 0.05,
250
- pinchOnWheel: true
251
- }
252
- });
253
- const sharedProps = {
254
- animate,
255
- theme: _core.defaultTheme,
256
- diagram
257
- };
258
- return /* @__PURE__ */(0, _jsxRuntime.jsxs)(_konva2.AnimatedStage, {
259
- ref: stageRef,
260
- width,
261
- height,
262
- offsetX: width / 2,
263
- offsetY: height / 2,
264
- x: stageProps.x,
265
- y: stageProps.y,
266
- scaleX: stageProps.scale,
267
- scaleY: stageProps.scale,
268
- ...((onStageContextMenu || onNodeContextMenu) && {
269
- onContextMenu: e => {
270
- if (_state.DiagramGesture.isDragging || !stageRef.current) {
271
- return;
272
- }
273
- if (e.target === stageRef.current || !onNodeContextMenu) {
274
- e.cancelBubble = true;
275
- onStageContextMenu?.(stageRef.current, e);
276
- return;
277
- }
278
- if (onNodeContextMenu) {
279
- const nodeId = diagramNodeId(e.target);
280
- const node = nodeId && refs.current.diagram.nodes.find(n => n.id === nodeId);
281
- if (node) {
282
- e.cancelBubble = true;
283
- onNodeContextMenu(node, e);
284
- return;
285
- }
286
- }
287
- }
288
- }),
289
- ...(onStageClick && {
290
- onPointerClick: e => {
291
- if (_state.DiagramGesture.isDragging || e.evt.button !== 0 || !stageRef.current) {
292
- return;
293
- }
294
- if (e.target === stageRef.current) {
295
- e.cancelBubble = true;
296
- onStageClick(stageRef.current, e);
297
- }
298
- }
299
- }),
300
- ...(zoomable && {
301
- onPointerDblClick: e => {
302
- if (_state.DiagramGesture.isDragging || e.evt.button !== 0 || !stageRef.current) {
303
- return;
304
- }
305
- if (e.target === stageRef.current) {
306
- e.cancelBubble = true;
307
- centerAndFit();
308
- }
309
- }
310
- }),
311
- ...props,
312
- children: [/* @__PURE__ */(0, _jsxRuntime.jsxs)(_konva2.Layer, {
313
- children: [/* @__PURE__ */(0, _jsxRuntime.jsx)(_Nodes.Nodes, {
314
- ...sharedProps,
315
- onNodeClick
316
- }), /* @__PURE__ */(0, _jsxRuntime.jsx)(_Edges.Edges, {
317
- ...sharedProps,
318
- onEdgeClick
319
- })]
320
- }), /* @__PURE__ */(0, _jsxRuntime.jsx)(_konva2.Layer, {
321
- name: "top"
322
- })]
323
- });
324
- });
325
- exports.Diagram = Diagram;
326
- Diagram.displayName = "Diagram";
@@ -1,121 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Edges = Edges;
7
- var _jsxRuntime = require("react/jsx-runtime");
8
- var _react = require("react");
9
- var _konva = require("../konva");
10
- var _Edge = require("./shapes/Edge");
11
- var _utils = require("./shapes/utils");
12
- var _state = require("./state");
13
- var _konva2 = require("@react-spring/konva");
14
- var _khroma = require("khroma");
15
- const edgeColors = ({
16
- relation: {
17
- lineColor,
18
- labelColor
19
- }
20
- }, isHovered = false) => {
21
- if (Array.isArray(lineColor)) {
22
- lineColor = isHovered ? lineColor[1].onHover : lineColor[0];
23
- } else if (isHovered) {
24
- lineColor = (0, _khroma.toHex)((0, _khroma.scale)(lineColor, {
25
- l: 35,
26
- s: -5
27
- }));
28
- }
29
- if (Array.isArray(labelColor)) {
30
- labelColor = isHovered ? labelColor[1].onHover : labelColor[0];
31
- } else if (isHovered) {
32
- labelColor = (0, _khroma.toHex)((0, _khroma.scale)(labelColor, {
33
- l: 50
34
- }));
35
- }
36
- return {
37
- lineColor,
38
- labelColor
39
- };
40
- };
41
- function Edges({
42
- animate,
43
- theme,
44
- diagram,
45
- onEdgeClick
46
- }) {
47
- const hoveredEdgeId = (0, _state.useHoveredEdgeId)();
48
- const setHoveredEdge = (0, _state.useSetHoveredEdge)();
49
- const colors = (0, _react.useMemo)(() => ({
50
- base: edgeColors(theme),
51
- onHover: edgeColors(theme, true)
52
- }), [theme]);
53
- const edgeTransitions = (0, _konva2.useTransition)(diagram.edges, {
54
- initial: {
55
- opacity: 1,
56
- lineWidth: 2,
57
- ...colors.base
58
- },
59
- from: {
60
- opacity: 0.15,
61
- lineWidth: 2,
62
- ...colors.base
63
- },
64
- update: edge => {
65
- const isHovered = hoveredEdgeId === edge.id;
66
- return {
67
- opacity: 1,
68
- lineWidth: isHovered ? 3 : 2,
69
- ...(isHovered ? colors.onHover : colors.base)
70
- };
71
- },
72
- enter: {
73
- opacity: 1
74
- },
75
- leave: {
76
- opacity: 0.05,
77
- lineWidth: 2,
78
- ...colors.base
79
- },
80
- expires: true,
81
- exitBeforeEnter: true,
82
- immediate: !animate,
83
- // delay: 30,
84
- config: {
85
- duration: 160,
86
- precision: 5e-3
87
- },
88
- // unique edge key, scoped to this diagram
89
- // to avoid any issues with diagram-to-diagram transitions
90
- keys: e => e.id + diagram.id
91
- });
92
- return edgeTransitions((springs, edge, {
93
- key
94
- }) => /* @__PURE__ */(0, _jsxRuntime.jsx)(_konva.Group, {
95
- ...(onEdgeClick && {
96
- onPointerClick: e => {
97
- if (_state.DiagramGesture.isDragging || e.evt.button !== 0) {
98
- return;
99
- }
100
- e.cancelBubble = true;
101
- onEdgeClick(edge, e);
102
- },
103
- onPointerEnter: e => {
104
- if (animate) {
105
- setHoveredEdge(edge);
106
- (0, _utils.mousePointer)(e);
107
- }
108
- },
109
- onPointerLeave: e => {
110
- setHoveredEdge(null);
111
- (0, _utils.mouseDefault)(e);
112
- }
113
- }),
114
- children: /* @__PURE__ */(0, _jsxRuntime.jsx)(_Edge.EdgeShape, {
115
- edge,
116
- isHovered: hoveredEdgeId === edge.id,
117
- theme,
118
- springs
119
- })
120
- }, key));
121
- }
@@ -1,204 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Nodes = Nodes;
7
- var _jsxRuntime = require("react/jsx-runtime");
8
- var _core = require("@likec4/core");
9
- var _konva = require("@react-spring/konva");
10
- var _react = require("react");
11
- var _konva2 = require("../konva");
12
- var _konvaPortal = require("../konva-portal");
13
- var _shapes = require("./shapes");
14
- var _Browser = require("./shapes/Browser");
15
- var _Compound = require("./shapes/Compound");
16
- var _utils = require("./shapes/utils");
17
- var _springs = require("./springs");
18
- var _state = require("./state");
19
- function nodeShape({
20
- shape
21
- }) {
22
- switch (shape) {
23
- case "cylinder":
24
- case "storage":
25
- {
26
- return _shapes.CylinderShape;
27
- }
28
- case "queue":
29
- {
30
- return _shapes.QueueShape;
31
- }
32
- case "browser":
33
- {
34
- return _Browser.BrowserShape;
35
- }
36
- case "person":
37
- {
38
- return _shapes.PersonShape;
39
- }
40
- case "rectangle":
41
- {
42
- return _shapes.RectangleShape;
43
- }
44
- case "mobile":
45
- {
46
- return _shapes.MobileShape;
47
- }
48
- default:
49
- {
50
- return (0, _core.nonexhaustive)(shape);
51
- }
52
- }
53
- }
54
- const isCompound = node => {
55
- return node.children.length > 0;
56
- };
57
- const keyOf = node => {
58
- const key = (node.parent ? node.parent + "-" : "") + node.id;
59
- if (isCompound(node)) {
60
- return "compound-" + key;
61
- }
62
- return key;
63
- };
64
- function Nodes({
65
- animate,
66
- theme,
67
- diagram,
68
- onNodeClick
69
- }) {
70
- const _prev = (0, _react.useRef)( /* @__PURE__ */new Map());
71
- const _last = (0, _react.useRef)(diagram);
72
- if (_last.current.id !== diagram.id) {
73
- _prev.current = new Map(_last.current.nodes.map(n => [n.id, n]));
74
- }
75
- _last.current = diagram;
76
- const prevNodes = _prev.current;
77
- const hoveredNodeId = (0, _state.useHoveredNodeId)();
78
- const nodeSprings = (0, _springs.useNodeSpringsFn)(theme);
79
- const nodeTransitions = (0, _konva.useTransition)(diagram.nodes, {
80
- initial: nodeSprings,
81
- from: node => {
82
- const prevNode = prevNodes.get(node.id);
83
- if (prevNode) {
84
- return nodeSprings(prevNode);
85
- }
86
- return {
87
- ...nodeSprings(node),
88
- opacity: 0,
89
- scaleX: isCompound(node) ? 0.85 : 0.6,
90
- scaleY: isCompound(node) ? 0.85 : 0.6
91
- };
92
- },
93
- enter: node => {
94
- const isReplacing = prevNodes.has(node.id);
95
- return {
96
- ...nodeSprings(node),
97
- delay: isReplacing ? 50 : 70
98
- };
99
- },
100
- // update: nodeSprings(),
101
- update: node => {
102
- const scale = !isCompound(node) && hoveredNodeId === node.id && animate ? 1.08 : 1;
103
- return {
104
- ...nodeSprings(node),
105
- scaleX: scale,
106
- scaleY: scale
107
- };
108
- },
109
- leave: node => {
110
- const replacedWith = diagram.nodes.find(n => n.id === node.id);
111
- if (replacedWith && keyOf(node) !== keyOf(replacedWith)) {
112
- return {
113
- opacity: 0,
114
- immediate: true
115
- };
116
- }
117
- return {
118
- opacity: 0,
119
- scaleX: isCompound(node) ? 0.7 : 0.5,
120
- scaleY: isCompound(node) ? 0.7 : 0.5,
121
- config: {
122
- duration: 120
123
- }
124
- };
125
- },
126
- sort: (a, b) => {
127
- if (isCompound(a) === isCompound(b)) {
128
- return a.level - b.level;
129
- }
130
- return isCompound(a) ? -1 : 1;
131
- },
132
- expires: true,
133
- immediate: !animate,
134
- keys: keyOf
135
- });
136
- return nodeTransitions((_, node, {
137
- key,
138
- ctrl,
139
- expired
140
- }) => /* @__PURE__ */(0, _jsxRuntime.jsx)(NodeSnape, {
141
- animate,
142
- node,
143
- theme,
144
- ctrl,
145
- expired,
146
- onNodeClick,
147
- isHovered: node.id === hoveredNodeId
148
- }, key));
149
- }
150
- function NodeSnape({
151
- animate,
152
- node,
153
- ctrl,
154
- theme,
155
- isHovered,
156
- expired,
157
- onNodeClick
158
- }) {
159
- const setHoveredNode = (0, _state.useSetHoveredNode)();
160
- const Shape = isCompound(node) ? _Compound.CompoundShape : nodeShape(node);
161
- const springs = ctrl.springs;
162
- return /* @__PURE__ */(0, _jsxRuntime.jsx)(_konvaPortal.Portal, {
163
- selector: ".top",
164
- enabled: isHovered && !isCompound(node),
165
- children: /* @__PURE__ */(0, _jsxRuntime.jsx)(_konva2.AnimatedGroup, {
166
- name: node.id,
167
- visible: expired !== true,
168
- onPointerEnter: e => {
169
- if (animate) {
170
- setHoveredNode(node);
171
- onNodeClick && (0, _utils.mousePointer)(e);
172
- }
173
- },
174
- onPointerLeave: e => {
175
- setHoveredNode(null);
176
- (0, _utils.mouseDefault)(e);
177
- },
178
- ...(onNodeClick && {
179
- onPointerClick: e => {
180
- if (_state.DiagramGesture.isDragging || e.evt.button !== 0) {
181
- return;
182
- }
183
- e.cancelBubble = true;
184
- onNodeClick(node, e);
185
- }
186
- }),
187
- x: springs.x,
188
- y: springs.y,
189
- offsetX: springs.offsetX,
190
- offsetY: springs.offsetY,
191
- width: springs.width,
192
- height: springs.height,
193
- scaleX: springs.scaleX,
194
- scaleY: springs.scaleY,
195
- opacity: springs.opacity,
196
- children: /* @__PURE__ */(0, _jsxRuntime.jsx)(Shape, {
197
- node,
198
- theme,
199
- springs,
200
- isHovered
201
- })
202
- })
203
- });
204
- }
@@ -1,25 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.BrainIcon = void 0;
7
- var _jsxRuntime = require("react/jsx-runtime");
8
- const BrainIcon = () => /* @__PURE__ */(0, _jsxRuntime.jsxs)("svg", {
9
- xmlns: "http://www.w3.org/2000/svg",
10
- width: "24",
11
- height: "24",
12
- viewBox: "0 0 24 24",
13
- fill: "none",
14
- stroke: "#dedede",
15
- strokeWidth: "2",
16
- strokeLinecap: "round",
17
- strokeLinejoin: "round",
18
- className: "lucide lucide-brain",
19
- children: [/* @__PURE__ */(0, _jsxRuntime.jsx)("path", {
20
- d: "M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z"
21
- }), /* @__PURE__ */(0, _jsxRuntime.jsx)("path", {
22
- d: "M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z"
23
- })]
24
- });
25
- exports.BrainIcon = BrainIcon;