likec4 0.40.1-build.4 → 0.41.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 (187) hide show
  1. package/dist/@likec4/core/{colors.js → colors/element.js} +1 -23
  2. package/dist/@likec4/core/colors/index.js +9 -0
  3. package/dist/@likec4/core/colors/relationships.js +64 -0
  4. package/dist/@likec4/core/index.js +1 -3
  5. package/dist/@likec4/core/types/relation.js +3 -0
  6. package/dist/@likec4/core/types/view.js +1 -1
  7. package/dist/@likec4/core/utils/fqn.js +16 -4
  8. package/dist/@likec4/core/utils/guards.js +1 -0
  9. package/dist/@likec4/core/utils/index.js +0 -1
  10. package/dist/@likec4/diagrams/cjs/components/EmbeddedDiagram.js +83 -0
  11. package/dist/@likec4/diagrams/cjs/components/FullscreenDiagramBrowser.js +50 -0
  12. package/dist/@likec4/diagrams/cjs/components/index.js +49 -0
  13. package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/CloseButton.js +44 -0
  14. package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/FullscreenDiagram.js +110 -0
  15. package/dist/@likec4/diagrams/cjs/components/primitives/fullscreen/FullscreenDiagramTitle.js +39 -0
  16. package/dist/@likec4/diagrams/cjs/components/primitives/index.js +38 -0
  17. package/dist/@likec4/diagrams/cjs/components/primitives/responsive/ResponsiveDiagram.js +56 -0
  18. package/dist/@likec4/diagrams/cjs/components/types.js +1 -0
  19. package/dist/@likec4/diagrams/cjs/diagram/Diagram.js +326 -0
  20. package/dist/@likec4/diagrams/cjs/diagram/Edges.js +121 -0
  21. package/dist/@likec4/diagrams/cjs/diagram/Nodes.js +204 -0
  22. package/dist/@likec4/diagrams/cjs/diagram/icons/BrainIcon.js +25 -0
  23. package/dist/@likec4/diagrams/cjs/diagram/icons/ExternalLink.js +82 -0
  24. package/dist/@likec4/diagrams/cjs/diagram/icons/index.js +27 -0
  25. package/dist/@likec4/diagrams/cjs/diagram/index.js +27 -0
  26. package/dist/@likec4/diagrams/cjs/diagram/shapes/Browser.js +67 -0
  27. package/dist/@likec4/diagrams/cjs/diagram/shapes/Compound.js +55 -0
  28. package/dist/@likec4/diagrams/cjs/diagram/shapes/Cylinder.js +71 -0
  29. package/dist/@likec4/diagrams/cjs/diagram/shapes/Edge.js +62 -0
  30. package/dist/@likec4/diagrams/cjs/diagram/shapes/Mobile.js +45 -0
  31. package/dist/@likec4/diagrams/cjs/diagram/shapes/NodeIcon.js +38 -0
  32. package/dist/@likec4/diagrams/cjs/diagram/shapes/NodeLabel.js +62 -0
  33. package/dist/@likec4/diagrams/cjs/diagram/shapes/Person.js +48 -0
  34. package/dist/@likec4/diagrams/cjs/diagram/shapes/Queue.js +72 -0
  35. package/dist/@likec4/diagrams/cjs/diagram/shapes/Rectangle.js +30 -0
  36. package/dist/@likec4/diagrams/cjs/diagram/shapes/index.js +54 -0
  37. package/dist/@likec4/diagrams/cjs/diagram/shapes/types.js +1 -0
  38. package/dist/@likec4/diagrams/cjs/diagram/shapes/utils.js +19 -0
  39. package/dist/@likec4/diagrams/cjs/diagram/springs.js +61 -0
  40. package/dist/@likec4/diagrams/cjs/diagram/state/atoms.js +63 -0
  41. package/dist/@likec4/diagrams/cjs/diagram/state/gestures.js +26 -0
  42. package/dist/@likec4/diagrams/cjs/diagram/state/hooks.js +36 -0
  43. package/dist/@likec4/diagrams/cjs/diagram/state/index.js +38 -0
  44. package/dist/@likec4/diagrams/cjs/diagram/state/provider.js +18 -0
  45. package/dist/@likec4/diagrams/cjs/diagram/types.js +1 -0
  46. package/dist/@likec4/diagrams/cjs/hooks/index.js +49 -0
  47. package/dist/@likec4/diagrams/cjs/hooks/useDarkMode.js +11 -0
  48. package/dist/@likec4/diagrams/cjs/hooks/useDiagramApi.js +27 -0
  49. package/dist/@likec4/diagrams/cjs/hooks/useImageLoader.js +68 -0
  50. package/dist/@likec4/diagrams/cjs/hooks/useViewIdFromHash.js +93 -0
  51. package/dist/@likec4/diagrams/cjs/index.js +51 -0
  52. package/dist/@likec4/diagrams/cjs/konva-html.js +93 -0
  53. package/dist/@likec4/diagrams/cjs/konva-portal.js +50 -0
  54. package/dist/@likec4/diagrams/cjs/konva.js +102 -0
  55. package/dist/@likec4/diagrams/cjs/likec4.js +91 -0
  56. package/dist/@likec4/diagrams/components/EmbeddedDiagram.mjs +77 -0
  57. package/dist/@likec4/diagrams/components/FullscreenDiagramBrowser.mjs +52 -0
  58. package/dist/@likec4/diagrams/components/index.mjs +4 -0
  59. package/dist/@likec4/diagrams/components/primitives/fullscreen/CloseButton.mjs +43 -0
  60. package/dist/@likec4/diagrams/components/primitives/fullscreen/FullscreenDiagram.mjs +116 -0
  61. package/dist/@likec4/diagrams/components/primitives/fullscreen/FullscreenDiagramTitle.mjs +32 -0
  62. package/dist/@likec4/diagrams/components/primitives/index.mjs +3 -0
  63. package/dist/@likec4/diagrams/components/primitives/responsive/ResponsiveDiagram.mjs +42 -0
  64. package/dist/@likec4/diagrams/components/types.mjs +0 -0
  65. package/dist/@likec4/diagrams/diagram/Diagram.js +2 -2
  66. package/dist/@likec4/diagrams/diagram/Diagram.mjs +307 -0
  67. package/dist/@likec4/diagrams/diagram/Edges.js +54 -49
  68. package/dist/@likec4/diagrams/diagram/Edges.mjs +117 -0
  69. package/dist/@likec4/diagrams/diagram/Nodes.js +6 -7
  70. package/dist/@likec4/diagrams/diagram/Nodes.mjs +178 -0
  71. package/dist/@likec4/diagrams/diagram/icons/BrainIcon.mjs +20 -0
  72. package/dist/@likec4/diagrams/diagram/icons/ExternalLink.js +1 -1
  73. package/dist/@likec4/diagrams/diagram/icons/ExternalLink.mjs +90 -0
  74. package/dist/@likec4/diagrams/diagram/icons/index.mjs +2 -0
  75. package/dist/@likec4/diagrams/diagram/index.mjs +2 -0
  76. package/dist/@likec4/diagrams/diagram/shapes/Browser.js +1 -2
  77. package/dist/@likec4/diagrams/diagram/shapes/Browser.mjs +49 -0
  78. package/dist/@likec4/diagrams/diagram/shapes/Compound.mjs +48 -0
  79. package/dist/@likec4/diagrams/diagram/shapes/Cylinder.js +0 -1
  80. package/dist/@likec4/diagrams/diagram/shapes/Cylinder.mjs +57 -0
  81. package/dist/@likec4/diagrams/diagram/shapes/Edge.js +124 -35
  82. package/dist/@likec4/diagrams/diagram/shapes/Edge.mjs +63 -0
  83. package/dist/@likec4/diagrams/diagram/shapes/Mobile.js +1 -1
  84. package/dist/@likec4/diagrams/diagram/shapes/Mobile.mjs +33 -0
  85. package/dist/@likec4/diagrams/diagram/shapes/NodeIcon.js +2 -1
  86. package/dist/@likec4/diagrams/diagram/shapes/NodeIcon.mjs +28 -0
  87. package/dist/@likec4/diagrams/diagram/shapes/NodeLabel.js +1 -1
  88. package/dist/@likec4/diagrams/diagram/shapes/NodeLabel.mjs +59 -0
  89. package/dist/@likec4/diagrams/diagram/shapes/Person.mjs +42 -0
  90. package/dist/@likec4/diagrams/diagram/shapes/Queue.js +0 -1
  91. package/dist/@likec4/diagrams/diagram/shapes/Queue.mjs +58 -0
  92. package/dist/@likec4/diagrams/diagram/shapes/Rectangle.js +1 -1
  93. package/dist/@likec4/diagrams/diagram/shapes/Rectangle.mjs +20 -0
  94. package/dist/@likec4/diagrams/diagram/shapes/index.mjs +7 -0
  95. package/dist/@likec4/diagrams/diagram/shapes/types.mjs +0 -0
  96. package/dist/@likec4/diagrams/diagram/shapes/utils.mjs +12 -0
  97. package/dist/@likec4/diagrams/diagram/springs.js +3 -3
  98. package/dist/@likec4/diagrams/diagram/springs.mjs +57 -0
  99. package/dist/@likec4/diagrams/diagram/state/atoms.js +4 -4
  100. package/dist/@likec4/diagrams/diagram/state/atoms.mjs +71 -0
  101. package/dist/@likec4/diagrams/diagram/state/gestures.mjs +19 -0
  102. package/dist/@likec4/diagrams/diagram/state/hooks.js +0 -11
  103. package/dist/@likec4/diagrams/diagram/state/hooks.mjs +28 -0
  104. package/dist/@likec4/diagrams/diagram/state/index.mjs +3 -0
  105. package/dist/@likec4/diagrams/diagram/state/provider.mjs +7 -0
  106. package/dist/@likec4/diagrams/diagram/types.mjs +0 -0
  107. package/dist/@likec4/diagrams/esm/components/EmbeddedDiagram.js +77 -0
  108. package/dist/@likec4/diagrams/esm/components/FullscreenDiagramBrowser.js +52 -0
  109. package/dist/@likec4/diagrams/esm/components/index.js +4 -0
  110. package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/CloseButton.js +43 -0
  111. package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/FullscreenDiagram.js +116 -0
  112. package/dist/@likec4/diagrams/esm/components/primitives/fullscreen/FullscreenDiagramTitle.js +32 -0
  113. package/dist/@likec4/diagrams/esm/components/primitives/index.js +3 -0
  114. package/dist/@likec4/diagrams/esm/components/primitives/responsive/ResponsiveDiagram.js +42 -0
  115. package/dist/@likec4/diagrams/esm/components/types.js +0 -0
  116. package/dist/@likec4/diagrams/esm/diagram/Diagram.js +307 -0
  117. package/dist/@likec4/diagrams/esm/diagram/Edges.js +117 -0
  118. package/dist/@likec4/diagrams/esm/diagram/Nodes.js +178 -0
  119. package/dist/@likec4/diagrams/esm/diagram/icons/BrainIcon.js +20 -0
  120. package/dist/@likec4/diagrams/esm/diagram/icons/ExternalLink.js +90 -0
  121. package/dist/@likec4/diagrams/esm/diagram/icons/index.js +2 -0
  122. package/dist/@likec4/diagrams/esm/diagram/index.js +2 -0
  123. package/dist/@likec4/diagrams/esm/diagram/shapes/Browser.js +49 -0
  124. package/dist/@likec4/diagrams/esm/diagram/shapes/Compound.js +48 -0
  125. package/dist/@likec4/diagrams/esm/diagram/shapes/Cylinder.js +57 -0
  126. package/dist/@likec4/diagrams/esm/diagram/shapes/Edge.js +63 -0
  127. package/dist/@likec4/diagrams/esm/diagram/shapes/Mobile.js +33 -0
  128. package/dist/@likec4/diagrams/esm/diagram/shapes/NodeIcon.js +28 -0
  129. package/dist/@likec4/diagrams/esm/diagram/shapes/NodeLabel.js +59 -0
  130. package/dist/@likec4/diagrams/esm/diagram/shapes/Person.js +42 -0
  131. package/dist/@likec4/diagrams/esm/diagram/shapes/Queue.js +58 -0
  132. package/dist/@likec4/diagrams/esm/diagram/shapes/Rectangle.js +20 -0
  133. package/dist/@likec4/diagrams/esm/diagram/shapes/index.js +7 -0
  134. package/dist/@likec4/diagrams/esm/diagram/shapes/types.js +0 -0
  135. package/dist/@likec4/diagrams/esm/diagram/shapes/utils.js +12 -0
  136. package/dist/@likec4/diagrams/esm/diagram/springs.js +57 -0
  137. package/dist/@likec4/diagrams/esm/diagram/state/atoms.js +71 -0
  138. package/dist/@likec4/diagrams/esm/diagram/state/gestures.js +19 -0
  139. package/dist/@likec4/diagrams/esm/diagram/state/hooks.js +28 -0
  140. package/dist/@likec4/diagrams/esm/diagram/state/index.js +3 -0
  141. package/dist/@likec4/diagrams/esm/diagram/state/provider.js +7 -0
  142. package/dist/@likec4/diagrams/esm/diagram/types.js +0 -0
  143. package/dist/@likec4/diagrams/esm/hooks/index.js +4 -0
  144. package/dist/@likec4/diagrams/esm/hooks/useDarkMode.js +5 -0
  145. package/dist/@likec4/diagrams/esm/hooks/useDiagramApi.js +27 -0
  146. package/dist/@likec4/diagrams/esm/hooks/useImageLoader.js +64 -0
  147. package/dist/@likec4/diagrams/esm/hooks/useViewIdFromHash.js +87 -0
  148. package/dist/@likec4/diagrams/esm/index.js +4 -0
  149. package/dist/@likec4/diagrams/esm/konva-html.js +74 -0
  150. package/dist/@likec4/diagrams/esm/konva-portal.js +34 -0
  151. package/dist/@likec4/diagrams/esm/konva.js +22 -0
  152. package/dist/@likec4/diagrams/esm/likec4.js +54 -0
  153. package/dist/@likec4/diagrams/hooks/index.mjs +4 -0
  154. package/dist/@likec4/diagrams/hooks/useDarkMode.mjs +5 -0
  155. package/dist/@likec4/diagrams/hooks/useDiagramApi.mjs +27 -0
  156. package/dist/@likec4/diagrams/hooks/useImageLoader.mjs +64 -0
  157. package/dist/@likec4/diagrams/hooks/useViewIdFromHash.mjs +87 -0
  158. package/dist/@likec4/diagrams/index.mjs +4 -0
  159. package/dist/@likec4/diagrams/konva-html.mjs +74 -0
  160. package/dist/@likec4/diagrams/konva-portal.mjs +34 -0
  161. package/dist/@likec4/diagrams/konva.js +12 -1
  162. package/dist/@likec4/diagrams/konva.mjs +33 -0
  163. package/dist/@likec4/diagrams/likec4.mjs +54 -0
  164. package/dist/__app__/likec4.css +1 -1
  165. package/dist/__app__/src/components/view-page/ShareDialog.jsx +2 -1
  166. package/dist/__app__/src/const.js +5 -0
  167. package/dist/__app__/src/likec4-views.js +15 -0
  168. package/dist/__app__/src/pages/export.page.jsx +6 -3
  169. package/dist/__app__/src/router.js +21 -21
  170. package/dist/__app__/tsconfig.json +2 -1
  171. package/dist/cli/index.js +203 -201
  172. package/package.json +25 -20
  173. package/dist/@likec4/core/compute-view/EdgeBuilder.js +0 -30
  174. package/dist/@likec4/core/compute-view/compute-ctx.js +0 -100
  175. package/dist/@likec4/core/compute-view/compute-element-view.js +0 -98
  176. package/dist/@likec4/core/compute-view/compute-predicates.js +0 -324
  177. package/dist/@likec4/core/compute-view/compute.js +0 -36
  178. package/dist/@likec4/core/compute-view/index.js +0 -4
  179. package/dist/@likec4/core/compute-view/resolve-extended-views.js +0 -41
  180. package/dist/@likec4/core/compute-view/resolve-relative-paths.js +0 -76
  181. package/dist/@likec4/core/compute-view/utils/anyPossibleRelations.js +0 -12
  182. package/dist/@likec4/core/compute-view/utils/applyViewRuleStyles.js +0 -50
  183. package/dist/@likec4/core/compute-view/utils/sortNodes.js +0 -37
  184. package/dist/@likec4/core/model-index/ModelIndex.js +0 -127
  185. package/dist/@likec4/core/model-index/index.js +0 -1
  186. package/dist/@likec4/core/utils/compute-node-levels.js +0 -31
  187. package/dist/@likec4/diagrams/hooks/useDiagramRef.js +0 -21
@@ -1,38 +1,22 @@
1
1
  const blue = {
2
- // fill: colors.blue[500],
3
- // stroke: colors.blue[600],
4
- // hiContrast: colors.blue[50],
5
- // loContrast: colors.blue[200],
6
2
  fill: "#3b82f6",
7
3
  stroke: "#2563eb",
8
4
  hiContrast: "#eff6ff",
9
5
  loContrast: "#bfdbfe"
10
6
  };
11
7
  const sky = {
12
- // fill: colors.sky[600],
13
- // stroke: colors.sky[700],
14
- // hiContrast: colors.sky[50],
15
- // loContrast: colors.sky[100],
16
8
  fill: "#0284c7",
17
9
  stroke: "#0369a1",
18
10
  hiContrast: "#f0f9ff",
19
11
  loContrast: "#e0f2fe"
20
12
  };
21
13
  const slate = {
22
- // fill: colors.slate[500],
23
- // stroke: colors.slate[600],
24
- // hiContrast: colors.slate[50],
25
- // loContrast: colors.slate[200],
26
14
  fill: "#64748b",
27
15
  stroke: "#475569",
28
16
  hiContrast: "#f8fafc",
29
17
  loContrast: "#e2e8f0"
30
18
  };
31
- export const RelationColors = {
32
- lineColor: "#b1b1b1",
33
- labelColor: "#b1b1b1"
34
- };
35
- export const Colors = {
19
+ export const ElementColors = {
36
20
  primary: blue,
37
21
  blue,
38
22
  secondary: sky,
@@ -96,9 +80,3 @@ export const Colors = {
96
80
  loContrast: "#c7d2fe"
97
81
  }
98
82
  };
99
- export const defaultTheme = {
100
- font: "Helvetica",
101
- shadow: "#0a0a0a",
102
- relation: RelationColors,
103
- colors: Colors
104
- };
@@ -0,0 +1,9 @@
1
+ import { ElementColors } from "./element.js";
2
+ import { RelationshipColors } from "./relationships.js";
3
+ export const defaultTheme = {
4
+ elements: ElementColors,
5
+ relationships: RelationshipColors,
6
+ font: "Helvetica",
7
+ shadow: "#0a0a0a"
8
+ };
9
+ export { ElementColors, RelationshipColors };
@@ -0,0 +1,64 @@
1
+ const gray = {
2
+ lineColor: "#6E6E6E",
3
+ labelBgColor: "#18191b",
4
+ labelColor: "#C6C6C6"
5
+ };
6
+ const slate = {
7
+ lineColor: "#64748b",
8
+ // 500
9
+ labelBgColor: "#0f172a",
10
+ // 900
11
+ labelColor: "#cbd5e1"
12
+ // 300
13
+ };
14
+ const blue = {
15
+ lineColor: "#3b82f6",
16
+ // 500
17
+ labelBgColor: "#172554",
18
+ // 950
19
+ labelColor: "#60a5fa"
20
+ // 400
21
+ };
22
+ const sky = {
23
+ lineColor: "#0ea5e9",
24
+ // 500
25
+ labelBgColor: "#082f49",
26
+ // 950
27
+ labelColor: "#38bdf8"
28
+ // 400
29
+ };
30
+ export const RelationshipColors = {
31
+ amber: {
32
+ lineColor: "#b45309",
33
+ labelBgColor: "#78350f",
34
+ labelColor: "#f59e0b"
35
+ },
36
+ blue,
37
+ gray,
38
+ green: {
39
+ lineColor: "#15803d",
40
+ // 700
41
+ labelBgColor: "#052e16",
42
+ //950
43
+ labelColor: "#22c55e"
44
+ // 500
45
+ },
46
+ indigo: {
47
+ lineColor: "#6366f1",
48
+ // 500
49
+ labelBgColor: "#1e1b4b",
50
+ // 950
51
+ labelColor: "#818cf8"
52
+ // 400
53
+ },
54
+ muted: slate,
55
+ primary: blue,
56
+ red: {
57
+ lineColor: "#b91c1c",
58
+ labelBgColor: "#b91c1c",
59
+ labelColor: "#dc2626"
60
+ },
61
+ secondary: sky,
62
+ sky,
63
+ slate
64
+ };
@@ -1,6 +1,4 @@
1
- export * from "./colors.js";
2
- export * from "./compute-view/index.js";
1
+ export * from "./colors/index.js";
3
2
  export * from "./errors/index.js";
4
- export * from "./model-index/index.js";
5
3
  export * from "./types/index.js";
6
4
  export * from "./utils/index.js";
@@ -0,0 +1,3 @@
1
+ export const DefaultLineStyle = "dashed";
2
+ export const DefaultArrowType = "normal";
3
+ export const DefaultRelationshipColor = "gray";
@@ -1,5 +1,5 @@
1
1
  export function isViewRuleExpression(rule) {
2
- return "exprs" in rule && "isInclude" in rule;
2
+ return "include" in rule && Array.isArray(rule.include) || "exclude" in rule && Array.isArray(rule.exclude);
3
3
  }
4
4
  export function isViewRuleStyle(rule) {
5
5
  return "style" in rule && "targets" in rule;
@@ -13,10 +13,10 @@ export function isAncestor(...args) {
13
13
  const another = isString(args[1]) ? args[1] : args[1].id;
14
14
  return another.startsWith(ancestor + ".");
15
15
  }
16
- export function isSameHierarchy(...args) {
17
- const one = isString(args[0]) ? args[0] : args[0].id;
18
- const another = isString(args[1]) ? args[1] : args[1].id;
19
- return one === another || another.startsWith(one + ".") || one.startsWith(another + ".");
16
+ export function isSameHierarchy(one, another) {
17
+ const first = isString(one) ? one : one.id;
18
+ const second = isString(another) ? another : another.id;
19
+ return first === second || second.startsWith(first + ".") || first.startsWith(second + ".");
20
20
  }
21
21
  export function isDescendantOf(ancestors) {
22
22
  const predicates = ancestors.flatMap((a) => [(e) => e.id === a.id, (e) => isAncestor(a, e)]);
@@ -52,6 +52,18 @@ export function parentFqn(fqn) {
52
52
  }
53
53
  return null;
54
54
  }
55
+ export function ancestorsFqn(fqn) {
56
+ const path = fqn.split(".");
57
+ path.pop();
58
+ if (path.length === 0) {
59
+ return [];
60
+ }
61
+ return path.reduce((acc, _, idx) => {
62
+ const ancestor = path.slice(0, idx + 1).join(".");
63
+ acc.unshift(ancestor);
64
+ return acc;
65
+ }, []);
66
+ }
55
67
  export function compareFqnHierarchically(a, b) {
56
68
  const depthA = a.split(".").length;
57
69
  const depthB = b.split(".").length;
@@ -1,3 +1,4 @@
1
+ export { hasAtLeast } from "remeda";
1
2
  export function isString(value) {
2
3
  return value != null && typeof value === "string";
3
4
  }
@@ -1,4 +1,3 @@
1
1
  export * from "./fqn.js";
2
2
  export * from "./guards.js";
3
- export * from "./compute-node-levels.js";
4
3
  export * from "./relations.js";
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EmbeddedDiagram = void 0;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ var _core = require("@likec4/core");
9
+ var _react = require("react");
10
+ var _primitives = require("./primitives");
11
+ var _FullscreenDiagramBrowser = require("./FullscreenDiagramBrowser");
12
+ const EmbeddedPadding = [20, 20, 20, 20];
13
+ const defaultRenderDisclose = ({
14
+ views,
15
+ viewId,
16
+ initialPosition,
17
+ onClose
18
+ }) => /* @__PURE__ */(0, _jsxRuntime.jsx)(_FullscreenDiagramBrowser.FullscreenDiagramBrowser, {
19
+ views,
20
+ initialViewId: viewId,
21
+ initialPosition,
22
+ onClose
23
+ });
24
+ const EmbeddedDiagram = /* @__PURE__ */(0, _react.forwardRef)(({
25
+ animate = false,
26
+ views,
27
+ viewId,
28
+ padding,
29
+ noBrowser = false,
30
+ renderDisclose = defaultRenderDisclose,
31
+ ...props
32
+ }, ref) => {
33
+ const diagram = views[viewId];
34
+ (0, _core.invariant)(diagram, `View "${viewId}" not found in views`);
35
+ const [initialPosition, setBrowserInitialPosition] = (0, _react.useState)(null);
36
+ const isOpened = initialPosition !== null;
37
+ const openBrowser = s => {
38
+ const rect = s.container().getBoundingClientRect(),
39
+ scale = s.scaleX(),
40
+ embeddedX = s.x() - s.offsetX(),
41
+ embeddedY = s.y() - s.offsetY(),
42
+ offset = {
43
+ x: window.innerWidth / 2,
44
+ y: window.innerHeight / 2
45
+ };
46
+ setBrowserInitialPosition({
47
+ x: Math.ceil(embeddedX + rect.x * scale + offset.x),
48
+ y: Math.ceil(embeddedY + rect.y * scale + offset.y),
49
+ scale
50
+ });
51
+ };
52
+ const onNodeEdgeClick = (_node, e) => {
53
+ const stage = e.target.getStage();
54
+ if (stage) {
55
+ e.cancelBubble = true;
56
+ openBrowser(stage);
57
+ }
58
+ };
59
+ const onClose = (0, _react.useCallback)(() => setBrowserInitialPosition(null), []);
60
+ const enableBrowseClicks = !noBrowser && !isOpened;
61
+ return /* @__PURE__ */(0, _jsxRuntime.jsxs)("div", {
62
+ ...props,
63
+ children: [/* @__PURE__ */(0, _jsxRuntime.jsx)(_primitives.ResponsiveDiagram, {
64
+ ref,
65
+ animate,
66
+ zoomable: false,
67
+ pannable: false,
68
+ diagram,
69
+ padding: padding ?? EmbeddedPadding,
70
+ ...(enableBrowseClicks && {
71
+ onStageClick: openBrowser,
72
+ onEdgeClick: onNodeEdgeClick,
73
+ onNodeClick: onNodeEdgeClick
74
+ })
75
+ }), isOpened && renderDisclose({
76
+ views,
77
+ viewId,
78
+ initialPosition,
79
+ onClose
80
+ })]
81
+ });
82
+ });
83
+ exports.EmbeddedDiagram = EmbeddedDiagram;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FullscreenDiagramBrowser = FullscreenDiagramBrowser;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ var _core = require("@likec4/core");
9
+ var _esm = require("@react-hookz/web/esm");
10
+ var _react = require("react");
11
+ var _reactDom = require("react-dom");
12
+ var _useViewIdFromHash = require("../hooks/useViewIdFromHash");
13
+ var _primitives = require("./primitives");
14
+ function FullscreenDiagramBrowser({
15
+ initialViewId,
16
+ views,
17
+ initialPosition,
18
+ onClose,
19
+ closeOnEsc,
20
+ closeOnOutsideClick,
21
+ ...props
22
+ }) {
23
+ const viewsRef = (0, _esm.useSyncedRef)(views);
24
+ const [viewId, setViewId] = (0, _useViewIdFromHash.useViewIdFromHash)({
25
+ initialViewId,
26
+ onReturnToInitial: () => {
27
+ onClose?.();
28
+ }
29
+ });
30
+ const diagram = views[viewId];
31
+ (0, _core.invariant)(diagram, `View "${viewId}" not found in views`);
32
+ const onNodeClick = (0, _react.useCallback)(node => {
33
+ if (node.navigateTo && node.navigateTo in viewsRef.current) {
34
+ setViewId(node.navigateTo);
35
+ }
36
+ }, [viewsRef, setViewId]);
37
+ return (0, _reactDom.createPortal)( /* @__PURE__ */(0, _jsxRuntime.jsx)(_primitives.FullscreenDiagram, {
38
+ diagram,
39
+ initialPosition,
40
+ closeOnEsc: true,
41
+ closeOnOutsideClick: true,
42
+ onNodeClick,
43
+ onClose,
44
+ ...props,
45
+ children: /* @__PURE__ */(0, _jsxRuntime.jsx)(_primitives.FullscreenDiagramTitle, {
46
+ children: diagram.title
47
+ })
48
+ }), document.body, "FullscreenDiagramBrowser");
49
+ }
50
+ FullscreenDiagramBrowser.displayName = "FullscreenDiagramBrowser";
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _FullscreenDiagramBrowser = require("./FullscreenDiagramBrowser");
7
+ Object.keys(_FullscreenDiagramBrowser).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _FullscreenDiagramBrowser[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _FullscreenDiagramBrowser[key];
14
+ }
15
+ });
16
+ });
17
+ var _EmbeddedDiagram = require("./EmbeddedDiagram");
18
+ Object.keys(_EmbeddedDiagram).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _EmbeddedDiagram[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _EmbeddedDiagram[key];
25
+ }
26
+ });
27
+ });
28
+ var _primitives = require("./primitives");
29
+ Object.keys(_primitives).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _primitives[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _primitives[key];
36
+ }
37
+ });
38
+ });
39
+ var _types = require("./types");
40
+ Object.keys(_types).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _types[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _types[key];
47
+ }
48
+ });
49
+ });
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CloseButton = void 0;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ var _react = require("react");
9
+ const CrossIcon = (0, _react.forwardRef)((props, ref) => /* @__PURE__ */(0, _jsxRuntime.jsx)("svg", {
10
+ ref,
11
+ width: "15",
12
+ height: "15",
13
+ viewBox: "0 0 15 15",
14
+ fill: "none",
15
+ xmlns: "http://www.w3.org/2000/svg",
16
+ ...props,
17
+ children: /* @__PURE__ */(0, _jsxRuntime.jsx)("path", {
18
+ 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",
19
+ fill: "currentColor",
20
+ fillRule: "evenodd",
21
+ clipRule: "evenodd"
22
+ })
23
+ }));
24
+ const CloseButton = ({
25
+ style,
26
+ ...props
27
+ }) => /* @__PURE__ */(0, _jsxRuntime.jsx)("div", {
28
+ ...props,
29
+ style: {
30
+ position: "absolute",
31
+ top: "1rem",
32
+ right: "1rem",
33
+ width: 24,
34
+ height: 24,
35
+ cursor: "pointer",
36
+ color: "var(--likec4-browser-close-btn-color, rgba(200,200,200,0.8))",
37
+ ...style
38
+ },
39
+ children: /* @__PURE__ */(0, _jsxRuntime.jsx)(CrossIcon, {
40
+ width: 24,
41
+ height: 24
42
+ })
43
+ });
44
+ exports.CloseButton = CloseButton;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FullscreenDiagram = FullscreenDiagram;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ var _core = require("@likec4/core");
9
+ var _esm = require("@react-hookz/web/esm");
10
+ var _bodyScrollLockUpgrade = require("body-scroll-lock-upgrade");
11
+ var _react = require("react");
12
+ var _Diagram = require("../../../diagram/Diagram");
13
+ var _CloseButton = require("./CloseButton");
14
+ const DefaultPadding = [30, 30, 30, 30];
15
+ const StyleOverlay = {
16
+ position: "fixed",
17
+ top: 0,
18
+ left: 0,
19
+ right: 0,
20
+ bottom: 0,
21
+ backgroundColor: "var(--likec4-browser-overlay-bg, rgba(18,18,18,0.8))",
22
+ backdropFilter: "var(--likec4-browser-backdrop, blur(4px))",
23
+ zIndex: "var(--likec4-overlay-z-index, 100)",
24
+ display: "flex",
25
+ placeContent: "strech",
26
+ placeItems: "strech",
27
+ touchAction: "pan-x pan-y pinch-zoom",
28
+ boxSizing: "border-box",
29
+ margin: 0,
30
+ padding: 0,
31
+ border: "0 solid transparent"
32
+ };
33
+ const StyleContainer = {
34
+ margin: 0,
35
+ padding: 0,
36
+ flex: "1 1 100%",
37
+ overflow: "hidden"
38
+ };
39
+ function FullscreenDiagram({
40
+ diagram,
41
+ initialPosition,
42
+ padding,
43
+ style,
44
+ styleDiagram,
45
+ closeOnEsc = true,
46
+ closeOnOutsideClick,
47
+ onNodeClick,
48
+ onEdgeClick,
49
+ onStageClick,
50
+ onClose,
51
+ children,
52
+ ...props
53
+ }) {
54
+ if (onStageClick && closeOnOutsideClick === true) {
55
+ throw new Error("onStageClick cannot be used with closeOnOutsideClick");
56
+ }
57
+ if (closeOnEsc || closeOnOutsideClick) {
58
+ (0, _core.invariant)(onClose, "onClose is required when closeOnEsc or closeOnOutsideClick");
59
+ }
60
+ const overlayRef = (0, _react.useRef)(null);
61
+ const [measures, containerRef] = (0, _esm.useMeasure)();
62
+ (0, _react.useEffect)(() => {
63
+ const target = overlayRef.current;
64
+ if (!target) {
65
+ return;
66
+ }
67
+ (0, _bodyScrollLockUpgrade.disableBodyScroll)(target);
68
+ return () => {
69
+ (0, _bodyScrollLockUpgrade.enableBodyScroll)(target);
70
+ };
71
+ }, []);
72
+ (0, _esm.useKeyboardEvent)(closeOnEsc && "Escape", () => {
73
+ onClose?.();
74
+ }, [], {
75
+ eventOptions: {
76
+ passive: true
77
+ }
78
+ });
79
+ return /* @__PURE__ */(0, _jsxRuntime.jsxs)("div", {
80
+ ref: overlayRef,
81
+ style: {
82
+ ...StyleOverlay,
83
+ ...style
84
+ },
85
+ ...props,
86
+ children: [/* @__PURE__ */(0, _jsxRuntime.jsx)("div", {
87
+ ref: containerRef,
88
+ style: {
89
+ ...StyleContainer
90
+ },
91
+ children: measures && /* @__PURE__ */(0, _jsxRuntime.jsx)(_Diagram.Diagram, {
92
+ animate: true,
93
+ pannable: true,
94
+ zoomable: true,
95
+ diagram,
96
+ width: measures.width,
97
+ height: measures.height,
98
+ initialPosition,
99
+ padding: padding ?? DefaultPadding,
100
+ style: styleDiagram,
101
+ onNodeClick,
102
+ onEdgeClick,
103
+ onStageClick: onStageClick ?? (closeOnOutsideClick ? onClose : void 0)
104
+ })
105
+ }), children, onClose && /* @__PURE__ */(0, _jsxRuntime.jsx)(_CloseButton.CloseButton, {
106
+ onClick: () => onClose()
107
+ })]
108
+ });
109
+ }
110
+ FullscreenDiagram.displayName = "FullscreenDiagram";
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FullscreenDiagramTitle = FullscreenDiagramTitle;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ const ContainerStyles = {
9
+ position: "absolute",
10
+ pointerEvents: "none",
11
+ userSelect: "none",
12
+ top: 0,
13
+ left: 0,
14
+ width: "100%",
15
+ margin: 0,
16
+ padding: "10px 20px 0 20px",
17
+ boxSizing: "border-box",
18
+ color: "rgb(241 245 249 / 95%)",
19
+ fontFamily: 'ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif',
20
+ fontSize: "16px",
21
+ lineHeight: "1.1",
22
+ fontWeight: "500",
23
+ textShadow: "4px 4px 5px rgb(17 17 17)"
24
+ };
25
+ function FullscreenDiagramTitle({
26
+ children,
27
+ style,
28
+ ...props
29
+ }) {
30
+ return /* @__PURE__ */(0, _jsxRuntime.jsx)("div", {
31
+ style: {
32
+ ...ContainerStyles,
33
+ ...style
34
+ },
35
+ ...props,
36
+ children
37
+ });
38
+ }
39
+ FullscreenDiagramTitle.displayName = "FullscreenDiagramTitle";
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _ResponsiveDiagram = require("./responsive/ResponsiveDiagram");
7
+ Object.keys(_ResponsiveDiagram).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _ResponsiveDiagram[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _ResponsiveDiagram[key];
14
+ }
15
+ });
16
+ });
17
+ var _FullscreenDiagram = require("./fullscreen/FullscreenDiagram");
18
+ Object.keys(_FullscreenDiagram).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _FullscreenDiagram[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _FullscreenDiagram[key];
25
+ }
26
+ });
27
+ });
28
+ var _FullscreenDiagramTitle = require("./fullscreen/FullscreenDiagramTitle");
29
+ Object.keys(_FullscreenDiagramTitle).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _FullscreenDiagramTitle[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _FullscreenDiagramTitle[key];
36
+ }
37
+ });
38
+ });
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ResponsiveDiagram = void 0;
7
+ var _jsxRuntime = require("react/jsx-runtime");
8
+ var _esm = require("@react-hookz/web/esm");
9
+ var _react = require("react");
10
+ var _diagram = require("../../../diagram");
11
+ const ResponsiveDiagram = /* @__PURE__ */(0, _react.forwardRef)(({
12
+ diagram,
13
+ animate = false,
14
+ className,
15
+ diagramClassName,
16
+ style,
17
+ ...props
18
+ }, ref) => {
19
+ const [measures, containerRef] = (0, _esm.useMeasure)();
20
+ const w = diagram.width,
21
+ h = diagram.height;
22
+ return /* @__PURE__ */(0, _jsxRuntime.jsx)("div", {
23
+ style: {
24
+ position: "relative",
25
+ display: "flex",
26
+ aspectRatio: `${w} / ${h}`,
27
+ width: "100%",
28
+ height: "auto",
29
+ marginLeft: "auto",
30
+ marginRight: "auto",
31
+ padding: 0,
32
+ maxWidth: w,
33
+ boxSizing: "border-box",
34
+ ...style
35
+ },
36
+ className,
37
+ children: /* @__PURE__ */(0, _jsxRuntime.jsx)("div", {
38
+ ref: containerRef,
39
+ style: {
40
+ flex: "1 1 100%",
41
+ overflow: "hidden"
42
+ },
43
+ children: measures && /* @__PURE__ */(0, _jsxRuntime.jsx)(_diagram.Diagram, {
44
+ ref,
45
+ width: Math.floor(measures.width),
46
+ height: Math.floor(measures.height),
47
+ diagram,
48
+ className: diagramClassName,
49
+ animate,
50
+ ...props
51
+ })
52
+ })
53
+ });
54
+ });
55
+ exports.ResponsiveDiagram = ResponsiveDiagram;
56
+ ResponsiveDiagram.displayName = "ResponsiveDiagram";
@@ -0,0 +1 @@
1
+ "use strict";