@kerebron/extension-codejar 0.4.27 → 0.4.29

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 (52) hide show
  1. package/esm/CodeJar.d.ts +51 -0
  2. package/esm/CodeJar.d.ts.map +1 -0
  3. package/esm/CodeJar.js +549 -0
  4. package/esm/CodeJar.js.map +1 -0
  5. package/esm/Decorator.d.ts +11 -0
  6. package/esm/Decorator.d.ts.map +1 -0
  7. package/esm/Decorator.js +46 -0
  8. package/esm/Decorator.js.map +1 -0
  9. package/esm/ExtensionCodeJar.d.ts +15 -0
  10. package/esm/ExtensionCodeJar.d.ts.map +1 -0
  11. package/esm/ExtensionCodeJar.js +62 -0
  12. package/esm/ExtensionCodeJar.js.map +1 -0
  13. package/esm/NodeCodeJar.d.ts +18 -0
  14. package/esm/NodeCodeJar.d.ts.map +1 -0
  15. package/esm/NodeCodeJar.js +70 -0
  16. package/esm/NodeCodeJar.js.map +1 -0
  17. package/esm/TreeSitterHighlighter.d.ts +11 -0
  18. package/esm/TreeSitterHighlighter.d.ts.map +1 -0
  19. package/esm/TreeSitterHighlighter.js +63 -0
  20. package/esm/TreeSitterHighlighter.js.map +1 -0
  21. package/esm/_dnt.shims.d.ts +2 -0
  22. package/esm/_dnt.shims.d.ts.map +1 -0
  23. package/esm/_dnt.shims.js +58 -0
  24. package/esm/_dnt.shims.js.map +1 -0
  25. package/esm/codeJarBlockNodeView.d.ts +6 -0
  26. package/esm/codeJarBlockNodeView.d.ts.map +1 -0
  27. package/esm/codeJarBlockNodeView.js +254 -0
  28. package/esm/codeJarBlockNodeView.js.map +1 -0
  29. package/esm/codeJarLineNumbers.d.ts +13 -0
  30. package/esm/codeJarLineNumbers.d.ts.map +1 -0
  31. package/esm/codeJarLineNumbers.js +86 -0
  32. package/esm/codeJarLineNumbers.js.map +1 -0
  33. package/esm/mod.d.ts +2 -0
  34. package/esm/mod.d.ts.map +1 -0
  35. package/esm/mod.js +2 -0
  36. package/esm/mod.js.map +1 -0
  37. package/esm/package.json +3 -0
  38. package/esm/utils.d.ts +13 -0
  39. package/esm/utils.d.ts.map +1 -0
  40. package/esm/utils.js +49 -0
  41. package/esm/utils.js.map +1 -0
  42. package/package.json +11 -8
  43. package/src/CodeJar.ts +636 -0
  44. package/src/Decorator.ts +67 -0
  45. package/src/ExtensionCodeJar.ts +83 -0
  46. package/src/NodeCodeJar.ts +107 -0
  47. package/src/TreeSitterHighlighter.ts +85 -0
  48. package/src/_dnt.shims.ts +60 -0
  49. package/src/codeJarBlockNodeView.ts +372 -0
  50. package/src/codeJarLineNumbers.ts +129 -0
  51. package/src/mod.ts +1 -0
  52. package/src/utils.ts +77 -0
@@ -0,0 +1,51 @@
1
+ import * as dntShim from "./_dnt.shims.js";
2
+ type Options = {
3
+ tab: string;
4
+ indentOn: RegExp;
5
+ moveToNewLine: RegExp;
6
+ spellcheck: boolean;
7
+ catchTab: boolean;
8
+ preserveIdent: boolean;
9
+ addClosing: boolean;
10
+ history: boolean;
11
+ readOnly?: boolean;
12
+ window: typeof dntShim.dntGlobalThis;
13
+ autoclose: {
14
+ open: string;
15
+ close: string;
16
+ };
17
+ };
18
+ type HistoryRecord = {
19
+ html: string;
20
+ pos: Position;
21
+ };
22
+ export type Position = {
23
+ start: number;
24
+ end: number;
25
+ dir?: '->' | '<-';
26
+ };
27
+ export declare class CodeJar extends EventTarget {
28
+ private editor;
29
+ private highlight;
30
+ options: Options;
31
+ listeners: [string, any][];
32
+ history: HistoryRecord[];
33
+ at: number;
34
+ onUpdateCbk: (code: string) => void | undefined;
35
+ focus: boolean;
36
+ prev: string | undefined;
37
+ constructor(editor: HTMLElement, highlight: (e: HTMLElement, pos?: Position) => void, opt?: Partial<Options>);
38
+ getSelection(): Selection;
39
+ private doHighlight;
40
+ private uneditable;
41
+ toString(): any;
42
+ updateOptions(newOptions: Partial<Options>): void;
43
+ updateCode(code: string, callOnUpdate?: boolean): void;
44
+ onUpdate(callback: (code: string) => void): void;
45
+ save(): Position | undefined;
46
+ restore(pos: Position): void;
47
+ recordHistory(): void;
48
+ destroy(): void;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=CodeJar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeJar.d.ts","sourceRoot":"","sources":["../src/CodeJar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAG3C,KAAK,OAAO,GAAG;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,OAAO,CAAC,aAAa,CAAC;IACrC,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACnB,CAAC;AAqEF,qBAAa,OAAQ,SAAQ,WAAW;IAUpC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IAVnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAM;IAChC,OAAO,EAAE,aAAa,EAAE,CAAM;IAC9B,EAAE,SAAM;IACR,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAgB;IAC/D,KAAK,UAAS;IACd,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGf,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,QAAQ,KAAK,IAAI,EAC3D,GAAG,GAAE,OAAO,CAAC,OAAO,CAAM;IAuS5B,YAAY,IACyC,SAAS;IAG9D,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAYT,QAAQ;IAIjB,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC;IAI1C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc;IAMrD,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAIzC,IAAI,IAAI,QAAQ,GAAG,SAAS;IAgF5B,OAAO,CAAC,GAAG,EAAE,QAAQ;IAiFrB,aAAa;IA0Bb,OAAO;CAKR"}
package/esm/CodeJar.js ADDED
@@ -0,0 +1,549 @@
1
+ import * as dntShim from "./_dnt.shims.js";
2
+ const globalWindow = dntShim.dntGlobalThis;
3
+ function visit(editor, visitor) {
4
+ const queue = [];
5
+ if (editor.firstChild)
6
+ queue.push(editor.firstChild);
7
+ let el = queue.pop();
8
+ while (el) {
9
+ if (visitor(el) === 'stop')
10
+ break;
11
+ if (el.nextSibling)
12
+ queue.push(el.nextSibling);
13
+ if (el.firstChild)
14
+ queue.push(el.firstChild);
15
+ el = queue.pop();
16
+ }
17
+ }
18
+ function isCtrl(event) {
19
+ return event.metaKey || event.ctrlKey;
20
+ }
21
+ function isUndo(event) {
22
+ return isCtrl(event) && !event.shiftKey && getKeyCode(event) === 'Z';
23
+ }
24
+ function isRedo(event) {
25
+ return isCtrl(event) && event.shiftKey && getKeyCode(event) === 'Z';
26
+ }
27
+ function isCopy(event) {
28
+ return isCtrl(event) && getKeyCode(event) === 'C';
29
+ }
30
+ function getKeyCode(event) {
31
+ let key = event.key || event.keyCode || event.which;
32
+ if (!key)
33
+ return undefined;
34
+ return (typeof key === 'string' ? key : String.fromCharCode(key))
35
+ .toUpperCase();
36
+ }
37
+ function insert(text) {
38
+ text = text
39
+ .replace(/&/g, '&amp;')
40
+ .replace(/</g, '&lt;')
41
+ .replace(/>/g, '&gt;')
42
+ .replace(/"/g, '&quot;')
43
+ .replace(/'/g, '&#039;');
44
+ document.execCommand('insertHTML', false, text);
45
+ }
46
+ function debounce(cb, wait) {
47
+ let timeout = 0;
48
+ return (...args) => {
49
+ clearTimeout(timeout);
50
+ timeout = globalThis.setTimeout(() => cb(...args), wait);
51
+ };
52
+ }
53
+ function findPadding(text) {
54
+ // Find beginning of previous line.
55
+ let i = text.length - 1;
56
+ while (i >= 0 && text[i] !== '\n')
57
+ i--;
58
+ i++;
59
+ // Find padding of the line.
60
+ let j = i;
61
+ while (j < text.length && /[ \t]/.test(text[j]))
62
+ j++;
63
+ return [text.substring(i, j) || '', i, j];
64
+ }
65
+ export class CodeJar extends EventTarget {
66
+ editor;
67
+ highlight;
68
+ options;
69
+ listeners = [];
70
+ history = [];
71
+ at = -1;
72
+ onUpdateCbk = () => void 0;
73
+ focus = false;
74
+ prev; // code content prior keydown event
75
+ constructor(editor, highlight, opt = {}) {
76
+ super();
77
+ this.editor = editor;
78
+ this.highlight = highlight;
79
+ this.options = {
80
+ tab: '\t',
81
+ indentOn: /[({\[]$/,
82
+ moveToNewLine: /^[)}\]]/,
83
+ spellcheck: false,
84
+ catchTab: true,
85
+ preserveIdent: true,
86
+ addClosing: true,
87
+ history: true,
88
+ window: globalWindow,
89
+ autoclose: {
90
+ open: '',
91
+ close: '',
92
+ },
93
+ ...opt,
94
+ };
95
+ const window = this.options.window;
96
+ const document = window.document;
97
+ editor.style.outline = 'none';
98
+ editor.style.overflowWrap = 'break-word';
99
+ editor.style.overflowY = 'auto';
100
+ editor.style.whiteSpace = 'pre-wrap';
101
+ const matchFirefoxVersion = window.navigator.userAgent.match(/Firefox\/([0-9]+)\./);
102
+ const firefoxVersion = matchFirefoxVersion
103
+ ? parseInt(matchFirefoxVersion[1])
104
+ : 0;
105
+ let isLegacy = false; // true if plaintext-only is not supported
106
+ if (editor.contentEditable !== 'plaintext-only' || firefoxVersion >= 136) {
107
+ isLegacy = true;
108
+ }
109
+ if (isLegacy)
110
+ editor.setAttribute('contenteditable', 'true');
111
+ if (!opt.readOnly) {
112
+ editor.setAttribute('contenteditable', 'plaintext-only');
113
+ editor.setAttribute('spellcheck', this.options.spellcheck ? 'true' : 'false');
114
+ }
115
+ const debounceHighlight = debounce(() => {
116
+ const pos = this.save();
117
+ this.doHighlight(editor, pos);
118
+ this.restore(pos);
119
+ }, 30);
120
+ let recording = false;
121
+ const shouldRecord = (event) => {
122
+ return !isUndo(event) && !isRedo(event) &&
123
+ event.key !== 'Meta' &&
124
+ event.key !== 'Control' &&
125
+ event.key !== 'Alt' &&
126
+ !event.key.startsWith('Arrow');
127
+ };
128
+ const debounceRecordHistory = debounce((event) => {
129
+ if (shouldRecord(event)) {
130
+ this.recordHistory();
131
+ recording = false;
132
+ }
133
+ }, 300);
134
+ const on = (type, fn) => {
135
+ this.listeners.push([type, fn]);
136
+ this.editor.addEventListener(type, fn);
137
+ };
138
+ on('keydown', (event) => {
139
+ if (event.defaultPrevented)
140
+ return;
141
+ this.prev = this.toString();
142
+ if (this.options.preserveIdent)
143
+ handleNewLine(event);
144
+ else
145
+ legacyNewLineFix(event);
146
+ if (this.options.catchTab)
147
+ handleTabCharacters(event);
148
+ if (this.options.addClosing)
149
+ handleSelfClosingCharacters(event);
150
+ if (this.options.history) {
151
+ handleUndoRedo(event);
152
+ if (shouldRecord(event) && !recording) {
153
+ this.recordHistory();
154
+ recording = true;
155
+ }
156
+ }
157
+ if (isLegacy && !isCopy(event))
158
+ this.restore(this.save());
159
+ });
160
+ on('keyup', (event) => {
161
+ if (event.defaultPrevented)
162
+ return;
163
+ if (event.isComposing)
164
+ return;
165
+ if (this.prev !== this.toString())
166
+ debounceHighlight();
167
+ debounceRecordHistory(event);
168
+ this.onUpdateCbk(this.toString());
169
+ });
170
+ on('focus', (_event) => {
171
+ this.focus = true;
172
+ });
173
+ on('blur', (_event) => {
174
+ this.focus = false;
175
+ });
176
+ on('paste', (event) => {
177
+ this.recordHistory();
178
+ handlePaste(event);
179
+ this.recordHistory();
180
+ this.onUpdateCbk(this.toString());
181
+ });
182
+ on('cut', (event) => {
183
+ this.recordHistory();
184
+ handleCut(event);
185
+ this.recordHistory();
186
+ this.onUpdateCbk(this.toString());
187
+ });
188
+ const beforeCursor = () => {
189
+ const s = this.getSelection();
190
+ const r0 = s.getRangeAt(0);
191
+ const r = document.createRange();
192
+ r.selectNodeContents(editor);
193
+ r.setEnd(r0.startContainer, r0.startOffset);
194
+ return r.toString();
195
+ };
196
+ const afterCursor = () => {
197
+ const s = this.getSelection();
198
+ const r0 = s.getRangeAt(0);
199
+ const r = document.createRange();
200
+ r.selectNodeContents(editor);
201
+ r.setStart(r0.endContainer, r0.endOffset);
202
+ return r.toString();
203
+ };
204
+ const handleNewLine = (event) => {
205
+ if (event.key === 'Enter') {
206
+ const before = beforeCursor();
207
+ const after = afterCursor();
208
+ let [padding] = findPadding(before);
209
+ let newLinePadding = padding;
210
+ // If last symbol is "{" ident new line
211
+ if (this.options.indentOn.test(before)) {
212
+ newLinePadding += this.options.tab;
213
+ }
214
+ // Preserve padding
215
+ if (newLinePadding.length > 0) {
216
+ event.preventDefault();
217
+ event.stopPropagation();
218
+ insert('\n' + newLinePadding);
219
+ }
220
+ else {
221
+ legacyNewLineFix(event);
222
+ }
223
+ // Place adjacent "}" on next line
224
+ if (newLinePadding !== padding && this.options.moveToNewLine.test(after)) {
225
+ const pos = this.save();
226
+ insert('\n' + padding);
227
+ this.restore(pos);
228
+ }
229
+ }
230
+ };
231
+ const legacyNewLineFix = (event) => {
232
+ // Firefox does not support plaintext-only mode
233
+ // and puts <div><br></div> on Enter. Let's help.
234
+ if (isLegacy && event.key === 'Enter') {
235
+ event.preventDefault();
236
+ event.stopPropagation();
237
+ if (afterCursor() == '') {
238
+ insert('\n ');
239
+ const pos = this.save();
240
+ pos.start = --pos.end;
241
+ this.restore(pos);
242
+ }
243
+ else {
244
+ insert('\n');
245
+ }
246
+ }
247
+ };
248
+ const handleSelfClosingCharacters = (event) => {
249
+ const open = this.options.autoclose.open;
250
+ const close = this.options.autoclose.close;
251
+ if (open.includes(event.key)) {
252
+ event.preventDefault();
253
+ const pos = this.save();
254
+ const wrapText = pos.start == pos.end
255
+ ? ''
256
+ : this.getSelection().toString();
257
+ const text = event.key + wrapText +
258
+ (close[open.indexOf(event.key)] ?? '');
259
+ insert(text);
260
+ pos.start++;
261
+ pos.end++;
262
+ this.restore(pos);
263
+ }
264
+ };
265
+ const handleTabCharacters = (event) => {
266
+ if (event.key === 'Tab') {
267
+ event.preventDefault();
268
+ if (event.shiftKey) {
269
+ const before = beforeCursor();
270
+ let [padding, start] = findPadding(before);
271
+ if (padding.length > 0) {
272
+ const pos = this.save();
273
+ // Remove full length tab or just remaining padding
274
+ const len = Math.min(this.options.tab.length, padding.length);
275
+ this.restore({ start, end: start + len });
276
+ document.execCommand('delete');
277
+ pos.start -= len;
278
+ pos.end -= len;
279
+ this.restore(pos);
280
+ }
281
+ }
282
+ else {
283
+ insert(this.options.tab);
284
+ }
285
+ }
286
+ };
287
+ const handleUndoRedo = (event) => {
288
+ if (isUndo(event)) {
289
+ event.preventDefault();
290
+ this.at--;
291
+ const record = this.history[this.at];
292
+ if (record) {
293
+ editor.innerHTML = record.html;
294
+ this.restore(record.pos);
295
+ }
296
+ if (this.at < 0)
297
+ this.at = 0;
298
+ }
299
+ if (isRedo(event)) {
300
+ event.preventDefault();
301
+ this.at++;
302
+ const record = this.history[this.at];
303
+ if (record) {
304
+ editor.innerHTML = record.html;
305
+ this.restore(record.pos);
306
+ }
307
+ if (this.at >= history.length)
308
+ this.at--;
309
+ }
310
+ };
311
+ const handlePaste = (event) => {
312
+ if (event.defaultPrevented)
313
+ return;
314
+ event.preventDefault();
315
+ const originalEvent = event.originalEvent ?? event;
316
+ const text = originalEvent.clipboardData.getData('text/plain').replace(/\r\n?/g, '\n');
317
+ const pos = this.save();
318
+ insert(text);
319
+ this.doHighlight(editor);
320
+ this.restore({
321
+ start: Math.min(pos.start, pos.end) + text.length,
322
+ end: Math.min(pos.start, pos.end) + text.length,
323
+ dir: '<-',
324
+ });
325
+ };
326
+ const handleCut = (event) => {
327
+ const pos = this.save();
328
+ const selection = this.getSelection();
329
+ const originalEvent = event.originalEvent ?? event;
330
+ originalEvent.clipboardData.setData('text/plain', selection.toString());
331
+ document.execCommand('delete');
332
+ this.doHighlight(editor);
333
+ this.restore({
334
+ start: Math.min(pos.start, pos.end),
335
+ end: Math.min(pos.start, pos.end),
336
+ dir: '<-',
337
+ });
338
+ event.preventDefault();
339
+ };
340
+ }
341
+ getSelection() {
342
+ return this.editor.getRootNode().getSelection();
343
+ }
344
+ doHighlight(editor, pos) {
345
+ this.highlight(editor, pos);
346
+ }
347
+ uneditable(node) {
348
+ while (node && node !== this.editor) {
349
+ if (node.nodeType === Node.ELEMENT_NODE) {
350
+ const el = node;
351
+ if (el.getAttribute('contenteditable') == 'false') {
352
+ return el;
353
+ }
354
+ }
355
+ node = node.parentNode;
356
+ }
357
+ }
358
+ toString() {
359
+ return this.editor.textContent || '';
360
+ }
361
+ updateOptions(newOptions) {
362
+ Object.assign(this.options, newOptions);
363
+ }
364
+ updateCode(code, callOnUpdate = true) {
365
+ this.editor.textContent = code;
366
+ this.doHighlight(this.editor);
367
+ callOnUpdate && this.onUpdateCbk(code);
368
+ }
369
+ onUpdate(callback) {
370
+ this.onUpdateCbk = callback;
371
+ }
372
+ save() {
373
+ const s = this.getSelection();
374
+ const pos = { start: 0, end: 0, dir: undefined };
375
+ if (!s) {
376
+ return pos;
377
+ }
378
+ let { anchorNode, anchorOffset, focusNode, focusOffset } = s;
379
+ if (!anchorNode) {
380
+ console.warn('No anchorNode');
381
+ return undefined;
382
+ }
383
+ if (!focusNode) {
384
+ console.warn('No focusNode');
385
+ return undefined;
386
+ }
387
+ // If the anchor and focus are the editor element, return either a full
388
+ // highlight or a start/end cursor position depending on the selection
389
+ if (anchorNode === this.editor && focusNode === this.editor) {
390
+ pos.start = (anchorOffset > 0 && this.editor.textContent)
391
+ ? this.editor.textContent.length
392
+ : 0;
393
+ pos.end = (focusOffset > 0 && this.editor.textContent)
394
+ ? this.editor.textContent.length
395
+ : 0;
396
+ pos.dir = (focusOffset >= anchorOffset) ? '->' : '<-';
397
+ return pos;
398
+ }
399
+ // Selection anchor and focus are expected to be text nodes,
400
+ // so normalize them.
401
+ if (anchorNode.nodeType === Node.ELEMENT_NODE) {
402
+ const node = document.createTextNode('');
403
+ anchorNode.insertBefore(node, anchorNode.childNodes[anchorOffset]);
404
+ anchorNode = node;
405
+ anchorOffset = 0;
406
+ }
407
+ if (focusNode.nodeType === Node.ELEMENT_NODE) {
408
+ const node = document.createTextNode('');
409
+ focusNode.insertBefore(node, focusNode.childNodes[focusOffset]);
410
+ focusNode = node;
411
+ focusOffset = 0;
412
+ }
413
+ visit(this.editor, (el) => {
414
+ if (el === anchorNode && el === focusNode) {
415
+ pos.start += anchorOffset;
416
+ pos.end += focusOffset;
417
+ pos.dir = anchorOffset <= focusOffset ? '->' : '<-';
418
+ return 'stop';
419
+ }
420
+ if (el === anchorNode) {
421
+ pos.start += anchorOffset;
422
+ if (!pos.dir) {
423
+ pos.dir = '->';
424
+ }
425
+ else {
426
+ return 'stop';
427
+ }
428
+ }
429
+ else if (el === focusNode) {
430
+ pos.end += focusOffset;
431
+ if (!pos.dir) {
432
+ pos.dir = '<-';
433
+ }
434
+ else {
435
+ return 'stop';
436
+ }
437
+ }
438
+ if (el.nodeType === Node.TEXT_NODE) {
439
+ if (pos.dir != '->')
440
+ pos.start += el.nodeValue.length;
441
+ if (pos.dir != '<-')
442
+ pos.end += el.nodeValue.length;
443
+ }
444
+ });
445
+ this.editor.normalize(); // collapse empty text nodes
446
+ return pos;
447
+ }
448
+ restore(pos) {
449
+ const s = this.getSelection();
450
+ if (!s) {
451
+ return;
452
+ }
453
+ let startNode, startOffset = 0;
454
+ let endNode, endOffset = 0;
455
+ if (!pos.dir)
456
+ pos.dir = '->';
457
+ if (pos.start < 0)
458
+ pos.start = 0;
459
+ if (pos.end < 0)
460
+ pos.end = 0;
461
+ // Flip start and end if the direction reversed
462
+ if (pos.dir == '<-') {
463
+ const { start, end } = pos;
464
+ pos.start = end;
465
+ pos.end = start;
466
+ }
467
+ let current = 0;
468
+ visit(this.editor, (el) => {
469
+ if (el.nodeType !== Node.TEXT_NODE)
470
+ return;
471
+ const len = (el.nodeValue || '').length;
472
+ if (current + len > pos.start) {
473
+ if (!startNode) {
474
+ startNode = el;
475
+ startOffset = pos.start - current;
476
+ }
477
+ if (current + len > pos.end) {
478
+ endNode = el;
479
+ endOffset = pos.end - current;
480
+ return 'stop';
481
+ }
482
+ }
483
+ current += len;
484
+ });
485
+ if (!startNode) {
486
+ startNode = this.editor;
487
+ startOffset = this.editor.childNodes.length;
488
+ }
489
+ if (!endNode) {
490
+ endNode = this.editor;
491
+ endOffset = this.editor.childNodes.length;
492
+ }
493
+ // Flip back the selection
494
+ if (pos.dir == '<-') {
495
+ [startNode, startOffset, endNode, endOffset] = [
496
+ endNode,
497
+ endOffset,
498
+ startNode,
499
+ startOffset,
500
+ ];
501
+ }
502
+ {
503
+ // If nodes not editable, create a text node.
504
+ const startEl = this.uneditable(startNode);
505
+ if (startEl) {
506
+ const node = document.createTextNode('');
507
+ startEl.parentNode?.insertBefore(node, startEl);
508
+ startNode = node;
509
+ startOffset = 0;
510
+ }
511
+ const endEl = this.uneditable(endNode);
512
+ if (endEl) {
513
+ const node = document.createTextNode('');
514
+ endEl.parentNode?.insertBefore(node, endEl);
515
+ endNode = node;
516
+ endOffset = 0;
517
+ }
518
+ }
519
+ s.setBaseAndExtent(startNode, startOffset, endNode, endOffset);
520
+ this.editor.normalize(); // collapse empty text nodes
521
+ }
522
+ recordHistory() {
523
+ if (!focus)
524
+ return;
525
+ const html = this.editor.innerHTML;
526
+ const pos = this.save();
527
+ const lastRecord = this.history[this.at];
528
+ if (lastRecord) {
529
+ if (lastRecord.html === html &&
530
+ lastRecord.pos.start === pos.start &&
531
+ lastRecord.pos.end === pos.end)
532
+ return;
533
+ }
534
+ this.at++;
535
+ this.history[this.at] = { html, pos };
536
+ this.history.splice(this.at + 1);
537
+ const maxHistory = 300;
538
+ if (this.at > maxHistory) {
539
+ this.at = maxHistory;
540
+ this.history.splice(0, 1);
541
+ }
542
+ }
543
+ destroy() {
544
+ for (let [type, fn] of this.listeners) {
545
+ this.editor.removeEventListener(type, fn);
546
+ }
547
+ }
548
+ }
549
+ //# sourceMappingURL=CodeJar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeJar.js","sourceRoot":"","sources":["../src/CodeJar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;AA8B3C,SAAS,KAAK,CACZ,MAAmB,EACnB,OAAyC;IAEzC,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,IAAI,MAAM,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IACrB,OAAO,EAAE,EAAE,CAAC;QACV,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,MAAM;YAAE,MAAM;QAClC,IAAI,EAAE,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC7C,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,KAAoB;IAClC,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;AACxC,CAAC;AAED,SAAS,MAAM,CAAC,KAAoB;IAClC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AACvE,CAAC;AAED,SAAS,MAAM,CAAC,KAAoB;IAClC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AACtE,CAAC;AAED,SAAS,MAAM,CAAC,KAAoB;IAClC,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,KAAoB;IACtC,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;IACpD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,OAAO,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SAC9D,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,GAAG,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,QAAQ,CAAC,EAAO,EAAE,IAAY;IACrC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,IAAS,EAAE,EAAE;QACtB,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,mCAAmC;IACnC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,CAAC,EAAE,CAAC;IACvC,CAAC,EAAE,CAAC;IACJ,4BAA4B;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAE,CAAC,EAAE,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,OAAO,OAAQ,SAAQ,WAAW;IAU5B;IACA;IAVV,OAAO,CAAU;IACjB,SAAS,GAAoB,EAAE,CAAC;IAChC,OAAO,GAAoB,EAAE,CAAC;IAC9B,EAAE,GAAG,CAAC,CAAC,CAAC;IACR,WAAW,GAAuC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/D,KAAK,GAAG,KAAK,CAAC;IACd,IAAI,CAAqB,CAAC,mCAAmC;IAE7D,YACU,MAAmB,EACnB,SAAmD,EAC3D,MAAwB,EAAE;QAE1B,KAAK,EAAE,CAAC;QAJA,WAAM,GAAN,MAAM,CAAa;QACnB,cAAS,GAAT,SAAS,CAA0C;QAK3D,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,EAAE,IAAI;YACT,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,SAAS;YACxB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,IAAI;YACd,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,YAAY;YACpB,SAAS,EAAE;gBACT,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,EAAE;aACV;YACD,GAAG,GAAG;SACP,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAErC,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAC1D,qBAAqB,CACtB,CAAC;QACF,MAAM,cAAc,GAAG,mBAAmB;YACxC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,0CAA0C;QAChE,IACE,MAAM,CAAC,eAAe,KAAK,gBAAgB,IAAI,cAAc,IAAI,GAAG,EACpE,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,QAAQ;YAAE,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAE7D,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;YACzD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAC3C,CAAC;QACJ,CAAC;QAED,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,EAAE;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAW,EAAE;YACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrC,KAAK,CAAC,GAAG,KAAK,MAAM;gBACpB,KAAK,CAAC,GAAG,KAAK,SAAS;gBACvB,KAAK,CAAC,GAAG,KAAK,KAAK;gBACnB,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,MAAM,qBAAqB,GAAG,QAAQ,CAAC,CAAC,KAAoB,EAAE,EAAE;YAC9D,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,MAAM,EAAE,GAAG,CACT,IAAO,EACP,EAA2C,EAC3C,EAAE;YACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACtB,IAAI,KAAK,CAAC,gBAAgB;gBAAE,OAAO;YAEnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa;gBAAE,aAAa,CAAC,KAAK,CAAC,CAAC;;gBAChD,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU;gBAAE,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACzB,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtB,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACtC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,SAAS,GAAG,IAAI,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACpB,IAAI,KAAK,CAAC,gBAAgB;gBAAE,OAAO;YACnC,IAAI,KAAK,CAAC,WAAW;gBAAE,OAAO;YAE9B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE;gBAAE,iBAAiB,EAAE,CAAC;YACvD,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YACjC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;YAC5C,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YACjC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;gBAE5B,IAAI,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,cAAc,GAAG,OAAO,CAAC;gBAE7B,uCAAuC;gBACvC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;gBACrC,CAAC;gBAED,mBAAmB;gBACnB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;gBAED,kCAAkC;gBAClC,IACE,cAAc,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EACpE,CAAC;oBACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;oBACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,CAAC,KAAoB,EAAE,EAAE;YAChD,+CAA+C;YAC/C,iDAAiD;YACjD,IAAI,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,IAAI,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;oBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBACxB,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;oBACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,2BAA2B,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG;oBACnC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,QAAQ;oBAC/B,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACb,GAAG,CAAC,KAAK,EAAE,CAAC;gBACZ,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,mBAAmB,GAAG,CAAC,KAAoB,EAAE,EAAE;YACnD,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;gBACxB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;oBAC9B,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;oBAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;wBACxB,mDAAmD;wBACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC9D,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;wBAC1C,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAC/B,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC;wBACjB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;wBACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACpB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,EAAE,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;oBAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,EAAE,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;gBACD,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM;oBAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,KAAqB,EAAE,EAAE;YAC5C,IAAI,KAAK,CAAC,gBAAgB;gBAAE,OAAO;YACnC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,aAAa,GAAI,KAAa,CAAC,aAAa,IAAI,KAAK,CAAC;YAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CACpE,QAAQ,EACR,IAAI,CACL,CAAC;YACF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC;gBACX,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;gBACjD,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;gBAC/C,GAAG,EAAE,IAAI;aACV,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,KAAqB,EAAE,EAAE;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,aAAa,GAAI,KAAa,CAAC,aAAa,IAAI,KAAK,CAAC;YAC5D,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC;gBACX,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC;gBACnC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC;gBACjC,GAAG,EAAE,IAAI;aACV,CAAC,CAAC;YACH,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,CAAC,CAAC;IACJ,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,YAAY,EAAe,CAAC;IAC/D,CAAC;IAEO,WAAW,CAAC,MAAmB,EAAE,GAAc;QACrD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IAEO,UAAU,CAAC,IAAU;QAC3B,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxC,MAAM,EAAE,GAAG,IAAe,CAAC;gBAC3B,IAAI,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,OAAO,EAAE,CAAC;oBAClD,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,UAAW,CAAC;QAC1B,CAAC;IACH,CAAC;IAEQ,QAAQ;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,aAAa,CAAC,UAA4B;QACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,eAAwB,IAAI;QACnD,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ,CAAC,QAAgC;QACvC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAE9B,MAAM,GAAG,GAAa,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QAC3D,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,uEAAuE;QACvE,sEAAsE;QACtE,IAAI,UAAU,KAAK,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5D,GAAG,CAAC,KAAK,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBACvD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM;gBAChC,CAAC,CAAC,CAAC,CAAC;YACN,GAAG,CAAC,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM;gBAChC,CAAC,CAAC,CAAC,CAAC;YACN,GAAG,CAAC,GAAG,GAAG,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,4DAA4D;QAC5D,qBAAqB;QACrB,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACzC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;YACnE,UAAU,GAAG,IAAI,CAAC;YAClB,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACzC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;YAChE,SAAS,GAAG,IAAI,CAAC;YACjB,WAAW,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;YACxB,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC1C,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC;gBAC1B,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC;gBACvB,GAAG,CAAC,GAAG,GAAG,YAAY,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpD,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;gBACtB,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;iBAAM,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC5B,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAED,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnC,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI;oBAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,SAAU,CAAC,MAAM,CAAC;gBACvD,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI;oBAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,SAAU,CAAC,MAAM,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,4BAA4B;QACrD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,CAAC,GAAa;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,IAAI,SAA2B,EAAE,WAAW,GAAG,CAAC,CAAC;QACjD,IAAI,OAAyB,EAAE,SAAS,GAAG,CAAC,CAAC;QAE7C,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;QAC7B,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC;YAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;YAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAE7B,+CAA+C;QAC/C,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YACpB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YAC3B,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;YAChB,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;YACxB,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS;gBAAE,OAAO;YAE3C,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACxC,IAAI,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,GAAG,EAAE,CAAC;oBACf,WAAW,GAAG,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC;gBACpC,CAAC;gBACD,IAAI,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;oBAC5B,OAAO,GAAG,EAAE,CAAC;oBACb,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC;oBAC9B,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,GAAG,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;YACtB,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QAC5C,CAAC;QAED,0BAA0B;QAC1B,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YACpB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG;gBAC7C,OAAO;gBACP,SAAS;gBACT,SAAS;gBACT,WAAW;aACZ,CAAC;QACJ,CAAC;QAED,CAAC;YACC,6CAA6C;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAChD,SAAS,GAAG,IAAI,CAAC;gBACjB,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBACzC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC5C,OAAO,GAAG,IAAI,CAAC;gBACf,SAAS,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QAED,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,4BAA4B;IACvD,CAAC;IAED,aAAa;QACX,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAExB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,UAAU,EAAE,CAAC;YACf,IACE,UAAU,CAAC,IAAI,KAAK,IAAI;gBACxB,UAAU,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK;gBAClC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG;gBAC9B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAEjC,MAAM,UAAU,GAAG,GAAG,CAAC;QACvB,IAAI,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ export interface DecorationInline {
2
+ startIndex: number;
3
+ endIndex: number;
4
+ className: string;
5
+ title?: string;
6
+ }
7
+ export declare class Decorator {
8
+ decorationGroups: Record<string, DecorationInline[]>;
9
+ highlight(code: string): string;
10
+ }
11
+ //# sourceMappingURL=Decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Decorator.d.ts","sourceRoot":"","sources":["../src/Decorator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,SAAS;IACb,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAM;IAEjE,SAAS,CAAC,IAAI,EAAE,MAAM;CAiDvB"}