@vscode/markdown-editor 0.0.2-5 → 0.0.2-51

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 (36) hide show
  1. package/README.md +26 -0
  2. package/dist/_observables/observableInternal/index.d.ts +1 -1
  3. package/dist/_observables/observableInternal/logging/consoleObservableLogger.d.ts +1 -1
  4. package/dist/_observables/observableInternal/logging/debugger/devToolsLogger.d.ts +1 -1
  5. package/dist/_observables/observableInternal/logging/logging.d.ts +1 -1
  6. package/dist/_observables/observableInternal/reactions/{autorun.d.ts → createEffect.d.ts} +11 -3
  7. package/dist/config-BGeaJqWk.js +286 -0
  8. package/dist/config-BGeaJqWk.js.map +1 -0
  9. package/dist/config.d.ts +10 -0
  10. package/dist/config.js +6 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/index.d.ts +1456 -56
  13. package/dist/index.js +6067 -1924
  14. package/dist/index.js.map +1 -1
  15. package/dist/markdown-editor.css +1 -0
  16. package/dist/observables.js +45 -43
  17. package/dist/observables.js.map +1 -1
  18. package/dist/{runOnChange-C00UIwqQ.js → runOnChange-e7FtCqOQ.js} +115 -111
  19. package/dist/runOnChange-e7FtCqOQ.js.map +1 -0
  20. package/dist/stringEdit-CVDbCUBY.js +215 -0
  21. package/dist/stringEdit-CVDbCUBY.js.map +1 -0
  22. package/dist/web-editors.d.ts +130 -0
  23. package/dist/web-editors.js +6185 -0
  24. package/dist/web-editors.js.map +1 -0
  25. package/package.json +48 -9
  26. package/src/contrib/comments/commentInput.css +150 -0
  27. package/src/contrib/comments/comments.css +129 -0
  28. package/src/contrib/commentsVscode/vscodeCommentWidgetV2.css +171 -0
  29. package/src/contrib/find/find.css +347 -0
  30. package/src/view/editor.css +522 -23
  31. package/src/view/themes/default.css +12 -3
  32. package/src/view/themes/github.css +13 -8
  33. package/src/view/themes/vscode-default.css +398 -0
  34. package/src/view/themes/vscode-github.css +395 -0
  35. package/dist/runOnChange-C00UIwqQ.js.map +0 -1
  36. /package/dist/_observables/observableInternal/reactions/{autorunImpl.d.ts → createEffectImpl.d.ts} +0 -0
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # Markdown editor
2
+
3
+ `@vscode/markdown-editor` is an experimental, browser-based hybrid Markdown
4
+ editor. It keeps Markdown source as the canonical document while presenting
5
+ inactive blocks in rendered form and active blocks in editable source form.
6
+
7
+ Start with the [current implementation specification](./docs/specification.md).
8
+ It explains the architecture, runtime data flow, public integration surface,
9
+ extension points, the VS Code custom text editor adapter, tests, and current
10
+ limitations.
11
+
12
+ Other package documents:
13
+
14
+ - [Original design](./docs/design.md) - historical design intent.
15
+ - [Original implementation plan](./docs/plan.md) - historical roadmap; its
16
+ checkboxes do not describe current completion.
17
+ - [Engineering backlog](./docs/todo.md) - known issues and future work.
18
+
19
+ From this package directory:
20
+
21
+ ```sh
22
+ pnpm test
23
+ pnpm test:e2e
24
+ pnpm build
25
+ pnpm build:explorer
26
+ ```
@@ -1,5 +1,5 @@
1
1
  export { observableValueOpts } from './observables/observableValueOpts';
2
- export { autorun, autorunDelta, autorunHandleChanges, autorunOpts, autorunWithStore, autorunWithStoreHandleChanges, autorunIterableDelta, autorunSelfDisposable } from './reactions/autorun';
2
+ export { createEffect, createEffectOpts, autorun, autorunDelta, autorunHandleChanges, autorunOpts, autorunWithStore, autorunWithStoreHandleChanges, autorunIterableDelta, autorunSelfDisposable } from './reactions/createEffect';
3
3
  export { type IObservable, type IObservableWithChange, type IObserver, type IReader, type ISettable, type ISettableObservable, type ITransaction } from './base';
4
4
  export { disposableObservableValue } from './observables/observableValue';
5
5
  export { derived, derivedDisposable, derivedHandleChanges, derivedOpts, derivedWithSetter, derivedWithStore } from './observables/derived';
@@ -3,7 +3,7 @@ import { TransactionImpl } from '../transaction';
3
3
  import { IObservableLogger, IChangeInformation } from './logging';
4
4
  import { FromEventObservable } from '../observables/observableFromEvent';
5
5
  import { Derived } from '../observables/derivedImpl';
6
- import { AutorunObserver } from '../reactions/autorunImpl';
6
+ import { AutorunObserver } from '../reactions/createEffectImpl';
7
7
  export declare function logObservableToConsole(obs: IObservable<any>): void;
8
8
  export declare class ConsoleObservableLogger implements IObservableLogger {
9
9
  private indentation;
@@ -1,4 +1,4 @@
1
- import { AutorunObserver } from '../../reactions/autorunImpl';
1
+ import { AutorunObserver } from '../../reactions/createEffectImpl';
2
2
  import { TransactionImpl } from '../../transaction';
3
3
  import { IChangeInformation, IObservableLogger } from '../logging';
4
4
  import { IObservable } from '../../base';
@@ -1,4 +1,4 @@
1
- import { AutorunObserver } from '../reactions/autorunImpl';
1
+ import { AutorunObserver } from '../reactions/createEffectImpl';
2
2
  import { IObservable } from '../base';
3
3
  import { TransactionImpl } from '../transaction';
4
4
  import type { Derived } from '../observables/derivedImpl';
@@ -5,14 +5,22 @@ import { IDebugNameData } from '../debugName';
5
5
  import { DebugLocation } from '../debugLocation';
6
6
  /**
7
7
  * Runs immediately and whenever a transaction ends and an observed observable changed.
8
- * {@link fn} should start with a JS Doc using `@description` to name the autorun.
8
+ * {@link fn} should start with a JS Doc using `@description` to name the effect.
9
+ */
10
+ export declare function createEffect(fn: (reader: IReaderWithStore) => void, debugLocation?: DebugLocation): IDisposable;
11
+ /**
12
+ * @deprecated Use {@link createEffect} instead.
9
13
  */
10
- export declare function autorun(fn: (reader: IReaderWithStore) => void, debugLocation?: DebugLocation): IDisposable;
14
+ export declare const autorun: typeof createEffect;
11
15
  /**
12
16
  * Runs immediately and whenever a transaction ends and an observed observable changed.
13
17
  * {@link fn} should start with a JS Doc using `@description` to name the autorun.
14
18
  */
15
- export declare function autorunOpts(options: IDebugNameData & {}, fn: (reader: IReaderWithStore) => void, debugLocation?: DebugLocation): IDisposable;
19
+ export declare function createEffectOpts(options: IDebugNameData & {}, fn: (reader: IReaderWithStore) => void, debugLocation?: DebugLocation): IDisposable;
20
+ /**
21
+ * @deprecated Use {@link createEffectOpts} instead.
22
+ */
23
+ export declare const autorunOpts: typeof createEffectOpts;
16
24
  /**
17
25
  * Runs immediately and whenever a transaction ends and an observed observable changed.
18
26
  * {@link fn} should start with a JS Doc using `@description` to name the autorun.
@@ -0,0 +1,286 @@
1
+ const C = "`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?", f = {
2
+ wordSeparators: C,
3
+ wordSegmenterLocales: []
4
+ };
5
+ function _(e, n) {
6
+ return e !== void 0 && !/\s/u.test(e) && !n.includes(e);
7
+ }
8
+ class S {
9
+ _separators;
10
+ _segmenter;
11
+ _cachedLine;
12
+ _cachedWords = [];
13
+ constructor(n) {
14
+ this._separators = new Set(n.wordSeparators), this._segmenter = L(n.wordSegmenterLocales);
15
+ }
16
+ classify(n) {
17
+ return n === void 0 || n === " " || n === " " ? 1 : this._separators.has(n) ? 2 : 0;
18
+ }
19
+ previousIntlWord(n, i) {
20
+ let t;
21
+ for (const r of this._intlWords(n)) {
22
+ if (r.index > i)
23
+ break;
24
+ t = r;
25
+ }
26
+ return t;
27
+ }
28
+ nextIntlWord(n, i) {
29
+ return this._intlWords(n).find((t) => t.index >= i);
30
+ }
31
+ _intlWords(n) {
32
+ if (!this._segmenter)
33
+ return [];
34
+ if (this._cachedLine === n)
35
+ return this._cachedWords;
36
+ const i = [];
37
+ for (const t of this._segmenter.segment(n))
38
+ t.isWordLike && i.push({ index: t.index, segment: t.segment });
39
+ return this._cachedLine = n, this._cachedWords = i, i;
40
+ }
41
+ }
42
+ function L(e) {
43
+ if (e.length === 0)
44
+ return;
45
+ const n = [];
46
+ for (const i of e) {
47
+ if (typeof i != "string" || i.length === 0) {
48
+ console.warn("Ignoring invalid editor.wordSegmenterLocales entry", i);
49
+ continue;
50
+ }
51
+ try {
52
+ n.push(...Intl.Segmenter.supportedLocalesOf(i));
53
+ } catch (t) {
54
+ console.warn(`Ignoring invalid editor.wordSegmenterLocales entry: ${i}`, t);
55
+ }
56
+ }
57
+ if (n.length !== 0)
58
+ try {
59
+ return new Intl.Segmenter(n, { granularity: "word" });
60
+ } catch (i) {
61
+ console.warn(`Unable to initialize editor.wordSegmenterLocales: ${n.join(", ")}`, i);
62
+ return;
63
+ }
64
+ }
65
+ const y = /* @__PURE__ */ new Map();
66
+ function W(e) {
67
+ const n = `${e.wordSeparators}/${e.wordSegmenterLocales.join(",")}`;
68
+ let i = y.get(n);
69
+ return i || (i = new S(e), y.set(n, i)), i;
70
+ }
71
+ function x(e, n, i = f) {
72
+ if (n = p(n, 0, e.length), n === 0)
73
+ return 0;
74
+ let t = e.lastIndexOf(`
75
+ `, n - 1) + 1, r = e.indexOf(`
76
+ `, n);
77
+ r === -1 && (r = e.length);
78
+ let s = n - t;
79
+ if (s === 0) {
80
+ const a = t - 1;
81
+ t = a <= 0 ? 0 : e.lastIndexOf(`
82
+ `, a - 1) + 1, r = a, s = Math.max(0, a - t);
83
+ }
84
+ const l = e.slice(t, r), d = W(i);
85
+ let o = v(l, d, s);
86
+ return o?.type === 1 && o.end - o.start === 1 && o.nextClass === 0 && (o = v(l, d, o.start)), t + (o?.start ?? 0);
87
+ }
88
+ function E(e, n, i = f) {
89
+ if (n = p(n, 0, e.length), n === e.length)
90
+ return e.length;
91
+ let t = e.lastIndexOf(`
92
+ `, n - 1) + 1, r = e.indexOf(`
93
+ `, n);
94
+ r === -1 && (r = e.length);
95
+ let s = n - t;
96
+ n === r && r < e.length && (t = r + 1, r = e.indexOf(`
97
+ `, t), r === -1 && (r = e.length), s = 0);
98
+ const l = e.slice(t, r), d = W(i);
99
+ let o = O(l, d, s);
100
+ return o?.type === 1 && o.end - o.start === 1 && o.nextClass === 0 && (o = O(l, d, o.end)), t + (o?.end ?? l.length);
101
+ }
102
+ function A(e, n, i = f) {
103
+ if (n = p(n, 0, e.length), n === 0)
104
+ return 0;
105
+ const t = n === 0 ? 0 : e.lastIndexOf(`
106
+ `, n - 1) + 1, r = n - t;
107
+ if (r === 0)
108
+ return n - 1;
109
+ let s = r - 1;
110
+ for (; s >= 0 && (e[t + s] === " " || e[t + s] === " "); )
111
+ s--;
112
+ if (s + 1 < r - 1)
113
+ return t + s + 1;
114
+ let l = e.indexOf(`
115
+ `, n);
116
+ l === -1 && (l = e.length);
117
+ const d = e.slice(t, l), o = v(d, W(i), r);
118
+ return t + (o?.start ?? 0);
119
+ }
120
+ function D(e, n, i = f) {
121
+ if (n = p(n, 0, e.length), n === e.length)
122
+ return e.length;
123
+ const t = e.lastIndexOf(`
124
+ `, n - 1) + 1;
125
+ let r = e.indexOf(`
126
+ `, n);
127
+ r === -1 && (r = e.length);
128
+ const s = n - t, l = e.slice(t, r);
129
+ let d = s;
130
+ for (; d < l.length && (l[d] === " " || l[d] === " "); )
131
+ d++;
132
+ if (s < d)
133
+ return t + d;
134
+ const o = W(i), a = O(l, o, s);
135
+ if (a)
136
+ return t + a.end;
137
+ if (n < r || r === e.length)
138
+ return r;
139
+ const h = r + 1;
140
+ let c = e.indexOf(`
141
+ `, h);
142
+ c === -1 && (c = e.length);
143
+ const u = e.slice(h, c), g = O(u, o, 0);
144
+ return h + (g?.start ?? u.length);
145
+ }
146
+ function R(e, n, i = f) {
147
+ if (n = p(n, 0, e.length), n === e.length)
148
+ return { start: n, end: n };
149
+ const t = e[n];
150
+ if (/\s/u.test(t)) {
151
+ let g = n, m = n + 1;
152
+ for (; g > 0 && /\s/u.test(e[g - 1]); )
153
+ g--;
154
+ for (; m < e.length && /\s/u.test(e[m]); )
155
+ m++;
156
+ return { start: g, end: m };
157
+ }
158
+ const r = e.lastIndexOf(`
159
+ `, n - 1) + 1;
160
+ let s = e.indexOf(`
161
+ `, n);
162
+ s === -1 && (s = e.length);
163
+ const l = e.slice(r, s), d = n - r, o = W(i), a = o.previousIntlWord(l, d);
164
+ if (a && d < a.index + a.segment.length)
165
+ return {
166
+ start: r + a.index,
167
+ end: r + a.index + a.segment.length
168
+ };
169
+ const h = o.classify(t);
170
+ let c = d, u = d + 1;
171
+ for (; c > 0 && o.classify(l[c - 1]) === h; )
172
+ c--;
173
+ for (; u < l.length && o.classify(l[u]) === h; )
174
+ u++;
175
+ return { start: r + c, end: r + u };
176
+ }
177
+ function v(e, n, i) {
178
+ let t;
179
+ const r = n.previousIntlWord(e, i - 1);
180
+ for (let s = i - 1; s >= 0; s--) {
181
+ const l = n.classify(e[s]);
182
+ if (r && s === r.index)
183
+ return {
184
+ start: r.index,
185
+ end: r.index + r.segment.length,
186
+ type: 0,
187
+ nextClass: l
188
+ };
189
+ if (l === 0) {
190
+ if (t === 1) {
191
+ const d = s + 1;
192
+ return { start: d, end: w(e, n, t, d), type: t, nextClass: l };
193
+ }
194
+ t = 0;
195
+ } else if (l === 2) {
196
+ if (t === 0) {
197
+ const d = s + 1;
198
+ return { start: d, end: w(e, n, t, d), type: t, nextClass: l };
199
+ }
200
+ t = 1;
201
+ } else if (t !== void 0) {
202
+ const d = s + 1;
203
+ return { start: d, end: w(e, n, t, d), type: t, nextClass: l };
204
+ }
205
+ }
206
+ return t === void 0 ? void 0 : {
207
+ start: 0,
208
+ end: w(e, n, t, 0),
209
+ type: t,
210
+ nextClass: 1
211
+ /* Whitespace */
212
+ };
213
+ }
214
+ function O(e, n, i) {
215
+ let t;
216
+ const r = n.nextIntlWord(e, i);
217
+ for (let s = i; s < e.length; s++) {
218
+ const l = n.classify(e[s]);
219
+ if (r && s === r.index)
220
+ return {
221
+ start: r.index,
222
+ end: r.index + r.segment.length,
223
+ type: 0,
224
+ nextClass: l
225
+ };
226
+ if (l === 0) {
227
+ if (t === 1) {
228
+ const d = s;
229
+ return { start: I(e, n, t, d - 1), end: d, type: t, nextClass: l };
230
+ }
231
+ t = 0;
232
+ } else if (l === 2) {
233
+ if (t === 0) {
234
+ const d = s;
235
+ return { start: I(e, n, t, d - 1), end: d, type: t, nextClass: l };
236
+ }
237
+ t = 1;
238
+ } else if (t !== void 0) {
239
+ const d = s;
240
+ return { start: I(e, n, t, d - 1), end: d, type: t, nextClass: l };
241
+ }
242
+ }
243
+ return t === void 0 ? void 0 : {
244
+ start: I(e, n, t, e.length - 1),
245
+ end: e.length,
246
+ type: t,
247
+ nextClass: 1
248
+ /* Whitespace */
249
+ };
250
+ }
251
+ function w(e, n, i, t) {
252
+ const r = n.nextIntlWord(e, t);
253
+ for (let s = t; s < e.length; s++) {
254
+ if (r && s === r.index + r.segment.length)
255
+ return s;
256
+ const l = n.classify(e[s]);
257
+ if (l === 1 || i === 0 && l === 2 || i === 1 && l === 0)
258
+ return s;
259
+ }
260
+ return e.length;
261
+ }
262
+ function I(e, n, i, t) {
263
+ const r = n.previousIntlWord(e, t);
264
+ for (let s = t; s >= 0; s--) {
265
+ if (r && s === r.index)
266
+ return s;
267
+ const l = n.classify(e[s]);
268
+ if (l === 1 || i === 0 && l === 2 || i === 1 && l === 0)
269
+ return s + 1;
270
+ }
271
+ return 0;
272
+ }
273
+ function p(e, n, i) {
274
+ return Math.min(Math.max(e, n), i);
275
+ }
276
+ export {
277
+ f as D,
278
+ E as a,
279
+ A as b,
280
+ D as c,
281
+ R as d,
282
+ C as e,
283
+ x as f,
284
+ _ as i
285
+ };
286
+ //# sourceMappingURL=config-BGeaJqWk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-BGeaJqWk.js","sources":["../src/core/wordUtils.ts"],"sourcesContent":["export const DEFAULT_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?';\n\nexport interface WordNavigationConfig {\n\treadonly wordSeparators: string;\n\treadonly wordSegmenterLocales: readonly string[];\n}\n\nexport const DEFAULT_WORD_NAVIGATION_CONFIG: WordNavigationConfig = {\n\twordSeparators: DEFAULT_WORD_SEPARATORS,\n\twordSegmenterLocales: [],\n};\n\nexport function isRegularWordCharacter(character: string | undefined, wordSeparators: string): boolean {\n\treturn character !== undefined\n\t\t&& !/\\s/u.test(character)\n\t\t&& !wordSeparators.includes(character);\n}\n\nconst enum WordCharacterClass {\n\tRegular,\n\tWhitespace,\n\tSeparator,\n}\n\nconst enum WordType {\n\tRegular,\n\tSeparator,\n}\n\ninterface WordSpan {\n\treadonly start: number;\n\treadonly end: number;\n\treadonly type: WordType;\n\treadonly nextClass: WordCharacterClass;\n}\n\ninterface IntlWordSpan {\n\treadonly index: number;\n\treadonly segment: string;\n}\n\nclass WordClassifier {\n\tprivate readonly _separators: ReadonlySet<string>;\n\tprivate readonly _segmenter: Intl.Segmenter | undefined;\n\tprivate _cachedLine: string | undefined;\n\tprivate _cachedWords: readonly IntlWordSpan[] = [];\n\n\tconstructor(config: WordNavigationConfig) {\n\t\tthis._separators = new Set(config.wordSeparators);\n\t\tthis._segmenter = createWordSegmenter(config.wordSegmenterLocales);\n\t}\n\n\tclassify(character: string | undefined): WordCharacterClass {\n\t\tif (character === undefined) {\n\t\t\treturn WordCharacterClass.Whitespace;\n\t\t}\n\t\tif (character === ' ' || character === '\\t') {\n\t\t\treturn WordCharacterClass.Whitespace;\n\t\t}\n\t\treturn this._separators.has(character)\n\t\t\t? WordCharacterClass.Separator\n\t\t\t: WordCharacterClass.Regular;\n\t}\n\n\tpreviousIntlWord(line: string, offset: number): IntlWordSpan | undefined {\n\t\tlet candidate: IntlWordSpan | undefined;\n\t\tfor (const word of this._intlWords(line)) {\n\t\t\tif (word.index > offset) { break; }\n\t\t\tcandidate = word;\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tnextIntlWord(line: string, offset: number): IntlWordSpan | undefined {\n\t\treturn this._intlWords(line).find(word => word.index >= offset);\n\t}\n\n\tprivate _intlWords(line: string): readonly IntlWordSpan[] {\n\t\tif (!this._segmenter) { return []; }\n\t\tif (this._cachedLine === line) { return this._cachedWords; }\n\n\t\tconst words: IntlWordSpan[] = [];\n\t\tfor (const segment of this._segmenter.segment(line)) {\n\t\t\tif (segment.isWordLike) {\n\t\t\t\twords.push({ index: segment.index, segment: segment.segment });\n\t\t\t}\n\t\t}\n\t\tthis._cachedLine = line;\n\t\tthis._cachedWords = words;\n\t\treturn words;\n\t}\n}\n\nfunction createWordSegmenter(locales: readonly string[]): Intl.Segmenter | undefined {\n\tif (locales.length === 0) { return undefined; }\n\tconst supportedLocales: string[] = [];\n\tfor (const locale of locales as readonly unknown[]) {\n\t\tif (typeof locale !== 'string' || locale.length === 0) {\n\t\t\tconsole.warn('Ignoring invalid editor.wordSegmenterLocales entry', locale);\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tsupportedLocales.push(...Intl.Segmenter.supportedLocalesOf(locale));\n\t\t} catch (error) {\n\t\t\tconsole.warn(`Ignoring invalid editor.wordSegmenterLocales entry: ${locale}`, error);\n\t\t}\n\t}\n\tif (supportedLocales.length === 0) { return undefined; }\n\ttry {\n\t\treturn new Intl.Segmenter(supportedLocales, { granularity: 'word' });\n\t} catch (error) {\n\t\tconsole.warn(`Unable to initialize editor.wordSegmenterLocales: ${supportedLocales.join(', ')}`, error);\n\t\treturn undefined;\n\t}\n}\n\nconst classifierCache = new Map<string, WordClassifier>();\n\nfunction getClassifier(config: WordNavigationConfig): WordClassifier {\n\tconst key = `${config.wordSeparators}/${config.wordSegmenterLocales.join(',')}`;\n\tlet classifier = classifierCache.get(key);\n\tif (!classifier) {\n\t\tclassifier = new WordClassifier(config);\n\t\tclassifierCache.set(key, classifier);\n\t}\n\treturn classifier;\n}\n\nexport function findWordBoundaryLeft(\n\ttext: string,\n\toffset: number,\n\tconfig: WordNavigationConfig = DEFAULT_WORD_NAVIGATION_CONFIG,\n): number {\n\toffset = clamp(offset, 0, text.length);\n\tif (offset === 0) { return 0; }\n\n\tlet lineStart = text.lastIndexOf('\\n', offset - 1) + 1;\n\tlet lineEnd = text.indexOf('\\n', offset);\n\tif (lineEnd === -1) { lineEnd = text.length; }\n\tlet localOffset = offset - lineStart;\n\tif (localOffset === 0) {\n\t\tconst previousLineEnd = lineStart - 1;\n\t\tlineStart = previousLineEnd <= 0\n\t\t\t? 0\n\t\t\t: text.lastIndexOf('\\n', previousLineEnd - 1) + 1;\n\t\tlineEnd = previousLineEnd;\n\t\tlocalOffset = Math.max(0, previousLineEnd - lineStart);\n\t}\n\n\tconst line = text.slice(lineStart, lineEnd);\n\tconst classifier = getClassifier(config);\n\tlet previous = findPreviousWord(line, classifier, localOffset);\n\tif (\n\t\tprevious?.type === WordType.Separator\n\t\t&& previous.end - previous.start === 1\n\t\t&& previous.nextClass === WordCharacterClass.Regular\n\t) {\n\t\tprevious = findPreviousWord(line, classifier, previous.start);\n\t}\n\treturn lineStart + (previous?.start ?? 0);\n}\n\nexport function findWordBoundaryRight(\n\ttext: string,\n\toffset: number,\n\tconfig: WordNavigationConfig = DEFAULT_WORD_NAVIGATION_CONFIG,\n): number {\n\toffset = clamp(offset, 0, text.length);\n\tif (offset === text.length) { return text.length; }\n\n\tlet lineStart = text.lastIndexOf('\\n', offset - 1) + 1;\n\tlet lineEnd = text.indexOf('\\n', offset);\n\tif (lineEnd === -1) { lineEnd = text.length; }\n\tlet localOffset = offset - lineStart;\n\tif (offset === lineEnd && lineEnd < text.length) {\n\t\tlineStart = lineEnd + 1;\n\t\tlineEnd = text.indexOf('\\n', lineStart);\n\t\tif (lineEnd === -1) { lineEnd = text.length; }\n\t\tlocalOffset = 0;\n\t}\n\n\tconst line = text.slice(lineStart, lineEnd);\n\tconst classifier = getClassifier(config);\n\tlet next = findNextWord(line, classifier, localOffset);\n\tif (\n\t\tnext?.type === WordType.Separator\n\t\t&& next.end - next.start === 1\n\t\t&& next.nextClass === WordCharacterClass.Regular\n\t) {\n\t\tnext = findNextWord(line, classifier, next.end);\n\t}\n\treturn lineStart + (next?.end ?? line.length);\n}\n\nexport function findWordDeleteBoundaryLeft(\n\ttext: string,\n\toffset: number,\n\tconfig: WordNavigationConfig = DEFAULT_WORD_NAVIGATION_CONFIG,\n): number {\n\toffset = clamp(offset, 0, text.length);\n\tif (offset === 0) { return 0; }\n\n\tconst lineStart = offset === 0 ? 0 : text.lastIndexOf('\\n', offset - 1) + 1;\n\tconst localOffset = offset - lineStart;\n\tif (localOffset === 0) {\n\t\treturn offset - 1;\n\t}\n\n\tlet lastNonWhitespace = localOffset - 1;\n\twhile (\n\t\tlastNonWhitespace >= 0\n\t\t&& (text[lineStart + lastNonWhitespace] === ' ' || text[lineStart + lastNonWhitespace] === '\\t')\n\t) {\n\t\tlastNonWhitespace--;\n\t}\n\tif (lastNonWhitespace + 1 < localOffset - 1) {\n\t\treturn lineStart + lastNonWhitespace + 1;\n\t}\n\n\tlet lineEnd = text.indexOf('\\n', offset);\n\tif (lineEnd === -1) { lineEnd = text.length; }\n\tconst line = text.slice(lineStart, lineEnd);\n\tconst previous = findPreviousWord(line, getClassifier(config), localOffset);\n\treturn lineStart + (previous?.start ?? 0);\n}\n\nexport function findWordDeleteBoundaryRight(\n\ttext: string,\n\toffset: number,\n\tconfig: WordNavigationConfig = DEFAULT_WORD_NAVIGATION_CONFIG,\n): number {\n\toffset = clamp(offset, 0, text.length);\n\tif (offset === text.length) { return text.length; }\n\n\tconst lineStart = text.lastIndexOf('\\n', offset - 1) + 1;\n\tlet lineEnd = text.indexOf('\\n', offset);\n\tif (lineEnd === -1) { lineEnd = text.length; }\n\tconst localOffset = offset - lineStart;\n\tconst line = text.slice(lineStart, lineEnd);\n\n\tlet firstNonWhitespace = localOffset;\n\twhile (\n\t\tfirstNonWhitespace < line.length\n\t\t&& (line[firstNonWhitespace] === ' ' || line[firstNonWhitespace] === '\\t')\n\t) {\n\t\tfirstNonWhitespace++;\n\t}\n\tif (localOffset < firstNonWhitespace) {\n\t\treturn lineStart + firstNonWhitespace;\n\t}\n\n\tconst classifier = getClassifier(config);\n\tconst next = findNextWord(line, classifier, localOffset);\n\tif (next) {\n\t\treturn lineStart + next.end;\n\t}\n\tif (offset < lineEnd || lineEnd === text.length) {\n\t\treturn lineEnd;\n\t}\n\n\tconst nextLineStart = lineEnd + 1;\n\tlet nextLineEnd = text.indexOf('\\n', nextLineStart);\n\tif (nextLineEnd === -1) { nextLineEnd = text.length; }\n\tconst nextLine = text.slice(nextLineStart, nextLineEnd);\n\tconst nextLineWord = findNextWord(nextLine, classifier, 0);\n\treturn nextLineStart + (nextLineWord?.start ?? nextLine.length);\n}\n\nexport function findWordAt(\n\ttext: string,\n\toffset: number,\n\tconfig: WordNavigationConfig = DEFAULT_WORD_NAVIGATION_CONFIG,\n): { start: number; end: number } {\n\toffset = clamp(offset, 0, text.length);\n\tif (offset === text.length) {\n\t\treturn { start: offset, end: offset };\n\t}\n\n\tconst character = text[offset];\n\tif (/\\s/u.test(character)) {\n\t\tlet start = offset;\n\t\tlet end = offset + 1;\n\t\twhile (start > 0 && /\\s/u.test(text[start - 1])) { start--; }\n\t\twhile (end < text.length && /\\s/u.test(text[end])) { end++; }\n\t\treturn { start, end };\n\t}\n\n\tconst lineStart = text.lastIndexOf('\\n', offset - 1) + 1;\n\tlet lineEnd = text.indexOf('\\n', offset);\n\tif (lineEnd === -1) { lineEnd = text.length; }\n\tconst line = text.slice(lineStart, lineEnd);\n\tconst localOffset = offset - lineStart;\n\tconst classifier = getClassifier(config);\n\n\tconst intlWord = classifier.previousIntlWord(line, localOffset);\n\tif (intlWord && localOffset < intlWord.index + intlWord.segment.length) {\n\t\treturn {\n\t\t\tstart: lineStart + intlWord.index,\n\t\t\tend: lineStart + intlWord.index + intlWord.segment.length,\n\t\t};\n\t}\n\n\tconst characterClass = classifier.classify(character);\n\tlet start = localOffset;\n\tlet end = localOffset + 1;\n\twhile (start > 0 && classifier.classify(line[start - 1]) === characterClass) { start--; }\n\twhile (end < line.length && classifier.classify(line[end]) === characterClass) { end++; }\n\treturn { start: lineStart + start, end: lineStart + end };\n}\n\nfunction findPreviousWord(line: string, classifier: WordClassifier, offset: number): WordSpan | undefined {\n\tlet type: WordType | undefined;\n\tconst previousIntlWord = classifier.previousIntlWord(line, offset - 1);\n\n\tfor (let index = offset - 1; index >= 0; index--) {\n\t\tconst characterClass = classifier.classify(line[index]);\n\t\tif (previousIntlWord && index === previousIntlWord.index) {\n\t\t\treturn {\n\t\t\t\tstart: previousIntlWord.index,\n\t\t\t\tend: previousIntlWord.index + previousIntlWord.segment.length,\n\t\t\t\ttype: WordType.Regular,\n\t\t\t\tnextClass: characterClass,\n\t\t\t};\n\t\t}\n\n\t\tif (characterClass === WordCharacterClass.Regular) {\n\t\t\tif (type === WordType.Separator) {\n\t\t\t\tconst start = index + 1;\n\t\t\t\treturn { start, end: findWordEnd(line, classifier, type, start), type, nextClass: characterClass };\n\t\t\t}\n\t\t\ttype = WordType.Regular;\n\t\t} else if (characterClass === WordCharacterClass.Separator) {\n\t\t\tif (type === WordType.Regular) {\n\t\t\t\tconst start = index + 1;\n\t\t\t\treturn { start, end: findWordEnd(line, classifier, type, start), type, nextClass: characterClass };\n\t\t\t}\n\t\t\ttype = WordType.Separator;\n\t\t} else if (type !== undefined) {\n\t\t\tconst start = index + 1;\n\t\t\treturn { start, end: findWordEnd(line, classifier, type, start), type, nextClass: characterClass };\n\t\t}\n\t}\n\n\treturn type === undefined\n\t\t? undefined\n\t\t: { start: 0, end: findWordEnd(line, classifier, type, 0), type, nextClass: WordCharacterClass.Whitespace };\n}\n\nfunction findNextWord(line: string, classifier: WordClassifier, offset: number): WordSpan | undefined {\n\tlet type: WordType | undefined;\n\tconst nextIntlWord = classifier.nextIntlWord(line, offset);\n\n\tfor (let index = offset; index < line.length; index++) {\n\t\tconst characterClass = classifier.classify(line[index]);\n\t\tif (nextIntlWord && index === nextIntlWord.index) {\n\t\t\treturn {\n\t\t\t\tstart: nextIntlWord.index,\n\t\t\t\tend: nextIntlWord.index + nextIntlWord.segment.length,\n\t\t\t\ttype: WordType.Regular,\n\t\t\t\tnextClass: characterClass,\n\t\t\t};\n\t\t}\n\n\t\tif (characterClass === WordCharacterClass.Regular) {\n\t\t\tif (type === WordType.Separator) {\n\t\t\t\tconst end = index;\n\t\t\t\treturn { start: findWordStart(line, classifier, type, end - 1), end, type, nextClass: characterClass };\n\t\t\t}\n\t\t\ttype = WordType.Regular;\n\t\t} else if (characterClass === WordCharacterClass.Separator) {\n\t\t\tif (type === WordType.Regular) {\n\t\t\t\tconst end = index;\n\t\t\t\treturn { start: findWordStart(line, classifier, type, end - 1), end, type, nextClass: characterClass };\n\t\t\t}\n\t\t\ttype = WordType.Separator;\n\t\t} else if (type !== undefined) {\n\t\t\tconst end = index;\n\t\t\treturn { start: findWordStart(line, classifier, type, end - 1), end, type, nextClass: characterClass };\n\t\t}\n\t}\n\n\treturn type === undefined\n\t\t? undefined\n\t\t: {\n\t\t\tstart: findWordStart(line, classifier, type, line.length - 1),\n\t\t\tend: line.length,\n\t\t\ttype,\n\t\t\tnextClass: WordCharacterClass.Whitespace,\n\t\t};\n}\n\nfunction findWordEnd(line: string, classifier: WordClassifier, type: WordType, start: number): number {\n\tconst nextIntlWord = classifier.nextIntlWord(line, start);\n\tfor (let index = start; index < line.length; index++) {\n\t\tif (nextIntlWord && index === nextIntlWord.index + nextIntlWord.segment.length) {\n\t\t\treturn index;\n\t\t}\n\t\tconst characterClass = classifier.classify(line[index]);\n\t\tif (\n\t\t\tcharacterClass === WordCharacterClass.Whitespace\n\t\t\t|| (type === WordType.Regular && characterClass === WordCharacterClass.Separator)\n\t\t\t|| (type === WordType.Separator && characterClass === WordCharacterClass.Regular)\n\t\t) {\n\t\t\treturn index;\n\t\t}\n\t}\n\treturn line.length;\n}\n\nfunction findWordStart(line: string, classifier: WordClassifier, type: WordType, start: number): number {\n\tconst previousIntlWord = classifier.previousIntlWord(line, start);\n\tfor (let index = start; index >= 0; index--) {\n\t\tif (previousIntlWord && index === previousIntlWord.index) {\n\t\t\treturn index;\n\t\t}\n\t\tconst characterClass = classifier.classify(line[index]);\n\t\tif (\n\t\t\tcharacterClass === WordCharacterClass.Whitespace\n\t\t\t|| (type === WordType.Regular && characterClass === WordCharacterClass.Separator)\n\t\t\t|| (type === WordType.Separator && characterClass === WordCharacterClass.Regular)\n\t\t) {\n\t\t\treturn index + 1;\n\t\t}\n\t}\n\treturn 0;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n\treturn Math.min(Math.max(value, min), max);\n}\n"],"names":["DEFAULT_WORD_SEPARATORS","DEFAULT_WORD_NAVIGATION_CONFIG","isRegularWordCharacter","character","wordSeparators","WordClassifier","config","createWordSegmenter","line","offset","candidate","word","words","segment","locales","supportedLocales","locale","error","classifierCache","getClassifier","key","classifier","findWordBoundaryLeft","text","clamp","lineStart","lineEnd","localOffset","previousLineEnd","previous","findPreviousWord","findWordBoundaryRight","next","findNextWord","findWordDeleteBoundaryLeft","lastNonWhitespace","findWordDeleteBoundaryRight","firstNonWhitespace","nextLineStart","nextLineEnd","nextLine","nextLineWord","findWordAt","start","end","intlWord","characterClass","type","previousIntlWord","index","findWordEnd","nextIntlWord","findWordStart","value","min","max"],"mappings":"AAAO,MAAMA,IAA0B,qCAO1BC,IAAuD;AAAA,EACnE,gBAAgBD;AAAA,EAChB,sBAAsB,CAAA;AACvB;AAEO,SAASE,EAAuBC,GAA+BC,GAAiC;AACtG,SAAOD,MAAc,UACjB,CAAC,MAAM,KAAKA,CAAS,KACrB,CAACC,EAAe,SAASD,CAAS;AACvC;AAyBA,MAAME,EAAe;AAAA,EACH;AAAA,EACA;AAAA,EACT;AAAA,EACA,eAAwC,CAAA;AAAA,EAEhD,YAAYC,GAA8B;AACzC,SAAK,cAAc,IAAI,IAAIA,EAAO,cAAc,GAChD,KAAK,aAAaC,EAAoBD,EAAO,oBAAoB;AAAA,EAClE;AAAA,EAEA,SAASH,GAAmD;AAI3D,WAHIA,MAAc,UAGdA,MAAc,OAAOA,MAAc,MAC/B,IAED,KAAK,YAAY,IAAIA,CAAS,IAClC,IACA;AAAA,EACJ;AAAA,EAEA,iBAAiBK,GAAcC,GAA0C;AACxE,QAAIC;AACJ,eAAWC,KAAQ,KAAK,WAAWH,CAAI,GAAG;AACzC,UAAIG,EAAK,QAAQF;AAAU;AAC3B,MAAAC,IAAYC;AAAA,IACb;AACA,WAAOD;AAAA,EACR;AAAA,EAEA,aAAaF,GAAcC,GAA0C;AACpE,WAAO,KAAK,WAAWD,CAAI,EAAE,KAAK,CAAAG,MAAQA,EAAK,SAASF,CAAM;AAAA,EAC/D;AAAA,EAEQ,WAAWD,GAAuC;AACzD,QAAI,CAAC,KAAK;AAAc,aAAO,CAAA;AAC/B,QAAI,KAAK,gBAAgBA;AAAQ,aAAO,KAAK;AAE7C,UAAMI,IAAwB,CAAA;AAC9B,eAAWC,KAAW,KAAK,WAAW,QAAQL,CAAI;AACjD,MAAIK,EAAQ,cACXD,EAAM,KAAK,EAAE,OAAOC,EAAQ,OAAO,SAASA,EAAQ,SAAS;AAG/D,gBAAK,cAAcL,GACnB,KAAK,eAAeI,GACbA;AAAA,EACR;AACD;AAEA,SAASL,EAAoBO,GAAwD;AACpF,MAAIA,EAAQ,WAAW;AAAK;AAC5B,QAAMC,IAA6B,CAAA;AACnC,aAAWC,KAAUF,GAA+B;AACnD,QAAI,OAAOE,KAAW,YAAYA,EAAO,WAAW,GAAG;AACtD,cAAQ,KAAK,sDAAsDA,CAAM;AACzE;AAAA,IACD;AACA,QAAI;AACH,MAAAD,EAAiB,KAAK,GAAG,KAAK,UAAU,mBAAmBC,CAAM,CAAC;AAAA,IACnE,SAASC,GAAO;AACf,cAAQ,KAAK,uDAAuDD,CAAM,IAAIC,CAAK;AAAA,IACpF;AAAA,EACD;AACA,MAAIF,EAAiB,WAAW;AAChC,QAAI;AACH,aAAO,IAAI,KAAK,UAAUA,GAAkB,EAAE,aAAa,QAAQ;AAAA,IACpE,SAASE,GAAO;AACf,cAAQ,KAAK,qDAAqDF,EAAiB,KAAK,IAAI,CAAC,IAAIE,CAAK;AACtG;AAAA,IACD;AACD;AAEA,MAAMC,wBAAsB,IAAA;AAE5B,SAASC,EAAcb,GAA8C;AACpE,QAAMc,IAAM,GAAGd,EAAO,cAAc,IAAIA,EAAO,qBAAqB,KAAK,GAAG,CAAC;AAC7E,MAAIe,IAAaH,EAAgB,IAAIE,CAAG;AACxC,SAAKC,MACJA,IAAa,IAAIhB,EAAeC,CAAM,GACtCY,EAAgB,IAAIE,GAAKC,CAAU,IAE7BA;AACR;AAEO,SAASC,EACfC,GACAd,GACAH,IAA+BL,GACtB;AAET,MADAQ,IAASe,EAAMf,GAAQ,GAAGc,EAAK,MAAM,GACjCd,MAAW;AAAK,WAAO;AAE3B,MAAIgB,IAAYF,EAAK,YAAY;AAAA,GAAMd,IAAS,CAAC,IAAI,GACjDiB,IAAUH,EAAK,QAAQ;AAAA,GAAMd,CAAM;AACvC,EAAIiB,MAAY,OAAMA,IAAUH,EAAK;AACrC,MAAII,IAAclB,IAASgB;AAC3B,MAAIE,MAAgB,GAAG;AACtB,UAAMC,IAAkBH,IAAY;AACpC,IAAAA,IAAYG,KAAmB,IAC5B,IACAL,EAAK,YAAY;AAAA,GAAMK,IAAkB,CAAC,IAAI,GACjDF,IAAUE,GACVD,IAAc,KAAK,IAAI,GAAGC,IAAkBH,CAAS;AAAA,EACtD;AAEA,QAAMjB,IAAOe,EAAK,MAAME,GAAWC,CAAO,GACpCL,IAAaF,EAAcb,CAAM;AACvC,MAAIuB,IAAWC,EAAiBtB,GAAMa,GAAYM,CAAW;AAC7D,SACCE,GAAU,SAAS,KAChBA,EAAS,MAAMA,EAAS,UAAU,KAClCA,EAAS,cAAc,MAE1BA,IAAWC,EAAiBtB,GAAMa,GAAYQ,EAAS,KAAK,IAEtDJ,KAAaI,GAAU,SAAS;AACxC;AAEO,SAASE,EACfR,GACAd,GACAH,IAA+BL,GACtB;AAET,MADAQ,IAASe,EAAMf,GAAQ,GAAGc,EAAK,MAAM,GACjCd,MAAWc,EAAK;AAAU,WAAOA,EAAK;AAE1C,MAAIE,IAAYF,EAAK,YAAY;AAAA,GAAMd,IAAS,CAAC,IAAI,GACjDiB,IAAUH,EAAK,QAAQ;AAAA,GAAMd,CAAM;AACvC,EAAIiB,MAAY,OAAMA,IAAUH,EAAK;AACrC,MAAII,IAAclB,IAASgB;AAC3B,EAAIhB,MAAWiB,KAAWA,IAAUH,EAAK,WACxCE,IAAYC,IAAU,GACtBA,IAAUH,EAAK,QAAQ;AAAA,GAAME,CAAS,GAClCC,MAAY,OAAMA,IAAUH,EAAK,SACrCI,IAAc;AAGf,QAAMnB,IAAOe,EAAK,MAAME,GAAWC,CAAO,GACpCL,IAAaF,EAAcb,CAAM;AACvC,MAAI0B,IAAOC,EAAazB,GAAMa,GAAYM,CAAW;AACrD,SACCK,GAAM,SAAS,KACZA,EAAK,MAAMA,EAAK,UAAU,KAC1BA,EAAK,cAAc,MAEtBA,IAAOC,EAAazB,GAAMa,GAAYW,EAAK,GAAG,IAExCP,KAAaO,GAAM,OAAOxB,EAAK;AACvC;AAEO,SAAS0B,EACfX,GACAd,GACAH,IAA+BL,GACtB;AAET,MADAQ,IAASe,EAAMf,GAAQ,GAAGc,EAAK,MAAM,GACjCd,MAAW;AAAK,WAAO;AAE3B,QAAMgB,IAAYhB,MAAW,IAAI,IAAIc,EAAK,YAAY;AAAA,GAAMd,IAAS,CAAC,IAAI,GACpEkB,IAAclB,IAASgB;AAC7B,MAAIE,MAAgB;AACnB,WAAOlB,IAAS;AAGjB,MAAI0B,IAAoBR,IAAc;AACtC,SACCQ,KAAqB,MACjBZ,EAAKE,IAAYU,CAAiB,MAAM,OAAOZ,EAAKE,IAAYU,CAAiB,MAAM;AAE3F,IAAAA;AAED,MAAIA,IAAoB,IAAIR,IAAc;AACzC,WAAOF,IAAYU,IAAoB;AAGxC,MAAIT,IAAUH,EAAK,QAAQ;AAAA,GAAMd,CAAM;AACvC,EAAIiB,MAAY,OAAMA,IAAUH,EAAK;AACrC,QAAMf,IAAOe,EAAK,MAAME,GAAWC,CAAO,GACpCG,IAAWC,EAAiBtB,GAAMW,EAAcb,CAAM,GAAGqB,CAAW;AAC1E,SAAOF,KAAaI,GAAU,SAAS;AACxC;AAEO,SAASO,EACfb,GACAd,GACAH,IAA+BL,GACtB;AAET,MADAQ,IAASe,EAAMf,GAAQ,GAAGc,EAAK,MAAM,GACjCd,MAAWc,EAAK;AAAU,WAAOA,EAAK;AAE1C,QAAME,IAAYF,EAAK,YAAY;AAAA,GAAMd,IAAS,CAAC,IAAI;AACvD,MAAIiB,IAAUH,EAAK,QAAQ;AAAA,GAAMd,CAAM;AACvC,EAAIiB,MAAY,OAAMA,IAAUH,EAAK;AACrC,QAAMI,IAAclB,IAASgB,GACvBjB,IAAOe,EAAK,MAAME,GAAWC,CAAO;AAE1C,MAAIW,IAAqBV;AACzB,SACCU,IAAqB7B,EAAK,WACtBA,EAAK6B,CAAkB,MAAM,OAAO7B,EAAK6B,CAAkB,MAAM;AAErE,IAAAA;AAED,MAAIV,IAAcU;AACjB,WAAOZ,IAAYY;AAGpB,QAAMhB,IAAaF,EAAcb,CAAM,GACjC0B,IAAOC,EAAazB,GAAMa,GAAYM,CAAW;AACvD,MAAIK;AACH,WAAOP,IAAYO,EAAK;AAEzB,MAAIvB,IAASiB,KAAWA,MAAYH,EAAK;AACxC,WAAOG;AAGR,QAAMY,IAAgBZ,IAAU;AAChC,MAAIa,IAAchB,EAAK,QAAQ;AAAA,GAAMe,CAAa;AAClD,EAAIC,MAAgB,OAAMA,IAAchB,EAAK;AAC7C,QAAMiB,IAAWjB,EAAK,MAAMe,GAAeC,CAAW,GAChDE,IAAeR,EAAaO,GAAUnB,GAAY,CAAC;AACzD,SAAOiB,KAAiBG,GAAc,SAASD,EAAS;AACzD;AAEO,SAASE,EACfnB,GACAd,GACAH,IAA+BL,GACE;AAEjC,MADAQ,IAASe,EAAMf,GAAQ,GAAGc,EAAK,MAAM,GACjCd,MAAWc,EAAK;AACnB,WAAO,EAAE,OAAOd,GAAQ,KAAKA,EAAA;AAG9B,QAAMN,IAAYoB,EAAKd,CAAM;AAC7B,MAAI,MAAM,KAAKN,CAAS,GAAG;AAC1B,QAAIwC,IAAQlC,GACRmC,IAAMnC,IAAS;AACnB,WAAOkC,IAAQ,KAAK,MAAM,KAAKpB,EAAKoB,IAAQ,CAAC,CAAC;AAAKA,MAAAA;AACnD,WAAOC,IAAMrB,EAAK,UAAU,MAAM,KAAKA,EAAKqB,CAAG,CAAC;AAAKA,MAAAA;AACrD,WAAO,EAAE,OAAAD,GAAO,KAAAC,EAAAA;AAAAA,EACjB;AAEA,QAAMnB,IAAYF,EAAK,YAAY;AAAA,GAAMd,IAAS,CAAC,IAAI;AACvD,MAAIiB,IAAUH,EAAK,QAAQ;AAAA,GAAMd,CAAM;AACvC,EAAIiB,MAAY,OAAMA,IAAUH,EAAK;AACrC,QAAMf,IAAOe,EAAK,MAAME,GAAWC,CAAO,GACpCC,IAAclB,IAASgB,GACvBJ,IAAaF,EAAcb,CAAM,GAEjCuC,IAAWxB,EAAW,iBAAiBb,GAAMmB,CAAW;AAC9D,MAAIkB,KAAYlB,IAAckB,EAAS,QAAQA,EAAS,QAAQ;AAC/D,WAAO;AAAA,MACN,OAAOpB,IAAYoB,EAAS;AAAA,MAC5B,KAAKpB,IAAYoB,EAAS,QAAQA,EAAS,QAAQ;AAAA,IAAA;AAIrD,QAAMC,IAAiBzB,EAAW,SAASlB,CAAS;AACpD,MAAIwC,IAAQhB,GACRiB,IAAMjB,IAAc;AACxB,SAAOgB,IAAQ,KAAKtB,EAAW,SAASb,EAAKmC,IAAQ,CAAC,CAAC,MAAMG;AAAkB,IAAAH;AAC/E,SAAOC,IAAMpC,EAAK,UAAUa,EAAW,SAASb,EAAKoC,CAAG,CAAC,MAAME;AAAkB,IAAAF;AACjF,SAAO,EAAE,OAAOnB,IAAYkB,GAAO,KAAKlB,IAAYmB,EAAA;AACrD;AAEA,SAASd,EAAiBtB,GAAca,GAA4BZ,GAAsC;AACzG,MAAIsC;AACJ,QAAMC,IAAmB3B,EAAW,iBAAiBb,GAAMC,IAAS,CAAC;AAErE,WAASwC,IAAQxC,IAAS,GAAGwC,KAAS,GAAGA,KAAS;AACjD,UAAMH,IAAiBzB,EAAW,SAASb,EAAKyC,CAAK,CAAC;AACtD,QAAID,KAAoBC,MAAUD,EAAiB;AAClD,aAAO;AAAA,QACN,OAAOA,EAAiB;AAAA,QACxB,KAAKA,EAAiB,QAAQA,EAAiB,QAAQ;AAAA,QACvD,MAAM;AAAA,QACN,WAAWF;AAAA,MAAA;AAIb,QAAIA,MAAmB,GAA4B;AAClD,UAAIC,MAAS,GAAoB;AAChC,cAAMJ,IAAQM,IAAQ;AACtB,eAAO,EAAE,OAAAN,GAAO,KAAKO,EAAY1C,GAAMa,GAAY0B,GAAMJ,CAAK,GAAG,MAAAI,GAAM,WAAWD,EAAA;AAAA,MACnF;AACA,MAAAC,IAAO;AAAA,IACR,WAAWD,MAAmB,GAA8B;AAC3D,UAAIC,MAAS,GAAkB;AAC9B,cAAMJ,IAAQM,IAAQ;AACtB,eAAO,EAAE,OAAAN,GAAO,KAAKO,EAAY1C,GAAMa,GAAY0B,GAAMJ,CAAK,GAAG,MAAAI,GAAM,WAAWD,EAAA;AAAA,MACnF;AACA,MAAAC,IAAO;AAAA,IACR,WAAWA,MAAS,QAAW;AAC9B,YAAMJ,IAAQM,IAAQ;AACtB,aAAO,EAAE,OAAAN,GAAO,KAAKO,EAAY1C,GAAMa,GAAY0B,GAAMJ,CAAK,GAAG,MAAAI,GAAM,WAAWD,EAAA;AAAA,IACnF;AAAA,EACD;AAEA,SAAOC,MAAS,SACb,SACA;AAAA,IAAE,OAAO;AAAA,IAAG,KAAKG,EAAY1C,GAAMa,GAAY0B,GAAM,CAAC;AAAA,IAAG,MAAAA;AAAA,IAAM,WAAW;AAAA;AAAA,EAAA;AAC9E;AAEA,SAASd,EAAazB,GAAca,GAA4BZ,GAAsC;AACrG,MAAIsC;AACJ,QAAMI,IAAe9B,EAAW,aAAab,GAAMC,CAAM;AAEzD,WAASwC,IAAQxC,GAAQwC,IAAQzC,EAAK,QAAQyC,KAAS;AACtD,UAAMH,IAAiBzB,EAAW,SAASb,EAAKyC,CAAK,CAAC;AACtD,QAAIE,KAAgBF,MAAUE,EAAa;AAC1C,aAAO;AAAA,QACN,OAAOA,EAAa;AAAA,QACpB,KAAKA,EAAa,QAAQA,EAAa,QAAQ;AAAA,QAC/C,MAAM;AAAA,QACN,WAAWL;AAAA,MAAA;AAIb,QAAIA,MAAmB,GAA4B;AAClD,UAAIC,MAAS,GAAoB;AAChC,cAAMH,IAAMK;AACZ,eAAO,EAAE,OAAOG,EAAc5C,GAAMa,GAAY0B,GAAMH,IAAM,CAAC,GAAG,KAAAA,GAAK,MAAAG,GAAM,WAAWD,EAAA;AAAA,MACvF;AACA,MAAAC,IAAO;AAAA,IACR,WAAWD,MAAmB,GAA8B;AAC3D,UAAIC,MAAS,GAAkB;AAC9B,cAAMH,IAAMK;AACZ,eAAO,EAAE,OAAOG,EAAc5C,GAAMa,GAAY0B,GAAMH,IAAM,CAAC,GAAG,KAAAA,GAAK,MAAAG,GAAM,WAAWD,EAAA;AAAA,MACvF;AACA,MAAAC,IAAO;AAAA,IACR,WAAWA,MAAS,QAAW;AAC9B,YAAMH,IAAMK;AACZ,aAAO,EAAE,OAAOG,EAAc5C,GAAMa,GAAY0B,GAAMH,IAAM,CAAC,GAAG,KAAAA,GAAK,MAAAG,GAAM,WAAWD,EAAA;AAAA,IACvF;AAAA,EACD;AAEA,SAAOC,MAAS,SACb,SACA;AAAA,IACD,OAAOK,EAAc5C,GAAMa,GAAY0B,GAAMvC,EAAK,SAAS,CAAC;AAAA,IAC5D,KAAKA,EAAK;AAAA,IACV,MAAAuC;AAAA,IACA,WAAW;AAAA;AAAA,EAAA;AAEd;AAEA,SAASG,EAAY1C,GAAca,GAA4B0B,GAAgBJ,GAAuB;AACrG,QAAMQ,IAAe9B,EAAW,aAAab,GAAMmC,CAAK;AACxD,WAASM,IAAQN,GAAOM,IAAQzC,EAAK,QAAQyC,KAAS;AACrD,QAAIE,KAAgBF,MAAUE,EAAa,QAAQA,EAAa,QAAQ;AACvE,aAAOF;AAER,UAAMH,IAAiBzB,EAAW,SAASb,EAAKyC,CAAK,CAAC;AACtD,QACCH,MAAmB,KACfC,MAAS,KAAoBD,MAAmB,KAChDC,MAAS,KAAsBD,MAAmB;AAEtD,aAAOG;AAAA,EAET;AACA,SAAOzC,EAAK;AACb;AAEA,SAAS4C,EAAc5C,GAAca,GAA4B0B,GAAgBJ,GAAuB;AACvG,QAAMK,IAAmB3B,EAAW,iBAAiBb,GAAMmC,CAAK;AAChE,WAASM,IAAQN,GAAOM,KAAS,GAAGA,KAAS;AAC5C,QAAID,KAAoBC,MAAUD,EAAiB;AAClD,aAAOC;AAER,UAAMH,IAAiBzB,EAAW,SAASb,EAAKyC,CAAK,CAAC;AACtD,QACCH,MAAmB,KACfC,MAAS,KAAoBD,MAAmB,KAChDC,MAAS,KAAsBD,MAAmB;AAEtD,aAAOG,IAAQ;AAAA,EAEjB;AACA,SAAO;AACR;AAEA,SAASzB,EAAM6B,GAAeC,GAAaC,GAAqB;AAC/D,SAAO,KAAK,IAAI,KAAK,IAAIF,GAAOC,CAAG,GAAGC,CAAG;AAC1C;"}
@@ -0,0 +1,10 @@
1
+ export declare const DEFAULT_WORD_NAVIGATION_CONFIG: WordNavigationConfig;
2
+
3
+ export declare const DEFAULT_WORD_SEPARATORS = "`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?";
4
+
5
+ export declare interface WordNavigationConfig {
6
+ readonly wordSeparators: string;
7
+ readonly wordSegmenterLocales: readonly string[];
8
+ }
9
+
10
+ export { }
package/dist/config.js ADDED
@@ -0,0 +1,6 @@
1
+ import { D as O, e as _ } from "./config-BGeaJqWk.js";
2
+ export {
3
+ O as DEFAULT_WORD_NAVIGATION_CONFIG,
4
+ _ as DEFAULT_WORD_SEPARATORS
5
+ };
6
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}