@adecore/editor-react 0.31.12 → 0.33.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 (137) hide show
  1. package/dist/AnchoredPopup.js +73 -19
  2. package/dist/AttributionCard.js +162 -4
  3. package/dist/BaselineStatus.js +62 -8
  4. package/dist/CallHierarchyPanel.js +977 -60
  5. package/dist/ChangeReview.js +76 -25
  6. package/dist/CodeAuthorsCard.js +314 -14
  7. package/dist/CompletionPopup.js +490 -83
  8. package/dist/DiffView.js +548 -181
  9. package/dist/EditorContextMenu.js +352 -34
  10. package/dist/EditorView.js +276 -99
  11. package/dist/FindReplace.js +525 -67
  12. package/dist/HoverCard.js +378 -38
  13. package/dist/HoverSections.js +367 -56
  14. package/dist/LanguagePopups.js +95 -34
  15. package/dist/Markdown.js +41 -6
  16. package/dist/PanelResizeHandle.js +199 -66
  17. package/dist/PathText.js +49 -7
  18. package/dist/PeekPanel.js +675 -72
  19. package/dist/PickPopup.js +304 -34
  20. package/dist/RenameCard.js +679 -85
  21. package/dist/RenderedDocs.js +329 -58
  22. package/dist/SignatureCard.js +91 -7
  23. package/dist/SplitDiffView.js +344 -254
  24. package/dist/SymbolPicker.js +440 -85
  25. package/dist/call-hierarchy-model.js +102 -68
  26. package/dist/call-hierarchy.js +458 -359
  27. package/dist/code-actions-model.js +88 -76
  28. package/dist/code-actions.js +372 -283
  29. package/dist/code-authors.js +64 -55
  30. package/dist/code-vision-model.js +134 -127
  31. package/dist/code-vision.js +224 -206
  32. package/dist/completion-call.js +94 -67
  33. package/dist/completion-model.js +334 -244
  34. package/dist/completion.js +840 -649
  35. package/dist/conflict-model.js +35 -29
  36. package/dist/context-menu-rows.js +42 -17
  37. package/dist/context-menu.js +64 -46
  38. package/dist/definition-link.js +88 -85
  39. package/dist/diagnostics-model.js +74 -55
  40. package/dist/diagnostics.js +121 -100
  41. package/dist/diff-expansion.js +38 -35
  42. package/dist/diff-overlays.js +144 -22
  43. package/dist/diff-syntax.js +65 -42
  44. package/dist/diff-wordmarks.js +26 -23
  45. package/dist/doc-comment-model.js +265 -216
  46. package/dist/editor-language.js +177 -152
  47. package/dist/error-message.js +2 -2
  48. package/dist/find-query.js +49 -36
  49. package/dist/folding.js +81 -62
  50. package/dist/format-on-type.js +86 -67
  51. package/dist/highlight-layers.js +19 -20
  52. package/dist/highlights.js +105 -83
  53. package/dist/history.js +44 -38
  54. package/dist/holder.js +18 -18
  55. package/dist/host-types.js +1 -1
  56. package/dist/hover-content.js +167 -129
  57. package/dist/hover.js +285 -245
  58. package/dist/index.js +10 -10
  59. package/dist/inlay-hints.js +369 -324
  60. package/dist/key-priority.js +34 -31
  61. package/dist/language-ids.js +45 -42
  62. package/dist/line-edits.js +74 -28
  63. package/dist/line-text.js +18 -3
  64. package/dist/locales/en.json +38 -38
  65. package/dist/locales/nl.json +41 -41
  66. package/dist/models.js +1 -1
  67. package/dist/navigation-history.js +40 -41
  68. package/dist/navigation.js +141 -123
  69. package/dist/panel-size.js +8 -8
  70. package/dist/patch-decorations.js +236 -160
  71. package/dist/patch-layout.js +331 -262
  72. package/dist/paths.js +3 -3
  73. package/dist/peek-model.js +86 -69
  74. package/dist/peek.js +254 -192
  75. package/dist/pick.js +164 -157
  76. package/dist/popup-focus.js +5 -5
  77. package/dist/popup-placement.js +36 -21
  78. package/dist/popups.js +13 -13
  79. package/dist/project-language.js +228 -211
  80. package/dist/project-problems.js +81 -69
  81. package/dist/proposal-model.js +163 -126
  82. package/dist/recent-choices.js +25 -25
  83. package/dist/refresher.js +44 -49
  84. package/dist/rename-model.js +113 -113
  85. package/dist/rename.js +321 -233
  86. package/dist/rendered-docs.d.ts +4 -2
  87. package/dist/rendered-docs.js +384 -318
  88. package/dist/rendering-context.js +5 -3
  89. package/dist/rendering.js +22 -4
  90. package/dist/review-group.js +42 -39
  91. package/dist/row-host.d.ts +4 -2
  92. package/dist/row-host.js +90 -78
  93. package/dist/selection-ranges.js +21 -17
  94. package/dist/semantic-delta.js +22 -19
  95. package/dist/semantic-model.js +86 -73
  96. package/dist/semantic-tokens.js +201 -162
  97. package/dist/shortcut-keys.js +16 -10
  98. package/dist/signature-model.js +34 -28
  99. package/dist/signature.js +177 -129
  100. package/dist/snippet-field-transforms.js +118 -106
  101. package/dist/snippet-indent.js +48 -43
  102. package/dist/snippet-range-order.js +11 -11
  103. package/dist/snippet-session.js +703 -667
  104. package/dist/snippet-transform-client.js +59 -59
  105. package/dist/snippet-transform-format.js +285 -263
  106. package/dist/snippet-transform-protocol.js +1 -1
  107. package/dist/snippet-transform-queue.js +163 -153
  108. package/dist/snippet-transform-worker.js +42 -35
  109. package/dist/snippet-variable-names.js +1 -36
  110. package/dist/snippet-variables.js +53 -63
  111. package/dist/snippet.js +477 -405
  112. package/dist/split-alignment.js +47 -35
  113. package/dist/split-scroll.js +42 -40
  114. package/dist/symbol-links.js +33 -25
  115. package/dist/symbol-picker-model.js +126 -116
  116. package/dist/symbol-picker.js +98 -59
  117. package/dist/symbols.js +117 -88
  118. package/dist/testing.js +248 -165
  119. package/dist/timers.js +35 -30
  120. package/dist/use-panel-body.js +49 -8
  121. package/dist/use-problem-counts.js +29 -15
  122. package/dist/view-state.js +54 -33
  123. package/dist/word-diff.js +18 -18
  124. package/dist/workspace-edit.js +300 -249
  125. package/package.json +6 -6
  126. package/src/CallHierarchyPanel.tsx +2 -2
  127. package/src/DiffView.tsx +3 -3
  128. package/src/FindReplace.tsx +2 -2
  129. package/src/LanguagePopups.tsx +2 -0
  130. package/src/PeekPanel.tsx +3 -3
  131. package/src/RenderedDocs.tsx +9 -10
  132. package/src/SymbolPicker.tsx +2 -2
  133. package/src/diff-overlays.tsx +6 -4
  134. package/src/locales/en.json +38 -38
  135. package/src/locales/nl.json +41 -41
  136. package/src/rendered-docs.ts +14 -3
  137. package/src/row-host.ts +14 -3
package/dist/DiffView.js CHANGED
@@ -1,203 +1,570 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useLayoutEffect, useMemo, useRef, useState } from 'react';
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { useLayoutEffect, useRef, useState } from 'react';
3
3
  import { useTranslation } from 'react-i18next';
4
4
  import { parseChord } from '@adecore/editor/keymap';
5
5
  import { diffDisplay, diffSplit } from '@adecore/merge';
6
6
  import { wordMarks } from './diff-wordmarks.js';
7
- import { DiffOverlays } from './diff-overlays.js';
8
- import { SplitDiffView } from './SplitDiffView.js';
7
+ import { DiffOverlays } from "./diff-overlays.js";
8
+ import { SplitDiffView } from "./SplitDiffView.js";
9
9
  import { LineActionHost, RowHost } from './row-host.js';
10
10
  import { DEFAULT_UNFOLD_LIMITS, expandDiff } from './diff-expansion.js';
11
- function UnifiedDiffView({ engine, document, display, unfold, blocked, theme, tokens, wrap = true, fill = false, maxHeight, label, className, ref, onMount }) {
12
- const { t } = useTranslation('editor');
13
- const emphasis = useMemo(() => wordMarks(document), [document]);
14
- const element = useRef(null);
15
- const current = useRef({ display, tokens, theme, wrap, label });
16
- const applied = useRef({ theme, wrap, label });
17
- const [mounted, setMounted] = useState(null);
18
- const [height, setHeight] = useState(0);
19
- useLayoutEffect(() => {
20
- current.current = { display, tokens, theme, wrap, label };
21
- });
22
- useLayoutEffect(() => {
23
- const host = element.current;
24
- if (host === null) {
25
- return;
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ function UnifiedDiffView(t0) {
13
+ const $ = _c(69);
14
+ const {
15
+ engine,
16
+ document,
17
+ display,
18
+ unfold,
19
+ blocked,
20
+ theme,
21
+ tokens,
22
+ wrap: t1,
23
+ fill: t2,
24
+ maxHeight,
25
+ label,
26
+ className,
27
+ ref,
28
+ onMount
29
+ } = t0;
30
+ const wrap = t1 === undefined ? true : t1;
31
+ const fill = t2 === undefined ? false : t2;
32
+ const {
33
+ t
34
+ } = useTranslation("editor");
35
+ let t3;
36
+ if ($[0] !== document) {
37
+ t3 = wordMarks(document);
38
+ $[0] = document;
39
+ $[1] = t3;
40
+ } else {
41
+ t3 = $[1];
42
+ }
43
+ const emphasis = t3;
44
+ const element = useRef(null);
45
+ let t4;
46
+ if ($[2] !== display || $[3] !== label || $[4] !== theme || $[5] !== tokens || $[6] !== wrap) {
47
+ t4 = {
48
+ display,
49
+ tokens,
50
+ theme,
51
+ wrap,
52
+ label
53
+ };
54
+ $[2] = display;
55
+ $[3] = label;
56
+ $[4] = theme;
57
+ $[5] = tokens;
58
+ $[6] = wrap;
59
+ $[7] = t4;
60
+ } else {
61
+ t4 = $[7];
62
+ }
63
+ const current = useRef(t4);
64
+ let t5;
65
+ if ($[8] !== label || $[9] !== theme || $[10] !== wrap) {
66
+ t5 = {
67
+ theme,
68
+ wrap,
69
+ label
70
+ };
71
+ $[8] = label;
72
+ $[9] = theme;
73
+ $[10] = wrap;
74
+ $[11] = t5;
75
+ } else {
76
+ t5 = $[11];
77
+ }
78
+ const applied = useRef(t5);
79
+ const [mounted, setMounted] = useState(null);
80
+ const [height, setHeight] = useState(0);
81
+ let t6;
82
+ if ($[12] !== display || $[13] !== label || $[14] !== theme || $[15] !== tokens || $[16] !== wrap) {
83
+ t6 = () => {
84
+ current.current = {
85
+ display,
86
+ tokens,
87
+ theme,
88
+ wrap,
89
+ label
90
+ };
91
+ };
92
+ $[12] = display;
93
+ $[13] = label;
94
+ $[14] = theme;
95
+ $[15] = tokens;
96
+ $[16] = wrap;
97
+ $[17] = t6;
98
+ } else {
99
+ t6 = $[17];
100
+ }
101
+ useLayoutEffect(t6);
102
+ let t7;
103
+ let t8;
104
+ if ($[18] !== engine) {
105
+ t7 = () => {
106
+ const host = element.current;
107
+ if (host === null) {
108
+ return;
109
+ }
110
+ const initial = current.current;
111
+ const editor = engine.mount(host, {
112
+ text: initial.display.text,
113
+ theme: initial.theme,
114
+ wrap: initial.wrap,
115
+ label: initial.label,
116
+ readOnly: true,
117
+ guides: false,
118
+ foldOutline: "off",
119
+ folding: false,
120
+ handBack: [parseChord("Mod+Enter")]
121
+ });
122
+ applied.current = {
123
+ theme: initial.theme,
124
+ wrap: initial.wrap,
125
+ label: initial.label
126
+ };
127
+ editor.setBlocks([]);
128
+ editor.setLineTokens(line => {
129
+ const {
130
+ display: display_0,
131
+ tokens: tokens_0
132
+ } = current.current;
133
+ const row = display_0.rows[line];
134
+ return row === undefined ? null : tokens_0?.get(row.new === undefined ? "old" : "new", (row.new ?? row.old).index);
135
+ });
136
+ setMounted({
137
+ engine,
138
+ editor,
139
+ rows: new RowHost(editor, "diff-gaps"),
140
+ actions: new LineActionHost(editor, "diff-status")
141
+ });
142
+ const measure = () => setHeight(editor.getContentHeight());
143
+ const stop = editor.onViewChange(measure);
144
+ measure();
145
+ return () => {
146
+ stop();
147
+ editor.dispose();
148
+ };
149
+ };
150
+ t8 = [engine];
151
+ $[18] = engine;
152
+ $[19] = t7;
153
+ $[20] = t8;
154
+ } else {
155
+ t7 = $[19];
156
+ t8 = $[20];
157
+ }
158
+ useLayoutEffect(t7, t8);
159
+ let t10;
160
+ let t9;
161
+ if ($[21] !== display || $[22] !== emphasis || $[23] !== engine || $[24] !== mounted) {
162
+ t9 = () => {
163
+ if (mounted === null || mounted.engine !== engine) {
164
+ return;
165
+ }
166
+ const {
167
+ editor: editor_0,
168
+ rows,
169
+ actions
170
+ } = mounted;
171
+ editor_0.setText(display.text);
172
+ editor_0.setLineNumbers(line_0 => {
173
+ const row_0 = current.current.display.rows[line_0];
174
+ return row_0 === undefined ? null : String((row_0.new ?? row_0.old).number);
175
+ });
176
+ const highlights = [];
177
+ for (const [index, row_1] of display.rows.entries()) {
178
+ if (row_1.change !== "delete" && row_1.change !== "insert") {
179
+ continue;
26
180
  }
27
- const initial = current.current;
28
- const editor = engine.mount(host, {
29
- text: initial.display.text,
30
- theme: initial.theme,
31
- wrap: initial.wrap,
32
- label: initial.label,
33
- readOnly: true,
34
- guides: false,
35
- foldOutline: 'off',
36
- folding: false,
37
- // Prompt cards use this chord for their primary action; a read-only review has no split-line action.
38
- handBack: [parseChord('Mod+Enter')]
39
- });
40
- applied.current = { theme: initial.theme, wrap: initial.wrap, label: initial.label };
41
- editor.setBlocks([]);
42
- editor.setLineTokens((line) => {
43
- const { display, tokens } = current.current;
44
- const row = display.rows[line];
45
- return row === undefined ? null : tokens?.get(row.new === undefined ? 'old' : 'new', (row.new ?? row.old).index);
181
+ const removed = row_1.change === "delete";
182
+ highlights.push({
183
+ startLine: index + 1,
184
+ endLine: index + 1,
185
+ color: removed ? "--editor-deleted" : "--editor-added",
186
+ bar: removed ? "hatched" : "solid",
187
+ emphasis: [(removed ? emphasis.old.get(row_1.old.index) : emphasis.new.get(row_1.new.index)) ?? []]
46
188
  });
47
- setMounted({ engine, editor, rows: new RowHost(editor, 'diff-gaps'), actions: new LineActionHost(editor, 'diff-status') });
48
- const measure = () => setHeight(editor.getContentHeight());
49
- const stop = editor.onViewChange(measure);
50
- measure();
51
- return () => {
52
- stop();
53
- editor.dispose();
189
+ }
190
+ editor_0.setLineHighlights(highlights);
191
+ editor_0.setChangeMarks(highlights.map(_temp));
192
+ rows.set(display.gaps.map(t11 => {
193
+ const {
194
+ before,
195
+ row: row_2
196
+ } = t11;
197
+ return {
198
+ id: `gap-${row_2.id}`,
199
+ line: Math.min(before, Math.max(0, display.rows.length - 1)),
200
+ placement: before < display.rows.length ? "above" : "below",
201
+ height: 32
54
202
  };
55
- }, [engine]);
56
- useLayoutEffect(() => {
57
- if (mounted === null || mounted.engine !== engine) {
58
- return;
59
- }
60
- const { editor, rows, actions } = mounted;
61
- editor.setText(display.text);
62
- editor.setLineNumbers((line) => {
63
- const row = current.current.display.rows[line];
64
- return row === undefined ? null : String((row.new ?? row.old).number);
65
- });
66
- const highlights = [];
67
- for (const [index, row] of display.rows.entries()) {
68
- if (row.change !== 'delete' && row.change !== 'insert') {
69
- continue;
70
- }
71
- const removed = row.change === 'delete';
72
- highlights.push({
73
- startLine: index + 1,
74
- endLine: index + 1,
75
- color: removed ? '--editor-deleted' : '--editor-added',
76
- bar: removed ? 'hatched' : 'solid',
77
- emphasis: [(removed ? emphasis.old.get(row.old.index) : emphasis.new.get(row.new.index)) ?? []]
78
- });
203
+ }));
204
+ actions.set(display.rows.flatMap(_temp2));
205
+ };
206
+ t10 = [mounted, engine, display, emphasis];
207
+ $[21] = display;
208
+ $[22] = emphasis;
209
+ $[23] = engine;
210
+ $[24] = mounted;
211
+ $[25] = t10;
212
+ $[26] = t9;
213
+ } else {
214
+ t10 = $[25];
215
+ t9 = $[26];
216
+ }
217
+ useLayoutEffect(t9, t10);
218
+ let t11;
219
+ let t12;
220
+ if ($[27] !== display || $[28] !== engine || $[29] !== mounted || $[30] !== t) {
221
+ t11 = () => {
222
+ if (mounted === null || mounted.engine !== engine) {
223
+ return;
224
+ }
225
+ mounted.editor.setLineLabels(line_2 => {
226
+ const row_4 = display.rows[line_2];
227
+ if (row_4?.change === "delete") {
228
+ return t("diff.removed", {
229
+ number: row_4.old.number
230
+ });
79
231
  }
80
- editor.setLineHighlights(highlights);
81
- editor.setChangeMarks(highlights.map((highlight) => ({
82
- startLine: highlight.startLine,
83
- endLine: highlight.endLine,
84
- kind: highlight.bar === 'hatched' ? 'deleted' : 'added'
85
- })));
86
- rows.set(display.gaps.map(({ before, row }) => ({
87
- id: `gap-${row.id}`,
88
- line: Math.min(before, Math.max(0, display.rows.length - 1)),
89
- placement: before < display.rows.length ? 'above' : 'below',
90
- height: 32
91
- })));
92
- actions.set(display.rows.flatMap((row, line) => (row.noNewline === undefined ? [] : [{ id: `no-newline-${line}`, line }])));
93
- }, [mounted, engine, display, emphasis]);
94
- useLayoutEffect(() => {
95
- if (mounted === null || mounted.engine !== engine) {
96
- return;
232
+ if (row_4?.change === "insert") {
233
+ return t("diff.added", {
234
+ number: row_4.new.number
235
+ });
97
236
  }
98
- // The color of a changed line is not the only thing that says so: the gutter carries a sentence with the numbers it reads from.
99
- mounted.editor.setLineLabels((line) => {
100
- const row = display.rows[line];
101
- if (row?.change === 'delete') {
102
- return t('diff.removed', { number: row.old.number });
103
- }
104
- if (row?.change === 'insert') {
105
- return t('diff.added', { number: row.new.number });
106
- }
107
- return row?.old !== undefined && row.new !== undefined ? t('diff.unchanged', { old: row.old.number, new: row.new.number }) : null;
237
+ return row_4?.old !== undefined && row_4.new !== undefined ? t("diff.unchanged", {
238
+ old: row_4.old.number,
239
+ new: row_4.new.number
240
+ }) : null;
241
+ });
242
+ };
243
+ t12 = [mounted, engine, display, t];
244
+ $[27] = display;
245
+ $[28] = engine;
246
+ $[29] = mounted;
247
+ $[30] = t;
248
+ $[31] = t11;
249
+ $[32] = t12;
250
+ } else {
251
+ t11 = $[31];
252
+ t12 = $[32];
253
+ }
254
+ useLayoutEffect(t11, t12);
255
+ let t13;
256
+ let t14;
257
+ if ($[33] !== engine || $[34] !== label || $[35] !== mounted || $[36] !== theme || $[37] !== wrap) {
258
+ t13 = () => {
259
+ if (mounted === null || mounted.engine !== engine) {
260
+ return;
261
+ }
262
+ const previous = applied.current;
263
+ if (previous.theme !== theme) {
264
+ mounted.editor.setTheme(theme);
265
+ }
266
+ if (previous.wrap !== wrap) {
267
+ mounted.editor.setWrap(wrap);
268
+ }
269
+ if (previous.label !== label) {
270
+ mounted.editor.setLabel(label);
271
+ }
272
+ applied.current = {
273
+ theme,
274
+ wrap,
275
+ label
276
+ };
277
+ };
278
+ t14 = [mounted, engine, theme, wrap, label];
279
+ $[33] = engine;
280
+ $[34] = label;
281
+ $[35] = mounted;
282
+ $[36] = theme;
283
+ $[37] = wrap;
284
+ $[38] = t13;
285
+ $[39] = t14;
286
+ } else {
287
+ t13 = $[38];
288
+ t14 = $[39];
289
+ }
290
+ useLayoutEffect(t13, t14);
291
+ let t15;
292
+ if ($[40] !== engine || $[41] !== mounted || $[42] !== tokens) {
293
+ t15 = () => {
294
+ if (mounted === null || mounted.engine !== engine) {
295
+ return;
296
+ }
297
+ const refresh = () => {
298
+ mounted.editor.setLineTokens(line_3 => {
299
+ const row_5 = current.current.display.rows[line_3];
300
+ return row_5 === undefined ? null : current.current.tokens?.get(row_5.new === undefined ? "old" : "new", (row_5.new ?? row_5.old).index);
108
301
  });
109
- }, [mounted, engine, display, t]);
110
- useLayoutEffect(() => {
111
- if (mounted === null || mounted.engine !== engine) {
112
- return;
302
+ };
303
+ refresh();
304
+ const ownerWindow = element.current?.ownerDocument.defaultView;
305
+ let pending = false;
306
+ let stopped = false;
307
+ let frame;
308
+ const schedule = () => {
309
+ if (pending) {
310
+ return;
113
311
  }
114
- const previous = applied.current;
115
- if (previous.theme !== theme) {
116
- mounted.editor.setTheme(theme);
117
- }
118
- if (previous.wrap !== wrap) {
119
- mounted.editor.setWrap(wrap);
120
- }
121
- if (previous.label !== label) {
122
- mounted.editor.setLabel(label);
123
- }
124
- applied.current = { theme, wrap, label };
125
- }, [mounted, engine, theme, wrap, label]);
126
- useLayoutEffect(() => {
127
- if (mounted === null || mounted.engine !== engine) {
128
- return;
129
- }
130
- const refresh = () => {
131
- mounted.editor.setLineTokens((line) => {
132
- const row = current.current.display.rows[line];
133
- return row === undefined ? null : current.current.tokens?.get(row.new === undefined ? 'old' : 'new', (row.new ?? row.old).index);
134
- });
135
- };
136
- refresh();
137
- const ownerWindow = element.current?.ownerDocument.defaultView;
138
- let pending = false;
139
- let stopped = false;
140
- let frame;
141
- const schedule = () => {
142
- if (pending) {
143
- return;
144
- }
145
- pending = true;
146
- const paint = () => {
147
- pending = false;
148
- if (!stopped) {
149
- refresh();
150
- }
151
- };
152
- if (ownerWindow?.requestAnimationFrame !== undefined) {
153
- frame = ownerWindow.requestAnimationFrame(paint);
154
- }
155
- else {
156
- queueMicrotask(paint);
157
- }
158
- };
159
- const stop = tokens?.subscribe(schedule);
160
- return () => {
161
- stopped = true;
162
- stop?.();
163
- if (frame !== undefined) {
164
- ownerWindow?.cancelAnimationFrame?.(frame);
165
- }
312
+ pending = true;
313
+ const paint = () => {
314
+ pending = false;
315
+ if (!stopped) {
316
+ refresh();
317
+ }
166
318
  };
167
- }, [mounted, engine, tokens, display]);
168
- useLayoutEffect(() => {
169
- if (mounted !== null && mounted.engine === engine) {
170
- return onMount?.(mounted.editor);
319
+ if (ownerWindow?.requestAnimationFrame !== undefined) {
320
+ frame = ownerWindow.requestAnimationFrame(paint);
321
+ } else {
322
+ queueMicrotask(paint);
171
323
  }
172
- }, [mounted, engine, onMount]);
173
- const limit = maxHeight !== undefined && Number.isFinite(maxHeight) && maxHeight > 0 ? maxHeight : Infinity;
174
- return (_jsxs("div", { className: `adecore-editor-diff ${className ?? ''}`, ref: ref, "data-scroll": fill || height > limit, style: { position: 'relative', minHeight: 0, height: fill ? '100%' : Math.min(height, limit) }, children: [_jsx("div", { ref: element, style: { position: 'absolute', inset: 0 } }), mounted !== null && mounted.engine === engine && _jsx(DiffOverlays, { mounted: mounted, display: display, unfold: unfold, blocked: blocked })] }));
324
+ };
325
+ const stop_0 = tokens?.subscribe(schedule);
326
+ return () => {
327
+ stopped = true;
328
+ stop_0?.();
329
+ if (frame !== undefined) {
330
+ ownerWindow?.cancelAnimationFrame?.(frame);
331
+ }
332
+ };
333
+ };
334
+ $[40] = engine;
335
+ $[41] = mounted;
336
+ $[42] = tokens;
337
+ $[43] = t15;
338
+ } else {
339
+ t15 = $[43];
340
+ }
341
+ let t16;
342
+ if ($[44] !== display || $[45] !== engine || $[46] !== mounted || $[47] !== tokens) {
343
+ t16 = [mounted, engine, tokens, display];
344
+ $[44] = display;
345
+ $[45] = engine;
346
+ $[46] = mounted;
347
+ $[47] = tokens;
348
+ $[48] = t16;
349
+ } else {
350
+ t16 = $[48];
351
+ }
352
+ useLayoutEffect(t15, t16);
353
+ let t17;
354
+ let t18;
355
+ if ($[49] !== engine || $[50] !== mounted || $[51] !== onMount) {
356
+ t17 = () => {
357
+ if (mounted !== null && mounted.engine === engine) {
358
+ return onMount?.(mounted.editor);
359
+ }
360
+ };
361
+ t18 = [mounted, engine, onMount];
362
+ $[49] = engine;
363
+ $[50] = mounted;
364
+ $[51] = onMount;
365
+ $[52] = t17;
366
+ $[53] = t18;
367
+ } else {
368
+ t17 = $[52];
369
+ t18 = $[53];
370
+ }
371
+ useLayoutEffect(t17, t18);
372
+ const limit = maxHeight !== undefined && Number.isFinite(maxHeight) && maxHeight > 0 ? maxHeight : Infinity;
373
+ const t19 = `adecore-editor-diff ${className ?? ""}`;
374
+ const t20 = fill || height > limit;
375
+ const t21 = fill ? "100%" : Math.min(height, limit);
376
+ let t22;
377
+ if ($[54] !== t21) {
378
+ t22 = {
379
+ position: "relative",
380
+ minHeight: 0,
381
+ height: t21
382
+ };
383
+ $[54] = t21;
384
+ $[55] = t22;
385
+ } else {
386
+ t22 = $[55];
387
+ }
388
+ let t23;
389
+ if ($[56] === Symbol.for("react.memo_cache_sentinel")) {
390
+ t23 = /*#__PURE__*/_jsx("div", {
391
+ ref: element,
392
+ style: {
393
+ position: "absolute",
394
+ inset: 0
395
+ }
396
+ });
397
+ $[56] = t23;
398
+ } else {
399
+ t23 = $[56];
400
+ }
401
+ let t24;
402
+ if ($[57] !== blocked || $[58] !== display || $[59] !== engine || $[60] !== mounted || $[61] !== unfold) {
403
+ t24 = mounted !== null && mounted.engine === engine && /*#__PURE__*/_jsx(DiffOverlays, {
404
+ mounted: mounted,
405
+ display: display,
406
+ unfold: unfold,
407
+ blocked: blocked
408
+ });
409
+ $[57] = blocked;
410
+ $[58] = display;
411
+ $[59] = engine;
412
+ $[60] = mounted;
413
+ $[61] = unfold;
414
+ $[62] = t24;
415
+ } else {
416
+ t24 = $[62];
417
+ }
418
+ let t25;
419
+ if ($[63] !== ref || $[64] !== t19 || $[65] !== t20 || $[66] !== t22 || $[67] !== t24) {
420
+ t25 = /*#__PURE__*/_jsxs("div", {
421
+ className: t19,
422
+ ref: ref,
423
+ "data-scroll": t20,
424
+ style: t22,
425
+ children: [t23, t24]
426
+ });
427
+ $[63] = ref;
428
+ $[64] = t19;
429
+ $[65] = t20;
430
+ $[66] = t22;
431
+ $[67] = t24;
432
+ $[68] = t25;
433
+ } else {
434
+ t25 = $[68];
435
+ }
436
+ return t25;
437
+ }
438
+ function _temp2(row_3, line_1) {
439
+ return row_3.noNewline === undefined ? [] : [{
440
+ id: `no-newline-${line_1}`,
441
+ line: line_1
442
+ }];
443
+ }
444
+ function _temp(highlight) {
445
+ return {
446
+ startLine: highlight.startLine,
447
+ endLine: highlight.endLine,
448
+ kind: highlight.bar === "hatched" ? "deleted" : "added"
449
+ };
175
450
  }
176
451
  export function DiffView(props) {
177
- const { document, unfoldLimits = DEFAULT_UNFOLD_LIMITS } = props;
178
- const [expanded, setExpanded] = useState(() => ({
179
- document,
180
- gaps: new Map(),
181
- blocked: new Set()
182
- }));
183
- const gaps = expanded.document === document ? expanded.gaps : undefined;
184
- const blocked = expanded.document === document ? expanded.blocked : new Set();
185
- const projection = useMemo(() => (props.layout === 'split' ? diffSplit(document, gaps) : diffDisplay(document, gaps)), [props.layout, document, gaps]);
186
- const unfold = (id) => setExpanded((previous) => {
187
- const gaps = previous.document === document ? previous.gaps : new Map();
188
- const next = expandDiff(document, gaps, id, unfoldLimits);
189
- return {
452
+ const $ = _c(28);
453
+ const {
454
+ document,
455
+ unfoldLimits: t0
456
+ } = props;
457
+ const unfoldLimits = t0 === undefined ? DEFAULT_UNFOLD_LIMITS : t0;
458
+ let t1;
459
+ if ($[0] !== document) {
460
+ t1 = () => ({
461
+ document,
462
+ gaps: new Map(),
463
+ blocked: new Set()
464
+ });
465
+ $[0] = document;
466
+ $[1] = t1;
467
+ } else {
468
+ t1 = $[1];
469
+ }
470
+ const [expanded, setExpanded] = useState(t1);
471
+ const gaps = expanded.document === document ? expanded.gaps : undefined;
472
+ let t2;
473
+ if ($[2] !== document || $[3] !== expanded.blocked || $[4] !== expanded.document) {
474
+ t2 = expanded.document === document ? expanded.blocked : new Set();
475
+ $[2] = document;
476
+ $[3] = expanded.blocked;
477
+ $[4] = expanded.document;
478
+ $[5] = t2;
479
+ } else {
480
+ t2 = $[5];
481
+ }
482
+ const blocked = t2;
483
+ let projection;
484
+ let t3;
485
+ let unfold;
486
+ if ($[6] !== blocked || $[7] !== document || $[8] !== gaps || $[9] !== props || $[10] !== unfoldLimits) {
487
+ t3 = Symbol.for("react.early_return_sentinel");
488
+ bb0: {
489
+ projection = props.layout === "split" ? diffSplit(document, gaps) : diffDisplay(document, gaps);
490
+ let t4;
491
+ if ($[14] !== document || $[15] !== unfoldLimits) {
492
+ t4 = id => setExpanded(previous => {
493
+ const gaps_0 = previous.document === document ? previous.gaps : new Map();
494
+ const next = expandDiff(document, gaps_0, id, unfoldLimits);
495
+ return {
190
496
  document,
191
497
  gaps: next,
192
- blocked: new Set([...(previous.document === document ? previous.blocked : []), ...(next === gaps ? [id] : [])])
193
- };
194
- });
195
- if ('aligned' in projection && projection.old.lines.length > 0 && projection.new.lines.length > 0) {
196
- const visibleRows = projection.aligned.reduce((count, row) => count + (row.kind === 'gap' ? 0 : row.row.change === 'pair' ? 2 : 1), 0);
498
+ blocked: new Set([...(previous.document === document ? previous.blocked : []), ...(next === gaps_0 ? [id] : [])])
499
+ };
500
+ });
501
+ $[14] = document;
502
+ $[15] = unfoldLimits;
503
+ $[16] = t4;
504
+ } else {
505
+ t4 = $[16];
506
+ }
507
+ unfold = t4;
508
+ if ("aligned" in projection && projection.old.lines.length > 0 && projection.new.lines.length > 0) {
509
+ const visibleRows = projection.aligned.reduce(_temp3, 0);
197
510
  const wrap = props.wrap !== false && visibleRows <= (props.splitWrapLimit ?? 2000);
198
- return _jsx(SplitDiffView, { ...props, wrap: wrap, display: projection, unfold: unfold, blocked: blocked });
511
+ let t5;
512
+ if ($[17] !== blocked || $[18] !== projection || $[19] !== props || $[20] !== unfold || $[21] !== wrap) {
513
+ t5 = /*#__PURE__*/_jsx(SplitDiffView, {
514
+ ...props,
515
+ wrap: wrap,
516
+ display: projection,
517
+ unfold: unfold,
518
+ blocked: blocked
519
+ });
520
+ $[17] = blocked;
521
+ $[18] = projection;
522
+ $[19] = props;
523
+ $[20] = unfold;
524
+ $[21] = wrap;
525
+ $[22] = t5;
526
+ } else {
527
+ t5 = $[22];
528
+ }
529
+ t3 = t5;
530
+ break bb0;
531
+ }
199
532
  }
200
- // An absent side has no selectable text; keep additions and deletions in the unified editor.
201
- const display = 'aligned' in projection ? (projection.old.lines.length > 0 ? projection.old : projection.new) : projection;
202
- return _jsx(UnifiedDiffView, { ...props, display: display, unfold: unfold, blocked: blocked });
533
+ $[6] = blocked;
534
+ $[7] = document;
535
+ $[8] = gaps;
536
+ $[9] = props;
537
+ $[10] = unfoldLimits;
538
+ $[11] = projection;
539
+ $[12] = t3;
540
+ $[13] = unfold;
541
+ } else {
542
+ projection = $[11];
543
+ t3 = $[12];
544
+ unfold = $[13];
545
+ }
546
+ if (t3 !== Symbol.for("react.early_return_sentinel")) {
547
+ return t3;
548
+ }
549
+ const display = "aligned" in projection ? projection.old.lines.length > 0 ? projection.old : projection.new : projection;
550
+ let t4;
551
+ if ($[23] !== blocked || $[24] !== display || $[25] !== props || $[26] !== unfold) {
552
+ t4 = /*#__PURE__*/_jsx(UnifiedDiffView, {
553
+ ...props,
554
+ display: display,
555
+ unfold: unfold,
556
+ blocked: blocked
557
+ });
558
+ $[23] = blocked;
559
+ $[24] = display;
560
+ $[25] = props;
561
+ $[26] = unfold;
562
+ $[27] = t4;
563
+ } else {
564
+ t4 = $[27];
565
+ }
566
+ return t4;
203
567
  }
568
+ function _temp3(count, row) {
569
+ return count + (row.kind === "gap" ? 0 : row.row.change === "pair" ? 2 : 1);
570
+ }