@adecore/editor-react 0.31.12 → 0.32.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
@@ -1,51 +1,66 @@
1
+ import { c as _c } from "react/compiler-runtime";
1
2
  import { useEffect, useState } from 'react';
2
3
  import { useTranslation } from 'react-i18next';
3
4
  import { patchLayoutOf } from './patch-layout.js';
4
5
  const DEFAULT_TIMER = {
5
- set: (callback, delay) => setTimeout(callback, delay),
6
- clear: (handle) => clearTimeout(handle)
6
+ set: (callback, delay) => setTimeout(callback, delay),
7
+ clear: handle => clearTimeout(handle)
7
8
  };
8
9
  const CHANGE_LAYER = 'patch';
9
10
  function numberOf(line, numbers, width) {
10
- if (line.old === null && line.new === null) {
11
- return null;
12
- }
13
- if (numbers === 'single') {
14
- return String(line.new ?? line.old);
15
- }
16
- const pad = (value) => (value === null ? '' : String(value)).padStart(width, ' ');
17
- return `${pad(line.old)} ${pad(line.new)}`;
11
+ if (line.old === null && line.new === null) {
12
+ return null;
13
+ }
14
+ if (numbers === 'single') {
15
+ return String(line.new ?? line.old);
16
+ }
17
+ const pad = value => (value === null ? '' : String(value)).padStart(width, ' ');
18
+ return `${pad(line.old)} ${pad(line.new)}`;
18
19
  }
19
20
  /* Runs of one role become one highlight, so the bar of consecutive changed lines is one stripe. */
20
21
  function highlightsOf(layout) {
21
- const highlights = [];
22
- const marks = [];
23
- const lines = layout.lines;
24
- for (let index = 0; index < lines.length; index++) {
25
- const role = lines[index].role;
26
- if (role === 'file-header') {
27
- highlights.push({ startLine: index + 1, endLine: index + 1, color: '--text-muted', fill: '--surface-raised' });
28
- }
29
- else if (role === 'hunk-header') {
30
- highlights.push({ startLine: index + 1, endLine: index + 1, color: '--accent' });
31
- }
32
- else if (role === 'added' || role === 'removed') {
33
- let end = index;
34
- while (end + 1 < lines.length && lines[end + 1].role === role) {
35
- end++;
36
- }
37
- const removed = role === 'removed';
38
- highlights.push({
39
- startLine: index + 1,
40
- endLine: end + 1,
41
- color: removed ? '--editor-deleted' : '--editor-added',
42
- bar: removed ? 'hatched' : 'solid'
43
- });
44
- marks.push({ startLine: index + 1, endLine: end + 1, kind: removed ? 'deleted' : 'added' });
45
- index = end;
46
- }
22
+ const highlights = [];
23
+ const marks = [];
24
+ const lines = layout.lines;
25
+ for (let index = 0; index < lines.length; index++) {
26
+ const role = lines[index].role;
27
+ if (role === 'file-header') {
28
+ highlights.push({
29
+ startLine: index + 1,
30
+ endLine: index + 1,
31
+ color: '--text-muted',
32
+ fill: '--surface-raised'
33
+ });
34
+ } else if (role === 'hunk-header') {
35
+ highlights.push({
36
+ startLine: index + 1,
37
+ endLine: index + 1,
38
+ color: '--accent'
39
+ });
40
+ } else if (role === 'added' || role === 'removed') {
41
+ let end = index;
42
+ while (end + 1 < lines.length && lines[end + 1].role === role) {
43
+ end++;
44
+ }
45
+ const removed = role === 'removed';
46
+ highlights.push({
47
+ startLine: index + 1,
48
+ endLine: end + 1,
49
+ color: removed ? '--editor-deleted' : '--editor-added',
50
+ bar: removed ? 'hatched' : 'solid'
51
+ });
52
+ marks.push({
53
+ startLine: index + 1,
54
+ endLine: end + 1,
55
+ kind: removed ? 'deleted' : 'added'
56
+ });
57
+ index = end;
47
58
  }
48
- return { highlights, marks };
59
+ }
60
+ return {
61
+ highlights,
62
+ marks
63
+ };
49
64
  }
50
65
  /*
51
66
  * Draws a patch in the editor the way the diff views draw a change: tinted lines, numbers from the hunk
@@ -54,129 +69,190 @@ function highlightsOf(layout) {
54
69
  * the edits to rest, and `onLayout` always does. Typing costs one pass over the text (bounded by the limits).
55
70
  */
56
71
  export function decoratePatch(editor, options = {}) {
57
- let layout = patchLayoutOf('', options.limits);
58
- let pending = false;
59
- let disposed = false;
60
- let length = 0;
61
- let wait = null;
62
- const timer = options.timer ?? DEFAULT_TIMER;
63
- const delay = options.delay ?? 150;
64
- const immediateBelow = options.immediateBelow ?? 100_000;
65
- const clearWait = () => {
66
- if (wait !== null) {
67
- timer.clear(wait);
68
- wait = null;
69
- }
70
- };
71
- const after = (callback) => {
72
- clearWait();
73
- wait = timer.set(() => {
74
- wait = null;
75
- callback();
76
- }, delay);
77
- };
78
- const apply = () => {
79
- const numbers = options.numbers ?? 'single';
80
- const lines = layout.lines;
81
- const width = lines.reduce((digits, line) => Math.max(digits, String(Math.max(line.old ?? 0, line.new ?? 0)).length), 1);
82
- editor.setLineNumbers((line) => {
83
- const entry = lines[line];
84
- return entry === undefined ? null : numberOf(entry, numbers, width);
85
- });
86
- const labels = options.labels;
87
- editor.setLineLabels(labels === undefined
88
- ? null
89
- : (line) => {
90
- const entry = lines[line];
91
- if (entry?.role === 'removed') {
92
- return labels.removed(entry.old);
93
- }
94
- if (entry?.role === 'added') {
95
- return labels.added(entry.new);
96
- }
97
- return entry?.role === 'context' ? labels.unchanged(entry.old, entry.new) : null;
98
- });
99
- const { highlights, marks } = highlightsOf(layout);
100
- editor.setLineHighlights(highlights);
101
- editor.setChangeMarks(marks, CHANGE_LAYER);
102
- };
103
- const decorate = () => {
104
- pending = false;
105
- if (disposed) {
106
- return;
107
- }
108
- const text = editor.getText();
109
- length = text.length;
110
- layout = patchLayoutOf(text, options.limits);
111
- apply();
112
- };
113
- const announce = () => {
114
- if (!disposed) {
115
- options.onLayout?.(layout);
116
- }
117
- };
118
- const read = () => {
119
- clearWait();
72
+ let layout = patchLayoutOf('', options.limits);
73
+ let pending = false;
74
+ let disposed = false;
75
+ let length = 0;
76
+ let wait = null;
77
+ const timer = options.timer ?? DEFAULT_TIMER;
78
+ const delay = options.delay ?? 150;
79
+ const immediateBelow = options.immediateBelow ?? 100_000;
80
+ const clearWait = () => {
81
+ if (wait !== null) {
82
+ timer.clear(wait);
83
+ wait = null;
84
+ }
85
+ };
86
+ const after = callback => {
87
+ clearWait();
88
+ wait = timer.set(() => {
89
+ wait = null;
90
+ callback();
91
+ }, delay);
92
+ };
93
+ const apply = () => {
94
+ const numbers = options.numbers ?? 'single';
95
+ const lines = layout.lines;
96
+ const width = lines.reduce((digits, line) => Math.max(digits, String(Math.max(line.old ?? 0, line.new ?? 0)).length), 1);
97
+ editor.setLineNumbers(line => {
98
+ const entry = lines[line];
99
+ return entry === undefined ? null : numberOf(entry, numbers, width);
100
+ });
101
+ const labels = options.labels;
102
+ editor.setLineLabels(labels === undefined ? null : line => {
103
+ const entry = lines[line];
104
+ if (entry?.role === 'removed') {
105
+ return labels.removed(entry.old);
106
+ }
107
+ if (entry?.role === 'added') {
108
+ return labels.added(entry.new);
109
+ }
110
+ return entry?.role === 'context' ? labels.unchanged(entry.old, entry.new) : null;
111
+ });
112
+ const {
113
+ highlights,
114
+ marks
115
+ } = highlightsOf(layout);
116
+ editor.setLineHighlights(highlights);
117
+ editor.setChangeMarks(marks, CHANGE_LAYER);
118
+ };
119
+ const decorate = () => {
120
+ pending = false;
121
+ if (disposed) {
122
+ return;
123
+ }
124
+ const text = editor.getText();
125
+ length = text.length;
126
+ layout = patchLayoutOf(text, options.limits);
127
+ apply();
128
+ };
129
+ const announce = () => {
130
+ if (!disposed) {
131
+ options.onLayout?.(layout);
132
+ }
133
+ };
134
+ const read = () => {
135
+ clearWait();
136
+ decorate();
137
+ announce();
138
+ };
139
+ const schedule = () => {
140
+ if (length < immediateBelow) {
141
+ if (pending) {
142
+ return;
143
+ }
144
+ pending = true;
145
+ queueMicrotask(() => {
120
146
  decorate();
121
- announce();
122
- };
123
- const schedule = () => {
124
- if (length < immediateBelow) {
125
- if (pending) {
126
- return;
127
- }
128
- pending = true;
129
- queueMicrotask(() => {
130
- decorate();
131
- after(announce);
132
- });
133
- return;
134
- }
135
- pending = true;
136
- after(() => {
137
- decorate();
138
- announce();
139
- });
140
- };
141
- const stop = editor.onTextChange(schedule);
142
- read();
143
- return {
144
- get layout() {
145
- return layout;
146
- },
147
- refresh: read,
148
- dispose() {
149
- disposed = true;
150
- clearWait();
151
- stop();
152
- editor.setLineNumbers(null);
153
- editor.setLineLabels(null);
154
- editor.setLineHighlights([]);
155
- editor.setChangeMarks([], CHANGE_LAYER);
156
- }
157
- };
147
+ after(announce);
148
+ });
149
+ return;
150
+ }
151
+ pending = true;
152
+ after(() => {
153
+ decorate();
154
+ announce();
155
+ });
156
+ };
157
+ const stop = editor.onTextChange(schedule);
158
+ read();
159
+ return {
160
+ get layout() {
161
+ return layout;
162
+ },
163
+ refresh: read,
164
+ dispose() {
165
+ disposed = true;
166
+ clearWait();
167
+ stop();
168
+ editor.setLineNumbers(null);
169
+ editor.setLineLabels(null);
170
+ editor.setLineHighlights([]);
171
+ editor.setChangeMarks([], CHANGE_LAYER);
172
+ }
173
+ };
158
174
  }
159
175
  /* Decorates a mounted editor as a patch for as long as it stands, in the editor namespace's words, and returns the layout for a file tree. */
160
- export function usePatchDecorations(editor, options = {}) {
161
- const { t } = useTranslation('editor');
162
- const [state, setState] = useState(null);
163
- const { numbers } = options;
164
- const { maxLines, maxCharacters } = options.limits ?? {};
165
- useEffect(() => {
166
- if (editor === null) {
167
- return;
168
- }
169
- const decoration = decoratePatch(editor, {
170
- ...(numbers === undefined ? {} : { numbers }),
171
- limits: { ...(maxLines === undefined ? {} : { maxLines }), ...(maxCharacters === undefined ? {} : { maxCharacters }) },
172
- labels: {
173
- added: (number) => t('diff.added', { number }),
174
- removed: (number) => t('diff.removed', { number }),
175
- unchanged: (old, fresh) => t('diff.unchanged', { old, new: fresh })
176
- },
177
- onLayout: (layout) => setState({ editor, layout })
178
- });
179
- return () => decoration.dispose();
180
- }, [editor, numbers, maxLines, maxCharacters, t]);
181
- return state !== null && state.editor === editor ? state.layout : null;
182
- }
176
+ export function usePatchDecorations(editor, t0) {
177
+ const $ = _c(11);
178
+ let t1;
179
+ if ($[0] !== t0) {
180
+ t1 = t0 === undefined ? {} : t0;
181
+ $[0] = t0;
182
+ $[1] = t1;
183
+ } else {
184
+ t1 = $[1];
185
+ }
186
+ const options = t1;
187
+ const {
188
+ t
189
+ } = useTranslation("editor");
190
+ const [state, setState] = useState(null);
191
+ const {
192
+ numbers
193
+ } = options;
194
+ let t2;
195
+ if ($[2] !== options.limits) {
196
+ t2 = options.limits ?? {};
197
+ $[2] = options.limits;
198
+ $[3] = t2;
199
+ } else {
200
+ t2 = $[3];
201
+ }
202
+ const {
203
+ maxLines,
204
+ maxCharacters
205
+ } = t2;
206
+ let t3;
207
+ let t4;
208
+ if ($[4] !== editor || $[5] !== maxCharacters || $[6] !== maxLines || $[7] !== numbers || $[8] !== t) {
209
+ t3 = () => {
210
+ if (editor === null) {
211
+ return;
212
+ }
213
+ const decoration = decoratePatch(editor, {
214
+ ...(numbers === undefined ? {} : {
215
+ numbers
216
+ }),
217
+ limits: {
218
+ ...(maxLines === undefined ? {} : {
219
+ maxLines
220
+ }),
221
+ ...(maxCharacters === undefined ? {} : {
222
+ maxCharacters
223
+ })
224
+ },
225
+ labels: {
226
+ added: number => t("diff.added", {
227
+ number
228
+ }),
229
+ removed: number_0 => t("diff.removed", {
230
+ number: number_0
231
+ }),
232
+ unchanged: (old, fresh) => t("diff.unchanged", {
233
+ old,
234
+ new: fresh
235
+ })
236
+ },
237
+ onLayout: layout => setState({
238
+ editor,
239
+ layout
240
+ })
241
+ });
242
+ return () => decoration.dispose();
243
+ };
244
+ t4 = [editor, numbers, maxLines, maxCharacters, t];
245
+ $[4] = editor;
246
+ $[5] = maxCharacters;
247
+ $[6] = maxLines;
248
+ $[7] = numbers;
249
+ $[8] = t;
250
+ $[9] = t3;
251
+ $[10] = t4;
252
+ } else {
253
+ t3 = $[9];
254
+ t4 = $[10];
255
+ }
256
+ useEffect(t3, t4);
257
+ return state !== null && state.editor === editor ? state.layout : null;
258
+ }