@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
@@ -3,37 +3,40 @@
3
3
  * apart, so a handler of the app can stand between two features; 0, the default, comes after all of them.
4
4
  */
5
5
  export const KEY_PRIORITY = {
6
- pick: 1500,
7
- diagnostics: 1400,
8
- hover: 1300,
9
- completion: 1200,
10
- snippets: 1100,
11
- signature: 1000,
12
- highlights: 900,
13
- codeActions: 800,
14
- rename: 700,
15
- navigation: 600,
16
- peek: 500,
17
- callHierarchy: 400,
18
- symbolPicker: 300,
19
- history: 200,
20
- renderedDocs: 100
6
+ pick: 1500,
7
+ diagnostics: 1400,
8
+ hover: 1300,
9
+ completion: 1200,
10
+ snippets: 1100,
11
+ signature: 1000,
12
+ highlights: 900,
13
+ codeActions: 800,
14
+ rename: 700,
15
+ navigation: 600,
16
+ peek: 500,
17
+ callHierarchy: 400,
18
+ symbolPicker: 300,
19
+ history: 200,
20
+ renderedDocs: 100
21
21
  };
22
22
  /* Hands a key to its handlers by priority until one takes it; of two of the same priority the one added first. */
23
23
  export class KeyDispatcher {
24
- entries = [];
25
- add(handler, priority) {
26
- const entry = { handler, priority };
27
- const index = this.entries.findIndex((other) => other.priority < priority);
28
- this.entries.splice(index === -1 ? this.entries.length : index, 0, entry);
29
- return () => {
30
- const at = this.entries.indexOf(entry);
31
- if (at !== -1) {
32
- this.entries.splice(at, 1);
33
- }
34
- };
35
- }
36
- dispatch(event) {
37
- return [...this.entries].some((entry) => entry.handler(event));
38
- }
39
- }
24
+ entries = [];
25
+ add(handler, priority) {
26
+ const entry = {
27
+ handler,
28
+ priority
29
+ };
30
+ const index = this.entries.findIndex(other => other.priority < priority);
31
+ this.entries.splice(index === -1 ? this.entries.length : index, 0, entry);
32
+ return () => {
33
+ const at = this.entries.indexOf(entry);
34
+ if (at !== -1) {
35
+ this.entries.splice(at, 1);
36
+ }
37
+ };
38
+ }
39
+ dispatch(event) {
40
+ return [...this.entries].some(entry => entry.handler(event));
41
+ }
42
+ }
@@ -1,55 +1,58 @@
1
1
  /* Highlighter ids mapped to the LSP id of the same language. */
2
2
  const LSP_IDS = {
3
- typescript: 'typescript',
4
- tsx: 'typescriptreact',
5
- javascript: 'javascript',
6
- jsx: 'javascriptreact',
7
- vue: 'vue',
8
- php: 'php',
9
- css: 'css',
10
- scss: 'scss',
11
- less: 'less',
12
- html: 'html',
13
- json: 'json',
14
- jsonc: 'jsonc',
15
- yaml: 'yaml',
16
- python: 'python',
17
- shellscript: 'shellscript',
18
- docker: 'dockerfile',
19
- twig: 'twig',
20
- sql: 'sql',
21
- rust: 'rust'
3
+ typescript: 'typescript',
4
+ tsx: 'typescriptreact',
5
+ javascript: 'javascript',
6
+ jsx: 'javascriptreact',
7
+ vue: 'vue',
8
+ php: 'php',
9
+ css: 'css',
10
+ scss: 'scss',
11
+ less: 'less',
12
+ html: 'html',
13
+ json: 'json',
14
+ jsonc: 'jsonc',
15
+ yaml: 'yaml',
16
+ python: 'python',
17
+ shellscript: 'shellscript',
18
+ docker: 'dockerfile',
19
+ twig: 'twig',
20
+ sql: 'sql',
21
+ rust: 'rust'
22
22
  };
23
23
  /* The LSP language id of a file, or null when no language server here knows its language. */
24
24
  export function lspLanguageIdOf(language) {
25
- return language === undefined ? null : (LSP_IDS[language] ?? null);
25
+ return language === undefined ? null : LSP_IDS[language] ?? null;
26
26
  }
27
- const SHIKI_IDS = { typescriptreact: 'tsx', javascriptreact: 'jsx' };
27
+ const SHIKI_IDS = {
28
+ typescriptreact: 'tsx',
29
+ javascriptreact: 'jsx'
30
+ };
28
31
  /* The highlighter id of an LSP language id, for code a server sends back to be drawn. */
29
32
  export function shikiLanguageOf(lspLanguageId) {
30
- return SHIKI_IDS[lspLanguageId] ?? lspLanguageId;
33
+ return SHIKI_IDS[lspLanguageId] ?? lspLanguageId;
31
34
  }
32
35
  const PATH_IDS = {
33
- ts: 'typescript',
34
- mts: 'typescript',
35
- cts: 'typescript',
36
- tsx: 'tsx',
37
- js: 'javascript',
38
- mjs: 'javascript',
39
- cjs: 'javascript',
40
- jsx: 'jsx',
41
- vue: 'vue',
42
- php: 'php',
43
- json: 'json',
44
- css: 'css',
45
- scss: 'scss',
46
- html: 'html',
47
- md: 'markdown',
48
- twig: 'twig',
49
- sql: 'sql',
50
- rs: 'rust'
36
+ ts: 'typescript',
37
+ mts: 'typescript',
38
+ cts: 'typescript',
39
+ tsx: 'tsx',
40
+ js: 'javascript',
41
+ mjs: 'javascript',
42
+ cjs: 'javascript',
43
+ jsx: 'jsx',
44
+ vue: 'vue',
45
+ php: 'php',
46
+ json: 'json',
47
+ css: 'css',
48
+ scss: 'scss',
49
+ html: 'html',
50
+ md: 'markdown',
51
+ twig: 'twig',
52
+ sql: 'sql',
53
+ rs: 'rust'
51
54
  };
52
55
  /* The highlighter id for the code of a file we only know by its path, such as a place another file refers to. */
53
56
  export function shikiLanguageOfPath(path) {
54
- return PATH_IDS[path.slice(path.lastIndexOf('.') + 1).toLowerCase()] ?? 'text';
55
- }
57
+ return PATH_IDS[path.slice(path.lastIndexOf('.') + 1).toLowerCase()] ?? 'text';
58
+ }
@@ -5,35 +5,81 @@ import { shapeOf, splitLines } from '@adecore/merge';
5
5
  * leave and comes with the new ones when they are put at the end.
6
6
  */
7
7
  export function replaceLines(text, replacement) {
8
- const { from, to, lines } = replacement;
9
- const eol = shapeOf(text).eol;
10
- const raw = text.split('\n');
11
- const count = splitLines(text).length;
12
- const body = lines.join(eol);
13
- if (to < count || text === '' || text.endsWith('\n')) {
14
- return { range: { start: { line: from, character: 0 }, end: { line: to, character: 0 } }, text: lines.length === 0 ? '' : `${body}${eol}` };
15
- }
16
- const end = { line: count - 1, character: raw[count - 1].length };
17
- if (from === count) {
18
- return { range: { start: end, end }, text: lines.length === 0 ? '' : `${eol}${body}` };
19
- }
20
- if (lines.length === 0 && from > 0) {
21
- return { range: { start: { line: from - 1, character: raw[from - 1].length }, end }, text: '' };
22
- }
23
- return { range: { start: { line: from, character: 0 }, end }, text: body };
8
+ const {
9
+ from,
10
+ to,
11
+ lines
12
+ } = replacement;
13
+ const eol = shapeOf(text).eol;
14
+ const raw = text.split('\n');
15
+ const count = splitLines(text).length;
16
+ const body = lines.join(eol);
17
+ if (to < count || text === '' || text.endsWith('\n')) {
18
+ return {
19
+ range: {
20
+ start: {
21
+ line: from,
22
+ character: 0
23
+ },
24
+ end: {
25
+ line: to,
26
+ character: 0
27
+ }
28
+ },
29
+ text: lines.length === 0 ? '' : `${body}${eol}`
30
+ };
31
+ }
32
+ const end = {
33
+ line: count - 1,
34
+ character: raw[count - 1].length
35
+ };
36
+ if (from === count) {
37
+ return {
38
+ range: {
39
+ start: end,
40
+ end
41
+ },
42
+ text: lines.length === 0 ? '' : `${eol}${body}`
43
+ };
44
+ }
45
+ if (lines.length === 0 && from > 0) {
46
+ return {
47
+ range: {
48
+ start: {
49
+ line: from - 1,
50
+ character: raw[from - 1].length
51
+ },
52
+ end
53
+ },
54
+ text: ''
55
+ };
56
+ }
57
+ return {
58
+ range: {
59
+ start: {
60
+ line: from,
61
+ character: 0
62
+ },
63
+ end
64
+ },
65
+ text: body
66
+ };
24
67
  }
25
68
  /* Several replacements of one text as the edits an editor applies at once; replacements that touch are one edit. */
26
69
  export function replaceAllLines(text, replacements) {
27
- const ordered = [...replacements].sort((left, right) => left.from - right.from);
28
- const merged = [];
29
- for (const next of ordered) {
30
- const last = merged.at(-1);
31
- if (last !== undefined && last.to >= next.from) {
32
- merged[merged.length - 1] = { from: last.from, to: Math.max(last.to, next.to), lines: [...last.lines, ...next.lines] };
33
- }
34
- else {
35
- merged.push(next);
36
- }
70
+ const ordered = [...replacements].sort((left, right) => left.from - right.from);
71
+ const merged = [];
72
+ for (const next of ordered) {
73
+ const last = merged.at(-1);
74
+ if (last !== undefined && last.to >= next.from) {
75
+ merged[merged.length - 1] = {
76
+ from: last.from,
77
+ to: Math.max(last.to, next.to),
78
+ lines: [...last.lines, ...next.lines]
79
+ };
80
+ } else {
81
+ merged.push(next);
37
82
  }
38
- return merged.map((replacement) => replaceLines(text, replacement));
39
- }
83
+ }
84
+ return merged.map(replacement => replaceLines(text, replacement));
85
+ }
package/dist/line-text.js CHANGED
@@ -1,7 +1,22 @@
1
1
  export function lineTextOf(editor, line) {
2
- return editor.textInRange({ start: { line, character: 0 }, end: { line, character: Number.MAX_SAFE_INTEGER } });
2
+ return editor.textInRange({
3
+ start: {
4
+ line,
5
+ character: 0
6
+ },
7
+ end: {
8
+ line,
9
+ character: Number.MAX_SAFE_INTEGER
10
+ }
11
+ });
3
12
  }
4
13
  /* The text of a position's line up to the position. */
5
14
  export function textBeforeOf(editor, position) {
6
- return editor.textInRange({ start: { line: position.line, character: 0 }, end: position });
7
- }
15
+ return editor.textInRange({
16
+ start: {
17
+ line: position.line,
18
+ character: 0
19
+ },
20
+ end: position
21
+ });
22
+ }
@@ -2,32 +2,32 @@
2
2
  "language": {
3
3
  "hover": {
4
4
  "quickFix": "Quick fix…",
5
- "quickFixNone": "This language server offers no quick fixes",
5
+ "quickFixNone": "No quick fixes",
6
6
  "definition": "Go to definition",
7
7
  "references_one": "{{formatted}} reference",
8
8
  "references_other": "{{formatted}} references",
9
9
  "line": "Line {{line}}",
10
- "none": "No information for this position"
10
+ "none": "No information here"
11
11
  },
12
12
  "inlay": {
13
- "failed": "The hint's action failed: {{message}}"
13
+ "failed": "Could not run hint action: {{message}}"
14
14
  },
15
15
  "edit": {
16
- "staged_one": "{{count}} file changed and not saved yet",
17
- "staged_other": "{{count}} files changed and not saved yet",
16
+ "staged_one": "{{count}} unsaved file",
17
+ "staged_other": "{{count}} unsaved files",
18
18
  "stagedMore": "{{names}} and {{count}} more",
19
19
  "saveAll": "Save all",
20
- "notSaved": "{{name}} could not be saved"
20
+ "notSaved": "Could not save {{name}}"
21
21
  },
22
22
  "actions": {
23
23
  "show": "Show code actions",
24
24
  "none": "No code actions here",
25
- "unavailable": "No language server offers code actions here",
26
- "organized": "The imports are already organized",
27
- "noFormatter": "No language server formats this file",
28
- "readOnly": "This file is read only",
29
- "failed": "Could not apply the action: {{message}}",
30
- "refused": "The edit was refused",
25
+ "unavailable": "Code actions unavailable here",
26
+ "organized": "Imports already organized",
27
+ "noFormatter": "No formatter for this file",
28
+ "readOnly": "Read-only file",
29
+ "failed": "Could not apply action: {{message}}",
30
+ "refused": "Edit refused",
31
31
  "moreLines": "{{count}} more lines",
32
32
  "otherFiles_one": "and {{count}} other file",
33
33
  "otherFiles_other": "and {{count}} other files",
@@ -49,10 +49,10 @@
49
49
  }
50
50
  },
51
51
  "rename": {
52
- "unavailable": "No language server renames in this file",
53
- "nothing": "There is nothing to rename here",
54
- "refused": "The language server refused the new name",
55
- "stale": "The text changed while the rename was being asked for",
52
+ "unavailable": "Rename unavailable in this file",
53
+ "nothing": "Nothing to rename here",
54
+ "refused": "New name refused",
55
+ "stale": "The text changed before the rename finished. Try again.",
56
56
  "failed": "Could not rename: {{message}}",
57
57
  "occurrences_one": "{{formatted}} occurrence",
58
58
  "occurrences_other": "{{formatted}} occurrences",
@@ -71,7 +71,7 @@
71
71
  }
72
72
  },
73
73
  "navigation": {
74
- "unavailable": "No language server answers that here",
74
+ "unavailable": "Not available here",
75
75
  "none": "Nothing found",
76
76
  "failed": "Could not look it up: {{message}}",
77
77
  "titles": {
@@ -86,9 +86,9 @@
86
86
  "resize": "Resize panel"
87
87
  },
88
88
  "peek": {
89
- "unavailable": "No language server finds references in this file",
89
+ "unavailable": "References unavailable in this file",
90
90
  "none": "No references found",
91
- "failed": "Could not look up the references: {{message}}",
91
+ "failed": "Could not look up references: {{message}}",
92
92
  "references_one": "{{formatted}} reference",
93
93
  "references_other": "{{formatted}} references",
94
94
  "close": "Close",
@@ -97,12 +97,12 @@
97
97
  "definitions_one": "{{formatted}} definition",
98
98
  "definitions_other": "{{formatted}} definitions",
99
99
  "noDefinition": "No definition found",
100
- "unavailableDefinition": "No language server finds definitions in this file"
100
+ "unavailableDefinition": "Definitions unavailable in this file"
101
101
  },
102
102
  "callHierarchy": {
103
- "unavailable": "No language server finds calls in this file",
104
- "none": "No symbol with calls found here",
105
- "failed": "Could not look up the calls: {{message}}",
103
+ "unavailable": "Calls unavailable in this file",
104
+ "none": "No calls here",
105
+ "failed": "Could not look up calls: {{message}}",
106
106
  "label": "Call hierarchy",
107
107
  "direction": "Direction",
108
108
  "incoming": "Callers",
@@ -111,7 +111,7 @@
111
111
  "loading": "Loading…",
112
112
  "noIncoming": "No callers",
113
113
  "noOutgoing": "No callees",
114
- "retry": "Could not load the calls: {{message}}. Press to try again",
114
+ "retry": "Could not load calls: {{message}}. Click to try again",
115
115
  "more_one": "Show {{formatted}} more call ({{hidden}} left)",
116
116
  "more_other": "Show {{formatted}} more calls ({{hidden}} left)",
117
117
  "sites_one": "{{formatted}} call",
@@ -133,20 +133,20 @@
133
133
  "newCode": "new *",
134
134
  "lines_one": "{{formatted}} line",
135
135
  "lines_other": "{{formatted}} lines",
136
- "uncommitted": "Not committed yet",
136
+ "uncommitted": "Uncommitted",
137
137
  "latest": "Latest change",
138
138
  "showCommit": "Show commit"
139
139
  },
140
140
  "symbols": {
141
- "unavailable": "No language server knows the symbols of this file",
142
- "failed": "Could not read the symbols: {{message}}",
141
+ "unavailable": "Symbols unavailable in this file",
142
+ "failed": "Could not read symbols: {{message}}",
143
143
  "placeholder": "Go to symbol in {{file}}",
144
144
  "navigate": "Navigate",
145
145
  "open": "Open",
146
146
  "workspace": "Workspace symbols",
147
147
  "line": "Go to line",
148
148
  "none": "No matching symbols",
149
- "workspaceHint": "Type the name of a symbol in the project",
149
+ "workspaceHint": "Type a symbol name",
150
150
  "lineHint": "Type a line number",
151
151
  "goToLine": "Go to line {{line}}",
152
152
  "groups": {
@@ -180,14 +180,14 @@
180
180
  "choices": "Snippet choice"
181
181
  },
182
182
  "completion": {
183
- "tooLarge": "Completion is too large to insert",
183
+ "tooLarge": "Too large to insert",
184
184
  "insert": "Insert",
185
185
  "replace": "Replace",
186
186
  "details": "Details",
187
187
  "none": "No suggestions",
188
- "transformBusy": "Snippet transforms are busy; try again",
189
- "transformFailed": "Snippet transform could not be applied",
190
- "failed": "Could not insert the suggestion: {{message}}"
188
+ "transformBusy": "The snippet is not ready yet. Try again.",
189
+ "transformFailed": "Could not fill in the snippet",
190
+ "failed": "Could not insert suggestion: {{message}}"
191
191
  },
192
192
  "history": {
193
193
  "recent": "Recent locations"
@@ -265,18 +265,18 @@
265
265
  "toggle": "Show replace",
266
266
  "hide": "Hide replace",
267
267
  "failed": {
268
- "limit": "Too much to replace at once ({{edits}} edits or {{characters}} output characters)",
269
- "timeout": "Replacement timed out; the text was not changed",
270
- "unavailable": "Replacement needs the search worker",
271
- "error": "Could not replace; the text was not changed"
268
+ "limit": "Too much to replace at once (more than {{edits}} matches or {{characters}} characters)",
269
+ "timeout": "Replace timed out. Nothing changed",
270
+ "unavailable": "Replace is not available right now",
271
+ "error": "Could not replace. Nothing changed"
272
272
  }
273
273
  },
274
274
  "countMore": "{{total}}+ matches",
275
275
  "searching": "Searching…",
276
- "large": "Large document: press Enter to search",
276
+ "large": "This document is large. Press Enter to search",
277
277
  "replaced": "Replaced {{count}} matches",
278
278
  "failed": {
279
- "timeout": "Search timed out; press Enter to retry",
279
+ "timeout": "Search timed out. Press Enter to try again",
280
280
  "unavailable": "Regex search is unavailable",
281
281
  "invalid": "Invalid regular expression",
282
282
  "error": "Could not finish the search"