likec4 0.41.0 → 0.42.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.
Files changed (144) hide show
  1. package/README.md +108 -0
  2. package/dist/__app__/src/App.jsx +1 -1
  3. package/dist/__app__/src/components/view-page/ExportDiagram.jsx +72 -0
  4. package/dist/__app__/src/components/view-page/ViewActionsToolbar.jsx +38 -12
  5. package/dist/cli/index.js +53 -53
  6. package/package.json +6 -6
  7. package/dist/@likec4/diagrams/cjs/components/EmbeddedDiagram.js +0 -83
  8. package/dist/@likec4/diagrams/cjs/components/FullscreenDiagramBrowser.js +0 -50
  9. package/dist/@likec4/diagrams/cjs/components/index.js +0 -49
  10. package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/CloseButton.js +0 -44
  11. package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/FullscreenDiagram.js +0 -110
  12. package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/FullscreenDiagramTitle.js +0 -39
  13. package/dist/@likec4/diagrams/cjs/components/primitives/index.js +0 -38
  14. package/dist/@likec4/diagrams/cjs/components/primitives/responsive/ResponsiveDiagram.js +0 -56
  15. package/dist/@likec4/diagrams/cjs/components/types.js +0 -1
  16. package/dist/@likec4/diagrams/cjs/diagram/Diagram.js +0 -326
  17. package/dist/@likec4/diagrams/cjs/diagram/Edges.js +0 -121
  18. package/dist/@likec4/diagrams/cjs/diagram/Nodes.js +0 -204
  19. package/dist/@likec4/diagrams/cjs/diagram/icons/BrainIcon.js +0 -25
  20. package/dist/@likec4/diagrams/cjs/diagram/icons/ExternalLink.js +0 -82
  21. package/dist/@likec4/diagrams/cjs/diagram/icons/index.js +0 -27
  22. package/dist/@likec4/diagrams/cjs/diagram/index.js +0 -27
  23. package/dist/@likec4/diagrams/cjs/diagram/shapes/Browser.js +0 -67
  24. package/dist/@likec4/diagrams/cjs/diagram/shapes/Compound.js +0 -55
  25. package/dist/@likec4/diagrams/cjs/diagram/shapes/Cylinder.js +0 -71
  26. package/dist/@likec4/diagrams/cjs/diagram/shapes/Edge.js +0 -62
  27. package/dist/@likec4/diagrams/cjs/diagram/shapes/Mobile.js +0 -45
  28. package/dist/@likec4/diagrams/cjs/diagram/shapes/NodeIcon.js +0 -38
  29. package/dist/@likec4/diagrams/cjs/diagram/shapes/NodeLabel.js +0 -62
  30. package/dist/@likec4/diagrams/cjs/diagram/shapes/Person.js +0 -48
  31. package/dist/@likec4/diagrams/cjs/diagram/shapes/Queue.js +0 -72
  32. package/dist/@likec4/diagrams/cjs/diagram/shapes/Rectangle.js +0 -30
  33. package/dist/@likec4/diagrams/cjs/diagram/shapes/index.js +0 -54
  34. package/dist/@likec4/diagrams/cjs/diagram/shapes/types.js +0 -1
  35. package/dist/@likec4/diagrams/cjs/diagram/shapes/utils.js +0 -19
  36. package/dist/@likec4/diagrams/cjs/diagram/springs.js +0 -61
  37. package/dist/@likec4/diagrams/cjs/diagram/state/atoms.js +0 -63
  38. package/dist/@likec4/diagrams/cjs/diagram/state/gestures.js +0 -26
  39. package/dist/@likec4/diagrams/cjs/diagram/state/hooks.js +0 -36
  40. package/dist/@likec4/diagrams/cjs/diagram/state/index.js +0 -38
  41. package/dist/@likec4/diagrams/cjs/diagram/state/provider.js +0 -18
  42. package/dist/@likec4/diagrams/cjs/diagram/types.js +0 -1
  43. package/dist/@likec4/diagrams/cjs/hooks/index.js +0 -49
  44. package/dist/@likec4/diagrams/cjs/hooks/useDarkMode.js +0 -11
  45. package/dist/@likec4/diagrams/cjs/hooks/useDiagramApi.js +0 -27
  46. package/dist/@likec4/diagrams/cjs/hooks/useImageLoader.js +0 -68
  47. package/dist/@likec4/diagrams/cjs/hooks/useViewIdFromHash.js +0 -93
  48. package/dist/@likec4/diagrams/cjs/index.js +0 -51
  49. package/dist/@likec4/diagrams/cjs/konva-html.js +0 -93
  50. package/dist/@likec4/diagrams/cjs/konva-portal.js +0 -50
  51. package/dist/@likec4/diagrams/cjs/konva.js +0 -102
  52. package/dist/@likec4/diagrams/cjs/likec4.js +0 -91
  53. package/dist/@likec4/diagrams/components/EmbeddedDiagram.mjs +0 -77
  54. package/dist/@likec4/diagrams/components/FullscreenDiagramBrowser.mjs +0 -52
  55. package/dist/@likec4/diagrams/components/index.mjs +0 -4
  56. package/dist/@likec4/diagrams/components/primitives/fullscreen/CloseButton.mjs +0 -43
  57. package/dist/@likec4/diagrams/components/primitives/fullscreen/FullscreenDiagram.mjs +0 -116
  58. package/dist/@likec4/diagrams/components/primitives/fullscreen/FullscreenDiagramTitle.mjs +0 -32
  59. package/dist/@likec4/diagrams/components/primitives/index.mjs +0 -3
  60. package/dist/@likec4/diagrams/components/primitives/responsive/ResponsiveDiagram.mjs +0 -42
  61. package/dist/@likec4/diagrams/components/types.mjs +0 -0
  62. package/dist/@likec4/diagrams/diagram/Diagram.mjs +0 -307
  63. package/dist/@likec4/diagrams/diagram/Edges.mjs +0 -117
  64. package/dist/@likec4/diagrams/diagram/Nodes.mjs +0 -178
  65. package/dist/@likec4/diagrams/diagram/icons/BrainIcon.mjs +0 -20
  66. package/dist/@likec4/diagrams/diagram/icons/ExternalLink.mjs +0 -90
  67. package/dist/@likec4/diagrams/diagram/icons/index.mjs +0 -2
  68. package/dist/@likec4/diagrams/diagram/index.mjs +0 -2
  69. package/dist/@likec4/diagrams/diagram/shapes/Browser.mjs +0 -49
  70. package/dist/@likec4/diagrams/diagram/shapes/Compound.mjs +0 -48
  71. package/dist/@likec4/diagrams/diagram/shapes/Cylinder.mjs +0 -57
  72. package/dist/@likec4/diagrams/diagram/shapes/Edge.mjs +0 -63
  73. package/dist/@likec4/diagrams/diagram/shapes/Mobile.mjs +0 -33
  74. package/dist/@likec4/diagrams/diagram/shapes/NodeIcon.mjs +0 -28
  75. package/dist/@likec4/diagrams/diagram/shapes/NodeLabel.mjs +0 -59
  76. package/dist/@likec4/diagrams/diagram/shapes/Person.mjs +0 -42
  77. package/dist/@likec4/diagrams/diagram/shapes/Queue.mjs +0 -58
  78. package/dist/@likec4/diagrams/diagram/shapes/Rectangle.mjs +0 -20
  79. package/dist/@likec4/diagrams/diagram/shapes/index.mjs +0 -7
  80. package/dist/@likec4/diagrams/diagram/shapes/types.mjs +0 -0
  81. package/dist/@likec4/diagrams/diagram/shapes/utils.mjs +0 -12
  82. package/dist/@likec4/diagrams/diagram/springs.mjs +0 -57
  83. package/dist/@likec4/diagrams/diagram/state/atoms.mjs +0 -71
  84. package/dist/@likec4/diagrams/diagram/state/gestures.mjs +0 -19
  85. package/dist/@likec4/diagrams/diagram/state/hooks.mjs +0 -28
  86. package/dist/@likec4/diagrams/diagram/state/index.mjs +0 -3
  87. package/dist/@likec4/diagrams/diagram/state/provider.mjs +0 -7
  88. package/dist/@likec4/diagrams/diagram/types.mjs +0 -0
  89. package/dist/@likec4/diagrams/esm/components/EmbeddedDiagram.js +0 -77
  90. package/dist/@likec4/diagrams/esm/components/FullscreenDiagramBrowser.js +0 -52
  91. package/dist/@likec4/diagrams/esm/components/index.js +0 -4
  92. package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/CloseButton.js +0 -43
  93. package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/FullscreenDiagram.js +0 -116
  94. package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/FullscreenDiagramTitle.js +0 -32
  95. package/dist/@likec4/diagrams/esm/components/primitives/index.js +0 -3
  96. package/dist/@likec4/diagrams/esm/components/primitives/responsive/ResponsiveDiagram.js +0 -42
  97. package/dist/@likec4/diagrams/esm/components/types.js +0 -0
  98. package/dist/@likec4/diagrams/esm/diagram/Diagram.js +0 -307
  99. package/dist/@likec4/diagrams/esm/diagram/Edges.js +0 -117
  100. package/dist/@likec4/diagrams/esm/diagram/Nodes.js +0 -178
  101. package/dist/@likec4/diagrams/esm/diagram/icons/BrainIcon.js +0 -20
  102. package/dist/@likec4/diagrams/esm/diagram/icons/ExternalLink.js +0 -90
  103. package/dist/@likec4/diagrams/esm/diagram/icons/index.js +0 -2
  104. package/dist/@likec4/diagrams/esm/diagram/index.js +0 -2
  105. package/dist/@likec4/diagrams/esm/diagram/shapes/Browser.js +0 -49
  106. package/dist/@likec4/diagrams/esm/diagram/shapes/Compound.js +0 -48
  107. package/dist/@likec4/diagrams/esm/diagram/shapes/Cylinder.js +0 -57
  108. package/dist/@likec4/diagrams/esm/diagram/shapes/Edge.js +0 -63
  109. package/dist/@likec4/diagrams/esm/diagram/shapes/Mobile.js +0 -33
  110. package/dist/@likec4/diagrams/esm/diagram/shapes/NodeIcon.js +0 -28
  111. package/dist/@likec4/diagrams/esm/diagram/shapes/NodeLabel.js +0 -59
  112. package/dist/@likec4/diagrams/esm/diagram/shapes/Person.js +0 -42
  113. package/dist/@likec4/diagrams/esm/diagram/shapes/Queue.js +0 -58
  114. package/dist/@likec4/diagrams/esm/diagram/shapes/Rectangle.js +0 -20
  115. package/dist/@likec4/diagrams/esm/diagram/shapes/index.js +0 -7
  116. package/dist/@likec4/diagrams/esm/diagram/shapes/types.js +0 -0
  117. package/dist/@likec4/diagrams/esm/diagram/shapes/utils.js +0 -12
  118. package/dist/@likec4/diagrams/esm/diagram/springs.js +0 -57
  119. package/dist/@likec4/diagrams/esm/diagram/state/atoms.js +0 -71
  120. package/dist/@likec4/diagrams/esm/diagram/state/gestures.js +0 -19
  121. package/dist/@likec4/diagrams/esm/diagram/state/hooks.js +0 -28
  122. package/dist/@likec4/diagrams/esm/diagram/state/index.js +0 -3
  123. package/dist/@likec4/diagrams/esm/diagram/state/provider.js +0 -7
  124. package/dist/@likec4/diagrams/esm/diagram/types.js +0 -0
  125. package/dist/@likec4/diagrams/esm/hooks/index.js +0 -4
  126. package/dist/@likec4/diagrams/esm/hooks/useDarkMode.js +0 -5
  127. package/dist/@likec4/diagrams/esm/hooks/useDiagramApi.js +0 -27
  128. package/dist/@likec4/diagrams/esm/hooks/useImageLoader.js +0 -64
  129. package/dist/@likec4/diagrams/esm/hooks/useViewIdFromHash.js +0 -87
  130. package/dist/@likec4/diagrams/esm/index.js +0 -4
  131. package/dist/@likec4/diagrams/esm/konva-html.js +0 -74
  132. package/dist/@likec4/diagrams/esm/konva-portal.js +0 -34
  133. package/dist/@likec4/diagrams/esm/konva.js +0 -22
  134. package/dist/@likec4/diagrams/esm/likec4.js +0 -54
  135. package/dist/@likec4/diagrams/hooks/index.mjs +0 -4
  136. package/dist/@likec4/diagrams/hooks/useDarkMode.mjs +0 -5
  137. package/dist/@likec4/diagrams/hooks/useDiagramApi.mjs +0 -27
  138. package/dist/@likec4/diagrams/hooks/useImageLoader.mjs +0 -64
  139. package/dist/@likec4/diagrams/hooks/useViewIdFromHash.mjs +0 -87
  140. package/dist/@likec4/diagrams/index.mjs +0 -4
  141. package/dist/@likec4/diagrams/konva-html.mjs +0 -74
  142. package/dist/@likec4/diagrams/konva-portal.mjs +0 -34
  143. package/dist/@likec4/diagrams/konva.mjs +0 -33
  144. package/dist/@likec4/diagrams/likec4.mjs +0 -54
@@ -1,93 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.KonvaHtml = KonvaHtml;
7
- var _jsxRuntime = require("react/jsx-runtime");
8
- var _react = require("react");
9
- var _client = _interopRequireDefault(require("react-dom/client"));
10
- var _konva = require("./konva");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
- function needForceStyle(el) {
13
- const pos = window.getComputedStyle(el).position;
14
- const ok = pos === "absolute" || pos === "relative";
15
- return !ok;
16
- }
17
- function KonvaHtml({
18
- children,
19
- groupProps,
20
- divProps,
21
- transform,
22
- transformFunc
23
- }) {
24
- const groupRef = (0, _react.useRef)(null);
25
- const [div] = (0, _react.useState)(() => document.createElement("div"));
26
- const root = (0, _react.useMemo)(() => _client.default.createRoot(div), [div]);
27
- const shouldTransform = transform ?? true;
28
- const handleTransform = (0, _react.useCallback)(() => {
29
- if (shouldTransform && groupRef.current) {
30
- const tr = groupRef.current.getAbsoluteTransform();
31
- let attrs = tr.decompose();
32
- if (transformFunc) {
33
- attrs = transformFunc(attrs);
34
- }
35
- div.style.position = "absolute";
36
- div.style.zIndex = "10";
37
- div.style.top = "0px";
38
- div.style.left = "0px";
39
- div.style.transform = `translate(${attrs.x}px, ${attrs.y}px) rotate(${attrs.rotation}deg) scaleX(${attrs.scaleX}) scaleY(${attrs.scaleY})`;
40
- div.style.transformOrigin = "top left";
41
- } else {
42
- div.style.position = "";
43
- div.style.zIndex = "";
44
- div.style.top = "";
45
- div.style.left = "";
46
- div.style.transform = ``;
47
- div.style.transformOrigin = "";
48
- }
49
- const {
50
- style,
51
- ...restProps
52
- } = divProps || {};
53
- Object.assign(div.style, style);
54
- Object.assign(div, restProps);
55
- }, []);
56
- (0, _react.useLayoutEffect)(() => {
57
- const group = groupRef.current;
58
- if (!group) {
59
- return;
60
- }
61
- const parent = group.getStage()?.container();
62
- if (!parent) {
63
- return;
64
- }
65
- parent.appendChild(div);
66
- if (shouldTransform && needForceStyle(parent)) {
67
- parent.style.position = "relative";
68
- }
69
- group.on("absoluteTransformChange", handleTransform);
70
- handleTransform();
71
- return () => {
72
- group.off("absoluteTransformChange", handleTransform);
73
- div.parentNode?.removeChild(div);
74
- };
75
- }, [shouldTransform]);
76
- (0, _react.useLayoutEffect)(() => {
77
- handleTransform();
78
- }, [divProps, transformFunc]);
79
- (0, _react.useLayoutEffect)(() => {
80
- root.render(children);
81
- });
82
- (0, _react.useLayoutEffect)(() => {
83
- return () => {
84
- setTimeout(() => {
85
- root.unmount();
86
- });
87
- };
88
- }, []);
89
- return /* @__PURE__ */(0, _jsxRuntime.jsx)(_konva.Group, {
90
- ref: groupRef,
91
- ...groupProps
92
- });
93
- }
@@ -1,50 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Portal = Portal;
7
- var _jsxRuntime = require("react/jsx-runtime");
8
- var _react = require("react");
9
- var _konva = require("./konva");
10
- function Portal({
11
- selector,
12
- enabled,
13
- children
14
- }) {
15
- const outer = (0, _react.useRef)(null);
16
- const inner = (0, _react.useRef)(null);
17
- const safeRef = (0, _react.useRef)();
18
- const shouldMove = enabled ?? true;
19
- (0, _react.useLayoutEffect)(() => {
20
- if (!outer.current || !inner.current) {
21
- return;
22
- }
23
- const stage = outer.current.getStage();
24
- if (!stage) {
25
- return;
26
- }
27
- if (shouldMove) {
28
- const newContainer = stage.findOne(selector);
29
- if (newContainer) {
30
- safeRef.current = inner.current;
31
- inner.current.moveTo(newContainer);
32
- }
33
- } else if (safeRef.current) {
34
- safeRef.current.moveTo(outer.current);
35
- safeRef.current = void 0;
36
- }
37
- }, [selector, shouldMove]);
38
- (0, _react.useEffect)(() => {
39
- return () => {
40
- safeRef.current?.destroy();
41
- };
42
- }, []);
43
- return /* @__PURE__ */(0, _jsxRuntime.jsx)(_konva.Group, {
44
- ref: outer,
45
- children: /* @__PURE__ */(0, _jsxRuntime.jsx)(_konva.Group, {
46
- ref: inner,
47
- children
48
- })
49
- });
50
- }
@@ -1,102 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.AnimatedText = exports.AnimatedStage = exports.AnimatedRect = exports.AnimatedPath = exports.AnimatedLine = exports.AnimatedGroup = exports.AnimatedEllipse = exports.AnimatedCircle = void 0;
7
- Object.defineProperty(exports, "Circle", {
8
- enumerable: true,
9
- get: function () {
10
- return _ReactKonvaCore.Circle;
11
- }
12
- });
13
- Object.defineProperty(exports, "Ellipse", {
14
- enumerable: true,
15
- get: function () {
16
- return _ReactKonvaCore.Ellipse;
17
- }
18
- });
19
- Object.defineProperty(exports, "Group", {
20
- enumerable: true,
21
- get: function () {
22
- return _ReactKonvaCore.Group;
23
- }
24
- });
25
- Object.defineProperty(exports, "Image", {
26
- enumerable: true,
27
- get: function () {
28
- return _ReactKonvaCore.Image;
29
- }
30
- });
31
- Object.defineProperty(exports, "KonvaCore", {
32
- enumerable: true,
33
- get: function () {
34
- return _Core.default;
35
- }
36
- });
37
- Object.defineProperty(exports, "Layer", {
38
- enumerable: true,
39
- get: function () {
40
- return _ReactKonvaCore.Layer;
41
- }
42
- });
43
- Object.defineProperty(exports, "Line", {
44
- enumerable: true,
45
- get: function () {
46
- return _ReactKonvaCore.Line;
47
- }
48
- });
49
- Object.defineProperty(exports, "Path", {
50
- enumerable: true,
51
- get: function () {
52
- return _ReactKonvaCore.Path;
53
- }
54
- });
55
- Object.defineProperty(exports, "Rect", {
56
- enumerable: true,
57
- get: function () {
58
- return _ReactKonvaCore.Rect;
59
- }
60
- });
61
- Object.defineProperty(exports, "Stage", {
62
- enumerable: true,
63
- get: function () {
64
- return _ReactKonvaCore.Stage;
65
- }
66
- });
67
- Object.defineProperty(exports, "Text", {
68
- enumerable: true,
69
- get: function () {
70
- return _ReactKonvaCore.Text;
71
- }
72
- });
73
- var _ReactKonvaCore = require("react-konva/es/ReactKonvaCore");
74
- var _Core = _interopRequireDefault(require("konva/lib/Core"));
75
- require("konva/lib/shapes/Rect");
76
- require("konva/lib/shapes/Text");
77
- require("konva/lib/shapes/Path");
78
- require("konva/lib/shapes/Circle");
79
- require("konva/lib/shapes/Line");
80
- require("konva/lib/shapes/Image");
81
- require("konva/lib/shapes/Ellipse");
82
- var _konva = require("@react-spring/konva");
83
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
84
- _Core.default.hitOnDragEnabled = true;
85
- _Core.default.capturePointerEventsEnabled = true;
86
- _Core.default.dragButtons = [0, 2];
87
- const AnimatedStage = /* @__PURE__ */(0, _konva.animated)(_ReactKonvaCore.Stage);
88
- exports.AnimatedStage = AnimatedStage;
89
- const AnimatedRect = /* @__PURE__ */(0, _konva.animated)(_ReactKonvaCore.Rect);
90
- exports.AnimatedRect = AnimatedRect;
91
- const AnimatedGroup = /* @__PURE__ */(0, _konva.animated)(_ReactKonvaCore.Group);
92
- exports.AnimatedGroup = AnimatedGroup;
93
- const AnimatedText = /* @__PURE__ */(0, _konva.animated)(_ReactKonvaCore.Text);
94
- exports.AnimatedText = AnimatedText;
95
- const AnimatedPath = /* @__PURE__ */(0, _konva.animated)(_ReactKonvaCore.Path);
96
- exports.AnimatedPath = AnimatedPath;
97
- const AnimatedLine = /* @__PURE__ */(0, _konva.animated)(_ReactKonvaCore.Line);
98
- exports.AnimatedLine = AnimatedLine;
99
- const AnimatedCircle = /* @__PURE__ */(0, _konva.animated)(_ReactKonvaCore.Circle);
100
- exports.AnimatedCircle = AnimatedCircle;
101
- const AnimatedEllipse = /* @__PURE__ */(0, _konva.animated)(_ReactKonvaCore.Ellipse);
102
- exports.AnimatedEllipse = AnimatedEllipse;
@@ -1,91 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.LikeC4 = void 0;
7
- var _jsxRuntime = require("react/jsx-runtime");
8
- var _react = require("react");
9
- var _diagram = require("./diagram");
10
- var _components = require("./components");
11
- var _primitives = require("./components/primitives");
12
- var _useViewIdFromHash = require("./hooks/useViewIdFromHash");
13
- class LikeC4 {
14
- constructor(views) {
15
- this.views = views;
16
- }
17
- isViewId = value => {
18
- return value != null && typeof value === "string" && Object.prototype.hasOwnProperty.call(this.views, value);
19
- };
20
- /**
21
- * React hook to use location hash for ViewId.
22
- * When the element with this hook is mounted, hash is set to `...#likec4={initialViewId}`
23
- * When element with this hook is unmounted, `likec4` is removed from hash if `resetHashOnUnmount` is true (default: true)
24
- * You can also provide `onReturnToInitial` callback to handle back navigation (when user goes beyond the initialViewId)
25
- */
26
- useViewId = props => (0, _useViewIdFromHash.useViewIdFromHash)({
27
- ...props,
28
- isViewId: this.isViewId
29
- });
30
- Diagram = (0, _react.forwardRef)(({
31
- viewId,
32
- ...props
33
- }, ref) => {
34
- const diagram = this.views[viewId];
35
- if (!diagram) {
36
- throw new Error(`View "${viewId}" not found in views`);
37
- }
38
- return /* @__PURE__ */(0, _jsxRuntime.jsx)(_diagram.Diagram, {
39
- ref,
40
- diagram,
41
- ...props
42
- });
43
- });
44
- Responsive = (0, _react.forwardRef)(({
45
- viewId,
46
- ...props
47
- }, ref) => {
48
- const diagram = this.views[viewId];
49
- if (!diagram) {
50
- throw new Error(`View "${viewId}" not found in views`);
51
- }
52
- return /* @__PURE__ */(0, _jsxRuntime.jsx)(_primitives.ResponsiveDiagram, {
53
- ref,
54
- diagram,
55
- ...props
56
- });
57
- });
58
- Fullscreen = ({
59
- viewId,
60
- ...props
61
- }) => {
62
- const diagram = this.views[viewId];
63
- if (!diagram) {
64
- throw new Error(`View "${viewId}" not found in views`);
65
- }
66
- return /* @__PURE__ */(0, _jsxRuntime.jsx)(_primitives.FullscreenDiagram, {
67
- diagram,
68
- ...props
69
- });
70
- };
71
- Embedded = (0, _react.forwardRef)((props, ref) => {
72
- return /* @__PURE__ */(0, _jsxRuntime.jsx)(_components.EmbeddedDiagram, {
73
- ref,
74
- views: this.views,
75
- ...props
76
- });
77
- });
78
- Browser = props => {
79
- return /* @__PURE__ */(0, _jsxRuntime.jsx)(_components.FullscreenDiagramBrowser, {
80
- views: this.views,
81
- ...props
82
- });
83
- };
84
- static create(views) {
85
- if (Object.keys(views).length === 0) {
86
- throw new Error("LikeC4: views must not be empty");
87
- }
88
- return new LikeC4(views);
89
- }
90
- }
91
- exports.LikeC4 = LikeC4;
@@ -1,77 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { invariant } from "@likec4/core";
3
- import { forwardRef, useCallback, useState } from "react";
4
- import { ResponsiveDiagram } from "./primitives/index.mjs";
5
- import { FullscreenDiagramBrowser } from "./FullscreenDiagramBrowser.mjs";
6
- const EmbeddedPadding = [20, 20, 20, 20];
7
- const defaultRenderDisclose = ({
8
- views,
9
- viewId,
10
- initialPosition,
11
- onClose
12
- }) => /* @__PURE__ */ jsx(
13
- FullscreenDiagramBrowser,
14
- {
15
- views,
16
- initialViewId: viewId,
17
- initialPosition,
18
- onClose
19
- }
20
- );
21
- export const EmbeddedDiagram = /* @__PURE__ */ forwardRef(
22
- ({
23
- animate = false,
24
- views,
25
- viewId,
26
- padding,
27
- noBrowser = false,
28
- renderDisclose = defaultRenderDisclose,
29
- ...props
30
- }, ref) => {
31
- const diagram = views[viewId];
32
- invariant(diagram, `View "${viewId}" not found in views`);
33
- const [initialPosition, setBrowserInitialPosition] = useState(
34
- null
35
- );
36
- const isOpened = initialPosition !== null;
37
- const openBrowser = (s) => {
38
- const rect = s.container().getBoundingClientRect(), scale = s.scaleX(), embeddedX = s.x() - s.offsetX(), embeddedY = s.y() - s.offsetY(), offset = {
39
- x: window.innerWidth / 2,
40
- y: window.innerHeight / 2
41
- };
42
- setBrowserInitialPosition({
43
- x: Math.ceil(embeddedX + rect.x * scale + offset.x),
44
- y: Math.ceil(embeddedY + rect.y * scale + offset.y),
45
- scale
46
- });
47
- };
48
- const onNodeEdgeClick = (_node, e) => {
49
- const stage = e.target.getStage();
50
- if (stage) {
51
- e.cancelBubble = true;
52
- openBrowser(stage);
53
- }
54
- };
55
- const onClose = useCallback(() => setBrowserInitialPosition(null), []);
56
- const enableBrowseClicks = !noBrowser && !isOpened;
57
- return /* @__PURE__ */ jsxs("div", { ...props, children: [
58
- /* @__PURE__ */ jsx(
59
- ResponsiveDiagram,
60
- {
61
- ref,
62
- animate,
63
- zoomable: false,
64
- pannable: false,
65
- diagram,
66
- padding: padding ?? EmbeddedPadding,
67
- ...enableBrowseClicks && {
68
- onStageClick: openBrowser,
69
- onEdgeClick: onNodeEdgeClick,
70
- onNodeClick: onNodeEdgeClick
71
- }
72
- }
73
- ),
74
- isOpened && renderDisclose({ views, viewId, initialPosition, onClose })
75
- ] });
76
- }
77
- );
@@ -1,52 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { invariant } from "@likec4/core";
3
- import { useSyncedRef } from "@react-hookz/web/esm";
4
- import { useCallback } from "react";
5
- import { createPortal } from "react-dom";
6
- import { useViewIdFromHash } from "../hooks/useViewIdFromHash.mjs";
7
- import { FullscreenDiagram, FullscreenDiagramTitle } from "./primitives/index.mjs";
8
- export function FullscreenDiagramBrowser({
9
- initialViewId,
10
- views,
11
- initialPosition,
12
- onClose,
13
- closeOnEsc,
14
- closeOnOutsideClick,
15
- ...props
16
- }) {
17
- const viewsRef = useSyncedRef(views);
18
- const [viewId, setViewId] = useViewIdFromHash({
19
- initialViewId,
20
- onReturnToInitial: () => {
21
- onClose?.();
22
- }
23
- });
24
- const diagram = views[viewId];
25
- invariant(diagram, `View "${viewId}" not found in views`);
26
- const onNodeClick = useCallback(
27
- (node) => {
28
- if (node.navigateTo && node.navigateTo in viewsRef.current) {
29
- setViewId(node.navigateTo);
30
- }
31
- },
32
- [viewsRef, setViewId]
33
- );
34
- return createPortal(
35
- /* @__PURE__ */ jsx(
36
- FullscreenDiagram,
37
- {
38
- diagram,
39
- initialPosition,
40
- closeOnEsc: true,
41
- closeOnOutsideClick: true,
42
- onNodeClick,
43
- onClose,
44
- ...props,
45
- children: /* @__PURE__ */ jsx(FullscreenDiagramTitle, { children: diagram.title })
46
- }
47
- ),
48
- document.body,
49
- "FullscreenDiagramBrowser"
50
- );
51
- }
52
- FullscreenDiagramBrowser.displayName = "FullscreenDiagramBrowser";
@@ -1,4 +0,0 @@
1
- export * from "./FullscreenDiagramBrowser.mjs";
2
- export * from "./EmbeddedDiagram.mjs";
3
- export * from "./primitives/index.mjs";
4
- export * from "./types.mjs";
@@ -1,43 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { forwardRef } from "react";
3
- const CrossIcon = forwardRef((props, ref) => /* @__PURE__ */ jsx(
4
- "svg",
5
- {
6
- ref,
7
- width: "15",
8
- height: "15",
9
- viewBox: "0 0 15 15",
10
- fill: "none",
11
- xmlns: "http://www.w3.org/2000/svg",
12
- ...props,
13
- children: /* @__PURE__ */ jsx(
14
- "path",
15
- {
16
- d: "M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",
17
- fill: "currentColor",
18
- fillRule: "evenodd",
19
- clipRule: "evenodd"
20
- }
21
- )
22
- }
23
- ));
24
- export const CloseButton = ({
25
- style,
26
- ...props
27
- }) => /* @__PURE__ */ jsx(
28
- "div",
29
- {
30
- ...props,
31
- style: {
32
- position: "absolute",
33
- top: "1rem",
34
- right: "1rem",
35
- width: 24,
36
- height: 24,
37
- cursor: "pointer",
38
- color: "var(--likec4-browser-close-btn-color, rgba(200,200,200,0.8))",
39
- ...style
40
- },
41
- children: /* @__PURE__ */ jsx(CrossIcon, { width: 24, height: 24 })
42
- }
43
- );
@@ -1,116 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { invariant } from "@likec4/core";
3
- import { useKeyboardEvent, useMeasure } from "@react-hookz/web/esm";
4
- import { disableBodyScroll, enableBodyScroll } from "body-scroll-lock-upgrade";
5
- import { useEffect, useRef } from "react";
6
- import { Diagram } from "../../../diagram/Diagram.mjs";
7
- import { CloseButton } from "./CloseButton.mjs";
8
- const DefaultPadding = [30, 30, 30, 30];
9
- const StyleOverlay = {
10
- position: "fixed",
11
- top: 0,
12
- left: 0,
13
- right: 0,
14
- bottom: 0,
15
- backgroundColor: "var(--likec4-browser-overlay-bg, rgba(18,18,18,0.8))",
16
- backdropFilter: "var(--likec4-browser-backdrop, blur(4px))",
17
- zIndex: "var(--likec4-overlay-z-index, 100)",
18
- display: "flex",
19
- placeContent: "strech",
20
- placeItems: "strech",
21
- touchAction: "pan-x pan-y pinch-zoom",
22
- boxSizing: "border-box",
23
- margin: 0,
24
- padding: 0,
25
- border: "0 solid transparent"
26
- };
27
- const StyleContainer = {
28
- margin: 0,
29
- padding: 0,
30
- flex: "1 1 100%",
31
- overflow: "hidden"
32
- };
33
- export function FullscreenDiagram({
34
- diagram,
35
- initialPosition,
36
- padding,
37
- style,
38
- styleDiagram,
39
- closeOnEsc = true,
40
- closeOnOutsideClick,
41
- onNodeClick,
42
- onEdgeClick,
43
- onStageClick,
44
- onClose,
45
- children,
46
- ...props
47
- }) {
48
- if (onStageClick && closeOnOutsideClick === true) {
49
- throw new Error("onStageClick cannot be used with closeOnOutsideClick");
50
- }
51
- if (closeOnEsc || closeOnOutsideClick) {
52
- invariant(onClose, "onClose is required when closeOnEsc or closeOnOutsideClick");
53
- }
54
- const overlayRef = useRef(null);
55
- const [measures, containerRef] = useMeasure();
56
- useEffect(() => {
57
- const target = overlayRef.current;
58
- if (!target) {
59
- return;
60
- }
61
- disableBodyScroll(target);
62
- return () => {
63
- enableBodyScroll(target);
64
- };
65
- }, []);
66
- useKeyboardEvent(
67
- closeOnEsc && "Escape",
68
- () => {
69
- onClose?.();
70
- },
71
- [],
72
- { eventOptions: { passive: true } }
73
- );
74
- return /* @__PURE__ */ jsxs(
75
- "div",
76
- {
77
- ref: overlayRef,
78
- style: {
79
- ...StyleOverlay,
80
- ...style
81
- },
82
- ...props,
83
- children: [
84
- /* @__PURE__ */ jsx(
85
- "div",
86
- {
87
- ref: containerRef,
88
- style: {
89
- ...StyleContainer
90
- },
91
- children: measures && /* @__PURE__ */ jsx(
92
- Diagram,
93
- {
94
- animate: true,
95
- pannable: true,
96
- zoomable: true,
97
- diagram,
98
- width: measures.width,
99
- height: measures.height,
100
- initialPosition,
101
- padding: padding ?? DefaultPadding,
102
- style: styleDiagram,
103
- onNodeClick,
104
- onEdgeClick,
105
- onStageClick: onStageClick ?? (closeOnOutsideClick ? onClose : void 0)
106
- }
107
- )
108
- }
109
- ),
110
- children,
111
- onClose && /* @__PURE__ */ jsx(CloseButton, { onClick: () => onClose() })
112
- ]
113
- }
114
- );
115
- }
116
- FullscreenDiagram.displayName = "FullscreenDiagram";
@@ -1,32 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- const ContainerStyles = {
3
- position: "absolute",
4
- pointerEvents: "none",
5
- userSelect: "none",
6
- top: 0,
7
- left: 0,
8
- width: "100%",
9
- margin: 0,
10
- padding: "10px 20px 0 20px",
11
- boxSizing: "border-box",
12
- color: "rgb(241 245 249 / 95%)",
13
- fontFamily: 'ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif',
14
- fontSize: "16px",
15
- lineHeight: "1.1",
16
- fontWeight: "500",
17
- textShadow: "4px 4px 5px rgb(17 17 17)"
18
- };
19
- export function FullscreenDiagramTitle({ children, style, ...props }) {
20
- return /* @__PURE__ */ jsx(
21
- "div",
22
- {
23
- style: {
24
- ...ContainerStyles,
25
- ...style
26
- },
27
- ...props,
28
- children
29
- }
30
- );
31
- }
32
- FullscreenDiagramTitle.displayName = "FullscreenDiagramTitle";
@@ -1,3 +0,0 @@
1
- export * from "./responsive/ResponsiveDiagram.mjs";
2
- export * from "./fullscreen/FullscreenDiagram.mjs";
3
- export * from "./fullscreen/FullscreenDiagramTitle.mjs";