@k2b/ui 0.40.0 → 0.41.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.
- package/dist/browser/chat/ChatComposer.js +759 -570
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/inputs/ChoiceGroups.js +30 -18
- package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
- package/dist/browser/inputs/Select.js +32 -19
- package/dist/browser/inputs/Select.js.map +1 -1
- package/dist/browser/inputs/SpecialInputs.js +54 -25
- package/dist/browser/inputs/SpecialInputs.js.map +1 -1
- package/dist/browser/inputs/choice.js +4 -1
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/inputs/dictation/Dictation.js +546 -0
- package/dist/browser/inputs/dictation/Dictation.js.map +1 -0
- package/dist/browser/inputs/dictation/create-dictation.js +324 -0
- package/dist/browser/inputs/dictation/create-dictation.js.map +1 -0
- package/dist/browser/inputs/dictation/dictation-messages.js +115 -0
- package/dist/browser/inputs/dictation/dictation-messages.js.map +1 -0
- package/dist/browser/inputs/dictation/text-dictation.js +152 -0
- package/dist/browser/inputs/dictation/text-dictation.js.map +1 -0
- package/dist/browser/inputs/dictation/types.js +2 -0
- package/dist/browser/inputs/dictation/types.js.map +1 -0
- package/dist/browser/inputs/icon-messages.js +29 -2
- package/dist/browser/inputs/icon-messages.js.map +1 -1
- package/dist/browser/inputs/icon-texts.js +172 -0
- package/dist/browser/inputs/icon-texts.js.map +1 -0
- package/dist/browser/inputs/index.js +2 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/layout/AnchoredPopover.js +1 -1
- package/dist/browser/layout/AnchoredPopover.js.map +1 -1
- package/dist/browser/layout/SettingsModal.js +10 -5
- package/dist/browser/layout/SettingsModal.js.map +1 -1
- package/dist/browser/text-editor/TextEditor.js +74 -25
- package/dist/browser/text-editor/TextEditor.js.map +1 -1
- package/dist/browser/text-editor/dictation.js +166 -0
- package/dist/browser/text-editor/dictation.js.map +1 -0
- package/dist/browser/text-editor.js +1 -0
- package/dist/browser/text-editor.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +271 -99
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/inputs/ChoiceGroups.js +12 -3
- package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
- package/dist/ssr/inputs/Select.js +8 -2
- package/dist/ssr/inputs/Select.js.map +1 -1
- package/dist/ssr/inputs/SpecialInputs.js +54 -25
- package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
- package/dist/ssr/inputs/choice.js +4 -1
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/inputs/dictation/Dictation.js +386 -0
- package/dist/ssr/inputs/dictation/Dictation.js.map +1 -0
- package/dist/ssr/inputs/dictation/create-dictation.js +324 -0
- package/dist/ssr/inputs/dictation/create-dictation.js.map +1 -0
- package/dist/ssr/inputs/dictation/dictation-messages.js +115 -0
- package/dist/ssr/inputs/dictation/dictation-messages.js.map +1 -0
- package/dist/ssr/inputs/dictation/text-dictation.js +152 -0
- package/dist/ssr/inputs/dictation/text-dictation.js.map +1 -0
- package/dist/ssr/inputs/dictation/types.js +2 -0
- package/dist/ssr/inputs/dictation/types.js.map +1 -0
- package/dist/ssr/inputs/icon-messages.js +29 -2
- package/dist/ssr/inputs/icon-messages.js.map +1 -1
- package/dist/ssr/inputs/icon-texts.js +172 -0
- package/dist/ssr/inputs/icon-texts.js.map +1 -0
- package/dist/ssr/inputs/index.js +2 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/layout/AnchoredPopover.js +1 -1
- package/dist/ssr/layout/AnchoredPopover.js.map +1 -1
- package/dist/ssr/layout/SettingsModal.js +10 -5
- package/dist/ssr/layout/SettingsModal.js.map +1 -1
- package/dist/ssr/text-editor/TextEditor.js +74 -25
- package/dist/ssr/text-editor/TextEditor.js.map +1 -1
- package/dist/ssr/text-editor/dictation.js +166 -0
- package/dist/ssr/text-editor/dictation.js.map +1 -0
- package/dist/ssr/text-editor.js +1 -0
- package/dist/ssr/text-editor.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/chat/ChatComposer.d.ts +9 -0
- package/dist/types/inputs/SpecialInputs.d.ts +8 -0
- package/dist/types/inputs/dictation/Dictation.d.ts +26 -0
- package/dist/types/inputs/dictation/create-dictation.d.ts +77 -0
- package/dist/types/inputs/dictation/dictation-messages.d.ts +54 -0
- package/dist/types/inputs/dictation/text-dictation.d.ts +36 -0
- package/dist/types/inputs/dictation/types.d.ts +74 -0
- package/dist/types/inputs/icon-messages.d.ts +14 -0
- package/dist/types/inputs/icon-texts.d.ts +13 -0
- package/dist/types/inputs/index.d.ts +5 -0
- package/dist/types/layout/AnchoredPopover.d.ts +5 -0
- package/dist/types/text-editor/TextEditor.d.ts +10 -1
- package/dist/types/text-editor/dictation.d.ts +20 -0
- package/dist/types/text-editor.d.ts +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { isolateHistory } from "@codemirror/commands";
|
|
2
|
+
import { StateEffect, StateField, Transaction } from "@codemirror/state";
|
|
3
|
+
import { Decoration, EditorView, WidgetType } from "@codemirror/view";
|
|
4
|
+
const dictatedMark = Decoration.mark({
|
|
5
|
+
class: "k2b-dictation-dictated"
|
|
6
|
+
});
|
|
7
|
+
const freshMark = at => Decoration.mark({
|
|
8
|
+
class: "k2b-dictation-fresh",
|
|
9
|
+
at
|
|
10
|
+
});
|
|
11
|
+
class MarkWidget extends WidgetType {
|
|
12
|
+
eq() {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
toDOM() {
|
|
16
|
+
const mark = document.createElement("span");
|
|
17
|
+
mark.className = "k2b-dictation-mark";
|
|
18
|
+
mark.setAttribute("aria-hidden", "true");
|
|
19
|
+
return mark;
|
|
20
|
+
}
|
|
21
|
+
ignoreEvent() {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const open = StateEffect.define();
|
|
26
|
+
const inserted = StateEffect.define();
|
|
27
|
+
/** Removes the tint of words older than the given time. */
|
|
28
|
+
const settle = StateEffect.define();
|
|
29
|
+
const close = StateEffect.define();
|
|
30
|
+
const empty = {
|
|
31
|
+
mark: null,
|
|
32
|
+
dictated: Decoration.none,
|
|
33
|
+
fresh: Decoration.none
|
|
34
|
+
};
|
|
35
|
+
const dictationField = StateField.define({
|
|
36
|
+
create: () => empty,
|
|
37
|
+
update(value, tr) {
|
|
38
|
+
let next = tr.docChanged ? {
|
|
39
|
+
// Edits elsewhere move the mark along; text typed exactly at the mark stays before the next words.
|
|
40
|
+
mark: value.mark === null ? null : tr.changes.mapPos(value.mark, 1),
|
|
41
|
+
dictated: value.dictated.map(tr.changes),
|
|
42
|
+
fresh: value.fresh.map(tr.changes)
|
|
43
|
+
} : value;
|
|
44
|
+
for (const effect of tr.effects) {
|
|
45
|
+
if (effect.is(open)) next = {
|
|
46
|
+
...next,
|
|
47
|
+
mark: effect.value
|
|
48
|
+
};else if (effect.is(inserted)) {
|
|
49
|
+
const {
|
|
50
|
+
from,
|
|
51
|
+
to,
|
|
52
|
+
mark
|
|
53
|
+
} = effect.value;
|
|
54
|
+
next = {
|
|
55
|
+
mark,
|
|
56
|
+
dictated: next.dictated.update({
|
|
57
|
+
add: [dictatedMark.range(from, to)]
|
|
58
|
+
}),
|
|
59
|
+
fresh: next.fresh.update({
|
|
60
|
+
add: [freshMark(Date.now()).range(from, to)]
|
|
61
|
+
})
|
|
62
|
+
};
|
|
63
|
+
} else if (effect.is(settle)) {
|
|
64
|
+
const before = effect.value;
|
|
65
|
+
next = {
|
|
66
|
+
...next,
|
|
67
|
+
fresh: next.fresh.update({
|
|
68
|
+
filter: (_from, _to, value) => value.spec.at > before
|
|
69
|
+
})
|
|
70
|
+
};
|
|
71
|
+
} else if (effect.is(close)) next = empty;
|
|
72
|
+
}
|
|
73
|
+
return next;
|
|
74
|
+
},
|
|
75
|
+
provide: field => [EditorView.decorations.from(field, state => state.fresh), EditorView.decorations.from(field, state => state.mark === null ? Decoration.none : Decoration.set([Decoration.widget({
|
|
76
|
+
widget: new MarkWidget(),
|
|
77
|
+
side: 1
|
|
78
|
+
}).range(state.mark)]))]
|
|
79
|
+
});
|
|
80
|
+
const space = /\s/;
|
|
81
|
+
const freshMs = 1_500;
|
|
82
|
+
|
|
83
|
+
/** The editor state dictation needs; add it to the view that `codeMirrorDictationTarget` writes into. */
|
|
84
|
+
export const dictationExtension = () => dictationField;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* A dictation target for a CodeMirror view. Words go into the document at once, as typed text does, so a shared
|
|
88
|
+
* document shows them to everyone and they last as long as the host saves typed text. The mark follows local and
|
|
89
|
+
* remote edits; Discard removes exactly the dictated ranges in one step, including what the person typed inside them.
|
|
90
|
+
*/
|
|
91
|
+
export function codeMirrorDictationTarget(editorView) {
|
|
92
|
+
/** The first words of each session get one space from earlier text, never two. */
|
|
93
|
+
let sessionStart = false;
|
|
94
|
+
const view = () => {
|
|
95
|
+
const current = editorView();
|
|
96
|
+
return current?.state.field(dictationField, false) ? current : undefined;
|
|
97
|
+
};
|
|
98
|
+
return {
|
|
99
|
+
begin: () => {
|
|
100
|
+
const current = view();
|
|
101
|
+
if (!current) return;
|
|
102
|
+
sessionStart = true;
|
|
103
|
+
// A new session of the same dictation writes on at its mark.
|
|
104
|
+
if (current.state.field(dictationField).mark !== null) return;
|
|
105
|
+
current.dispatch({
|
|
106
|
+
effects: open.of(current.state.selection.main.head),
|
|
107
|
+
annotations: isolateHistory.of("before")
|
|
108
|
+
});
|
|
109
|
+
},
|
|
110
|
+
insert: text => {
|
|
111
|
+
const current = view();
|
|
112
|
+
const mark = current?.state.field(dictationField).mark;
|
|
113
|
+
// A view that turned read-only takes no more words; the host ends the dictation.
|
|
114
|
+
if (!current || mark === null || mark === undefined || current.state.readOnly) return;
|
|
115
|
+
let chunk = text;
|
|
116
|
+
if (sessionStart) {
|
|
117
|
+
const before = current.state.doc.sliceString(Math.max(0, mark - 1), mark);
|
|
118
|
+
if (!before || space.test(before)) chunk = chunk.replace(/^[^\S\n]+/, "");else if (chunk && !space.test(chunk[0])) chunk = ` ${chunk}`;
|
|
119
|
+
}
|
|
120
|
+
if (!chunk) return;
|
|
121
|
+
// The first words right before existing text keep one space to it; the mark stays before that space.
|
|
122
|
+
const after = current.state.doc.sliceString(mark, mark + 1);
|
|
123
|
+
const gap = sessionStart && after && !space.test(after) && !space.test(chunk[chunk.length - 1]) ? " " : "";
|
|
124
|
+
sessionStart = false;
|
|
125
|
+
current.dispatch({
|
|
126
|
+
changes: {
|
|
127
|
+
from: mark,
|
|
128
|
+
insert: chunk + gap
|
|
129
|
+
},
|
|
130
|
+
effects: inserted.of({
|
|
131
|
+
from: mark,
|
|
132
|
+
to: mark + chunk.length + gap.length,
|
|
133
|
+
mark: mark + chunk.length
|
|
134
|
+
}),
|
|
135
|
+
annotations: [Transaction.userEvent.of("input.dictate"), Transaction.addToHistory.of(true)]
|
|
136
|
+
});
|
|
137
|
+
// Each chunk keeps its tint for the same time, also while speech goes on.
|
|
138
|
+
const at = Date.now();
|
|
139
|
+
setTimeout(() => view()?.dispatch({
|
|
140
|
+
effects: settle.of(at)
|
|
141
|
+
}), freshMs);
|
|
142
|
+
},
|
|
143
|
+
discard: () => {
|
|
144
|
+
const current = view();
|
|
145
|
+
if (!current) return;
|
|
146
|
+
const ranges = [];
|
|
147
|
+
const cursor = current.state.field(dictationField).dictated.iter();
|
|
148
|
+
for (; cursor.value; cursor.next()) ranges.push(cursor.value.range(cursor.from, cursor.to));
|
|
149
|
+
current.dispatch({
|
|
150
|
+
changes: ranges.filter(range => range.to > range.from).map(range => ({
|
|
151
|
+
from: range.from,
|
|
152
|
+
to: range.to
|
|
153
|
+
})),
|
|
154
|
+
effects: close.of(null),
|
|
155
|
+
annotations: [Transaction.userEvent.of("delete.dictate"), isolateHistory.of("full")]
|
|
156
|
+
});
|
|
157
|
+
},
|
|
158
|
+
end: () => {
|
|
159
|
+
view()?.dispatch({
|
|
160
|
+
effects: close.of(null),
|
|
161
|
+
annotations: isolateHistory.of("after")
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=dictation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["text-editor/dictation.ts"],"sourcesContent":["import { isolateHistory } from \"@codemirror/commands\";\nimport { type Range, type RangeSet, StateEffect, StateField, Transaction } from \"@codemirror/state\";\nimport { Decoration, type DecorationSet, EditorView, WidgetType } from \"@codemirror/view\";\nimport type { DictationTarget } from \"../inputs/dictation/types\";\n\ntype DictationState = {\n /** Where the next words land; `null` while no dictation is open. */\n mark: number | null;\n /** Every range dictation inserted, mapped through all later edits. */\n dictated: RangeSet<Decoration>;\n /** The newest words, tinted for a moment. */\n fresh: DecorationSet;\n};\n\nconst dictatedMark = Decoration.mark({ class: \"k2b-dictation-dictated\" });\nconst freshMark = (at: number) => Decoration.mark({ class: \"k2b-dictation-fresh\", at });\n\nclass MarkWidget extends WidgetType {\n override eq() {\n return true;\n }\n override toDOM() {\n const mark = document.createElement(\"span\");\n mark.className = \"k2b-dictation-mark\";\n mark.setAttribute(\"aria-hidden\", \"true\");\n return mark;\n }\n override ignoreEvent() {\n return true;\n }\n}\n\nconst open = StateEffect.define<number>();\nconst inserted = StateEffect.define<{ from: number; to: number; mark: number }>();\n/** Removes the tint of words older than the given time. */\nconst settle = StateEffect.define<number>();\nconst close = StateEffect.define<null>();\n\nconst empty: DictationState = { mark: null, dictated: Decoration.none, fresh: Decoration.none };\n\nconst dictationField = StateField.define<DictationState>({\n create: () => empty,\n update(value, tr) {\n let next: DictationState = tr.docChanged\n ? {\n // Edits elsewhere move the mark along; text typed exactly at the mark stays before the next words.\n mark: value.mark === null ? null : tr.changes.mapPos(value.mark, 1),\n dictated: value.dictated.map(tr.changes),\n fresh: value.fresh.map(tr.changes),\n }\n : value;\n for (const effect of tr.effects) {\n if (effect.is(open)) next = { ...next, mark: effect.value };\n else if (effect.is(inserted)) {\n const { from, to, mark } = effect.value;\n next = {\n mark,\n dictated: next.dictated.update({ add: [dictatedMark.range(from, to)] }),\n fresh: next.fresh.update({ add: [freshMark(Date.now()).range(from, to)] }),\n };\n } else if (effect.is(settle)) {\n const before = effect.value;\n next = { ...next, fresh: next.fresh.update({ filter: (_from, _to, value) => (value.spec.at as number) > before }) };\n } else if (effect.is(close)) next = empty;\n }\n return next;\n },\n provide: (field) => [\n EditorView.decorations.from(field, (state) => state.fresh),\n EditorView.decorations.from(field, (state) =>\n state.mark === null ? Decoration.none : Decoration.set([Decoration.widget({ widget: new MarkWidget(), side: 1 }).range(state.mark)]),\n ),\n ],\n});\n\nconst space = /\\s/;\nconst freshMs = 1_500;\n\n/** The editor state dictation needs; add it to the view that `codeMirrorDictationTarget` writes into. */\nexport const dictationExtension = () => dictationField;\n\n/**\n * A dictation target for a CodeMirror view. Words go into the document at once, as typed text does, so a shared\n * document shows them to everyone and they last as long as the host saves typed text. The mark follows local and\n * remote edits; Discard removes exactly the dictated ranges in one step, including what the person typed inside them.\n */\nexport function codeMirrorDictationTarget(editorView: () => EditorView | undefined): DictationTarget {\n /** The first words of each session get one space from earlier text, never two. */\n let sessionStart = false;\n const view = () => {\n const current = editorView();\n return current?.state.field(dictationField, false) ? current : undefined;\n };\n return {\n begin: () => {\n const current = view();\n if (!current) return;\n sessionStart = true;\n // A new session of the same dictation writes on at its mark.\n if (current.state.field(dictationField).mark !== null) return;\n current.dispatch({ effects: open.of(current.state.selection.main.head), annotations: isolateHistory.of(\"before\") });\n },\n insert: (text) => {\n const current = view();\n const mark = current?.state.field(dictationField).mark;\n // A view that turned read-only takes no more words; the host ends the dictation.\n if (!current || mark === null || mark === undefined || current.state.readOnly) return;\n let chunk = text;\n if (sessionStart) {\n const before = current.state.doc.sliceString(Math.max(0, mark - 1), mark);\n if (!before || space.test(before)) chunk = chunk.replace(/^[^\\S\\n]+/, \"\");\n else if (chunk && !space.test(chunk[0]!)) chunk = ` ${chunk}`;\n }\n if (!chunk) return;\n // The first words right before existing text keep one space to it; the mark stays before that space.\n const after = current.state.doc.sliceString(mark, mark + 1);\n const gap = sessionStart && after && !space.test(after) && !space.test(chunk[chunk.length - 1]!) ? \" \" : \"\";\n sessionStart = false;\n current.dispatch({\n changes: { from: mark, insert: chunk + gap },\n effects: inserted.of({ from: mark, to: mark + chunk.length + gap.length, mark: mark + chunk.length }),\n annotations: [Transaction.userEvent.of(\"input.dictate\"), Transaction.addToHistory.of(true)],\n });\n // Each chunk keeps its tint for the same time, also while speech goes on.\n const at = Date.now();\n setTimeout(() => view()?.dispatch({ effects: settle.of(at) }), freshMs);\n },\n discard: () => {\n const current = view();\n if (!current) return;\n const ranges: Range<Decoration>[] = [];\n const cursor = current.state.field(dictationField).dictated.iter();\n for (; cursor.value; cursor.next()) ranges.push(cursor.value.range(cursor.from, cursor.to));\n current.dispatch({\n changes: ranges.filter((range) => range.to > range.from).map((range) => ({ from: range.from, to: range.to })),\n effects: close.of(null),\n annotations: [Transaction.userEvent.of(\"delete.dictate\"), isolateHistory.of(\"full\")],\n });\n },\n end: () => {\n view()?.dispatch({ effects: close.of(null), annotations: isolateHistory.of(\"after\") });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { codeMirrorDictationTarget, dictationExtension } from "./text-editor/dictation";
|
|
1
2
|
export { createTextEditor } from "./text-editor/engine";
|
|
2
3
|
export { commands as textEditorCommands, formatLabels as textEditorFormatLabels } from "./text-editor/format";
|
|
3
4
|
export { TableSizePicker, TextEditor } from "./text-editor/TextEditor";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["text-editor.ts"],"sourcesContent":["export { createTextEditor, type TextEditorController, type TextEditorMode, type TextEditorOptions } from \"./text-editor/engine\";\nexport { commands as textEditorCommands, formatLabels as textEditorFormatLabels, type InlineFormat } from \"./text-editor/format\";\nexport {\n TableSizePicker,\n type TableSizePickerProps,\n TextEditor,\n type TextEditorControls,\n type TextEditorProps,\n} from \"./text-editor/TextEditor\";\nexport {\n editTableSource,\n type MenuAction,\n runMenuAction,\n runTableAction,\n type TableFocusTarget,\n type TableHost,\n type TableTarget,\n tableGrid,\n tableHost,\n} from \"./text-editor/table\";\n"],"mappings":"AAAA,SAAS,gBAAgB,QAAgF,sBAAsB;AAC/H,SAAS,QAAQ,IAAI,kBAAkB,EAAE,YAAY,IAAI,sBAAsB,QAA2B,sBAAsB;AAChI,SACE,eAAe,EAEf,UAAU,QAGL,0BAA0B;AACjC,SACE,eAAe,EAEf,aAAa,EACb,cAAc,EAId,SAAS,EACT,SAAS,QACJ,qBAAqB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["text-editor.ts"],"sourcesContent":["export { codeMirrorDictationTarget, dictationExtension } from \"./text-editor/dictation\";\nexport { createTextEditor, type TextEditorController, type TextEditorMode, type TextEditorOptions } from \"./text-editor/engine\";\nexport { commands as textEditorCommands, formatLabels as textEditorFormatLabels, type InlineFormat } from \"./text-editor/format\";\nexport {\n TableSizePicker,\n type TableSizePickerProps,\n TextEditor,\n type TextEditorControls,\n type TextEditorProps,\n} from \"./text-editor/TextEditor\";\nexport {\n editTableSource,\n type MenuAction,\n runMenuAction,\n runTableAction,\n type TableFocusTarget,\n type TableHost,\n type TableTarget,\n tableGrid,\n tableHost,\n} from \"./text-editor/table\";\n"],"mappings":"AAAA,SAAS,yBAAyB,EAAE,kBAAkB,QAAQ,yBAAyB;AACvF,SAAS,gBAAgB,QAAgF,sBAAsB;AAC/H,SAAS,QAAQ,IAAI,kBAAkB,EAAE,YAAY,IAAI,sBAAsB,QAA2B,sBAAsB;AAChI,SACE,eAAe,EAEf,UAAU,QAGL,0BAA0B;AACjC,SACE,eAAe,EAEf,aAAa,EACb,cAAc,EAId,SAAS,EACT,SAAS,QACJ,qBAAqB","ignoreList":[]}
|