@likec4/core 1.43.0 → 1.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/builder/index.d.mts +15 -14
  2. package/dist/builder/index.mjs +35 -18
  3. package/dist/compute-view/index.d.mts +9 -9
  4. package/dist/compute-view/index.mjs +8 -7
  5. package/dist/compute-view/relationships-view/index.d.mts +7 -7
  6. package/dist/compute-view/relationships-view/index.mjs +2 -2
  7. package/dist/index.d.mts +27 -7
  8. package/dist/index.mjs +8 -7
  9. package/dist/model/connection/deployment/index.d.mts +9 -9
  10. package/dist/model/connection/deployment/index.mjs +2 -2
  11. package/dist/model/connection/index.d.mts +10 -10
  12. package/dist/model/connection/index.mjs +3 -3
  13. package/dist/model/connection/model/index.d.mts +9 -9
  14. package/dist/model/connection/model/index.mjs +2 -2
  15. package/dist/model/index.d.mts +11 -11
  16. package/dist/model/index.mjs +4 -4
  17. package/dist/shared/{core.CDvVInBp.d.mts → core.0zAQeenX.d.mts} +3 -3
  18. package/dist/shared/core.3ZhnKAlZ.mjs +106 -0
  19. package/dist/shared/{core.CwsG7hOw.d.mts → core.5ZQ-r3Oa.d.mts} +1 -1
  20. package/dist/shared/{core.hNWo20Ym.d.mts → core.B73yxfPi.d.mts} +55 -36
  21. package/dist/shared/{core.Cq2kxOI-.d.mts → core.BGFjN3nv.d.mts} +3 -3
  22. package/dist/shared/{core.rCeaAqgW.mjs → core.BdPcbSkN.mjs} +1 -1
  23. package/dist/shared/core.BhNcrwzK.mjs +7 -0
  24. package/dist/shared/core.BkVA6gjl.mjs +5 -0
  25. package/dist/shared/core.BuQZczj6.mjs +38 -0
  26. package/dist/shared/{core.2N_9BzyD.mjs → core.CQPEY2wQ.mjs} +5 -4
  27. package/dist/shared/{core.DFi2dOTl.mjs → core.CR3PmPzr.mjs} +85 -1
  28. package/dist/shared/{core.DyToofsP.mjs → core.CRI1AjFj.mjs} +276 -145
  29. package/dist/shared/{core.CXWsKEDr.mjs → core.CWwSgOzF.mjs} +268 -631
  30. package/dist/shared/{core.727Qoh_W.mjs → core.CdNCAwq7.mjs} +2 -101
  31. package/dist/shared/{core.QJD_fcrc.mjs → core.CmPXpJ8l.mjs} +1 -14
  32. package/dist/shared/{core.DTdfiejA.d.mts → core.Cog93roC.d.mts} +2 -2
  33. package/dist/shared/core.Coi_LOUZ.mjs +7 -0
  34. package/dist/shared/{core.CcJ1FZ7h.d.mts → core.CpURdWRM.d.mts} +174 -76
  35. package/dist/shared/{core.D5fzJWbF.d.mts → core.DB0Ue5Wx.d.mts} +1 -1
  36. package/dist/shared/{core.DNbUPnve.mjs → core.DEieYfbG.mjs} +27 -25
  37. package/dist/shared/{core.BYNkXQ8A.mjs → core.DH7TXqXf.mjs} +30 -1
  38. package/dist/shared/{core.DMMOWQqc.mjs → core.DIE3F6sw.mjs} +2 -2
  39. package/dist/shared/{core.D0NziuvN.mjs → core.DViDmiAu.mjs} +5 -5
  40. package/dist/shared/{core.Be05qJwN.mjs → core.D_f4F48-.mjs} +41 -18
  41. package/dist/shared/{core.C2TiyjI6.mjs → core.DbfO90vF.mjs} +20 -31
  42. package/dist/shared/{core.BT-9gaqQ.d.mts → core.DnCLhN8C.d.mts} +83 -94
  43. package/dist/shared/{core.BouyJs63.mjs → core.DqlrMlsf.mjs} +1 -1
  44. package/dist/shared/{core.CNgZvKb8.mjs → core.DrUt0Lbi.mjs} +1 -1
  45. package/dist/shared/{core.CT1xBp4R.d.mts → core.Dvh1H0T2.d.mts} +2 -2
  46. package/dist/shared/core.M9ayqQZa.mjs +1207 -0
  47. package/dist/shared/{core.CvLjw3bH.d.mts → core.mUnpvHtA.d.mts} +96 -12
  48. package/dist/shared/core.oSV6SRfk.mjs +13 -0
  49. package/dist/shared/core.q10OP9oJ.mjs +5 -0
  50. package/dist/shared/{core.BXs4wY7R.d.mts → core.t3qfsVvn.d.mts} +4 -4
  51. package/dist/shared/core.uFk_o9X6.mjs +13 -0
  52. package/dist/shared/core.vzLtp8i3.mjs +1282 -0
  53. package/dist/styles/index.d.mts +18 -8
  54. package/dist/styles/index.mjs +63 -1
  55. package/dist/types/_aux.d.mts +2 -2
  56. package/dist/types/_aux.mjs +8 -1
  57. package/dist/types/expression-model.d.mts +3 -3
  58. package/dist/types/expression.d.mts +3 -3
  59. package/dist/types/fqnRef.d.mts +7 -8
  60. package/dist/types/index.d.mts +17 -13
  61. package/dist/types/index.mjs +51 -14
  62. package/dist/utils/graphology/index.mjs +1 -1
  63. package/dist/utils/index.d.mts +3 -2
  64. package/dist/utils/index.mjs +9 -6
  65. package/dist/utils/iterable/index.d.mts +1 -1
  66. package/dist/utils/iterable/index.mjs +2 -1
  67. package/package.json +18 -17
  68. package/dist/shared/core.01VTr9qu.mjs +0 -170
  69. package/dist/shared/core.1vX5a9AY.mjs +0 -86
  70. package/dist/shared/core.BazD6cot.mjs +0 -14
  71. package/dist/shared/core.BzTakU3I.mjs +0 -67
  72. package/dist/shared/core.OHD4KXm9.mjs +0 -5
@@ -1,103 +1,4 @@
1
- import { g as getDefaultExportFromCjs } from './core.B85MJLTf.mjs';
2
- import { e } from './core.CqAJJpK_.mjs';
3
-
4
- var naturalCompareLite = {exports: {}};
5
-
6
- var hasRequiredNaturalCompareLite;
7
-
8
- function requireNaturalCompareLite () {
9
- if (hasRequiredNaturalCompareLite) return naturalCompareLite.exports;
10
- hasRequiredNaturalCompareLite = 1;
11
- /*
12
- * @version 1.4.0
13
- * @date 2015-10-26
14
- * @stability 3 - Stable
15
- * @author Lauri Rooden (https://github.com/litejs/natural-compare-lite)
16
- * @license MIT License
17
- */
18
-
19
-
20
- var naturalCompare = function(a, b) {
21
- var i, codeA
22
- , codeB = 1
23
- , posA = 0
24
- , posB = 0
25
- , alphabet = String.alphabet;
26
-
27
- function getCode(str, pos, code) {
28
- if (code) {
29
- for (i = pos; code = getCode(str, i), code < 76 && code > 65;) ++i;
30
- return +str.slice(pos - 1, i)
31
- }
32
- code = alphabet && alphabet.indexOf(str.charAt(pos));
33
- return code > -1 ? code + 76 : ((code = str.charCodeAt(pos) || 0), code < 45 || code > 127) ? code
34
- : code < 46 ? 65 // -
35
- : code < 48 ? code - 1
36
- : code < 58 ? code + 18 // 0-9
37
- : code < 65 ? code - 11
38
- : code < 91 ? code + 11 // A-Z
39
- : code < 97 ? code - 37
40
- : code < 123 ? code + 5 // a-z
41
- : code - 63
42
- }
43
-
44
-
45
- if ((a+="") != (b+="")) for (;codeB;) {
46
- codeA = getCode(a, posA++);
47
- codeB = getCode(b, posB++);
48
-
49
- if (codeA < 76 && codeB < 76 && codeA > 66 && codeB > 66) {
50
- codeA = getCode(a, posA, posA);
51
- codeB = getCode(b, posB, posA = i);
52
- posB = i;
53
- }
54
-
55
- if (codeA != codeB) return (codeA < codeB) ? -1 : 1
56
- }
57
- return 0
58
- };
59
-
60
- try {
61
- naturalCompareLite.exports = naturalCompare;
62
- } catch (e) {
63
- String.naturalCompare = naturalCompare;
64
- }
65
- return naturalCompareLite.exports;
66
- }
67
-
68
- var naturalCompareLiteExports = requireNaturalCompareLite();
69
- const compare = /*@__PURE__*/getDefaultExportFromCjs(naturalCompareLiteExports);
70
-
71
- function compareNatural(a, b) {
72
- if (a === b) return 0;
73
- if (e(a)) {
74
- if (e(b)) {
75
- return compare(a, b);
76
- }
77
- return 1;
78
- }
79
- return e(b) ? -1 : 0;
80
- }
81
- function compareNaturalHierarchically(separator = ".", deepestFirst = false) {
82
- return (a, b) => {
83
- if (a === b) return 0;
84
- if (!a) return -1;
85
- if (!b) return 1;
86
- const aParts = a.split(separator);
87
- const bParts = b.split(separator);
88
- const minLength = Math.min(aParts.length, bParts.length);
89
- for (let i = 0; i < minLength; i++) {
90
- const aPart = aParts[i];
91
- const bPart = bParts[i];
92
- const comparison = compare(aPart, bPart);
93
- if (comparison !== 0) {
94
- return comparison;
95
- }
96
- }
97
- const diff = aParts.length - bParts.length;
98
- return deepestFirst ? -1 * diff : diff;
99
- };
100
- }
1
+ import { c as compareNatural } from './core.3ZhnKAlZ.mjs';
101
2
 
102
3
  function isString(value) {
103
4
  return value != null && typeof value === "string";
@@ -272,4 +173,4 @@ function sortNaturalByFqn(array, sort) {
272
173
  }).map(({ item }) => item);
273
174
  }
274
175
 
275
- export { ancestorsFqn as a, isDescendantOf as b, isNonEmptyArray as c, isSameHierarchy as d, isString as e, sortParentsFirst as f, compareNatural as g, hasProp as h, isAncestor as i, compareNaturalHierarchically as j, commonAncestor as k, compareByFqnHierarchically as l, compareFqnHierarchically as m, nameFromFqn as n, hierarchyDistance as o, parentFqn as p, hierarchyLevel as q, sortByFqnHierarchically as r, sortNaturalByFqn as s, isAnyOf as t };
176
+ export { ancestorsFqn as a, isDescendantOf as b, isNonEmptyArray as c, isSameHierarchy as d, isString as e, sortParentsFirst as f, commonAncestor as g, hasProp as h, isAncestor as i, compareByFqnHierarchically as j, compareFqnHierarchically as k, hierarchyDistance as l, hierarchyLevel as m, nameFromFqn as n, sortByFqnHierarchically as o, parentFqn as p, isAnyOf as q, sortNaturalByFqn as s };
@@ -18,17 +18,4 @@ function ifind(arg1, arg2) {
18
18
  return _find(arg1);
19
19
  }
20
20
 
21
- function ihead(iterable) {
22
- if (!iterable) {
23
- return _head;
24
- }
25
- return _head(iterable);
26
- }
27
- function _head(iter) {
28
- for (const value of iter) {
29
- return value;
30
- }
31
- return;
32
- }
33
-
34
- export { ihead as a, ifind as i };
21
+ export { ifind as i };
@@ -1,5 +1,5 @@
1
- import { E as ElementModel, e as DeploymentElementModel } from './core.CcJ1FZ7h.mjs';
2
- import { A as Any } from './core.hNWo20Ym.mjs';
1
+ import { E as ElementModel, e as DeploymentElementModel } from './core.CpURdWRM.mjs';
2
+ import { A as Any } from './core.B73yxfPi.mjs';
3
3
  import { F as Fqn } from './core.DX-WYEPA.mjs';
4
4
 
5
5
  interface Connection<Elem = ElementModel<Any> | DeploymentElementModel<Any>, Id = string> {
@@ -0,0 +1,7 @@
1
+ import { t as t$2 } from './core.BsSXS-_R.mjs';
2
+
3
+ function t$1(...t){return t$2(Object.entries,t)}
4
+
5
+ function e(e,...n){return typeof e==`string`||typeof e==`number`||typeof e==`symbol`?r=>t(r,e,...n):t(e,...n)}function t(e,...t){let n=e;for(let e of t){if(n==null)return;n=n[e];}return n}
6
+
7
+ export { e, t$1 as t };
@@ -1,12 +1,12 @@
1
- import { L as LikeC4Styles } from './core.CT1xBp4R.mjs';
2
- import { A as Any, R as RelationKind, m as Tags, y as Metadata, u as MetadataKey, L as LooseTag, F as Fqn, k as ElementId, j as ElementKind, t as DeploymentKind, E as ExtractOnStage, z as RelationId$1, h as StrictViewId, g as _type, B as LooseElementId, C as LooseDeploymentId, s as DeploymentFqn, G as toComputed, H as toLayouted, I as Stage, D as DeploymentId, U as Unknown, V as ViewId, T as Tag, J as toParsed, P as ProjectId$1, K as LooseViewId, a as Aux, S as SpecAux, d as UnknownParsed, b as UnknownComputed, c as UnknownLayouted } from './core.hNWo20Ym.mjs';
1
+ import { SetRequired, IsAny } from 'type-fest';
2
+ import { L as LikeC4Styles } from './core.Dvh1H0T2.mjs';
3
+ import { A as Any, R as RelationKind, r as Tags, H as Metadata, C as MetadataKey, I as LooseTag, F as Fqn, a as ElementId, E as ElementKind, y as DeploymentKind, c as AnyLayouted, J as RelationId$1, S as StrictViewId, n as _type, m as _stage, K as LooseElementId, O as LooseDeploymentId, x as DeploymentFqn, t as toComputed, b as AnyComputed, Q as Stage, D as DeploymentId, V as ViewId, T as Tag, d as AnyParsed, P as ProjectId$1, X as LooseViewId, U as Unknown, e as Aux, i as UnknownParsed, g as UnknownComputed, h as UnknownLayouted } from './core.B73yxfPi.mjs';
3
4
  import { d as RelationId, P as ProjectId, a as IconUrl, N as NodeId, G as GroupElementKind, j as EdgeId, k as StepEdgeId, V as ViewId$1 } from './core.DX-WYEPA.mjs';
4
5
  import { D as DefaultMap } from './core.CywrQs86.mjs';
5
- import { SetRequired } from 'type-fest';
6
- import { b as RichTextOrEmpty, x as ViewWithType, u as ComputedView, s as LayoutedView, P as ParsedLikeC4ModelData, C as ComputedLikeC4ModelData, L as LayoutedLikeC4ModelData, d as DeployedInstance, h as DeploymentRelationship, e as DeploymentElement, D as DeploymentNode, l as LikeC4ModelDump, n as AuxFromDump, q as Specification } from './core.BT-9gaqQ.mjs';
7
- import { c as IteratorLike, L as Link, N as NonEmptyArray } from './core.D5fzJWbF.mjs';
8
- import { Q as Color, v as RelationshipLineType, y as RelationshipArrowType, u as ElementShape, W as WhereOperator } from './core.CDvVInBp.mjs';
9
- import { g as Relationship, f as Element, E as ElementStyle, F as ComputedNodeStyle, a1 as DynamicViewDisplayVariant, k as LikeC4Project, M as ModelGlobals } from './core.CvLjw3bH.mjs';
6
+ import { b as RichTextOrEmpty, L as LayoutedView, V as ViewManualLayoutSnapshot, r as ComputedView, v as ViewWithType, P as ParsedLikeC4ModelData, C as ComputedLikeC4ModelData, c as LayoutedLikeC4ModelData, e as DeployedInstance, j as DeploymentRelationship, f as DeploymentElement, D as DeploymentNode, m as LikeC4ModelDump, o as AuxFromDump } from './core.DnCLhN8C.mjs';
7
+ import { c as IteratorLike, L as Link, N as NonEmptyArray } from './core.DB0Ue5Wx.mjs';
8
+ import { C as Color, f as RelationshipLineType, g as RelationshipArrowType, h as ElementShape, W as WhereOperator } from './core.0zAQeenX.mjs';
9
+ import { g as Relationship, f as Element, E as ElementStyle, C as ComputedNodeStyle, B as BBox, a7 as DynamicViewDisplayVariant, o as LikeC4Project, S as Specification, M as ModelGlobals } from './core.mUnpvHtA.mjs';
10
10
  import { FqnRef } from '../types/fqnRef.mjs';
11
11
 
12
12
  type RelationshipsIterator<A extends Any> = IteratorLike<RelationshipModel<A>>;
@@ -19,6 +19,8 @@ interface AnyRelationshipModel<A extends Any = Any> extends WithTags<A>, WithMet
19
19
  readonly expression: string;
20
20
  readonly title: string | null;
21
21
  readonly technology: string | null;
22
+ readonly hasSummary: boolean;
23
+ readonly summary: RichTextOrEmpty;
22
24
  readonly description: RichTextOrEmpty;
23
25
  readonly navigateTo: LikeC4ViewModel<A> | null;
24
26
  readonly kind: RelationKind<A> | null;
@@ -46,6 +48,20 @@ declare class RelationshipModel<A extends Any = Any> implements AnyRelationshipM
46
48
  get expression(): string;
47
49
  get title(): string | null;
48
50
  get technology(): string | null;
51
+ /**
52
+ * Returns true if the relationship has a summary and a description
53
+ * (if one is missing - it falls back to another)
54
+ */
55
+ get hasSummary(): boolean;
56
+ /**
57
+ * Short description of the relationship.
58
+ * Falls back to description if summary is not provided.
59
+ */
60
+ get summary(): RichTextOrEmpty;
61
+ /**
62
+ * Long description of the relationship.
63
+ * Falls back to summary if description is not provided.
64
+ */
49
65
  get description(): RichTextOrEmpty;
50
66
  get navigateTo(): LikeC4ViewModel<A> | null;
51
67
  get tags(): Tags<A>;
@@ -74,6 +90,10 @@ type ElementsIterator<M extends Any> = IteratorLike<ElementModel<M>>;
74
90
  declare class ElementModel<A extends Any = Any> implements WithTags<A>, WithMetadata<A> {
75
91
  readonly $model: LikeC4Model<A>;
76
92
  readonly $element: Element<A>;
93
+ /**
94
+ * Don't use in runtime, only for type inference
95
+ */
96
+ readonly Aux: A;
77
97
  readonly id: Fqn<A>;
78
98
  readonly _literalId: ElementId<A>;
79
99
  readonly hierarchyLevel: number;
@@ -175,10 +195,11 @@ declare class ElementModel<A extends Any = Any> implements WithTags<A>, WithMeta
175
195
 
176
196
  type NodesIterator<M extends Any, V extends $View<M>> = IteratorLike<NodeModel<M, V>>;
177
197
  declare class NodeModel<A extends Any = Any, V extends $View<A> = $View<A>> implements WithTags<A> {
178
- #private;
179
- readonly $view: LikeC4ViewModel<A, V>;
198
+ readonly Aux: A;
199
+ readonly $viewModel: LikeC4ViewModel<A, V>;
200
+ readonly $view: V;
180
201
  readonly $node: V['nodes'][number];
181
- constructor($view: LikeC4ViewModel<A, V>, $node: V['nodes'][number]);
202
+ constructor($viewModel: LikeC4ViewModel<A, V>, $node: V['nodes'][number]);
182
203
  get id(): NodeId;
183
204
  get title(): string;
184
205
  get kind(): ElementKind<A> | DeploymentKind<A> | typeof GroupElementKind | 'instance';
@@ -194,6 +215,10 @@ declare class NodeModel<A extends Any = Any, V extends $View<A> = $View<A>> impl
194
215
  get links(): ReadonlyArray<Link>;
195
216
  get navigateTo(): LikeC4ViewModel<A> | null;
196
217
  get style(): ComputedNodeStyle;
218
+ get x(): number | undefined;
219
+ get y(): number | undefined;
220
+ get width(): number | undefined;
221
+ get height(): number | undefined;
197
222
  children(): ReadonlySet<NodeModel<A, V>>;
198
223
  /**
199
224
  * Get all ancestor elements (i.e. parent, parent’s parent, etc.)
@@ -205,7 +230,7 @@ declare class NodeModel<A extends Any = Any, V extends $View<A> = $View<A>> impl
205
230
  incomers(filter?: IncomingFilter): NodesIterator<A, V>;
206
231
  outgoing(filter?: OutgoingFilter): EdgesIterator<A, V>;
207
232
  outgoers(filter?: OutgoingFilter): NodesIterator<A, V>;
208
- isDiagramNode(this: NodeModel<any, any>): this is NodeModel<A, ExtractOnStage<V, 'layouted'>>;
233
+ isLayouted(): this is NodeModel.Layouted<A>;
209
234
  hasChildren(): boolean;
210
235
  hasParent(): this is NodeModel.WithParent<A, V>;
211
236
  /**
@@ -228,43 +253,50 @@ declare class NodeModel<A extends Any = Any, V extends $View<A> = $View<A>> impl
228
253
  isTagged(tag: LooseTag<A>): boolean;
229
254
  }
230
255
  declare namespace NodeModel {
231
- interface WithParent<A extends Any = Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
232
- parent: NodeModel<A, V>;
256
+ type Layouted<A> = A extends AnyLayouted ? NodeModel<A, LayoutedView<A>> & {
257
+ x: number;
258
+ y: number;
259
+ width: number;
260
+ height: number;
261
+ } : never;
262
+ interface WithParent<A extends Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
263
+ readonly parent: NodeModel<A, V>;
233
264
  }
234
- interface WithElement<A extends Any = Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
235
- kind: ElementKind<A>;
236
- element: ElementModel<A>;
265
+ interface WithElement<A extends Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
266
+ readonly kind: ElementKind<A>;
267
+ readonly element: ElementModel<A>;
237
268
  }
238
- interface WithDeploymentElement<A extends Any = Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
239
- kind: DeploymentKind<A>;
240
- deployment: DeploymentElementModel<A>;
269
+ interface WithDeploymentElement<A extends Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
270
+ readonly kind: DeploymentKind<A>;
271
+ readonly deployment: DeploymentElementModel<A>;
241
272
  }
242
- interface WithDeployedInstance<A extends Any = Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
243
- kind: 'instance';
244
- element: ElementModel<A>;
245
- deployment: DeployedInstanceModel<A>;
273
+ interface WithDeployedInstance<A extends Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
274
+ readonly kind: 'instance';
275
+ readonly element: ElementModel<A>;
276
+ readonly deployment: DeployedInstanceModel<A>;
246
277
  }
247
- interface IsGroup<A extends Any = Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
248
- kind: typeof GroupElementKind;
249
- element: null;
250
- deployment: null;
278
+ interface IsGroup<A extends Any, V extends $View<A> = $View<A>> extends NodeModel<A, V> {
279
+ readonly kind: typeof GroupElementKind;
280
+ readonly element: null;
281
+ readonly deployment: null;
251
282
  }
252
283
  }
253
284
 
254
285
  type EdgesIterator<A extends Any, V extends $View<A>> = IteratorLike<EdgeModel<A, V>>;
255
- declare class EdgeModel<A extends Any = Any, View extends $View<A> = $View<A>> implements WithTags<A> {
256
- #private;
257
- readonly view: LikeC4ViewModel<A, View>;
258
- readonly $edge: View['edges'][number];
259
- readonly source: NodeModel<A, View>;
260
- readonly target: NodeModel<A, View>;
261
- constructor(view: LikeC4ViewModel<A, View>, $edge: View['edges'][number], source: NodeModel<A, View>, target: NodeModel<A, View>);
286
+ declare class EdgeModel<A extends Any = Any, V extends $View<A> = $View<A>> implements WithTags<A> {
287
+ readonly source: NodeModel<A, V>;
288
+ readonly target: NodeModel<A, V>;
289
+ readonly Aux: A;
290
+ readonly $viewModel: LikeC4ViewModel<A, V>;
291
+ readonly $view: V;
292
+ readonly $edge: V['edges'][number];
293
+ constructor($viewModel: LikeC4ViewModel<A, V>, $edge: V['edges'][number], source: NodeModel<A, V>, target: NodeModel<A, V>);
262
294
  get id(): EdgeId;
263
- get parent(): NodeModel<A, View> | null;
295
+ get parent(): NodeModel<A, V> | null;
264
296
  get label(): string | null;
265
297
  get description(): RichTextOrEmpty;
266
298
  get technology(): string | null;
267
- hasParent(): this is EdgeModel.WithParent<A, View>;
299
+ hasParent(): this is EdgeModel.WithParent<A, V>;
268
300
  get tags(): Tags<A>;
269
301
  get stepNumber(): number | null;
270
302
  get navigateTo(): LikeC4ViewModel<A> | null;
@@ -272,7 +304,7 @@ declare class EdgeModel<A extends Any = Any, View extends $View<A> = $View<A>> i
272
304
  get line(): RelationshipLineType;
273
305
  get head(): RelationshipArrowType;
274
306
  get tail(): RelationshipArrowType | undefined;
275
- isStep(): this is EdgeModel.StepEdge<A, View>;
307
+ isStep(): this is EdgeModel.StepEdge<A, V>;
276
308
  relationships(type: 'model'): IteratorLike<RelationshipModel<A>>;
277
309
  relationships(type: 'deployment'): IteratorLike<DeploymentRelationModel<A>>;
278
310
  relationships(type?: 'model' | 'deployment'): IteratorLike<RelationshipModel<A> | DeploymentRelationModel<A>>;
@@ -283,11 +315,11 @@ declare class EdgeModel<A extends Any = Any, View extends $View<A> = $View<A>> i
283
315
  }
284
316
  declare namespace EdgeModel {
285
317
  interface StepEdge<A extends Any, V extends $View<A>> extends EdgeModel<A, V> {
286
- id: StepEdgeId;
287
- stepNumber: number;
318
+ readonly id: StepEdgeId;
319
+ readonly stepNumber: number;
288
320
  }
289
321
  interface WithParent<A extends Any, V extends $View<A>> extends EdgeModel<A, V> {
290
- parent: NodeModel<A, V>;
322
+ readonly parent: NodeModel<A, V>;
291
323
  }
292
324
  }
293
325
 
@@ -372,8 +404,14 @@ declare class LikeC4ViewModel<A extends Any = Any, V extends $View<A> = $View<A>
372
404
  * Don't use in runtime, only for type inference
373
405
  */
374
406
  readonly Aux: A;
375
- readonly $view: V;
407
+ readonly id: StrictViewId<A>;
408
+ /**
409
+ * The model this view belongs to
410
+ */
376
411
  readonly $model: LikeC4Model<A>;
412
+ /**
413
+ * The title of the view
414
+ */
377
415
  readonly title: string | null;
378
416
  /**
379
417
  * View folder this view belongs to.
@@ -387,9 +425,14 @@ declare class LikeC4ViewModel<A extends Any = Any, V extends $View<A> = $View<A>
387
425
  * "Group 1/Group 2/View"
388
426
  */
389
427
  readonly viewPath: string;
390
- constructor(model: LikeC4Model<A>, view: V, folder: LikeC4ViewsFolder<A>);
428
+ constructor(model: LikeC4Model<A>, folder: LikeC4ViewsFolder<A>, view: V, manualLayoutSnapshot?: ViewManualLayoutSnapshot | undefined);
429
+ /**
430
+ * Returns the styles configuration for the project.
431
+ */
432
+ get $styles(): LikeC4Styles;
391
433
  get _type(): V[_type];
392
- get id(): StrictViewId<A>;
434
+ get stage(): V[_stage];
435
+ get bounds(): Readonly<BBox>;
393
436
  /**
394
437
  * Returns title if defined, otherwise returns title of the element it is based on, otherwise returns its {@link id}
395
438
  */
@@ -420,11 +463,28 @@ declare class LikeC4ViewModel<A extends Any = Any, V extends $View<A> = $View<A>
420
463
  * Available for dynamic views only
421
464
  * throws error if view is not dynamic
422
465
  */
423
- get mode(): DynamicViewDisplayVariant;
466
+ get mode(): DynamicViewDisplayVariant | null;
424
467
  /**
425
468
  * All tags from nodes and edges.
426
469
  */
427
470
  get includedTags(): Tags<A>;
471
+ /**
472
+ * The original view from the model.
473
+ * In case of layouted model, this is the latest auto-layouted view without manual changes applied
474
+ * @see {@link $layouted} should be used for rendering in the UI
475
+ */
476
+ get $view(): V;
477
+ /**
478
+ * Returns the view with manual layout applied if it exists, otherwise returns the original view
479
+ * This should be used for rendering in the UI
480
+ */
481
+ get $layouted(): V;
482
+ get hasManualLayout(): boolean;
483
+ get hasLayoutDrifts(): boolean;
484
+ /**
485
+ * If view has manual layout, returns it with manual layout applied
486
+ */
487
+ get $manual(): V | null;
428
488
  roots(): NodesIterator<A, V>;
429
489
  /**
430
490
  * Iterate over all nodes that have children.
@@ -488,32 +548,44 @@ declare class LikeC4ViewModel<A extends Any = Any, V extends $View<A> = $View<A>
488
548
  /**
489
549
  * Below are type guards.
490
550
  */
491
- isComputed(this: LikeC4ViewModel<any, any>): this is LikeC4ViewModel<toComputed<A>>;
492
- isDiagram(this: LikeC4ViewModel<any, any>): this is LikeC4ViewModel<toLayouted<A>>;
551
+ isComputed(this: LikeC4ViewModel<any, any>): this is LikeC4ViewModel.Computed<toComputed<A>>;
552
+ isLayouted(): this is LikeC4ViewModel.Layouted<A>;
553
+ /**
554
+ * @deprecated Use {@link isLayouted} instead
555
+ */
556
+ isDiagram(): this is LikeC4ViewModel.Layouted<A>;
493
557
  isElementView(this: LikeC4ViewModel<any, any>): this is LikeC4ViewModel.ElementView<A, V>;
494
558
  isScopedElementView(this: LikeC4ViewModel<any, any>): this is LikeC4ViewModel.ScopedElementView<A>;
495
559
  isDeploymentView(this: LikeC4ViewModel<any, any>): this is LikeC4ViewModel.DeploymentView<A, V>;
496
560
  isDynamicView(this: LikeC4ViewModel<any, any>): this is LikeC4ViewModel.DynamicView<A, V>;
497
561
  }
498
562
  declare namespace LikeC4ViewModel {
563
+ type Computed<A> = A extends AnyComputed ? LikeC4ViewModel<A, ComputedView<A>> : never;
564
+ type Layouted<A> = A extends AnyLayouted ? LikeC4ViewModel<A, LayoutedView<A>> : never;
499
565
  interface ElementView<A extends Any, V extends $View<A> = $View<A>> extends LikeC4ViewModel<A, ViewWithType<V, 'element'>> {
566
+ readonly mode: never;
500
567
  }
501
568
  interface ScopedElementView<A extends Any> extends LikeC4ViewModel<A, ViewWithType<$View<A>, 'element'> & {
502
569
  viewOf: Fqn<A>;
503
570
  }> {
504
- viewOf: ElementModel<A>;
571
+ readonly mode: never;
572
+ readonly viewOf: ElementModel<A>;
505
573
  }
506
574
  interface DeploymentView<A extends Any, V extends $View<A> = $View<A>> extends LikeC4ViewModel<A, ViewWithType<V, 'deployment'>> {
575
+ readonly mode: never;
576
+ }
577
+ interface DynamicView<A extends Any, V extends $View<A>> extends LikeC4ViewModel<A, ViewWithType<V, 'dynamic'>> {
578
+ readonly mode: DynamicViewDisplayVariant;
579
+ readonly viewOf: never;
507
580
  }
508
- type DynamicView<A extends Any, V extends $View<A> = $View<A>> = LikeC4ViewModel<A, ViewWithType<V, 'dynamic'>>;
509
581
  }
510
582
 
511
583
  type IncomingFilter = 'all' | 'direct' | 'to-descendants';
512
584
  type OutgoingFilter = 'all' | 'direct' | 'from-descendants';
513
- type ElementOrFqn<A extends Any> = ElementId<A> | {
585
+ type ElementOrFqn<A> = ElementId<A> | {
514
586
  id: Fqn<A>;
515
587
  };
516
- type DeploymentOrFqn<A extends Any> = DeploymentId<A> | {
588
+ type DeploymentOrFqn<A> = DeploymentId<A> | {
517
589
  id: DeploymentFqn<A>;
518
590
  };
519
591
  type NodeOrId = string | {
@@ -532,8 +604,8 @@ type $View<A extends Any> = {
532
604
  }[Stage<A>];
533
605
  type $ViewModel<A extends Any> = {
534
606
  parsed: never;
535
- computed: LikeC4ViewModel<A>;
536
- layouted: LikeC4ViewModel<A>;
607
+ computed: LikeC4ViewModel<A, $View<A>>;
608
+ layouted: LikeC4ViewModel<A, $View<A>>;
537
609
  }[Stage<A>];
538
610
  type $ModelData<A extends Any> = {
539
611
  parsed: ParsedLikeC4ModelData<A>;
@@ -636,6 +708,10 @@ type DeployedInstancesIterator<A extends Any> = IteratorLike<DeployedInstanceMod
636
708
  type DeploymentNodesIterator<A extends Any> = IteratorLike<DeploymentNodeModel<A>>;
637
709
  type DeploymentElementModel<A extends Any = Any> = DeploymentNodeModel<A> | DeployedInstanceModel<A>;
638
710
  declare abstract class AbstractDeploymentElementModel<A extends Any> implements WithTags<A>, WithMetadata<A> {
711
+ /**
712
+ * Don't use in runtime, only for type inference
713
+ */
714
+ readonly Aux: A;
639
715
  abstract readonly id: DeploymentFqn<A>;
640
716
  abstract readonly _literalId: DeploymentId<A>;
641
717
  abstract readonly parent: DeploymentNodeModel<A> | null;
@@ -805,6 +881,20 @@ declare class DeploymentRelationModel<A extends Any = Any> implements AnyRelatio
805
881
  get expression(): string;
806
882
  get title(): string | null;
807
883
  get technology(): string | null;
884
+ /**
885
+ * Returns true if the relationship has a summary and a description
886
+ * (if one is missing - it falls back to another)
887
+ */
888
+ get hasSummary(): boolean;
889
+ /**
890
+ * Short description of the relationship.
891
+ * Falls back to description if summary is not provided.
892
+ */
893
+ get summary(): RichTextOrEmpty;
894
+ /**
895
+ * Long description of the relationship.
896
+ * Falls back to summary if description is not provided.
897
+ */
808
898
  get description(): RichTextOrEmpty;
809
899
  get tags(): Tags<A>;
810
900
  get kind(): RelationKind<A> | null;
@@ -856,7 +946,7 @@ declare class RelationshipsAccum<A extends Any = Any> {
856
946
  * When you do not need types in the model
857
947
  */
858
948
  type AnyLikeC4Model = LikeC4Model<any>;
859
- declare class LikeC4Model<A extends Any = Unknown> {
949
+ declare class LikeC4Model<A extends Any = Any> {
860
950
  /**
861
951
  * Don't use in runtime, only for type inference
862
952
  */
@@ -872,9 +962,9 @@ declare class LikeC4Model<A extends Any = Unknown> {
872
962
  protected readonly _views: Map<ViewId<A>, LikeC4ViewModel<A, $View<A>>>;
873
963
  protected readonly _rootViewFolder: LikeC4ViewsFolder<A>;
874
964
  protected readonly _viewFolders: Map<string, LikeC4ViewsFolder<A>>;
875
- protected readonly _viewFolderItems: DefaultMap<string, Set<LikeC4ViewModel<A, $View<A>> | LikeC4ViewsFolder<A>>>;
876
- protected readonly _allTags: DefaultMap<Tag<A>, Set<ElementModel<A> | LikeC4ViewModel<A, $View<A>> | RelationshipModel<A>>>;
877
- static fromParsed<T extends Any>(model: ParsedLikeC4ModelData<T>): LikeC4Model.Parsed<T>;
965
+ protected readonly _viewFolderItems: DefaultMap<string, Set<LikeC4ViewsFolder<A> | LikeC4ViewModel<A, $View<A>>>>;
966
+ protected readonly _allTags: DefaultMap<Tag<A>, Set<ElementModel<A> | RelationshipModel<A> | LikeC4ViewModel<A, $View<A>>>>;
967
+ static fromParsed<T extends AnyParsed>(model: ParsedLikeC4ModelData<T>): LikeC4Model<T>;
878
968
  /**
879
969
  * Creates a new LikeC4Model instance from the provided model data.
880
970
  * Model with parsed data will not have views, as they must be computed
@@ -884,9 +974,10 @@ declare class LikeC4Model<A extends Any = Unknown> {
884
974
  * @param model - The model data to create a LikeC4Model from
885
975
  * @returns A new LikeC4Model instance with the type derived from the input model
886
976
  */
887
- static create<T extends Any>(model: ParsedLikeC4ModelData<T>): LikeC4Model.Parsed<T>;
888
- static create<T extends Any>(model: LayoutedLikeC4ModelData<T>): LikeC4Model.Layouted<T>;
889
- static create<T extends Any>(model: ComputedLikeC4ModelData<T>): LikeC4Model.Computed<T>;
977
+ static create<T extends AnyParsed>(model: ParsedLikeC4ModelData<T>): LikeC4Model<T>;
978
+ static create<T extends AnyComputed>(model: ComputedLikeC4ModelData<T>): LikeC4Model<T>;
979
+ static create<T extends AnyLayouted>(model: LayoutedLikeC4ModelData<T>): LikeC4Model<T>;
980
+ static create<T extends Any>(model: $ModelData<T>): LikeC4Model<T>;
890
981
  /**
891
982
  * Creates a new LikeC4Model instance and infers types from a model dump.\
892
983
  * Model dump expected to be computed or layouted.
@@ -921,15 +1012,15 @@ declare class LikeC4Model<A extends Any = Unknown> {
921
1012
  /**
922
1013
  * Type guard the model to the parsed stage.
923
1014
  */
924
- isParsed(this: LikeC4Model<any>): this is LikeC4Model<toParsed<A>>;
1015
+ isParsed(this: LikeC4Model<any>): this is LikeC4Model.Parsed<A>;
925
1016
  /**
926
1017
  * Type guard the model to the layouted stage.
927
1018
  */
928
- isLayouted(this: LikeC4Model<any>): this is LikeC4Model<toLayouted<A>>;
1019
+ isLayouted(this: LikeC4Model<any>): this is LikeC4Model.Layouted<A>;
929
1020
  /**
930
1021
  * Type guard the model to the computed stage.
931
1022
  */
932
- isComputed(this: LikeC4Model<any>): this is LikeC4Model<toComputed<A>>;
1023
+ isComputed(this: LikeC4Model<any>): this is LikeC4Model.Computed<A>;
933
1024
  /**
934
1025
  * Keeping here for backward compatibility
935
1026
  * @deprecated use {@link $data}
@@ -963,7 +1054,9 @@ declare class LikeC4Model<A extends Any = Unknown> {
963
1054
  * id: 'dashboard',
964
1055
  * })
965
1056
  */
966
- element(el: ElementOrFqn<A>): ElementModel<A>;
1057
+ element(el: ElementId<A> | {
1058
+ id: Fqn<A>;
1059
+ }): ElementModel<A>;
967
1060
  /**
968
1061
  * Returns the element with the given FQN.
969
1062
  *
@@ -1016,7 +1109,7 @@ declare class LikeC4Model<A extends Any = Unknown> {
1016
1109
  */
1017
1110
  view(viewId: ViewId<A> | {
1018
1111
  id: ViewId$1<ViewId<A>>;
1019
- }): LikeC4ViewModel<A, $View<A>>;
1112
+ }): $ViewModel<A>;
1020
1113
  /**
1021
1114
  * Returns a specific view by its ID.
1022
1115
  * @note Method is not type-safe as {@link view}
@@ -1024,7 +1117,11 @@ declare class LikeC4Model<A extends Any = Unknown> {
1024
1117
  * @example
1025
1118
  * model.findView('index')
1026
1119
  */
1027
- findView(viewId: LooseViewId<A>): LikeC4ViewModel<A, $View<A>> | null;
1120
+ findView(viewId: LooseViewId<A>): $ViewModel<A> | null;
1121
+ /**
1122
+ * Returns manual layout snapshot for given view ID, if any.
1123
+ */
1124
+ findManualLayout(viewId: LooseViewId<A>): ViewManualLayoutSnapshot | null;
1028
1125
  /**
1029
1126
  * Returns a view folder by its path.
1030
1127
  * Path is extracted from the view title, e.g. "Group 1/Group 2/View" -> "Group 1/Group 2"
@@ -1147,17 +1244,18 @@ declare class LikeC4Model<A extends Any = Unknown> {
1147
1244
  private addRelation;
1148
1245
  }
1149
1246
  declare namespace LikeC4Model {
1150
- const EMPTY: LikeC4Model<Aux<"computed", string, string, string, string, SpecAux<string, string, string, string, string>>>;
1151
- type Parsed<A = Unknown> = Unknown extends A ? LikeC4Model<UnknownParsed> : A extends Aux<any, infer E, infer D, infer V, infer PID, infer Spec> ? LikeC4Model<Aux<'parsed', E, D, V, PID, Spec>> : never;
1152
- type Computed<A = Unknown> = Unknown extends A ? LikeC4Model<UnknownComputed> : A extends Aux<any, infer E, infer D, infer V, infer PID, infer Spec> ? LikeC4Model<Aux<'computed', E, D, V, PID, Spec>> : never;
1153
- type Layouted<A = Unknown> = Unknown extends A ? LikeC4Model<UnknownLayouted> : A extends Aux<any, infer E, infer D, infer V, infer PID, infer Spec> ? LikeC4Model<Aux<'layouted', E, D, V, PID, Spec>> : never;
1154
- type Node<A = Unknown> = A extends Any ? NodeModel<A> : never;
1155
- type Element<A = Unknown> = A extends Any ? ElementModel<A> : never;
1156
- type Relationship<A = Unknown> = A extends Any ? RelationshipModel<A> : never;
1157
- type View<A = Unknown> = A extends Any ? $ViewModel<A> : never;
1158
- type DeploymentNode<A = Unknown> = A extends Any ? DeploymentNodeModel<A> : never;
1159
- type DeployedInstance<A = Unknown> = A extends Any ? DeployedInstanceModel<A> : never;
1160
- type AnyRelation<M = Unknown> = M extends Any ? RelationshipModel<M> | DeploymentRelationModel<M> : never;
1247
+ const EMPTY: LikeC4Model<Unknown>;
1248
+ type Parsed<A = unknown> = IsAny<A> extends true ? LikeC4Model<AnyParsed> : A extends Aux<any, infer E, infer D, infer V, infer PID, infer Spec> ? LikeC4Model<Aux<'parsed', E, D, V, PID, Spec>> : LikeC4Model<UnknownParsed>;
1249
+ type Computed<A = unknown> = IsAny<A> extends true ? LikeC4Model<AnyComputed> : A extends Aux<any, infer E, infer D, infer V, infer PID, infer Spec> ? LikeC4Model<Aux<'computed', E, D, V, PID, Spec>> : LikeC4Model<UnknownComputed>;
1250
+ type Layouted<A = unknown> = IsAny<A> extends true ? LikeC4Model<AnyLayouted> : A extends Aux<any, infer E, infer D, infer V, infer PID, infer Spec> ? LikeC4Model<Aux<'layouted', E, D, V, PID, Spec>> : LikeC4Model<UnknownLayouted>;
1251
+ type Node<A = Any> = A extends Any ? NodeModel<A> : never;
1252
+ type Element<A = Any> = A extends Any ? ElementModel<A> : never;
1253
+ type Relationship<A = Any> = A extends Any ? RelationshipModel<A> : never;
1254
+ type View<A = Any> = A extends Any ? $ViewModel<A> : never;
1255
+ type DeploymentNode<A = Any> = A extends Any ? DeploymentNodeModel<A> : never;
1256
+ type DeploymentRelation<A = Any> = A extends Any ? DeploymentRelationModel<A> : never;
1257
+ type DeployedInstance<A = Any> = A extends Any ? DeployedInstanceModel<A> : never;
1258
+ type AnyRelation<M = Any> = M extends Any ? RelationshipModel<M> | DeploymentRelationModel<M> : never;
1161
1259
  }
1162
1260
 
1163
1261
  export { type AnyRelationshipModel as A, DeploymentNodeModel as D, ElementModel as E, type IncomingFilter as I, LikeC4ViewModel as L, NestedElementOfDeployedInstanceModel as N, type OutgoingFilter as O, RelationshipModel as R, type WithMetadata as W, DeployedInstanceModel as a, DeploymentRelationModel as b, NodeModel as c, EdgeModel as d, type DeploymentElementModel as e, LikeC4Model as f, type AnyLikeC4Model as g, RelationshipsAccum as h, type DeploymentRelationEndpoint as i, LikeC4DeploymentModel as j, LikeC4ViewsFolder as k, type DeploymentOrFqn as l, type EdgeOrId as m, type ElementOrFqn as n, type NodeOrId as o, type WithTags as p };
@@ -38,7 +38,7 @@ type ExclusiveUnion<Expressions, All = AllNever<Expressions>> = Expressions exte
38
38
  [Name in keyof Expressions]: Simplify<Omit<All, keyof Expressions[Name]> & Expressions[Name]>;
39
39
  }[keyof Expressions] : never;
40
40
  /**
41
- * Copy from https://github.com/remeda/remeda/blob/main/src/internal/types/NTuple.ts
41
+ * Copy from https://github.com/remeda/remeda/blob/main/packages/remeda/src/internal/types/NTuple.ts
42
42
  * An array with *exactly* N elements in it.
43
43
  *
44
44
  * Only literal N values are supported. For very large N the type might result