@adecore/editor-react 0.31.11 → 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
package/dist/PeekPanel.js CHANGED
@@ -1,5 +1,5 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useMemo, useRef, useState } from 'react';
1
+ import { c as _c } from "react/compiler-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
3
  import { createPortal } from 'react-dom';
4
4
  import { useTranslation } from 'react-i18next';
5
5
  import { ChevronDown, ChevronRight, X } from 'lucide-react';
@@ -8,100 +8,703 @@ import { FileIcon, IconButton, Tooltip } from '@adecore/ui';
8
8
  import { formatNumber } from '@adecore/ui/format';
9
9
  import { basenameOf, relativeTo } from './paths.js';
10
10
  import { shikiLanguageOfPath } from './language-ids.js';
11
- import { PathText } from './PathText.js';
12
- import { PanelResizeHandle } from './PanelResizeHandle.js';
11
+ import { PathText } from "./PathText.js";
12
+ import { PanelResizeHandle } from "./PanelResizeHandle.js";
13
13
  import { usePanelBody } from './use-panel-body.js';
14
14
  import { PANEL_BODY_HEIGHT } from './panel-size.js';
15
15
  import { PEEK_HEIGHT } from './peek.js';
16
16
  import { distinguishingFolders, visualColumnOf } from './peek-model.js';
17
17
  import { useEditorRendering } from './rendering-context.js';
18
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
18
19
  const TAB_SIZE = 4;
19
20
  const CODE = 'font-mono text-(length:--code-font-size) [tab-size:4] [&_.line]:block [&_.line]:h-(--code-line-height) [&_.line]:leading-(--code-line-height) [&_pre]:m-0 [&_pre]:bg-transparent! [&_pre]:p-0 [&_pre]:whitespace-pre [&_code]:font-mono';
20
21
  /* The code around the active reference, drawn like the editor's own rows: its gutter, the line the reference is on and the name marked. */
21
- export function Preview({ preview }) {
22
- const { theme, highlight } = useEditorRendering();
23
- const scroller = useRef(null);
24
- const [html, setHtml] = useState(null);
25
- const path = preview === null ? null : fileUriToPath(preview.uri);
26
- const key = preview === null ? '' : `${theme}\0${path}\0${preview.text}`;
27
- useEffect(() => {
28
- if (preview === null || highlight === undefined) {
29
- return;
22
+ export function Preview(t0) {
23
+ const $ = _c(51);
24
+ const {
25
+ preview
26
+ } = t0;
27
+ const {
28
+ theme,
29
+ highlight
30
+ } = useEditorRendering();
31
+ const scroller = useRef(null);
32
+ const [html, setHtml] = useState(null);
33
+ let t1;
34
+ if ($[0] !== preview) {
35
+ t1 = preview === null ? null : fileUriToPath(preview.uri);
36
+ $[0] = preview;
37
+ $[1] = t1;
38
+ } else {
39
+ t1 = $[1];
40
+ }
41
+ const path = t1;
42
+ const key = preview === null ? "" : `${theme}\0${path}\0${preview.text}`;
43
+ let t2;
44
+ let t3;
45
+ if ($[2] !== highlight || $[3] !== key || $[4] !== path || $[5] !== preview || $[6] !== theme) {
46
+ t2 = () => {
47
+ if (preview === null || highlight === undefined) {
48
+ return;
49
+ }
50
+ let alive = true;
51
+ highlight(preview.text, shikiLanguageOfPath(path ?? preview.uri), theme).then(result => alive && setHtml({
52
+ key,
53
+ html: result
54
+ })).catch(_temp);
55
+ return () => {
56
+ alive = false;
57
+ };
58
+ };
59
+ t3 = [preview, path, theme, key, highlight];
60
+ $[2] = highlight;
61
+ $[3] = key;
62
+ $[4] = path;
63
+ $[5] = preview;
64
+ $[6] = theme;
65
+ $[7] = t2;
66
+ $[8] = t3;
67
+ } else {
68
+ t2 = $[7];
69
+ t3 = $[8];
70
+ }
71
+ useEffect(t2, t3);
72
+ let t4;
73
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
74
+ t4 = () => {
75
+ scroller.current?.scrollTo(0, 0);
76
+ };
77
+ $[9] = t4;
78
+ } else {
79
+ t4 = $[9];
80
+ }
81
+ let t5;
82
+ if ($[10] !== preview) {
83
+ t5 = [preview];
84
+ $[10] = preview;
85
+ $[11] = t5;
86
+ } else {
87
+ t5 = $[11];
88
+ }
89
+ useEffect(t4, t5);
90
+ if (preview === null) {
91
+ let t6;
92
+ if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
93
+ t6 = /*#__PURE__*/_jsx("div", {
94
+ className: "min-w-0 flex-1"
95
+ });
96
+ $[12] = t6;
97
+ } else {
98
+ t6 = $[12];
99
+ }
100
+ return t6;
101
+ }
102
+ let name;
103
+ let t10;
104
+ let t11;
105
+ let t6;
106
+ let t7;
107
+ let t8;
108
+ let t9;
109
+ if ($[13] !== preview.active || $[14] !== preview.name || $[15] !== preview.startLine || $[16] !== preview.text) {
110
+ const lines = preview.text.split("\n");
111
+ name = preview.name === null ? null : columnsOf(lines[preview.active] ?? "", preview.name);
112
+ t10 = scroller;
113
+ t11 = "relative min-w-0 flex-1 overflow-auto pt-1";
114
+ t8 = "relative flex min-w-max";
115
+ const t12 = `calc(${preview.active} * var(--code-line-height))`;
116
+ if ($[24] !== t12) {
117
+ t9 = /*#__PURE__*/_jsx("div", {
118
+ className: "absolute inset-x-0 bg-surface-hover",
119
+ style: {
120
+ top: t12,
121
+ height: "var(--code-line-height)"
30
122
  }
31
- let alive = true;
32
- highlight(preview.text, shikiLanguageOfPath(path ?? preview.uri), theme)
33
- .then((result) => alive && setHtml({ key, html: result }))
34
- .catch(() => undefined);
35
- return () => {
36
- alive = false;
37
- };
38
- }, [preview, path, theme, key, highlight]);
39
- useEffect(() => {
40
- scroller.current?.scrollTo(0, 0);
41
- }, [preview]);
42
- if (preview === null) {
43
- return _jsx("div", { className: "min-w-0 flex-1" });
123
+ });
124
+ $[24] = t12;
125
+ $[25] = t9;
126
+ } else {
127
+ t9 = $[25];
44
128
  }
45
- const lines = preview.text.split('\n');
46
- const name = preview.name === null ? null : columnsOf(lines[preview.active] ?? '', preview.name);
47
- return (_jsx("div", { ref: scroller, className: "relative min-w-0 flex-1 overflow-auto pt-1", children: _jsxs("div", { className: "relative flex min-w-max", children: [_jsx("div", { className: "absolute inset-x-0 bg-surface-hover", style: { top: `calc(${preview.active} * var(--code-line-height))`, height: 'var(--code-line-height)' } }), _jsx("div", { className: "sticky left-0 z-10 w-16 shrink-0 pr-4 text-right font-mono text-(length:--code-font-size) text-text-faint select-none", children: lines.map((_, index) => (_jsx("div", { className: `h-(--code-line-height) leading-(--code-line-height) ${index === preview.active ? 'bg-surface-hover text-text' : 'bg-surface'}`, children: preview.startLine + index + 1 }, index))) }), _jsxs("div", { className: "relative", children: [name !== null && (_jsx("div", { className: "absolute rounded-sm bg-(--editor-occurrence) font-mono text-(length:--code-font-size)", style: {
48
- top: `calc(${preview.active} * var(--code-line-height))`,
49
- height: 'var(--code-line-height)',
50
- left: `${name.start}ch`,
51
- width: `${name.end - name.start}ch`
52
- } })), html?.key === key ? (_jsx("div", { className: `relative ${CODE}`, dangerouslySetInnerHTML: { __html: html.html } })) : (_jsx("div", { className: `relative ${CODE} whitespace-pre`, children: preview.text }))] })] }) }));
129
+ t6 = "sticky left-0 z-10 w-16 shrink-0 pr-4 text-right font-mono text-(length:--code-font-size) text-text-faint select-none";
130
+ let t13;
131
+ if ($[26] !== preview.active || $[27] !== preview.startLine) {
132
+ t13 = (_, index) => /*#__PURE__*/_jsx("div", {
133
+ className: `h-(--code-line-height) leading-(--code-line-height) ${index === preview.active ? "bg-surface-hover text-text" : "bg-surface"}`,
134
+ children: preview.startLine + index + 1
135
+ }, index);
136
+ $[26] = preview.active;
137
+ $[27] = preview.startLine;
138
+ $[28] = t13;
139
+ } else {
140
+ t13 = $[28];
141
+ }
142
+ t7 = lines.map(t13);
143
+ $[13] = preview.active;
144
+ $[14] = preview.name;
145
+ $[15] = preview.startLine;
146
+ $[16] = preview.text;
147
+ $[17] = name;
148
+ $[18] = t10;
149
+ $[19] = t11;
150
+ $[20] = t6;
151
+ $[21] = t7;
152
+ $[22] = t8;
153
+ $[23] = t9;
154
+ } else {
155
+ name = $[17];
156
+ t10 = $[18];
157
+ t11 = $[19];
158
+ t6 = $[20];
159
+ t7 = $[21];
160
+ t8 = $[22];
161
+ t9 = $[23];
162
+ }
163
+ let t12;
164
+ if ($[29] !== t6 || $[30] !== t7) {
165
+ t12 = /*#__PURE__*/_jsx("div", {
166
+ className: t6,
167
+ children: t7
168
+ });
169
+ $[29] = t6;
170
+ $[30] = t7;
171
+ $[31] = t12;
172
+ } else {
173
+ t12 = $[31];
174
+ }
175
+ let t13;
176
+ if ($[32] !== name || $[33] !== preview.active) {
177
+ t13 = name !== null && /*#__PURE__*/_jsx("div", {
178
+ className: "absolute rounded-sm bg-(--editor-occurrence) font-mono text-(length:--code-font-size)",
179
+ style: {
180
+ top: `calc(${preview.active} * var(--code-line-height))`,
181
+ height: "var(--code-line-height)",
182
+ left: `${name.start}ch`,
183
+ width: `${name.end - name.start}ch`
184
+ }
185
+ });
186
+ $[32] = name;
187
+ $[33] = preview.active;
188
+ $[34] = t13;
189
+ } else {
190
+ t13 = $[34];
191
+ }
192
+ let t14;
193
+ if ($[35] !== html || $[36] !== key || $[37] !== preview.text) {
194
+ t14 = html?.key === key ? /*#__PURE__*/_jsx("div", {
195
+ className: `relative ${CODE}`,
196
+ dangerouslySetInnerHTML: {
197
+ __html: html.html
198
+ }
199
+ }) : /*#__PURE__*/_jsx("div", {
200
+ className: `relative ${CODE} whitespace-pre`,
201
+ children: preview.text
202
+ });
203
+ $[35] = html;
204
+ $[36] = key;
205
+ $[37] = preview.text;
206
+ $[38] = t14;
207
+ } else {
208
+ t14 = $[38];
209
+ }
210
+ let t15;
211
+ if ($[39] !== t13 || $[40] !== t14) {
212
+ t15 = /*#__PURE__*/_jsxs("div", {
213
+ className: "relative",
214
+ children: [t13, t14]
215
+ });
216
+ $[39] = t13;
217
+ $[40] = t14;
218
+ $[41] = t15;
219
+ } else {
220
+ t15 = $[41];
221
+ }
222
+ let t16;
223
+ if ($[42] !== t12 || $[43] !== t15 || $[44] !== t8 || $[45] !== t9) {
224
+ t16 = /*#__PURE__*/_jsxs("div", {
225
+ className: t8,
226
+ children: [t9, t12, t15]
227
+ });
228
+ $[42] = t12;
229
+ $[43] = t15;
230
+ $[44] = t8;
231
+ $[45] = t9;
232
+ $[46] = t16;
233
+ } else {
234
+ t16 = $[46];
235
+ }
236
+ let t17;
237
+ if ($[47] !== t10 || $[48] !== t11 || $[49] !== t16) {
238
+ t17 = /*#__PURE__*/_jsx("div", {
239
+ ref: t10,
240
+ className: t11,
241
+ children: t16
242
+ });
243
+ $[47] = t10;
244
+ $[48] = t11;
245
+ $[49] = t16;
246
+ $[50] = t17;
247
+ } else {
248
+ t17 = $[50];
249
+ }
250
+ return t17;
53
251
  }
54
252
  /* The name's stretch of a line in monospace columns, which is what the code is laid out in. */
253
+ function _temp() {}
55
254
  function columnsOf(line, name) {
56
- const start = visualColumnOf(line, name.start, TAB_SIZE);
57
- return { start, end: visualColumnOf(line, name.end, TAB_SIZE) };
255
+ const start = visualColumnOf(line, name.start, TAB_SIZE);
256
+ return {
257
+ start,
258
+ end: visualColumnOf(line, name.end, TAB_SIZE)
259
+ };
58
260
  }
59
261
  function folderOf(path) {
60
- return path.slice(0, Math.max(0, path.lastIndexOf('/')));
262
+ return path.slice(0, Math.max(0, path.lastIndexOf('/')));
61
263
  }
62
264
  /* A line of code with its name in the text color and the rest muted. */
63
- function PlaceText({ place }) {
64
- if (place.text === '') {
65
- return _jsx("span", { className: "min-w-0 truncate text-text-muted", children: `:${place.line + 1}` });
265
+ function PlaceText(t0) {
266
+ const $ = _c(20);
267
+ const {
268
+ place
269
+ } = t0;
270
+ if (place.text === "") {
271
+ const t1 = `:${place.line + 1}`;
272
+ let t2;
273
+ if ($[0] !== t1) {
274
+ t2 = /*#__PURE__*/_jsx("span", {
275
+ className: "min-w-0 truncate text-text-muted",
276
+ children: t1
277
+ });
278
+ $[0] = t1;
279
+ $[1] = t2;
280
+ } else {
281
+ t2 = $[1];
66
282
  }
67
- const { name } = place;
68
- if (name === null) {
69
- return _jsx("span", { className: "min-w-0 truncate text-text-muted", children: place.text });
283
+ return t2;
284
+ }
285
+ const {
286
+ name
287
+ } = place;
288
+ if (name === null) {
289
+ let t1;
290
+ if ($[2] !== place.text) {
291
+ t1 = /*#__PURE__*/_jsx("span", {
292
+ className: "min-w-0 truncate text-text-muted",
293
+ children: place.text
294
+ });
295
+ $[2] = place.text;
296
+ $[3] = t1;
297
+ } else {
298
+ t1 = $[3];
70
299
  }
71
- return (_jsxs("span", { className: "min-w-0 truncate text-text-muted", children: [place.text.slice(0, name.start), _jsx("span", { className: "font-semibold text-text", children: place.text.slice(name.start, name.end) }), place.text.slice(name.end)] }));
300
+ return t1;
301
+ }
302
+ let t1;
303
+ if ($[4] !== name.start || $[5] !== place.text) {
304
+ t1 = place.text.slice(0, name.start);
305
+ $[4] = name.start;
306
+ $[5] = place.text;
307
+ $[6] = t1;
308
+ } else {
309
+ t1 = $[6];
310
+ }
311
+ let t2;
312
+ if ($[7] !== name.end || $[8] !== name.start || $[9] !== place.text) {
313
+ t2 = place.text.slice(name.start, name.end);
314
+ $[7] = name.end;
315
+ $[8] = name.start;
316
+ $[9] = place.text;
317
+ $[10] = t2;
318
+ } else {
319
+ t2 = $[10];
320
+ }
321
+ let t3;
322
+ if ($[11] !== t2) {
323
+ t3 = /*#__PURE__*/_jsx("span", {
324
+ className: "font-semibold text-text",
325
+ children: t2
326
+ });
327
+ $[11] = t2;
328
+ $[12] = t3;
329
+ } else {
330
+ t3 = $[12];
331
+ }
332
+ let t4;
333
+ if ($[13] !== name.end || $[14] !== place.text) {
334
+ t4 = place.text.slice(name.end);
335
+ $[13] = name.end;
336
+ $[14] = place.text;
337
+ $[15] = t4;
338
+ } else {
339
+ t4 = $[15];
340
+ }
341
+ let t5;
342
+ if ($[16] !== t1 || $[17] !== t3 || $[18] !== t4) {
343
+ t5 = /*#__PURE__*/_jsxs("span", {
344
+ className: "min-w-0 truncate text-text-muted",
345
+ children: [t1, t3, t4]
346
+ });
347
+ $[16] = t1;
348
+ $[17] = t3;
349
+ $[18] = t4;
350
+ $[19] = t5;
351
+ } else {
352
+ t5 = $[19];
353
+ }
354
+ return t5;
72
355
  }
73
- function Places({ language, view }) {
74
- const { t } = useTranslation('editor');
75
- const activeRow = useRef(null);
76
- const folder = language.project.folder;
77
- const paths = useMemo(() => view.files.map((file) => relativeTo(fileUriToPath(file.uri) ?? file.uri, folder)), [view.files, folder]);
78
- const folders = useMemo(() => distinguishingFolders(paths), [paths]);
79
- useEffect(() => {
80
- activeRow.current?.scrollIntoView({ block: 'nearest' });
81
- }, [view.active]);
82
- return (_jsx("div", { className: "w-1/3 shrink-0 overflow-y-auto border-l border-border py-1", children: view.files.map((file, fileIndex) => {
83
- const collapsed = view.collapsed.includes(file.uri);
84
- return (_jsxs("div", { children: [_jsx(Tooltip, { label: paths[fileIndex], side: "left", children: _jsxs("div", { className: "flex h-[22px] items-center pr-3 pl-1 text-xs", children: [_jsx(IconButton, { icon: collapsed ? ChevronRight : ChevronDown, size: "2xs", label: t(collapsed ? 'language.peek.expand' : 'language.peek.collapse'), onClick: () => language.peek.toggleFile(file.uri) }), _jsx(FileIcon, { path: paths[fileIndex], size: 14, className: "ml-0.5 shrink-0" }), _jsx("span", { className: "ml-1 max-w-full shrink-0 truncate", children: basenameOf(paths[fileIndex]) }), _jsx("span", { className: "ml-1.5 shrink-0 text-text-muted", children: formatNumber(file.places.length) }), folders[fileIndex] !== '' && _jsx("span", { className: "ml-2 min-w-0 flex-1 truncate text-text-faint", children: folders[fileIndex] })] }) }), !collapsed &&
85
- file.places.map((place) => (_jsx("button", { ref: place.id === view.active ? activeRow : undefined, type: "button", "data-active": place.id === view.active, className: "flex h-[22px] w-full items-center pr-3 pl-9 text-left font-mono text-code hover:bg-surface-hover data-[active=true]:bg-accent-soft", onClick: () => (place.id === view.active ? language.peek.go(place.id) : language.peek.select(place.id)), onDoubleClick: () => language.peek.go(place.id), children: _jsx(PlaceText, { place: place }) }, place.id)))] }, file.uri));
86
- }) }));
356
+ function Places(t0) {
357
+ const $ = _c(7);
358
+ const {
359
+ language,
360
+ view
361
+ } = t0;
362
+ const {
363
+ t
364
+ } = useTranslation("editor");
365
+ const activeRow = useRef(null);
366
+ const folder = language.project.folder;
367
+ let t1;
368
+ if ($[0] !== folder) {
369
+ t1 = file => relativeTo(fileUriToPath(file.uri) ?? file.uri, folder);
370
+ $[0] = folder;
371
+ $[1] = t1;
372
+ } else {
373
+ t1 = $[1];
374
+ }
375
+ const paths = view.files.map(t1);
376
+ const folders = distinguishingFolders(paths);
377
+ let t2;
378
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
379
+ t2 = () => {
380
+ activeRow.current?.scrollIntoView({
381
+ block: "nearest"
382
+ });
383
+ };
384
+ $[2] = t2;
385
+ } else {
386
+ t2 = $[2];
387
+ }
388
+ let t3;
389
+ if ($[3] !== view.active) {
390
+ t3 = [view.active];
391
+ $[3] = view.active;
392
+ $[4] = t3;
393
+ } else {
394
+ t3 = $[4];
395
+ }
396
+ useEffect(t2, t3);
397
+ const t4 = "w-1/3 shrink-0 overflow-y-auto border-l border-border py-1";
398
+ const t5 = view.files.map((file_0, fileIndex) => {
399
+ const collapsed = view.collapsed.includes(file_0.uri);
400
+ return /*#__PURE__*/_jsxs("div", {
401
+ children: [/*#__PURE__*/_jsx(Tooltip, {
402
+ label: paths[fileIndex],
403
+ side: "left",
404
+ children: /*#__PURE__*/_jsxs("div", {
405
+ className: "flex h-[22px] items-center pr-3 pl-1 text-xs",
406
+ children: [/*#__PURE__*/_jsx(IconButton, {
407
+ icon: collapsed ? ChevronRight : ChevronDown,
408
+ size: "2xs",
409
+ label: t(collapsed ? "language.peek.expand" : "language.peek.collapse"),
410
+ onClick: () => language.peek.toggleFile(file_0.uri)
411
+ }), /*#__PURE__*/_jsx(FileIcon, {
412
+ path: paths[fileIndex],
413
+ size: 14,
414
+ className: "ml-0.5 shrink-0"
415
+ }), /*#__PURE__*/_jsx("span", {
416
+ className: "ml-1 max-w-full shrink-0 truncate",
417
+ children: basenameOf(paths[fileIndex])
418
+ }), /*#__PURE__*/_jsx("span", {
419
+ className: "ml-1.5 shrink-0 text-text-muted",
420
+ children: formatNumber(file_0.places.length)
421
+ }), folders[fileIndex] !== "" && /*#__PURE__*/_jsx("span", {
422
+ className: "ml-2 min-w-0 flex-1 truncate text-text-faint",
423
+ children: folders[fileIndex]
424
+ })]
425
+ })
426
+ }), !collapsed && file_0.places.map(place => /*#__PURE__*/_jsx("button", {
427
+ ref: place.id === view.active ? activeRow : undefined,
428
+ type: "button",
429
+ "data-active": place.id === view.active,
430
+ className: "flex h-[22px] w-full items-center pr-3 pl-9 text-left font-mono text-code hover:bg-surface-hover data-[active=true]:bg-accent-soft",
431
+ onClick: () => place.id === view.active ? language.peek.go(place.id) : language.peek.select(place.id),
432
+ onDoubleClick: () => language.peek.go(place.id),
433
+ children: /*#__PURE__*/_jsx(PlaceText, {
434
+ place: place
435
+ })
436
+ }, place.id))]
437
+ }, file_0.uri);
438
+ });
439
+ let t6;
440
+ if ($[5] !== t5) {
441
+ t6 = /*#__PURE__*/_jsx("div", {
442
+ className: t4,
443
+ children: t5
444
+ });
445
+ $[5] = t5;
446
+ $[6] = t6;
447
+ } else {
448
+ t6 = $[6];
449
+ }
450
+ return t6;
87
451
  }
88
452
  /*
89
453
  * The references of a name in the row the editor leaves under the line: the code around the active one on
90
454
  * the left and every place on the right. It portals into that row, which the editor makes again when it
91
455
  * scrolls back into view, and has no edge of its own, so it reads as part of the file.
92
456
  */
93
- export function PeekPanel({ language, view }) {
94
- const { t } = useTranslation('editor');
95
- const active = view.files.flatMap((file) => file.places).find((place) => place.id === view.active);
96
- const path = active === undefined ? null : fileUriToPath(active.location.uri);
97
- const folder = language.project.folder;
98
- const shown = path === null ? '' : folderOf(relativeTo(path, folder));
99
- const body = usePanelBody(language);
100
- if (view.container === null) {
101
- return null;
102
- }
103
- return createPortal(_jsxs("div", { className: "flex flex-col bg-surface pt-[2px] font-sans text-xs text-text", style: { height: PEEK_HEIGHT - PANEL_BODY_HEIGHT + body.height }, onPointerDown: (event) => event.preventDefault(), children: [_jsx("div", { className: "peek-hatch h-[14px]" }), _jsxs("div", { className: "flex h-[31px] shrink-0 items-center gap-2 border-b border-border pr-2 pl-3 text-sm", children: [_jsx("span", { className: "shrink-0 font-medium", children: path === null ? '' : basenameOf(path) }), _jsx(PathText, { path: shown, className: "text-text-muted" }), _jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-1", children: [_jsx("span", { className: "text-text-muted", children: t(view.kind === 'definitions' ? 'language.peek.definitions' : 'language.peek.references', {
104
- count: view.count,
105
- formatted: formatNumber(view.count)
106
- }) }), _jsx(IconButton, { icon: X, size: "xs", label: t('language.peek.close'), onClick: () => language.peek.close() })] })] }), _jsxs("div", { className: "flex shrink-0", style: { height: body.height }, children: [_jsx(Preview, { preview: view.preview }), _jsx(Places, { language: language, view: view })] }), _jsx("div", { className: "peek-hatch relative h-[14px]", children: _jsx(PanelResizeHandle, { container: view.container, height: body.height, onHeight: body.set, onCommit: body.commit }) })] }), view.container);
457
+ export function PeekPanel(t0) {
458
+ const $ = _c(56);
459
+ const {
460
+ language,
461
+ view
462
+ } = t0;
463
+ const {
464
+ t
465
+ } = useTranslation("editor");
466
+ let t1;
467
+ if ($[0] !== view.active) {
468
+ t1 = place => place.id === view.active;
469
+ $[0] = view.active;
470
+ $[1] = t1;
471
+ } else {
472
+ t1 = $[1];
473
+ }
474
+ const active = view.files.flatMap(_temp2).find(t1);
475
+ const path = active === undefined ? null : fileUriToPath(active.location.uri);
476
+ const folder = language.project.folder;
477
+ const shown = path === null ? "" : folderOf(relativeTo(path, folder));
478
+ const body = usePanelBody(language);
479
+ if (view.container === null) {
480
+ return null;
481
+ }
482
+ const t2 = createPortal;
483
+ const t3 = "flex flex-col bg-surface pt-[2px] font-sans text-xs text-text";
484
+ const t4 = PEEK_HEIGHT - PANEL_BODY_HEIGHT + body.height;
485
+ let t5;
486
+ if ($[2] !== t4) {
487
+ t5 = {
488
+ height: t4
489
+ };
490
+ $[2] = t4;
491
+ $[3] = t5;
492
+ } else {
493
+ t5 = $[3];
494
+ }
495
+ const t6 = _temp3;
496
+ let t7;
497
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
498
+ t7 = /*#__PURE__*/_jsx("div", {
499
+ className: "peek-hatch h-[14px]"
500
+ });
501
+ $[4] = t7;
502
+ } else {
503
+ t7 = $[4];
504
+ }
505
+ const t8 = "flex h-[31px] shrink-0 items-center gap-2 border-b border-border pr-2 pl-3 text-sm";
506
+ const t9 = "shrink-0 font-medium";
507
+ const t10 = path === null ? "" : basenameOf(path);
508
+ let t11;
509
+ if ($[5] !== t10) {
510
+ t11 = /*#__PURE__*/_jsx("span", {
511
+ className: t9,
512
+ children: t10
513
+ });
514
+ $[5] = t10;
515
+ $[6] = t11;
516
+ } else {
517
+ t11 = $[6];
518
+ }
519
+ let t12;
520
+ if ($[7] !== shown) {
521
+ t12 = /*#__PURE__*/_jsx(PathText, {
522
+ path: shown,
523
+ className: "text-text-muted"
524
+ });
525
+ $[7] = shown;
526
+ $[8] = t12;
527
+ } else {
528
+ t12 = $[8];
529
+ }
530
+ const t13 = view.kind === "definitions" ? "language.peek.definitions" : "language.peek.references";
531
+ let t14;
532
+ if ($[9] !== t || $[10] !== t13 || $[11] !== view.count) {
533
+ t14 = t(t13, {
534
+ count: view.count,
535
+ formatted: formatNumber(view.count)
536
+ });
537
+ $[9] = t;
538
+ $[10] = t13;
539
+ $[11] = view.count;
540
+ $[12] = t14;
541
+ } else {
542
+ t14 = $[12];
543
+ }
544
+ let t15;
545
+ if ($[13] !== t14) {
546
+ t15 = /*#__PURE__*/_jsx("span", {
547
+ className: "text-text-muted",
548
+ children: t14
549
+ });
550
+ $[13] = t14;
551
+ $[14] = t15;
552
+ } else {
553
+ t15 = $[14];
554
+ }
555
+ let t16;
556
+ if ($[15] !== t) {
557
+ t16 = t("language.peek.close");
558
+ $[15] = t;
559
+ $[16] = t16;
560
+ } else {
561
+ t16 = $[16];
562
+ }
563
+ let t17;
564
+ if ($[17] !== language.peek) {
565
+ t17 = () => language.peek.close();
566
+ $[17] = language.peek;
567
+ $[18] = t17;
568
+ } else {
569
+ t17 = $[18];
570
+ }
571
+ let t18;
572
+ if ($[19] !== t16 || $[20] !== t17) {
573
+ t18 = /*#__PURE__*/_jsx(IconButton, {
574
+ icon: X,
575
+ size: "xs",
576
+ label: t16,
577
+ onClick: t17
578
+ });
579
+ $[19] = t16;
580
+ $[20] = t17;
581
+ $[21] = t18;
582
+ } else {
583
+ t18 = $[21];
584
+ }
585
+ let t19;
586
+ if ($[22] !== t15 || $[23] !== t18) {
587
+ t19 = /*#__PURE__*/_jsxs("div", {
588
+ className: "ml-auto flex shrink-0 items-center gap-1",
589
+ children: [t15, t18]
590
+ });
591
+ $[22] = t15;
592
+ $[23] = t18;
593
+ $[24] = t19;
594
+ } else {
595
+ t19 = $[24];
596
+ }
597
+ let t20;
598
+ if ($[25] !== t11 || $[26] !== t12 || $[27] !== t19) {
599
+ t20 = /*#__PURE__*/_jsxs("div", {
600
+ className: t8,
601
+ children: [t11, t12, t19]
602
+ });
603
+ $[25] = t11;
604
+ $[26] = t12;
605
+ $[27] = t19;
606
+ $[28] = t20;
607
+ } else {
608
+ t20 = $[28];
609
+ }
610
+ let t21;
611
+ if ($[29] !== body.height) {
612
+ t21 = {
613
+ height: body.height
614
+ };
615
+ $[29] = body.height;
616
+ $[30] = t21;
617
+ } else {
618
+ t21 = $[30];
619
+ }
620
+ let t22;
621
+ if ($[31] !== view.preview) {
622
+ t22 = /*#__PURE__*/_jsx(Preview, {
623
+ preview: view.preview
624
+ });
625
+ $[31] = view.preview;
626
+ $[32] = t22;
627
+ } else {
628
+ t22 = $[32];
629
+ }
630
+ let t23;
631
+ if ($[33] !== language || $[34] !== view) {
632
+ t23 = /*#__PURE__*/_jsx(Places, {
633
+ language: language,
634
+ view: view
635
+ });
636
+ $[33] = language;
637
+ $[34] = view;
638
+ $[35] = t23;
639
+ } else {
640
+ t23 = $[35];
641
+ }
642
+ let t24;
643
+ if ($[36] !== t21 || $[37] !== t22 || $[38] !== t23) {
644
+ t24 = /*#__PURE__*/_jsxs("div", {
645
+ className: "flex shrink-0",
646
+ style: t21,
647
+ children: [t22, t23]
648
+ });
649
+ $[36] = t21;
650
+ $[37] = t22;
651
+ $[38] = t23;
652
+ $[39] = t24;
653
+ } else {
654
+ t24 = $[39];
655
+ }
656
+ let t25;
657
+ if ($[40] !== body.commit || $[41] !== body.height || $[42] !== body.set || $[43] !== view.container) {
658
+ t25 = /*#__PURE__*/_jsx("div", {
659
+ className: "peek-hatch relative h-[14px]",
660
+ children: /*#__PURE__*/_jsx(PanelResizeHandle, {
661
+ container: view.container,
662
+ height: body.height,
663
+ onHeight: body.set,
664
+ onCommit: body.commit
665
+ })
666
+ });
667
+ $[40] = body.commit;
668
+ $[41] = body.height;
669
+ $[42] = body.set;
670
+ $[43] = view.container;
671
+ $[44] = t25;
672
+ } else {
673
+ t25 = $[44];
674
+ }
675
+ let t26;
676
+ if ($[45] !== t20 || $[46] !== t24 || $[47] !== t25 || $[48] !== t5 || $[49] !== t6 || $[50] !== t7) {
677
+ t26 = /*#__PURE__*/_jsxs("div", {
678
+ className: t3,
679
+ style: t5,
680
+ onPointerDown: t6,
681
+ children: [t7, t20, t24, t25]
682
+ });
683
+ $[45] = t20;
684
+ $[46] = t24;
685
+ $[47] = t25;
686
+ $[48] = t5;
687
+ $[49] = t6;
688
+ $[50] = t7;
689
+ $[51] = t26;
690
+ } else {
691
+ t26 = $[51];
692
+ }
693
+ let t27;
694
+ if ($[52] !== t2 || $[53] !== t26 || $[54] !== view.container) {
695
+ t27 = t2(t26, view.container);
696
+ $[52] = t2;
697
+ $[53] = t26;
698
+ $[54] = view.container;
699
+ $[55] = t27;
700
+ } else {
701
+ t27 = $[55];
702
+ }
703
+ return t27;
704
+ }
705
+ function _temp3(event) {
706
+ return event.preventDefault();
107
707
  }
708
+ function _temp2(file) {
709
+ return file.places;
710
+ }