@likec4/diagram 1.39.5 → 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 (140) hide show
  1. package/bundle/{chunk-CW_KClZe.js → chunk-FGcODVxo.js} +1059 -1023
  2. package/bundle/custom.js +61 -60
  3. package/bundle/index.js +2932 -764
  4. package/dist/LikeC4Diagram.d.ts +1 -1
  5. package/dist/LikeC4Diagram.js +7 -4
  6. package/dist/LikeC4Diagram.props.d.ts +6 -1
  7. package/dist/base/const.d.ts +9 -0
  8. package/dist/base/const.js +10 -1
  9. package/dist/base/index.d.ts +1 -0
  10. package/dist/base/primitives/MarkdownBlock.js +2 -0
  11. package/dist/base/primitives/edge/EdgeLabel.js +2 -1
  12. package/dist/base/primitives/edge/EdgeLabelContainer.js +10 -4
  13. package/dist/base/primitives/edge/EdgePath.js +17 -8
  14. package/dist/base/primitives/edge/edge.css.d.ts +0 -1
  15. package/dist/base/primitives/edge/edge.css.js +6 -14
  16. package/dist/base/primitives/element/ElementActionButtons.js +1 -3
  17. package/dist/base/primitives/element/ElementNodeContainer.d.ts +0 -6
  18. package/dist/base/primitives/element/ElementNodeContainer.js +3 -26
  19. package/dist/base/primitives/element/ElementTitle.js +2 -2
  20. package/dist/base/types.d.ts +3 -3
  21. package/dist/bundle/LikeC4View.js +4 -12
  22. package/dist/bundle/LikeC4View.props.d.ts +12 -3
  23. package/dist/bundle/custom.js +1 -1
  24. package/dist/components/Link.js +28 -20
  25. package/dist/custom/customNodes.d.ts +6 -0
  26. package/dist/custom/customNodes.js +2 -1
  27. package/dist/custom/index.js +1 -1
  28. package/dist/hooks/useDiagram.d.ts +5 -1
  29. package/dist/hooks/useDiagram.js +3 -0
  30. package/dist/hooks/useXYFlow.d.ts +4 -439
  31. package/dist/likec4diagram/DiagramUI.js +1 -1
  32. package/dist/likec4diagram/DiagramXYFlow.js +8 -4
  33. package/dist/likec4diagram/convert-to-xyflow.d.ts +14 -0
  34. package/dist/likec4diagram/convert-to-xyflow.js +29 -0
  35. package/dist/likec4diagram/custom/edges/RelationshipEdge.d.ts +4 -4
  36. package/dist/likec4diagram/custom/edges/RelationshipEdge.js +0 -1
  37. package/dist/likec4diagram/custom/edges/SequenceStepEdge.d.ts +3 -0
  38. package/dist/likec4diagram/custom/edges/SequenceStepEdge.js +71 -0
  39. package/dist/likec4diagram/custom/index.js +7 -2
  40. package/dist/likec4diagram/custom/nodes/ElementActions.d.ts +2 -1
  41. package/dist/likec4diagram/custom/nodes/SequenceActorNode.d.ts +4 -0
  42. package/dist/likec4diagram/custom/nodes/SequenceActorNode.js +157 -0
  43. package/dist/likec4diagram/custom/nodes/index.d.ts +1 -0
  44. package/dist/likec4diagram/custom/nodes/nodes.d.ts +1 -2
  45. package/dist/likec4diagram/relationship-popover/RelationshipPopover.js +31 -27
  46. package/dist/likec4diagram/types.d.ts +41 -7
  47. package/dist/likec4diagram/xyflow-diagram/diagram-view.d.ts +11 -0
  48. package/dist/likec4diagram/{useViewToNodesEdges.js → xyflow-diagram/diagram-view.js} +4 -13
  49. package/dist/likec4diagram/xyflow-sequence/_types.d.ts +41 -0
  50. package/dist/likec4diagram/xyflow-sequence/const.d.ts +17 -0
  51. package/dist/likec4diagram/xyflow-sequence/const.js +16 -0
  52. package/dist/likec4diagram/xyflow-sequence/layouter.d.ts +46 -0
  53. package/dist/likec4diagram/xyflow-sequence/layouter.js +408 -0
  54. package/dist/likec4diagram/xyflow-sequence/sequence-view.d.ts +7 -0
  55. package/dist/likec4diagram/xyflow-sequence/sequence-view.js +273 -0
  56. package/dist/likec4diagram/xyflow-sequence/utils.d.ts +14 -0
  57. package/dist/likec4diagram/xyflow-sequence/utils.js +92 -0
  58. package/dist/navigationpanel/NavigationPanelControls.js +2 -2
  59. package/dist/navigationpanel/controls/ViewDetailsCard.js +27 -12
  60. package/dist/navigationpanel/dropdown/ProjectsMenu.js +53 -44
  61. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.d.ts +1 -2
  62. package/dist/navigationpanel/walkthrough/ActiveWalkthroughControls.js +10 -41
  63. package/dist/navigationpanel/walkthrough/DynamicViewControls.d.ts +292 -0
  64. package/dist/navigationpanel/walkthrough/DynamicViewControls.js +119 -0
  65. package/dist/navigationpanel/walkthrough/index.d.ts +2 -1
  66. package/dist/overlays/element-details/ElementDetailsCard.css.js +7 -1
  67. package/dist/overlays/element-details/ElementDetailsCard.js +17 -19
  68. package/dist/overlays/relationship-details/RelationshipDetails.js +4 -1
  69. package/dist/overlays/relationship-details/layout.d.ts +3 -2
  70. package/dist/overlays/relationship-details/layout.js +1 -2
  71. package/dist/overlays/relationships-browser/RelationshipsBrowser.js +2 -1
  72. package/dist/overlays/relationships-browser/layout.js +1 -1
  73. package/dist/search/components/ElementsColumn.js +1 -1
  74. package/dist/state/DiagramActorProvider.d.ts +3 -2
  75. package/dist/state/DiagramActorProvider.js +40 -41
  76. package/dist/state/assign.js +11 -4
  77. package/dist/state/diagram-machine.d.ts +224 -194
  78. package/dist/state/diagram-machine.js +170 -63
  79. package/dist/state/utils.d.ts +7 -1
  80. package/dist/state/utils.js +67 -7
  81. package/dist/styles-min.css +1 -1
  82. package/dist/styles.css +1 -1
  83. package/dist/styles.css2.js +1 -1
  84. package/package.json +8 -7
  85. package/panda.buildinfo.json +45 -24
  86. package/src/LikeC4Diagram.props.ts +14 -1
  87. package/src/LikeC4Diagram.tsx +7 -4
  88. package/src/base/const.ts +12 -0
  89. package/src/base/index.ts +2 -0
  90. package/src/base/primitives/MarkdownBlock.tsx +2 -0
  91. package/src/base/primitives/edge/EdgeLabel.tsx +23 -19
  92. package/src/base/primitives/edge/EdgeLabelContainer.tsx +12 -7
  93. package/src/base/primitives/edge/EdgePath.tsx +25 -14
  94. package/src/base/primitives/edge/edge.css.ts +5 -14
  95. package/src/base/primitives/element/ElementActionButtons.tsx +1 -3
  96. package/src/base/primitives/element/ElementNodeContainer.tsx +3 -30
  97. package/src/base/primitives/element/ElementTitle.tsx +2 -3
  98. package/src/base/types.ts +7 -5
  99. package/src/bundle/LikeC4View.props.ts +14 -3
  100. package/src/bundle/LikeC4View.tsx +4 -14
  101. package/src/bundle/ReactLikeC4.tsx +1 -2
  102. package/src/components/Link.tsx +21 -18
  103. package/src/custom/customNodes.ts +7 -0
  104. package/src/hooks/useDiagram.ts +10 -0
  105. package/src/likec4diagram/DiagramUI.tsx +1 -1
  106. package/src/likec4diagram/DiagramXYFlow.tsx +10 -5
  107. package/src/likec4diagram/convert-to-xyflow.ts +45 -0
  108. package/src/likec4diagram/custom/edges/RelationshipEdge.tsx +0 -1
  109. package/src/likec4diagram/custom/edges/SequenceStepEdge.tsx +65 -0
  110. package/src/likec4diagram/custom/index.ts +7 -1
  111. package/src/likec4diagram/custom/nodes/ElementActions.tsx +4 -2
  112. package/src/likec4diagram/custom/nodes/SequenceActorNode.tsx +175 -0
  113. package/src/likec4diagram/custom/nodes/index.ts +1 -0
  114. package/src/likec4diagram/custom/nodes/nodes.tsx +1 -1
  115. package/src/likec4diagram/relationship-popover/RelationshipPopover.tsx +36 -30
  116. package/src/likec4diagram/types.ts +96 -13
  117. package/src/likec4diagram/{useViewToNodesEdges.ts → xyflow-diagram/diagram-view.ts} +7 -28
  118. package/src/likec4diagram/xyflow-sequence/_types.ts +45 -0
  119. package/src/likec4diagram/xyflow-sequence/const.ts +37 -0
  120. package/src/likec4diagram/xyflow-sequence/layouter.ts +567 -0
  121. package/src/likec4diagram/xyflow-sequence/sequence-view.ts +337 -0
  122. package/src/likec4diagram/xyflow-sequence/utils.ts +112 -0
  123. package/src/navigationpanel/NavigationPanelControls.tsx +2 -2
  124. package/src/navigationpanel/controls/ViewDetailsCard.tsx +29 -12
  125. package/src/navigationpanel/dropdown/ProjectsMenu.tsx +5 -1
  126. package/src/navigationpanel/walkthrough/ActiveWalkthroughControls.tsx +5 -40
  127. package/src/navigationpanel/walkthrough/DynamicViewControls.tsx +125 -0
  128. package/src/navigationpanel/walkthrough/index.tsx +2 -1
  129. package/src/overlays/element-details/ElementDetailsCard.css.ts +7 -1
  130. package/src/overlays/element-details/ElementDetailsCard.tsx +24 -25
  131. package/src/overlays/relationship-details/RelationshipDetails.tsx +5 -2
  132. package/src/overlays/relationship-details/layout.ts +4 -3
  133. package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +2 -1
  134. package/src/overlays/relationships-browser/layout.ts +1 -1
  135. package/src/search/components/ElementsColumn.tsx +1 -1
  136. package/src/state/DiagramActorProvider.tsx +46 -51
  137. package/src/state/assign.ts +18 -5
  138. package/src/state/diagram-machine.ts +207 -75
  139. package/src/state/utils.ts +81 -7
  140. package/dist/likec4diagram/useViewToNodesEdges.d.ts +0 -12
@@ -0,0 +1,292 @@
1
+ import { ButtonProps } from '@mantine/core';
2
+ import { ForwardRefExoticComponent, Ref, Key, AriaRole, ClipboardEventHandler, CompositionEventHandler, FocusEventHandler, FormEventHandler, InputEventHandler, ReactEventHandler, KeyboardEventHandler, MouseEventHandler, DragEventHandler, TouchEventHandler, PointerEventHandler, UIEventHandler, WheelEventHandler, AnimationEventHandler, ToggleEventHandler, TransitionEventHandler, RefAttributes } from 'react';
3
+ import { MotionProps } from 'motion/react';
4
+ export declare const TriggerWalkthroughButton: ForwardRefExoticComponent<Omit<ButtonProps & {
5
+ id?: string | undefined;
6
+ type?: "button" | "reset" | "submit" | undefined;
7
+ form?: string | undefined;
8
+ hidden?: boolean | undefined;
9
+ draggable?: (boolean | "true" | "false") | undefined;
10
+ className?: string | undefined;
11
+ color?: string | undefined;
12
+ content?: string | undefined;
13
+ translate?: "yes" | "no" | undefined;
14
+ ref?: Ref<HTMLButtonElement> | undefined;
15
+ key?: Key | null | undefined;
16
+ defaultChecked?: boolean | undefined;
17
+ defaultValue?: string | number | readonly string[] | undefined;
18
+ suppressContentEditableWarning?: boolean | undefined;
19
+ suppressHydrationWarning?: boolean | undefined;
20
+ accessKey?: string | undefined;
21
+ autoCapitalize?: "none" | (string & {}) | "on" | "off" | "sentences" | "words" | "characters" | undefined;
22
+ autoFocus?: boolean | undefined;
23
+ contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
24
+ contextMenu?: string | undefined;
25
+ dir?: string | undefined;
26
+ enterKeyHint?: "search" | "next" | "done" | "send" | "previous" | "enter" | "go" | undefined;
27
+ lang?: string | undefined;
28
+ nonce?: string | undefined;
29
+ slot?: string | undefined;
30
+ spellCheck?: (boolean | "true" | "false") | undefined;
31
+ tabIndex?: number | undefined;
32
+ title?: string | undefined;
33
+ radioGroup?: string | undefined;
34
+ role?: AriaRole | undefined;
35
+ about?: string | undefined;
36
+ datatype?: string | undefined;
37
+ inlist?: any;
38
+ prefix?: string | undefined;
39
+ property?: string | undefined;
40
+ rel?: string | undefined;
41
+ resource?: string | undefined;
42
+ rev?: string | undefined;
43
+ typeof?: string | undefined;
44
+ vocab?: string | undefined;
45
+ autoCorrect?: string | undefined;
46
+ autoSave?: string | undefined;
47
+ itemProp?: string | undefined;
48
+ itemScope?: boolean | undefined;
49
+ itemType?: string | undefined;
50
+ itemID?: string | undefined;
51
+ itemRef?: string | undefined;
52
+ results?: number | undefined;
53
+ security?: string | undefined;
54
+ unselectable?: "on" | "off" | undefined;
55
+ popover?: "" | "auto" | "manual" | undefined;
56
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
57
+ popoverTarget?: string | undefined;
58
+ inert?: boolean | undefined;
59
+ inputMode?: "none" | "search" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
60
+ is?: string | undefined;
61
+ exportparts?: string | undefined;
62
+ part?: string | undefined;
63
+ "aria-activedescendant"?: string | undefined;
64
+ "aria-atomic"?: (boolean | "true" | "false") | undefined;
65
+ "aria-autocomplete"?: "list" | "none" | "both" | "inline" | undefined;
66
+ "aria-braillelabel"?: string | undefined;
67
+ "aria-brailleroledescription"?: string | undefined;
68
+ "aria-busy"?: (boolean | "true" | "false") | undefined;
69
+ "aria-checked"?: boolean | "true" | "false" | "mixed" | undefined;
70
+ "aria-colcount"?: number | undefined;
71
+ "aria-colindex"?: number | undefined;
72
+ "aria-colindextext"?: string | undefined;
73
+ "aria-colspan"?: number | undefined;
74
+ "aria-controls"?: string | undefined;
75
+ "aria-current"?: boolean | "page" | "step" | "location" | "date" | "time" | "true" | "false" | undefined;
76
+ "aria-describedby"?: string | undefined;
77
+ "aria-description"?: string | undefined;
78
+ "aria-details"?: string | undefined;
79
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
80
+ "aria-dropeffect"?: "link" | "none" | "copy" | "move" | "execute" | "popup" | undefined;
81
+ "aria-errormessage"?: string | undefined;
82
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
83
+ "aria-flowto"?: string | undefined;
84
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
85
+ "aria-haspopup"?: boolean | "dialog" | "grid" | "listbox" | "menu" | "tree" | "true" | "false" | undefined;
86
+ "aria-hidden"?: (boolean | "true" | "false") | undefined;
87
+ "aria-invalid"?: boolean | "true" | "false" | "grammar" | "spelling" | undefined;
88
+ "aria-keyshortcuts"?: string | undefined;
89
+ "aria-label"?: string | undefined;
90
+ "aria-labelledby"?: string | undefined;
91
+ "aria-level"?: number | undefined;
92
+ "aria-live"?: "off" | "assertive" | "polite" | undefined;
93
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
94
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
95
+ "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
96
+ "aria-orientation"?: "horizontal" | "vertical" | undefined;
97
+ "aria-owns"?: string | undefined;
98
+ "aria-placeholder"?: string | undefined;
99
+ "aria-posinset"?: number | undefined;
100
+ "aria-pressed"?: boolean | "true" | "false" | "mixed" | undefined;
101
+ "aria-readonly"?: (boolean | "true" | "false") | undefined;
102
+ "aria-relevant"?: "all" | "text" | "additions" | "additions removals" | "additions text" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | undefined;
103
+ "aria-required"?: (boolean | "true" | "false") | undefined;
104
+ "aria-roledescription"?: string | undefined;
105
+ "aria-rowcount"?: number | undefined;
106
+ "aria-rowindex"?: number | undefined;
107
+ "aria-rowindextext"?: string | undefined;
108
+ "aria-rowspan"?: number | undefined;
109
+ "aria-selected"?: (boolean | "true" | "false") | undefined;
110
+ "aria-setsize"?: number | undefined;
111
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
112
+ "aria-valuemax"?: number | undefined;
113
+ "aria-valuemin"?: number | undefined;
114
+ "aria-valuenow"?: number | undefined;
115
+ "aria-valuetext"?: string | undefined;
116
+ dangerouslySetInnerHTML?: {
117
+ __html: string | TrustedHTML;
118
+ } | undefined;
119
+ onCopy?: ClipboardEventHandler<HTMLButtonElement> | undefined;
120
+ onCopyCapture?: ClipboardEventHandler<HTMLButtonElement> | undefined;
121
+ onCut?: ClipboardEventHandler<HTMLButtonElement> | undefined;
122
+ onCutCapture?: ClipboardEventHandler<HTMLButtonElement> | undefined;
123
+ onPaste?: ClipboardEventHandler<HTMLButtonElement> | undefined;
124
+ onPasteCapture?: ClipboardEventHandler<HTMLButtonElement> | undefined;
125
+ onCompositionEnd?: CompositionEventHandler<HTMLButtonElement> | undefined;
126
+ onCompositionEndCapture?: CompositionEventHandler<HTMLButtonElement> | undefined;
127
+ onCompositionStart?: CompositionEventHandler<HTMLButtonElement> | undefined;
128
+ onCompositionStartCapture?: CompositionEventHandler<HTMLButtonElement> | undefined;
129
+ onCompositionUpdate?: CompositionEventHandler<HTMLButtonElement> | undefined;
130
+ onCompositionUpdateCapture?: CompositionEventHandler<HTMLButtonElement> | undefined;
131
+ onFocus?: FocusEventHandler<HTMLButtonElement> | undefined;
132
+ onFocusCapture?: FocusEventHandler<HTMLButtonElement> | undefined;
133
+ onBlur?: FocusEventHandler<HTMLButtonElement> | undefined;
134
+ onBlurCapture?: FocusEventHandler<HTMLButtonElement> | undefined;
135
+ onChange?: FormEventHandler<HTMLButtonElement> | undefined;
136
+ onChangeCapture?: FormEventHandler<HTMLButtonElement> | undefined;
137
+ onBeforeInput?: InputEventHandler<HTMLButtonElement> | undefined;
138
+ onBeforeInputCapture?: FormEventHandler<HTMLButtonElement> | undefined;
139
+ onInput?: FormEventHandler<HTMLButtonElement> | undefined;
140
+ onInputCapture?: FormEventHandler<HTMLButtonElement> | undefined;
141
+ onReset?: FormEventHandler<HTMLButtonElement> | undefined;
142
+ onResetCapture?: FormEventHandler<HTMLButtonElement> | undefined;
143
+ onSubmit?: FormEventHandler<HTMLButtonElement> | undefined;
144
+ onSubmitCapture?: FormEventHandler<HTMLButtonElement> | undefined;
145
+ onInvalid?: FormEventHandler<HTMLButtonElement> | undefined;
146
+ onInvalidCapture?: FormEventHandler<HTMLButtonElement> | undefined;
147
+ onLoad?: ReactEventHandler<HTMLButtonElement> | undefined;
148
+ onLoadCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
149
+ onError?: ReactEventHandler<HTMLButtonElement> | undefined;
150
+ onErrorCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
151
+ onKeyDown?: KeyboardEventHandler<HTMLButtonElement> | undefined;
152
+ onKeyDownCapture?: KeyboardEventHandler<HTMLButtonElement> | undefined;
153
+ onKeyPress?: KeyboardEventHandler<HTMLButtonElement> | undefined;
154
+ onKeyPressCapture?: KeyboardEventHandler<HTMLButtonElement> | undefined;
155
+ onKeyUp?: KeyboardEventHandler<HTMLButtonElement> | undefined;
156
+ onKeyUpCapture?: KeyboardEventHandler<HTMLButtonElement> | undefined;
157
+ onAbort?: ReactEventHandler<HTMLButtonElement> | undefined;
158
+ onAbortCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
159
+ onCanPlay?: ReactEventHandler<HTMLButtonElement> | undefined;
160
+ onCanPlayCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
161
+ onCanPlayThrough?: ReactEventHandler<HTMLButtonElement> | undefined;
162
+ onCanPlayThroughCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
163
+ onDurationChange?: ReactEventHandler<HTMLButtonElement> | undefined;
164
+ onDurationChangeCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
165
+ onEmptied?: ReactEventHandler<HTMLButtonElement> | undefined;
166
+ onEmptiedCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
167
+ onEncrypted?: ReactEventHandler<HTMLButtonElement> | undefined;
168
+ onEncryptedCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
169
+ onEnded?: ReactEventHandler<HTMLButtonElement> | undefined;
170
+ onEndedCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
171
+ onLoadedData?: ReactEventHandler<HTMLButtonElement> | undefined;
172
+ onLoadedDataCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
173
+ onLoadedMetadata?: ReactEventHandler<HTMLButtonElement> | undefined;
174
+ onLoadedMetadataCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
175
+ onLoadStart?: ReactEventHandler<HTMLButtonElement> | undefined;
176
+ onLoadStartCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
177
+ onPause?: ReactEventHandler<HTMLButtonElement> | undefined;
178
+ onPauseCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
179
+ onPlay?: ReactEventHandler<HTMLButtonElement> | undefined;
180
+ onPlayCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
181
+ onPlaying?: ReactEventHandler<HTMLButtonElement> | undefined;
182
+ onPlayingCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
183
+ onProgress?: ReactEventHandler<HTMLButtonElement> | undefined;
184
+ onProgressCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
185
+ onRateChange?: ReactEventHandler<HTMLButtonElement> | undefined;
186
+ onRateChangeCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
187
+ onSeeked?: ReactEventHandler<HTMLButtonElement> | undefined;
188
+ onSeekedCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
189
+ onSeeking?: ReactEventHandler<HTMLButtonElement> | undefined;
190
+ onSeekingCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
191
+ onStalled?: ReactEventHandler<HTMLButtonElement> | undefined;
192
+ onStalledCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
193
+ onSuspend?: ReactEventHandler<HTMLButtonElement> | undefined;
194
+ onSuspendCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
195
+ onTimeUpdate?: ReactEventHandler<HTMLButtonElement> | undefined;
196
+ onTimeUpdateCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
197
+ onVolumeChange?: ReactEventHandler<HTMLButtonElement> | undefined;
198
+ onVolumeChangeCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
199
+ onWaiting?: ReactEventHandler<HTMLButtonElement> | undefined;
200
+ onWaitingCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
201
+ onAuxClick?: MouseEventHandler<HTMLButtonElement> | undefined;
202
+ onAuxClickCapture?: MouseEventHandler<HTMLButtonElement> | undefined;
203
+ onClick?: MouseEventHandler<HTMLButtonElement> | undefined;
204
+ onClickCapture?: MouseEventHandler<HTMLButtonElement> | undefined;
205
+ onContextMenu?: MouseEventHandler<HTMLButtonElement> | undefined;
206
+ onContextMenuCapture?: MouseEventHandler<HTMLButtonElement> | undefined;
207
+ onDoubleClick?: MouseEventHandler<HTMLButtonElement> | undefined;
208
+ onDoubleClickCapture?: MouseEventHandler<HTMLButtonElement> | undefined;
209
+ onDragCapture?: DragEventHandler<HTMLButtonElement> | undefined;
210
+ onDragEndCapture?: DragEventHandler<HTMLButtonElement> | undefined;
211
+ onDragEnter?: DragEventHandler<HTMLButtonElement> | undefined;
212
+ onDragEnterCapture?: DragEventHandler<HTMLButtonElement> | undefined;
213
+ onDragExit?: DragEventHandler<HTMLButtonElement> | undefined;
214
+ onDragExitCapture?: DragEventHandler<HTMLButtonElement> | undefined;
215
+ onDragLeave?: DragEventHandler<HTMLButtonElement> | undefined;
216
+ onDragLeaveCapture?: DragEventHandler<HTMLButtonElement> | undefined;
217
+ onDragOver?: DragEventHandler<HTMLButtonElement> | undefined;
218
+ onDragOverCapture?: DragEventHandler<HTMLButtonElement> | undefined;
219
+ onDragStartCapture?: DragEventHandler<HTMLButtonElement> | undefined;
220
+ onDrop?: DragEventHandler<HTMLButtonElement> | undefined;
221
+ onDropCapture?: DragEventHandler<HTMLButtonElement> | undefined;
222
+ onMouseDown?: MouseEventHandler<HTMLButtonElement> | undefined;
223
+ onMouseDownCapture?: MouseEventHandler<HTMLButtonElement> | undefined;
224
+ onMouseEnter?: MouseEventHandler<HTMLButtonElement> | undefined;
225
+ onMouseLeave?: MouseEventHandler<HTMLButtonElement> | undefined;
226
+ onMouseMove?: MouseEventHandler<HTMLButtonElement> | undefined;
227
+ onMouseMoveCapture?: MouseEventHandler<HTMLButtonElement> | undefined;
228
+ onMouseOut?: MouseEventHandler<HTMLButtonElement> | undefined;
229
+ onMouseOutCapture?: MouseEventHandler<HTMLButtonElement> | undefined;
230
+ onMouseOver?: MouseEventHandler<HTMLButtonElement> | undefined;
231
+ onMouseOverCapture?: MouseEventHandler<HTMLButtonElement> | undefined;
232
+ onMouseUp?: MouseEventHandler<HTMLButtonElement> | undefined;
233
+ onMouseUpCapture?: MouseEventHandler<HTMLButtonElement> | undefined;
234
+ onSelect?: ReactEventHandler<HTMLButtonElement> | undefined;
235
+ onSelectCapture?: ReactEventHandler<HTMLButtonElement> | undefined;
236
+ onTouchCancel?: TouchEventHandler<HTMLButtonElement> | undefined;
237
+ onTouchCancelCapture?: TouchEventHandler<HTMLButtonElement> | undefined;
238
+ onTouchEnd?: TouchEventHandler<HTMLButtonElement> | undefined;
239
+ onTouchEndCapture?: TouchEventHandler<HTMLButtonElement> | undefined;
240
+ onTouchMove?: TouchEventHandler<HTMLButtonElement> | undefined;
241
+ onTouchMoveCapture?: TouchEventHandler<HTMLButtonElement> | undefined;
242
+ onTouchStart?: TouchEventHandler<HTMLButtonElement> | undefined;
243
+ onTouchStartCapture?: TouchEventHandler<HTMLButtonElement> | undefined;
244
+ onPointerDown?: PointerEventHandler<HTMLButtonElement> | undefined;
245
+ onPointerDownCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
246
+ onPointerMove?: PointerEventHandler<HTMLButtonElement> | undefined;
247
+ onPointerMoveCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
248
+ onPointerUp?: PointerEventHandler<HTMLButtonElement> | undefined;
249
+ onPointerUpCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
250
+ onPointerCancel?: PointerEventHandler<HTMLButtonElement> | undefined;
251
+ onPointerCancelCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
252
+ onPointerEnter?: PointerEventHandler<HTMLButtonElement> | undefined;
253
+ onPointerLeave?: PointerEventHandler<HTMLButtonElement> | undefined;
254
+ onPointerOver?: PointerEventHandler<HTMLButtonElement> | undefined;
255
+ onPointerOverCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
256
+ onPointerOut?: PointerEventHandler<HTMLButtonElement> | undefined;
257
+ onPointerOutCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
258
+ onGotPointerCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
259
+ onGotPointerCaptureCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
260
+ onLostPointerCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
261
+ onLostPointerCaptureCapture?: PointerEventHandler<HTMLButtonElement> | undefined;
262
+ onScroll?: UIEventHandler<HTMLButtonElement> | undefined;
263
+ onScrollCapture?: UIEventHandler<HTMLButtonElement> | undefined;
264
+ onScrollEnd?: UIEventHandler<HTMLButtonElement> | undefined;
265
+ onScrollEndCapture?: UIEventHandler<HTMLButtonElement> | undefined;
266
+ onWheel?: WheelEventHandler<HTMLButtonElement> | undefined;
267
+ onWheelCapture?: WheelEventHandler<HTMLButtonElement> | undefined;
268
+ onAnimationStartCapture?: AnimationEventHandler<HTMLButtonElement> | undefined;
269
+ onAnimationEnd?: AnimationEventHandler<HTMLButtonElement> | undefined;
270
+ onAnimationEndCapture?: AnimationEventHandler<HTMLButtonElement> | undefined;
271
+ onAnimationIteration?: AnimationEventHandler<HTMLButtonElement> | undefined;
272
+ onAnimationIterationCapture?: AnimationEventHandler<HTMLButtonElement> | undefined;
273
+ onToggle?: ToggleEventHandler<HTMLButtonElement> | undefined;
274
+ onBeforeToggle?: ToggleEventHandler<HTMLButtonElement> | undefined;
275
+ onTransitionCancel?: TransitionEventHandler<HTMLButtonElement> | undefined;
276
+ onTransitionCancelCapture?: TransitionEventHandler<HTMLButtonElement> | undefined;
277
+ onTransitionEnd?: TransitionEventHandler<HTMLButtonElement> | undefined;
278
+ onTransitionEndCapture?: TransitionEventHandler<HTMLButtonElement> | undefined;
279
+ onTransitionRun?: TransitionEventHandler<HTMLButtonElement> | undefined;
280
+ onTransitionRunCapture?: TransitionEventHandler<HTMLButtonElement> | undefined;
281
+ onTransitionStart?: TransitionEventHandler<HTMLButtonElement> | undefined;
282
+ onTransitionStartCapture?: TransitionEventHandler<HTMLButtonElement> | undefined;
283
+ name?: string | undefined;
284
+ value?: string | number | readonly string[] | undefined;
285
+ disabled?: boolean | undefined;
286
+ formAction?: string | ((formData: FormData) => void | Promise<void>) | undefined;
287
+ formEncType?: string | undefined;
288
+ formMethod?: string | undefined;
289
+ formNoValidate?: boolean | undefined;
290
+ formTarget?: string | undefined;
291
+ } & MotionProps, "ref"> & RefAttributes<HTMLButtonElement>>;
292
+ export declare function DynamicViewControls(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,119 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { invariant } from '@likec4/core';
3
+ import { css } from '@likec4/styles/css';
4
+ import { Button, SegmentedControl } from '@mantine/core';
5
+ import * as m from 'motion/react-m';
6
+ import { forwardRef } from 'react';
7
+ import { useDiagramContext, useDiagram } from '../../hooks/useDiagram.js';
8
+ import { Tooltip } from '../_common.js';
9
+ import { useNavigationActor } from '../hooks.js';
10
+ import IconPlayerPlayFilled from '../../node_modules/.pnpm/@tabler_icons-react@3.34.1_react@19.1.1/node_modules/@tabler/icons-react/dist/esm/icons/IconPlayerPlayFilled.js';
11
+
12
+ const TriggerWalkthroughButton = forwardRef((props, ref) => /* @__PURE__ */ jsx(
13
+ Button,
14
+ {
15
+ variant: "filled",
16
+ size: "xs",
17
+ fw: "500",
18
+ ...props,
19
+ ref,
20
+ component: m.button,
21
+ layoutId: "trigger-dynamic-walkthrough",
22
+ className: css({
23
+ flexShrink: 0
24
+ })
25
+ }
26
+ ));
27
+ function StartWalkthroughButton({ onClick }) {
28
+ const diagram = useDiagram();
29
+ const actor = useNavigationActor();
30
+ return /* @__PURE__ */ jsx(Tooltip, { label: "Start Dynamic View Walkthrough", children: /* @__PURE__ */ jsx(
31
+ TriggerWalkthroughButton,
32
+ {
33
+ onClick: (e) => {
34
+ e.stopPropagation();
35
+ actor.closeDropdown();
36
+ diagram.startWalkthrough();
37
+ },
38
+ size: "compact-xs",
39
+ h: 26,
40
+ classNames: {
41
+ label: css({
42
+ display: {
43
+ base: "none",
44
+ "@/md": "[inherit]"
45
+ }
46
+ }),
47
+ section: css({
48
+ marginInlineStart: {
49
+ base: "0",
50
+ "@/md": "2"
51
+ }
52
+ })
53
+ },
54
+ rightSection: /* @__PURE__ */ jsx(IconPlayerPlayFilled, { size: 10 }),
55
+ children: "Start"
56
+ }
57
+ ) });
58
+ }
59
+ function DynamicViewModeSwitcher({
60
+ value,
61
+ onChange
62
+ }) {
63
+ return /* @__PURE__ */ jsx(m.div, { layout: "position", children: /* @__PURE__ */ jsx(
64
+ SegmentedControl,
65
+ {
66
+ size: "xs",
67
+ value,
68
+ component: m.div,
69
+ onChange: (variant) => {
70
+ invariant(variant === "diagram" || variant === "sequence", "Invalid dynamic view variant");
71
+ onChange(variant);
72
+ },
73
+ classNames: {
74
+ label: css({
75
+ fontSize: "xxs"
76
+ })
77
+ },
78
+ data: [
79
+ {
80
+ value: "diagram",
81
+ label: "Diagram"
82
+ },
83
+ {
84
+ value: "sequence",
85
+ label: "Sequence"
86
+ }
87
+ ]
88
+ }
89
+ ) });
90
+ }
91
+ function DynamicViewControls() {
92
+ const dynamicViewVariant = useDiagramContext((c) => c.dynamicViewVariant);
93
+ const diagram = useDiagram();
94
+ const actor = useNavigationActor();
95
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
96
+ /* @__PURE__ */ jsx(
97
+ DynamicViewModeSwitcher,
98
+ {
99
+ value: dynamicViewVariant,
100
+ onChange: (mode) => {
101
+ diagram.switchDynamicViewVariant(mode);
102
+ }
103
+ },
104
+ "dynamic-view-mode-switcher"
105
+ ),
106
+ /* @__PURE__ */ jsx(
107
+ StartWalkthroughButton,
108
+ {
109
+ onClick: () => {
110
+ actor.closeDropdown();
111
+ diagram.startWalkthrough();
112
+ }
113
+ },
114
+ "trigger-dynamic-walkthrough"
115
+ )
116
+ ] });
117
+ }
118
+
119
+ export { DynamicViewControls, TriggerWalkthroughButton };
@@ -1 +1,2 @@
1
- export { ActiveWalkthroughControls, StartWalkthroughButton } from './ActiveWalkthroughControls';
1
+ export { ActiveWalkthroughControls } from './ActiveWalkthroughControls';
2
+ export { DynamicViewControls } from './DynamicViewControls';
@@ -24,13 +24,19 @@ const dialog = css({
24
24
  const card = css({
25
25
  position: "absolute",
26
26
  pointerEvents: "all",
27
+ display: "flex",
28
+ flexDirection: "column",
29
+ padding: "4",
27
30
  gap: "lg",
28
31
  justifyContent: "stretch",
32
+ color: "mantine.colors.text",
29
33
  backgroundColor: {
30
34
  base: "mantine.colors.body",
31
35
  _dark: "mantine.colors.dark[6]"
32
36
  },
33
- border: `none`,
37
+ boxShadow: "md",
38
+ overflow: "hidden",
39
+ border: "none",
34
40
  backgroundImage: `
35
41
  linear-gradient(180deg,
36
42
  color-mix(in srgb, var(--likec4-palette-fill) 60%, transparent),
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { cx, css } from '@likec4/styles/css';
3
3
  import { HStack } from '@likec4/styles/jsx';
4
- import { RemoveScroll, Card, Group, Text, CloseButton, Badge, Flex, ActionIconGroup, ActionIcon, Tooltip as Tooltip$1, Tabs, TabsList, TabsTab, TabsPanel, ScrollArea, Box, Stack, Divider as Divider$1, ScrollAreaAutosize, UnstyledButton, ThemeIcon } from '@mantine/core';
4
+ import { RemoveScroll, Text, CloseButton, Badge, Flex, ActionIconGroup, ActionIcon, Tooltip as Tooltip$1, Tabs, TabsList, TabsTab, TabsPanel, ScrollArea, Box, Stack, Divider as Divider$1, ScrollAreaAutosize, UnstyledButton, Group, ThemeIcon } from '@mantine/core';
5
5
  import { useViewportSize, useSessionStorage } from '@mantine/hooks';
6
6
  import { useSyncedRef, useDebouncedCallback, useTimeoutEffect } from '@react-hookz/web';
7
7
  import { useDragControls, useMotionValue, m } from 'motion/react';
@@ -14,7 +14,7 @@ import { elementIcon, card, cardHeader, title, tabsPanel, tabsTab, tabsList, tab
14
14
  import { TabPanelDeployments } from './TabPanelDeployments.js';
15
15
  import { TabPanelRelationships } from './TabPanelRelationships.js';
16
16
  import { TabPanelStructure } from './TabPanelStructure.js';
17
- import { useLikeC4Model } from '../../likec4model/useLikeC4Model.js';
17
+ import { useCurrentViewModel } from '../../likec4model/useCurrentViewModel.js';
18
18
  import { useUpdateEffect } from '../../hooks/useUpdateEffect.js';
19
19
  import { IconRenderer } from '../../context/IconRenderer.js';
20
20
  import { stopPropagation } from '../../utils/xyflow.js';
@@ -69,8 +69,7 @@ function ElementDetailsCard({
69
69
  defaultValue: "Properties"
70
70
  });
71
71
  const diagram = useDiagram();
72
- const likec4model = useLikeC4Model();
73
- const viewModel = likec4model.view(viewId);
72
+ const viewModel = useCurrentViewModel();
74
73
  const nodeModel = fromNode ? viewModel.findNode(fromNode) : viewModel.findNodeWithElement(fqn);
75
74
  const elementModel = viewModel.$model.element(fqn);
76
75
  const [viewsOf, otherViews] = pipe(
@@ -150,7 +149,7 @@ function ElementDetailsCard({
150
149
  }, 20);
151
150
  useTimeoutEffect(() => {
152
151
  setOpened(true);
153
- }, 200);
152
+ }, 220);
154
153
  return /* @__PURE__ */ jsx(
155
154
  m.dialog,
156
155
  {
@@ -185,10 +184,8 @@ function ElementDetailsCard({
185
184
  close();
186
185
  },
187
186
  children: /* @__PURE__ */ jsx(RemoveScroll, { forwardProps: true, removeScrollBar: false, children: /* @__PURE__ */ jsxs(
188
- Card,
187
+ m.div,
189
188
  {
190
- shadow: "md",
191
- component: m.div,
192
189
  layout: true,
193
190
  layoutRoot: true,
194
191
  drag: true,
@@ -221,14 +218,13 @@ function ElementDetailsCard({
221
218
  }
222
219
  },
223
220
  style: {
224
- // `style` prop in Mantine doesn't accept motion values
225
221
  width,
226
222
  height
227
223
  },
228
224
  children: [
229
225
  /* @__PURE__ */ jsxs("div", { className: cardHeader, onPointerDown: (e) => controls.start(e), children: [
230
- /* @__PURE__ */ jsxs(Group, { align: "start", justify: "space-between", gap: "sm", mb: "sm", wrap: "nowrap", children: [
231
- /* @__PURE__ */ jsxs(Group, { align: "start", gap: "sm", style: { cursor: "default" }, wrap: "nowrap", children: [
226
+ /* @__PURE__ */ jsxs(HStack, { alignItems: "start", justify: "space-between", gap: "sm", mb: "sm", flexWrap: "nowrap", children: [
227
+ /* @__PURE__ */ jsxs(HStack, { alignItems: "start", gap: "sm", style: { cursor: "default" }, flexWrap: "nowrap", children: [
232
228
  elementIcon$1,
233
229
  /* @__PURE__ */ jsxs("div", { children: [
234
230
  /* @__PURE__ */ jsx(
@@ -253,7 +249,7 @@ function ElementDetailsCard({
253
249
  }
254
250
  )
255
251
  ] }),
256
- /* @__PURE__ */ jsxs(Group, { align: "baseline", gap: "sm", wrap: "nowrap", children: [
252
+ /* @__PURE__ */ jsxs(HStack, { alignItems: "baseline", gap: "sm", flexWrap: "nowrap", children: [
257
253
  /* @__PURE__ */ jsxs("div", { children: [
258
254
  /* @__PURE__ */ jsx(SmallLabel, { children: "kind" }),
259
255
  /* @__PURE__ */ jsx(
@@ -359,6 +355,10 @@ function ElementDetailsCard({
359
355
  children: [
360
356
  /* @__PURE__ */ jsx(TabsList, { children: TABS.map((tab) => /* @__PURE__ */ jsx(TabsTab, { value: tab, children: tab }, tab)) }),
361
357
  /* @__PURE__ */ jsx(TabsPanel, { value: "Properties", children: /* @__PURE__ */ jsx(ScrollArea, { scrollbars: "y", type: "scroll", offsetScrollbars: true, children: /* @__PURE__ */ jsxs(Box, { className: propertiesGrid, pt: "xs", children: [
358
+ elementModel.hasSummary && /* @__PURE__ */ jsxs(Fragment, { children: [
359
+ /* @__PURE__ */ jsx(PropertyLabel, { children: "summary" }),
360
+ /* @__PURE__ */ jsx(MarkdownBlock, { value: elementModel.summary })
361
+ ] }),
362
362
  /* @__PURE__ */ jsxs(Fragment, { children: [
363
363
  /* @__PURE__ */ jsx(PropertyLabel, { children: "description" }),
364
364
  /* @__PURE__ */ jsx(
@@ -494,12 +494,10 @@ function ElementMetata({
494
494
  children: entries(metadata).map(([key, value]) => /* @__PURE__ */ jsxs(
495
495
  "div",
496
496
  {
497
- className: cx(
498
- "group",
499
- css({
500
- display: "contents"
501
- })
502
- ),
497
+ style: {
498
+ display: "contents"
499
+ },
500
+ className: "group",
503
501
  children: [
504
502
  /* @__PURE__ */ jsxs(
505
503
  "div",
@@ -548,7 +546,7 @@ function ElementMetata({
548
546
  fontSize: "sm",
549
547
  padding: "xxs",
550
548
  whiteSpace: "pre",
551
- fontFamily: "[var(--mantine-font-family-monospace)]",
549
+ fontFamily: "mono",
552
550
  userSelect: "all"
553
551
  }),
554
552
  children: value
@@ -104,7 +104,10 @@ const RelationshipDetailsInner = memo(() => {
104
104
  id: browser.rootElementId,
105
105
  nodes,
106
106
  edges,
107
- className: cx(initialized ? "initialized" : "not-initialized"),
107
+ className: cx(
108
+ initialized ? "initialized" : "not-initialized",
109
+ "likec4-relationship-details"
110
+ ),
108
111
  nodeTypes,
109
112
  edgeTypes,
110
113
  onNodesChange: useCallbackRef((changes) => {
@@ -1,5 +1,6 @@
1
1
  import { DiagramEdge, DiagramNode, DiagramView, Fqn, RelationId, RichTextOrEmpty } from '@likec4/core/types';
2
2
  import { AnyAux, LikeC4ViewModel } from '@likec4/core/model';
3
+ import { Except } from 'type-fest';
3
4
  import { RelationshipDetailsTypes } from './_types';
4
5
  import { RelationshipDetailsViewData } from './compute';
5
6
  export type LayoutResult = {
@@ -8,13 +9,13 @@ export type LayoutResult = {
8
9
  bounds: DiagramView['bounds'];
9
10
  };
10
11
  export declare namespace LayoutResult {
11
- type Node = Omit<DiagramNode, 'modelRef' | 'description' | 'deploymentRef' | 'inEdges' | 'outEdges'> & {
12
+ type Node = Except<DiagramNode, 'modelRef' | 'description' | 'deploymentRef' | 'inEdges' | 'outEdges'> & {
12
13
  description: RichTextOrEmpty;
13
14
  modelRef: Fqn;
14
15
  column: RelationshipDetailsTypes.Column;
15
16
  ports: RelationshipDetailsTypes.Ports;
16
17
  };
17
- type Edge = Omit<DiagramEdge, 'relations' | 'description'> & {
18
+ type Edge = Except<DiagramEdge, 'relations' | 'description'> & {
18
19
  relationId: RelationId;
19
20
  sourceHandle: string;
20
21
  targetHandle: string;
@@ -1,6 +1,5 @@
1
1
  import { treeFromElements } from '@likec4/core/compute-view/relationships';
2
2
  import dagre from '@dagrejs/dagre';
3
- import { RichText } from '@likec4/core';
4
3
  import { ifind, DefaultMap, invariant } from '@likec4/core/utils';
5
4
  import { pipe, filter, mapToObj, find, map, tap, reduce, sortBy, prop } from 'remeda';
6
5
 
@@ -240,7 +239,7 @@ function layoutRelationshipDetails(data, scope) {
240
239
  y: position.y,
241
240
  position: [position.x, position.y],
242
241
  title: element.title,
243
- description: RichText.from(element.description),
242
+ description: element.summary,
244
243
  technology: element.technology,
245
244
  tags: [...element.tags],
246
245
  links: null,
@@ -2,6 +2,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { cx } from '@likec4/styles/css';
3
3
  import { ActionIcon, Group } from '@mantine/core';
4
4
  import { useCallbackRef, useStateHistory } from '@mantine/hooks';
5
+ import { useRafEffect } from '@react-hookz/web';
5
6
  import { ReactFlowProvider, useStoreApi, useReactFlow, Panel } from '@xyflow/react';
6
7
  import { shallowEqual } from 'fast-equals';
7
8
  import { LayoutGroup, AnimatePresence, m } from 'motion/react';
@@ -137,7 +138,7 @@ const RelationshipsBrowserInner = memo(() => {
137
138
  browser.navigateTo(historySubjectId);
138
139
  }
139
140
  }, [historySubjectId, browser]);
140
- useEffect(() => {
141
+ useRafEffect(() => {
141
142
  browser.updateView(layouted);
142
143
  }, [layouted, browser]);
143
144
  const hasStepBack = current > 0;
@@ -374,7 +374,7 @@ function layoutRelationshipsView(data, scope) {
374
374
  y: position.y,
375
375
  position: [position.x, position.y],
376
376
  title: element.title,
377
- description: RichText.from(element.description),
377
+ description: element.summary,
378
378
  technology: element.technology,
379
379
  tags: [...element.tags],
380
380
  links: null,
@@ -224,7 +224,7 @@ function ElementTreeNode({ node, elementProps, hasChildren, expanded }) {
224
224
  }
225
225
  ) })
226
226
  ] }),
227
- /* @__PURE__ */ jsx(Highlight, { component: "div", highlight: searchTerms, className: btn.description, lineClamp: 1, children: element.description.text || "No description" })
227
+ /* @__PURE__ */ jsx(Highlight, { component: "div", highlight: searchTerms, className: btn.description, lineClamp: 1, children: element.summary.text || "No description" })
228
228
  ] }),
229
229
  /* @__PURE__ */ jsx(Text, { component: "div", className: cx(elementViewsCount, btn.descriptionColor), fz: "xs", children: views.length === 0 ? "No views" : /* @__PURE__ */ jsxs(Fragment, { children: [
230
230
  views.length,