@likec4/core 1.40.0 → 1.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 (61) hide show
  1. package/dist/builder/index.d.mts +75 -14
  2. package/dist/builder/index.mjs +111 -47
  3. package/dist/compute-view/index.d.mts +5 -5
  4. package/dist/compute-view/index.mjs +3 -3
  5. package/dist/compute-view/relationships-view/index.d.mts +5 -5
  6. package/dist/index.d.mts +5 -5
  7. package/dist/index.mjs +4 -4
  8. package/dist/model/connection/deployment/index.d.mts +7 -7
  9. package/dist/model/connection/deployment/index.mjs +1 -1
  10. package/dist/model/connection/index.d.mts +8 -8
  11. package/dist/model/connection/index.mjs +1 -1
  12. package/dist/model/connection/model/index.d.mts +7 -7
  13. package/dist/model/index.d.mts +10 -10
  14. package/dist/model/index.mjs +3 -3
  15. package/dist/shared/{core.DHQ32OHa.mjs → core.Ae86Y3tB.mjs} +2 -3
  16. package/dist/shared/{core.FPITT8Vx.mjs → core.Asc11Mjy.mjs} +28 -9
  17. package/dist/shared/{core.CySf-2gP.d.mts → core.BXsxn-hf.d.mts} +29 -4
  18. package/dist/shared/core.BazD6cot.mjs +14 -0
  19. package/dist/shared/{core.D_fI5Lf6.d.mts → core.BhpgpOep.d.mts} +24 -4
  20. package/dist/shared/{core.DuR3R-xJ.mjs → core.BvMRMo7Z.mjs} +68 -46
  21. package/dist/shared/{core.BbThmf6M.d.mts → core.CUG6vpyL.d.mts} +2 -2
  22. package/dist/shared/{core.yHe79zEl.mjs → core.CXy1NLUG.mjs} +2 -2
  23. package/dist/shared/{core.Bpou6c2f.d.mts → core.D-ZGWDDt.d.mts} +19 -38
  24. package/dist/shared/{core.BIAlzwKc.mjs → core.DA5vzwZ9.mjs} +30 -4
  25. package/dist/shared/{core.T-eLZTW_.mjs → core.DJp8fgok.mjs} +6 -2
  26. package/dist/shared/{core.DrvfVXkh.d.mts → core.DgesAwC8.d.mts} +11 -2
  27. package/dist/shared/{core.vWJTxpLV.d.mts → core.FUPplpae.d.mts} +1 -1
  28. package/dist/shared/{core.DrVOJuxX.d.mts → core.hfOE3RfK.d.mts} +4 -4
  29. package/dist/shared/{core.D704WZES.d.mts → core.xSQO0XYD.d.mts} +2 -2
  30. package/dist/shared/{core.kxeJe0OY.d.mts → core.zxTBF_PD.d.mts} +3 -3
  31. package/dist/types/_aux.d.mts +2 -2
  32. package/dist/types/_aux.mjs +1 -5
  33. package/dist/types/expression-model.d.mts +3 -3
  34. package/dist/types/expression.d.mts +3 -3
  35. package/dist/types/fqnRef.d.mts +2 -2
  36. package/dist/types/index.d.mts +6 -6
  37. package/dist/types/index.mjs +4 -4
  38. package/dist/utils/index.d.mts +2 -2
  39. package/dist/utils/iterable/index.d.mts +1 -1
  40. package/package.json +2 -2
  41. package/src/builder/Builder.ts +119 -43
  42. package/src/builder/_types.ts +12 -8
  43. package/src/compute-view/deployment-view/utils.ts +47 -36
  44. package/src/compute-view/relationships-view/layout.ts +7 -6
  45. package/src/compute-view/utils/buildComputedNodes.ts +23 -10
  46. package/src/compute-view/utils/buildElementNotations.ts +2 -1
  47. package/src/model/DeploymentElementModel.ts +33 -3
  48. package/src/model/ElementModel.ts +25 -2
  49. package/src/model/RelationModel.ts +1 -1
  50. package/src/model/view/EdgeModel.ts +3 -2
  51. package/src/model/view/LikeC4ViewModel.ts +1 -1
  52. package/src/model/view/NodeModel.ts +1 -1
  53. package/src/types/RichText.ts +2 -3
  54. package/src/types/_aux.ts +26 -0
  55. package/src/types/_common.ts +23 -1
  56. package/src/types/index.ts +2 -0
  57. package/src/types/model-deployment.ts +8 -18
  58. package/src/types/model-logical.ts +4 -13
  59. package/src/types/model-spec.ts +3 -0
  60. package/src/types/view-computed.ts +21 -13
  61. package/src/types/view-layouted.ts +0 -4
@@ -1,4 +1,4 @@
1
- import { isEmpty, isTruthy, unique } from 'remeda'
1
+ import { isEmpty, isShallowEqual, isTruthy, unique } from 'remeda'
2
2
  import type { SetRequired } from 'type-fest'
3
3
  import type { Any, AnyAux, Color, IteratorLike } from '../types'
4
4
  import {
@@ -12,6 +12,8 @@ import {
12
12
  DefaultElementShape,
13
13
  DefaultShapeSize,
14
14
  DefaultThemeColor,
15
+ preferDescription,
16
+ preferSummary,
15
17
  RichText,
16
18
  splitGlobalFqn,
17
19
  } from '../types'
@@ -95,8 +97,29 @@ export class ElementModel<A extends AnyAux = Any> implements WithTags<A>, WithMe
95
97
  return this.$element.title
96
98
  }
97
99
 
100
+ /**
101
+ * Returns true if the element has a summary and a description
102
+ * (if one is missing - it falls back to another)
103
+ */
104
+ get hasSummary(): boolean {
105
+ return !!this.$element.summary && !!this.$element.description &&
106
+ !isShallowEqual(this.$element.summary, this.$element.description)
107
+ }
108
+
109
+ /**
110
+ * Short description of the element.
111
+ * Falls back to description if summary is not provided.
112
+ */
113
+ get summary(): RichTextOrEmpty {
114
+ return RichText.memoize(this, 'summary', preferSummary(this.$element))
115
+ }
116
+
117
+ /**
118
+ * Long description of the element.
119
+ * Falls back to summary if description is not provided.
120
+ */
98
121
  get description(): RichTextOrEmpty {
99
- return RichText.memoize(this, this.$element.description)
122
+ return RichText.memoize(this, 'description', preferDescription(this.$element))
100
123
  }
101
124
 
102
125
  get technology(): string | null {
@@ -83,7 +83,7 @@ export class RelationshipModel<A extends AnyAux = AnyAux> implements AnyRelation
83
83
  }
84
84
 
85
85
  get description(): RichTextOrEmpty {
86
- return RichText.memoize(this, this.$relationship.description)
86
+ return RichText.memoize(this, 'description', this.$relationship.description)
87
87
  }
88
88
 
89
89
  get navigateTo(): LikeC4ViewModel<A> | null {
@@ -6,12 +6,13 @@ import {
6
6
  type DiagramEdge,
7
7
  type IteratorLike,
8
8
  type RelationshipLineType,
9
+ type RichTextOrEmpty,
9
10
  type scalar,
10
11
  type StepEdgeId,
11
12
  extractStep,
12
13
  isStepEdgeId,
14
+ RichText,
13
15
  } from '../../types'
14
- import { type RichTextOrEmpty, RichText } from '../../types'
15
16
  import type { DeploymentRelationModel } from '../DeploymentElementModel'
16
17
  import type { RelationshipModel } from '../RelationModel'
17
18
  import type { $View, WithTags } from '../types'
@@ -44,7 +45,7 @@ export class EdgeModel<A extends Any = Any, View extends $View<A> = $View<A>> im
44
45
  }
45
46
 
46
47
  get description(): RichTextOrEmpty {
47
- return RichText.memoize(this, this.#edge.description)
48
+ return RichText.memoize(this, 'description', this.#edge.description)
48
49
  }
49
50
 
50
51
  get technology(): string | null {
@@ -150,7 +150,7 @@ export class LikeC4ViewModel<A extends Any = Any, V extends $View<A> = $View<A>>
150
150
  }
151
151
 
152
152
  get description(): RichTextOrEmpty {
153
- return RichText.memoize(this, this.$view.description)
153
+ return RichText.memoize(this, 'description', this.$view.description)
154
154
  }
155
155
 
156
156
  get tags(): aux.Tags<A> {
@@ -49,7 +49,7 @@ export class NodeModel<A extends Any = Any, V extends $View<A> = $View<A>> imple
49
49
  }
50
50
 
51
51
  get description(): RichTextOrEmpty {
52
- return RichText.memoize(this, this.#node.description)
52
+ return RichText.memoize(this, 'description', this.#node.description)
53
53
  }
54
54
 
55
55
  get technology(): string | null {
@@ -1,7 +1,6 @@
1
1
  import { markdownToHtml, markdownToText, memoizeProp, nonexhaustive } from '../utils'
2
2
  import type { MarkdownOrString } from './scalar'
3
3
 
4
- const richtxt = Symbol.for('richtxt')
5
4
  const symb_text = Symbol.for('text')
6
5
  const symb_html = Symbol.for('html')
7
6
 
@@ -48,8 +47,8 @@ export class RichText {
48
47
  * return RichText.memoize(this, this.$element.description)
49
48
  * }
50
49
  */
51
- static memoize(obj: object, source: MarkdownOrString | null | undefined): RichTextOrEmpty {
52
- return memoizeProp(obj, richtxt, () => RichText.from(source))
50
+ static memoize(obj: object, tag: symbol | string, source: MarkdownOrString | null | undefined): RichTextOrEmpty {
51
+ return memoizeProp(obj, tag, () => RichText.from(source))
53
52
  }
54
53
 
55
54
  /**
package/src/types/_aux.ts CHANGED
@@ -255,6 +255,28 @@ export type StrictDeploymentKind<A> = A extends infer T extends Any ? scalar.Dep
255
255
  : never
256
256
  export type StrictRelationKind<A> = A extends infer T extends Any ? scalar.RelationshipKind<RelationKind<T>> : never
257
257
 
258
+ export type WithDescriptionAndTech = {
259
+ // short summary (displayed in the diagram)
260
+ readonly summary?: scalar.MarkdownOrString | null
261
+ // long description (displayed in the details panel, or in the diagram if summary is not set)
262
+ readonly description?: scalar.MarkdownOrString | null
263
+ readonly technology?: string | null
264
+ }
265
+
266
+ /**
267
+ * Returns summary if it is not null, otherwise returns description
268
+ */
269
+ export function preferSummary(a: WithDescriptionAndTech): scalar.MarkdownOrString | null | undefined {
270
+ return a.summary ?? a.description
271
+ }
272
+
273
+ /**
274
+ * Returns description if it is not null, otherwise returns summary
275
+ */
276
+ export function preferDescription(a: WithDescriptionAndTech): scalar.MarkdownOrString | null | undefined {
277
+ return a.description ?? a.summary
278
+ }
279
+
258
280
  export type WithTags<A extends Any> = {
259
281
  readonly tags: Tags<A>
260
282
  }
@@ -275,6 +297,10 @@ export type WithMetadata<A extends Any> = {
275
297
  readonly metadata?: Metadata<A>
276
298
  }
277
299
 
300
+ export type WithNotation = {
301
+ readonly notation?: string | null
302
+ }
303
+
278
304
  /**
279
305
  * @see {@link LiteralUnion} from type-fest (https://github.com/sindresorhus/type-fest/blob/main/source/literal-union.d.ts)
280
306
  */
@@ -1,4 +1,11 @@
1
- import type { IsAny, Simplify, UnionToIntersection } from 'type-fest'
1
+ import { omitBy } from 'remeda'
2
+ import type {
3
+ Exact,
4
+ IsAny,
5
+ KeysOfUnion,
6
+ Simplify,
7
+ UnionToIntersection,
8
+ } from 'type-fest'
2
9
 
3
10
  export type NonEmptyArray<T> = [T, ...T[]]
4
11
 
@@ -78,3 +85,18 @@ export interface Link {
78
85
  * Coalesce `V` to a string if it is `any`
79
86
  */
80
87
  export type Coalesce<V extends string, OrIfAny = string> = IsAny<V> extends true ? OrIfAny : V
88
+
89
+ type ExactObject<T, InputType = unknown> =
90
+ & {
91
+ [KeyType in keyof T]: undefined extends T[KeyType] ? T[KeyType] | undefined : T[KeyType]
92
+ }
93
+ & Record<Exclude<keyof InputType, KeysOfUnion<T>>, never>
94
+
95
+ /**
96
+ * Allows only exact properties of `U` to be present in `T` and omits undefined values
97
+ *
98
+ * See {@link Exact} for more details (this version is non-deep)
99
+ */
100
+ export function omitUndefined<Expected, T extends ExactObject<Expected, T>>(a: T): Expected {
101
+ return omitBy(a, v => v === undefined) as Expected
102
+ }
@@ -13,6 +13,8 @@ export type {
13
13
  UnknownParsed,
14
14
  } from './_aux'
15
15
 
16
+ export { preferDescription, preferSummary } from './_aux'
17
+
16
18
  export * from './const'
17
19
  export * from './expression'
18
20
  export * from './expression-model'
@@ -1,11 +1,9 @@
1
1
  import { isTruthy } from 'remeda'
2
2
  import type * as aux from './_aux'
3
3
  import type { AnyAux, Unknown } from './_aux'
4
- import type { Link } from './_common'
5
4
  import type { FqnRef } from './fqnRef'
6
5
  import type { AbstractRelationship, ElementStyle } from './model-logical'
7
6
  import type { Icon } from './scalar'
8
- import type * as scalar from './scalar'
9
7
  import type { Color, ElementShape } from './styles'
10
8
 
11
9
  export interface DeploymentElementStyle extends ElementStyle {
@@ -17,30 +15,28 @@ export interface DeploymentElementStyle extends ElementStyle {
17
15
  // dprint-ignore
18
16
  export interface DeploymentNode<A extends AnyAux = Unknown>
19
17
  extends
18
+ aux.WithDescriptionAndTech,
20
19
  aux.WithOptionalTags<A>,
21
20
  aux.WithOptionalLinks,
22
- aux.WithMetadata<A>
21
+ aux.WithMetadata<A>,
22
+ aux.WithNotation
23
23
  {
24
24
  element?: never
25
25
  // Full-qualified-name for Deployment model
26
26
  readonly id: aux.StrictDeploymentFqn<A>
27
27
  readonly kind: aux.DeploymentKind<A>
28
28
  readonly title: string
29
- readonly description?: scalar.MarkdownOrString | null
30
- readonly technology?: string | null
31
- readonly tags?: aux.Tags<A> | null
32
- readonly links?: readonly Link[] | null
33
29
  readonly style: DeploymentElementStyle
34
- readonly notation?: string | null
35
- readonly metadata?: aux.Metadata<A>
36
30
  }
37
31
 
38
32
  // dprint-ignore
39
33
  export interface DeployedInstance<A extends AnyAux = Unknown>
40
34
  extends
35
+ aux.WithDescriptionAndTech,
41
36
  aux.WithOptionalTags<A>,
42
37
  aux.WithOptionalLinks,
43
- aux.WithMetadata<A>
38
+ aux.WithMetadata<A>,
39
+ aux.WithNotation
44
40
  {
45
41
  kind?: never
46
42
  /**
@@ -50,13 +46,7 @@ export interface DeployedInstance<A extends AnyAux = Unknown>
50
46
  readonly id: aux.StrictDeploymentFqn<A>
51
47
  readonly element: aux.StrictFqn<A>
52
48
  readonly title?: string
53
- readonly description?: scalar.MarkdownOrString | null
54
- readonly technology?: string | null
55
- readonly tags?: aux.Tags<A> | null
56
- readonly links?: readonly Link[] | null
57
49
  readonly style?: DeploymentElementStyle
58
- readonly notation?: string
59
- readonly metadata?: aux.Metadata<A>
60
50
  }
61
51
 
62
52
  export type DeploymentElement<A extends AnyAux = Unknown> = DeploymentNode<A> | DeployedInstance<A>
@@ -67,11 +57,11 @@ export type DeploymentElementRef<A extends AnyAux = Unknown> = {
67
57
  }
68
58
 
69
59
  export function isDeploymentNode<A extends AnyAux>(el: DeploymentElement<A>): el is DeploymentNode<A> {
70
- return 'kind' in el && !isTruthy(el.element)
60
+ return isTruthy(el.kind) && !isTruthy(el.element)
71
61
  }
72
62
 
73
63
  export function isDeployedInstance<A extends AnyAux>(el: DeploymentElement<A>): el is DeployedInstance<A> {
74
- return 'element' in el && isTruthy(el.element)
64
+ return isTruthy(el.element) && !isTruthy(el.kind)
75
65
  }
76
66
 
77
67
  /**
@@ -1,6 +1,5 @@
1
1
  import type * as aux from './_aux'
2
2
  import type { AnyAux } from './_aux'
3
- import type { Link } from './_common'
4
3
  import type { FqnRef } from './fqnRef'
5
4
  import type * as scalar from './scalar'
6
5
  import type {
@@ -74,23 +73,19 @@ export function ensureSizes<S extends WithSizes>({
74
73
  // dprint-ignore
75
74
  export interface Element<A extends AnyAux = AnyAux>
76
75
  extends
76
+ aux.WithDescriptionAndTech,
77
77
  aux.WithOptionalTags<A>,
78
78
  aux.WithOptionalLinks,
79
- aux.WithMetadata<A>
79
+ aux.WithMetadata<A>,
80
+ aux.WithNotation
80
81
  {
81
82
  readonly id: aux.StrictFqn<A>
82
83
  readonly kind: aux.ElementKind<A>
83
84
  readonly title: string
84
- readonly description?: scalar.MarkdownOrString | null
85
- readonly technology?: string | null
86
- readonly tags?: aux.Tags<A> | null
87
- readonly links?: readonly Link[] | null
88
85
  readonly icon?: scalar.Icon
89
86
  readonly shape?: ElementShape
90
87
  readonly color?: Color
91
88
  readonly style?: ElementStyle
92
- readonly notation?: string | null
93
- readonly metadata?: aux.Metadata<A>
94
89
  }
95
90
 
96
91
  export const DefaultLineStyle: RelationshipLineType = 'dashed'
@@ -100,24 +95,20 @@ export const DefaultRelationshipColor: ThemeColor = 'gray'
100
95
  // dprint-ignore
101
96
  export interface AbstractRelationship<A extends AnyAux>
102
97
  extends
98
+ aux.WithDescriptionAndTech,
103
99
  aux.WithOptionalTags<A>,
104
100
  aux.WithOptionalLinks,
105
101
  aux.WithMetadata<A>
106
102
  {
107
103
  readonly id: scalar.RelationId
108
104
  readonly title?: string | null
109
- readonly description?: scalar.MarkdownOrString | null
110
- readonly technology?: string | null
111
105
  readonly kind?: aux.RelationKind<A>
112
106
  readonly color?: Color
113
107
  readonly line?: RelationshipLineType
114
108
  readonly head?: RelationshipArrowType
115
109
  readonly tail?: RelationshipArrowType
116
- readonly tags?: aux.Tags<A> | null
117
- readonly links?: readonly Link[] | null
118
110
  // Link to dynamic view
119
111
  readonly navigateTo?: aux.ViewId<A>
120
- readonly metadata?: aux.Metadata<A>
121
112
  }
122
113
 
123
114
  /**
@@ -26,6 +26,9 @@ import type {
26
26
  export interface ElementSpecification {
27
27
  tags?: scalar.Tag[]
28
28
  title?: string
29
+ // short summary
30
+ summary?: scalar.MarkdownOrString
31
+ // long description
29
32
  description?: scalar.MarkdownOrString
30
33
  technology?: string
31
34
  notation?: string
@@ -1,5 +1,5 @@
1
1
  import type * as aux from './_aux'
2
- import type { Any } from './_aux'
2
+ import type { AnyAux } from './_aux'
3
3
  import type { _stage, _type } from './const'
4
4
  import type { ElementStyle } from './model-logical'
5
5
  import type * as scalar from './scalar'
@@ -21,26 +21,33 @@ import type {
21
21
  } from './view-common'
22
22
  import type { DynamicViewDisplayVariant } from './view-parsed.dynamic'
23
23
 
24
- export interface ComputedNode<A extends Any = Any> extends aux.WithOptionalLinks {
24
+ // dprint-ignore
25
+ export interface ComputedNode<A extends AnyAux = AnyAux>
26
+ extends
27
+ aux.WithTags<A>,
28
+ aux.WithOptionalLinks
29
+ {
25
30
  id: scalar.NodeId
26
31
  kind: aux.ElementKind<A> | aux.DeploymentKind<A> | '@group'
27
32
  parent: scalar.NodeId | null
28
33
  /**
29
34
  * Reference to model element
30
35
  */
31
- modelRef?: aux.Fqn<A> | undefined
36
+ modelRef?: aux.Fqn<A>
32
37
  /**
33
38
  * Reference to deployment element
34
39
  */
35
- deploymentRef?: aux.DeploymentFqn<A> | undefined
40
+ deploymentRef?: aux.DeploymentFqn<A>
36
41
  title: string
42
+ /**
43
+ * Description of the node
44
+ * either summary or description
45
+ */
37
46
  description?: scalar.MarkdownOrString | null
38
47
  technology?: string | null
39
- notation?: string
40
48
  children: scalar.NodeId[]
41
49
  inEdges: scalar.EdgeId[]
42
50
  outEdges: scalar.EdgeId[]
43
- tags: aux.Tags<A>
44
51
  shape: ElementShape
45
52
  color: Color
46
53
  icon?: Icon
@@ -48,21 +55,22 @@ export interface ComputedNode<A extends Any = Any> extends aux.WithOptionalLinks
48
55
  navigateTo?: aux.StrictViewId<A> | null
49
56
  level: number
50
57
  // For compound nodes, the max depth of nested nodes
51
- depth?: number
58
+ depth?: number | null
52
59
  /**
53
60
  * If this node was customized in the view
54
61
  */
55
62
  isCustomized?: boolean
63
+ notation?: string | null
56
64
  }
57
65
 
58
- export interface ComputedEdge<A extends Any = Any> extends aux.WithOptionalTags<A> {
66
+ export interface ComputedEdge<A extends AnyAux = AnyAux> extends aux.WithOptionalTags<A> {
59
67
  id: scalar.EdgeId
60
68
  parent: scalar.NodeId | null
61
69
  source: scalar.NodeId
62
70
  target: scalar.NodeId
63
71
  label: string | null
64
72
  description?: scalar.MarkdownOrString | null
65
- technology?: string
73
+ technology?: string | null
66
74
  relations: scalar.RelationId[]
67
75
  kind?: aux.RelationKind<A> | typeof scalar.StepEdgeKind
68
76
  notation?: string
@@ -85,7 +93,7 @@ export interface ComputedEdge<A extends Any = Any> extends aux.WithOptionalTags<
85
93
  dir?: 'forward' | 'back' | 'both'
86
94
  }
87
95
 
88
- interface BaseComputedViewProperties<A extends Any> extends BaseViewProperties<A>, ViewWithHash, ViewWithNotation {
96
+ interface BaseComputedViewProperties<A extends AnyAux> extends BaseViewProperties<A>, ViewWithHash, ViewWithNotation {
89
97
  readonly [_stage]: 'computed'
90
98
  readonly autoLayout: ViewAutoLayout
91
99
  readonly nodes: ComputedNode<A>[]
@@ -97,17 +105,17 @@ interface BaseComputedViewProperties<A extends Any> extends BaseViewProperties<A
97
105
  readonly manualLayout?: ViewManualLayout | undefined
98
106
  }
99
107
 
100
- export interface ComputedElementView<A extends Any = Any> extends BaseComputedViewProperties<A> {
108
+ export interface ComputedElementView<A extends AnyAux = AnyAux> extends BaseComputedViewProperties<A> {
101
109
  readonly [_type]: 'element'
102
110
  readonly viewOf?: aux.StrictFqn<A>
103
111
  readonly extends?: aux.StrictViewId<A>
104
112
  }
105
113
 
106
- export interface ComputedDeploymentView<A extends Any = Any> extends BaseComputedViewProperties<A> {
114
+ export interface ComputedDeploymentView<A extends AnyAux = AnyAux> extends BaseComputedViewProperties<A> {
107
115
  readonly [_type]: 'deployment'
108
116
  }
109
117
 
110
- export interface ComputedDynamicView<A extends Any = Any> extends BaseComputedViewProperties<A> {
118
+ export interface ComputedDynamicView<A extends AnyAux = AnyAux> extends BaseComputedViewProperties<A> {
111
119
  readonly [_type]: 'dynamic'
112
120
  /**
113
121
  * How to display the dynamic view
@@ -27,10 +27,6 @@ export interface DiagramNode<A extends AnyAux = AnyAux> extends ComputedNode<A>,
27
27
  * (Absolute coordinates)
28
28
  */
29
29
  labelBBox: BBox
30
-
31
- // description?: scalar.HtmlOrString | null
32
- // technology?: scalar.HtmlOrString | null
33
- // notation?: scalar.HtmlOrString | null
34
30
  }
35
31
 
36
32
  export interface DiagramEdge<A extends AnyAux = AnyAux> extends ComputedEdge<A> {