@olddevs/ui 4.3.0 → 4.5.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/CHANGELOG.md +36 -0
- package/dist/editor/RichTextEditor.d.ts +11 -4
- package/dist/editor/RichTextEditor.d.ts.map +1 -1
- package/dist/editor/RichTextEditor.js +124 -60
- package/dist/editor/RichTextEditor.js.map +1 -1
- package/dist/editor/RichTextView.d.ts +2 -1
- package/dist/editor/RichTextView.d.ts.map +1 -1
- package/dist/editor/RichTextView.js.map +1 -1
- package/dist/editor/core/containers.d.ts +2 -6
- package/dist/editor/core/containers.d.ts.map +1 -1
- package/dist/editor/core/containers.js +2 -1
- package/dist/editor/core/containers.js.map +1 -1
- package/dist/editor/core/customTool.d.ts +8 -2
- package/dist/editor/core/customTool.d.ts.map +1 -1
- package/dist/editor/core/customTool.js.map +1 -1
- package/dist/editor/core/customToolEngine.d.ts +9 -1
- package/dist/editor/core/customToolEngine.d.ts.map +1 -1
- package/dist/editor/core/customToolEngine.js +12 -0
- package/dist/editor/core/customToolEngine.js.map +1 -1
- package/dist/editor/core/extensions.d.ts.map +1 -1
- package/dist/editor/core/extensions.js +1 -1
- package/dist/editor/core/extensions.js.map +1 -1
- package/dist/editor/core/handle.d.ts +18 -5
- package/dist/editor/core/handle.d.ts.map +1 -1
- package/dist/editor/core/handle.js +2 -13
- package/dist/editor/core/handle.js.map +1 -1
- package/dist/editor/core/handleWatchers.d.ts +36 -0
- package/dist/editor/core/handleWatchers.d.ts.map +1 -0
- package/dist/editor/core/handleWatchers.js +29 -0
- package/dist/editor/core/handleWatchers.js.map +1 -0
- package/dist/editor/core/nodeNames.d.ts +7 -0
- package/dist/editor/core/nodeNames.d.ts.map +1 -0
- package/dist/editor/core/nodeNames.js +2 -0
- package/dist/editor/core/nodeNames.js.map +1 -0
- package/dist/editor/core/schema.d.ts.map +1 -1
- package/dist/editor/core/schema.js +4 -2
- package/dist/editor/core/schema.js.map +1 -1
- package/dist/editor/core/toolCommands.d.ts +78 -0
- package/dist/editor/core/toolCommands.d.ts.map +1 -0
- package/dist/editor/core/toolCommands.js +2 -0
- package/dist/editor/core/toolCommands.js.map +1 -0
- package/dist/editor/core/toolDefinition.d.ts +139 -0
- package/dist/editor/core/toolDefinition.d.ts.map +1 -0
- package/dist/editor/core/toolDefinition.js +28 -0
- package/dist/editor/core/toolDefinition.js.map +1 -0
- package/dist/editor/core/toolDescriptor.d.ts +71 -2
- package/dist/editor/core/toolDescriptor.d.ts.map +1 -1
- package/dist/editor/core/toolDescriptor.js +6 -2
- package/dist/editor/core/toolDescriptor.js.map +1 -1
- package/dist/editor/core/toolOptions.d.ts +157 -0
- package/dist/editor/core/toolOptions.d.ts.map +1 -0
- package/dist/editor/core/toolOptions.js +21 -0
- package/dist/editor/core/toolOptions.js.map +1 -0
- package/dist/editor/core/toolState.d.ts +46 -0
- package/dist/editor/core/toolState.d.ts.map +1 -0
- package/dist/editor/core/toolState.js +2 -0
- package/dist/editor/core/toolState.js.map +1 -0
- package/dist/editor/core/tools.d.ts +10 -3
- package/dist/editor/core/tools.d.ts.map +1 -1
- package/dist/editor/core/tools.js +2 -1
- package/dist/editor/core/tools.js.map +1 -1
- package/dist/editor/core/viewIsland.d.ts.map +1 -1
- package/dist/editor/core/viewIsland.js +2 -1
- package/dist/editor/core/viewIsland.js.map +1 -1
- package/dist/editor/features/builtins.d.ts +9 -4
- package/dist/editor/features/builtins.d.ts.map +1 -1
- package/dist/editor/features/builtins.js +36 -7
- package/dist/editor/features/builtins.js.map +1 -1
- package/dist/editor/features/search/SearchPanel.d.ts.map +1 -1
- package/dist/editor/features/search/SearchPanel.js +26 -12
- package/dist/editor/features/search/SearchPanel.js.map +1 -1
- package/dist/editor/features/search/revealMatch.d.ts +16 -0
- package/dist/editor/features/search/revealMatch.d.ts.map +1 -1
- package/dist/editor/features/search/revealMatch.js +22 -0
- package/dist/editor/features/search/revealMatch.js.map +1 -1
- package/dist/editor/features/search/searchPlugin.d.ts +8 -3
- package/dist/editor/features/search/searchPlugin.d.ts.map +1 -1
- package/dist/editor/features/search/searchPlugin.js +17 -6
- package/dist/editor/features/search/searchPlugin.js.map +1 -1
- package/dist/editor/features/search/searchSnapshot.d.ts +14 -0
- package/dist/editor/features/search/searchSnapshot.d.ts.map +1 -0
- package/dist/editor/features/search/searchSnapshot.js +17 -0
- package/dist/editor/features/search/searchSnapshot.js.map +1 -0
- package/dist/editor/features/search/searchTool.d.ts +3 -0
- package/dist/editor/features/search/searchTool.d.ts.map +1 -1
- package/dist/editor/features/search/searchTool.js +30 -1
- package/dist/editor/features/search/searchTool.js.map +1 -1
- package/dist/editor/features/toc/RichTextToc.d.ts +91 -0
- package/dist/editor/features/toc/RichTextToc.d.ts.map +1 -0
- package/dist/editor/features/toc/RichTextToc.js +417 -0
- package/dist/editor/features/toc/RichTextToc.js.map +1 -0
- package/dist/editor/features/toc/documentHeadings.d.ts +30 -0
- package/dist/editor/features/toc/documentHeadings.d.ts.map +1 -0
- package/dist/editor/features/toc/documentHeadings.js +20 -0
- package/dist/editor/features/toc/documentHeadings.js.map +1 -0
- package/dist/editor/features/toc/headings.d.ts +35 -0
- package/dist/editor/features/toc/headings.d.ts.map +1 -0
- package/dist/editor/features/toc/headings.js +27 -0
- package/dist/editor/features/toc/headings.js.map +1 -0
- package/dist/editor/features/toc/stickyOffset.d.ts +3 -0
- package/dist/editor/features/toc/stickyOffset.d.ts.map +1 -0
- package/dist/editor/features/toc/stickyOffset.js +14 -0
- package/dist/editor/features/toc/stickyOffset.js.map +1 -0
- package/dist/editor/features/toc/tocSnapshot.d.ts +10 -0
- package/dist/editor/features/toc/tocSnapshot.d.ts.map +1 -0
- package/dist/editor/features/toc/tocSnapshot.js +8 -0
- package/dist/editor/features/toc/tocSnapshot.js.map +1 -0
- package/dist/editor/features/toc/tocTool.d.ts +6 -0
- package/dist/editor/features/toc/tocTool.d.ts.map +1 -0
- package/dist/editor/features/toc/tocTool.js +21 -0
- package/dist/editor/features/toc/tocTool.js.map +1 -0
- package/dist/editor/hooks/useRichTextToolState.d.ts +43 -0
- package/dist/editor/hooks/useRichTextToolState.d.ts.map +1 -0
- package/dist/editor/hooks/useRichTextToolState.js +77 -0
- package/dist/editor/hooks/useRichTextToolState.js.map +1 -0
- package/dist/editor/index.d.ts +10 -0
- package/dist/editor/index.d.ts.map +1 -1
- package/dist/editor/index.js +4 -0
- package/dist/editor/index.js.map +1 -1
- package/dist/i18n/defaults.d.ts.map +1 -1
- package/dist/i18n/defaults.js +1 -0
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/messages.d.ts +5 -0
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/locales/ru.d.ts.map +1 -1
- package/dist/locales/ru.js +1 -0
- package/dist/locales/ru.js.map +1 -1
- package/docs/api/editor-extension.en.md +223 -23
- package/docs/api/editor-extension.md +224 -22
- package/docs/api/messages.en.md +743 -0
- package/docs/api/messages.md +1 -0
- package/docs/api/migration-notes.en.md +36 -1
- package/docs/api/migration-notes.md +35 -0
- package/docs/api/utilities.en.md +233 -0
- package/docs/components/content/rich-text-toc.en.md +132 -0
- package/docs/components/content/rich-text-toc.md +131 -0
- package/docs/components/index.en.md +3 -2
- package/docs/components/index.md +2 -1
- package/docs/components/inputs/rich-text-editor.en.md +277 -43
- package/docs/components/inputs/rich-text-editor.md +247 -11
- package/docs/conventions.en.md +318 -0
- package/docs/getting-started.en.md +7 -7
- package/docs/getting-started.md +6 -6
- package/docs/glossary.en.md +52 -47
- package/docs/glossary.md +51 -46
- package/docs/index.en.md +53 -0
- package/llms.txt +1 -0
- package/package.json +1 -1
- package/src/editor/RichTextEditor.tsx +197 -38
- package/src/editor/RichTextView.tsx +2 -1
- package/src/editor/core/containers.ts +8 -6
- package/src/editor/core/customTool.ts +8 -2
- package/src/editor/core/customToolEngine.ts +20 -1
- package/src/editor/core/extensions.ts +2 -1
- package/src/editor/core/handle.ts +26 -23
- package/src/editor/core/handleWatchers.ts +72 -0
- package/src/editor/core/nodeNames.ts +7 -0
- package/src/editor/core/schema.ts +5 -2
- package/src/editor/core/toolCommands.ts +85 -0
- package/src/editor/core/toolDefinition.ts +208 -0
- package/src/editor/core/toolDescriptor.ts +94 -3
- package/src/editor/core/toolOptions.ts +211 -0
- package/src/editor/core/toolState.ts +56 -0
- package/src/editor/core/tools.ts +12 -3
- package/src/editor/core/viewIsland.ts +5 -4
- package/src/editor/features/builtins.ts +72 -13
- package/src/editor/features/search/SearchPanel.tsx +38 -14
- package/src/editor/features/search/revealMatch.ts +45 -0
- package/src/editor/features/search/searchPlugin.ts +40 -11
- package/src/editor/features/search/searchSnapshot.ts +29 -0
- package/src/editor/features/search/searchTool.ts +51 -1
- package/src/editor/features/toc/RichTextToc.tsx +810 -0
- package/src/editor/features/toc/documentHeadings.ts +59 -0
- package/src/editor/features/toc/headings.ts +77 -0
- package/src/editor/features/toc/stickyOffset.ts +21 -0
- package/src/editor/features/toc/tocSnapshot.ts +24 -0
- package/src/editor/features/toc/tocTool.ts +41 -0
- package/src/editor/hooks/useRichTextToolState.ts +153 -0
- package/src/editor/index.ts +21 -0
- package/src/i18n/defaults.ts +1 -0
- package/src/i18n/messages.ts +5 -0
- package/src/locales/ru.ts +1 -0
|
@@ -38,4 +38,26 @@ export function revealCurrentMatch(documentRoot, overlays) {
|
|
|
38
38
|
delta -= scroller.scrollTop - before;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
const overlayProviders = new WeakMap();
|
|
42
|
+
const frames = new WeakMap();
|
|
43
|
+
export function registerSearchOverlays(editor, overlays) {
|
|
44
|
+
overlayProviders.set(editor, overlays);
|
|
45
|
+
return () => {
|
|
46
|
+
if (overlayProviders.get(editor) === overlays)
|
|
47
|
+
overlayProviders.delete(editor);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function scheduleRevealMatch(editor) {
|
|
51
|
+
cancelAnimationFrame(frames.get(editor) ?? 0);
|
|
52
|
+
frames.set(editor, requestAnimationFrame(() => {
|
|
53
|
+
frames.delete(editor);
|
|
54
|
+
if (editor.isDestroyed)
|
|
55
|
+
return;
|
|
56
|
+
revealCurrentMatch(editor.view.dom, overlayProviders.get(editor)?.() ?? []);
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
export function cancelRevealMatch(editor) {
|
|
60
|
+
cancelAnimationFrame(frames.get(editor) ?? 0);
|
|
61
|
+
frames.delete(editor);
|
|
62
|
+
}
|
|
41
63
|
//# sourceMappingURL=revealMatch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revealMatch.js","sourceRoot":"","sources":["../../../../src/editor/features/search/revealMatch.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"revealMatch.js","sourceRoot":"","sources":["../../../../src/editor/features/search/revealMatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,11 @@ export declare function searchState(state: EditorState): {
|
|
|
13
13
|
declare module "@tiptap/core" {
|
|
14
14
|
interface Commands<ReturnType> {
|
|
15
15
|
search: {
|
|
16
|
-
/**
|
|
17
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Новый запрос или флажки: совпадения пересчитываются, текущее — первое после
|
|
18
|
+
* каретки. Не названные флажки остаются как были.
|
|
19
|
+
*/
|
|
20
|
+
setSearch: (query: string, options?: Partial<SearchOptions>) => ReturnType;
|
|
18
21
|
/**
|
|
19
22
|
* Следующее (`1`) или предыдущее (`-1`) совпадение по кругу; выделяет его.
|
|
20
23
|
* Прокрутка ProseMirror срабатывает, только когда фокус в Документе; из
|
|
@@ -25,12 +28,14 @@ declare module "@tiptap/core" {
|
|
|
25
28
|
replaceMatch: (replacement: string) => ReturnType;
|
|
26
29
|
/** Заменить все совпадения — одна транзакция, одна отмена. */
|
|
27
30
|
replaceAllMatches: (replacement: string) => ReturnType;
|
|
28
|
-
/** Убрать запрос и
|
|
31
|
+
/** Убрать запрос и подсветку; флажки вернутся к Опциям Инструмента. */
|
|
29
32
|
clearSearch: () => ReturnType;
|
|
30
33
|
};
|
|
31
34
|
}
|
|
32
35
|
}
|
|
33
36
|
export interface SearchExtensionOptions {
|
|
37
|
+
/** Флажки, с которых стартует поиск и к которым он возвращается: Опции Инструмента. */
|
|
38
|
+
flags: SearchOptions;
|
|
34
39
|
/**
|
|
35
40
|
* Открыть панель поиска (`replace` — с фокусом в поле замены). Панель держит
|
|
36
41
|
* `RichTextEditor`; `false` — панели нет, и `Mod+F` уходит браузеру.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchPlugin.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/search/searchPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA2BrF,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAC1C;IACE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;CACjC,GACD,SAAS,CAKZ;
|
|
1
|
+
{"version":3,"file":"searchPlugin.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/search/searchPlugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA2BrF,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAC1C;IACE,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;CACjC,GACD,SAAS,CAKZ;AA4HD,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,MAAM,EAAE;YACN;;;eAGG;YACH,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,UAAU,CAAC;YAC3E;;;;eAIG;YACH,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC;YACzC,8DAA8D;YAC9D,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,UAAU,CAAC;YAClD,8DAA8D;YAC9D,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,UAAU,CAAC;YACvD,uEAAuE;YACvE,WAAW,EAAE,MAAM,UAAU,CAAC;SAC/B,CAAC;KACH;CACF;AAED,MAAM,WAAW,sBAAsB;IACrC,uFAAuF;IACvF,KAAK,EAAE,aAAa,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;CACrC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,wCAqE1B,CAAC"}
|
|
@@ -37,17 +37,26 @@ function build(state, query, options, current) {
|
|
|
37
37
|
decorations: decorate(state, matches, index),
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
|
-
function
|
|
40
|
+
function withNamedFlags(current, named = {}) {
|
|
41
|
+
const next = { ...current };
|
|
42
|
+
for (const key of Object.keys(named)) {
|
|
43
|
+
const value = named[key];
|
|
44
|
+
if (value !== undefined)
|
|
45
|
+
next[key] = value;
|
|
46
|
+
}
|
|
47
|
+
return next;
|
|
48
|
+
}
|
|
49
|
+
function searchPlugin(flags) {
|
|
41
50
|
return new Plugin({
|
|
42
51
|
key: SEARCH_KEY,
|
|
43
52
|
state: {
|
|
44
|
-
init: (_, state) => build(state, "",
|
|
53
|
+
init: (_, state) => build(state, "", flags, () => -1),
|
|
45
54
|
apply(tr, previous, _old, state) {
|
|
46
55
|
const meta = tr.getMeta(SEARCH_KEY);
|
|
47
56
|
if (meta?.type === "clear")
|
|
48
|
-
return build(state, "",
|
|
57
|
+
return build(state, "", flags, () => -1);
|
|
49
58
|
if (meta?.type === "set") {
|
|
50
|
-
return build(state, meta.query, meta.options, (matches) => indexFrom(matches, state.selection.from));
|
|
59
|
+
return build(state, meta.query, withNamedFlags(previous.options, meta.options), (matches) => indexFrom(matches, state.selection.from));
|
|
51
60
|
}
|
|
52
61
|
if (meta?.type === "select") {
|
|
53
62
|
return {
|
|
@@ -90,8 +99,10 @@ function replaceRange(tr, { from, to }, text) {
|
|
|
90
99
|
}
|
|
91
100
|
export const SearchExtension = Extension.create({
|
|
92
101
|
name: "search",
|
|
93
|
-
addOptions: () => ({ open: () => false }),
|
|
94
|
-
addProseMirrorPlugins
|
|
102
|
+
addOptions: () => ({ open: () => false, flags: EMPTY_OPTIONS }),
|
|
103
|
+
addProseMirrorPlugins() {
|
|
104
|
+
return [searchPlugin(this.options.flags)];
|
|
105
|
+
},
|
|
95
106
|
addKeyboardShortcuts() {
|
|
96
107
|
return {
|
|
97
108
|
"Mod-f": () => this.options.open(false),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchPlugin.js","sourceRoot":"","sources":["../../../../src/editor/features/search/searchPlugin.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAwC,MAAM,kBAAkB,CAAC;AAuBrF,MAAM,UAAU,GAAG,IAAI,SAAS,CAAoB,QAAQ,CAAC,CAAC;AAE9D,MAAM,aAAa,GAAkB,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAG1F,MAAM,UAAU,WAAW,CAAC,KAAkB;IAU5C,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAC3D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAkB,EAAE,OAAsB,EAAE,OAAe;IAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC;IACrD,OAAO,aAAa,CAAC,MAAM,CACzB,KAAK,CAAC,GAAG,EACT,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAClC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE;QAC1B,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,kBAAkB;KACtF,CAAC,CACH,CACF,CAAC;AACJ,CAAC;AAGD,SAAS,SAAS,CAAC,OAAsB,EAAE,GAAW;IACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAC9D,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAClC,CAAC;AAED,SAAS,KAAK,CACZ,KAAkB,EAClB,KAAa,EACb,OAAsB,EACtB,OAA2C;IAE3C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,OAAO;QACL,KAAK;QACL,OAAO;QACP,OAAO;QACP,OAAO,EAAE,KAAK;QACd,KAAK;QACL,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;KAC7C,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"searchPlugin.js","sourceRoot":"","sources":["../../../../src/editor/features/search/searchPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Editor } from "@tiptap/core";
|
|
2
|
+
import type { SearchToolState } from "../../core/toolState.js";
|
|
3
|
+
/**
|
|
4
|
+
* Снимок Состояния `search` для `useRichTextToolState`: открытые поля
|
|
5
|
+
* `searchState` плагина плюс открытость панели, без позиций совпадений. Лежит
|
|
6
|
+
* отдельно от `searchPlugin.ts`: вычисление нужно только хуку и не должно
|
|
7
|
+
* попадать в статический граф Редактора.
|
|
8
|
+
*
|
|
9
|
+
* Флажки — из плагина и при закрытой панели: их держит движок, а не панель.
|
|
10
|
+
* Закрытие возвращает их к стартовым из Опций, а `setQuery` без панели ставит
|
|
11
|
+
* свои. `null` — плагина нет (Инструмент `search` не вошёл в движок).
|
|
12
|
+
*/
|
|
13
|
+
export declare function searchSnapshot(editor: Editor, open: boolean): SearchToolState | null;
|
|
14
|
+
//# sourceMappingURL=searchSnapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchSnapshot.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/search/searchSnapshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAYpF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { searchState } from "./searchPlugin.js";
|
|
3
|
+
export function searchSnapshot(editor, open) {
|
|
4
|
+
const state = searchState(editor.state);
|
|
5
|
+
if (!state)
|
|
6
|
+
return null;
|
|
7
|
+
const { matchCase, wholeWord, regex } = state.options;
|
|
8
|
+
return {
|
|
9
|
+
open,
|
|
10
|
+
query: state.query,
|
|
11
|
+
flags: { matchCase, wholeWord, regex },
|
|
12
|
+
total: state.total,
|
|
13
|
+
current: state.current,
|
|
14
|
+
error: state.error ?? null,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=searchSnapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchSnapshot.js","sourceRoot":"","sources":["../../../../src/editor/features/search/searchSnapshot.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAYhD,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,IAAa;IAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACtD,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE;QACtC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;KAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ToolDescriptor } from "../../core/toolDescriptor.js";
|
|
2
|
+
import type { SearchToolOptions } from "../../core/toolOptions.js";
|
|
2
3
|
/**
|
|
3
4
|
* Поиск и замена на описании Инструмента. Часть для движка —
|
|
4
5
|
* плагин состояния и подсветки с сочетаниями `Mod+F` и `Mod+Alt+F`; панель
|
|
@@ -9,5 +10,7 @@ import type { ToolDescriptor } from "../../core/toolDescriptor.js";
|
|
|
9
10
|
*/
|
|
10
11
|
/** Сочетание кнопки «Поиск»: строка справочника и подсказка кнопки — из одной записи. */
|
|
11
12
|
export declare const SEARCH_KEYS: readonly ["mod", "F"];
|
|
13
|
+
/** Стартовые флажки панели: все выключены. */
|
|
14
|
+
export declare const SEARCH_DEFAULTS: SearchToolOptions;
|
|
12
15
|
export declare const SEARCH_TOOL: ToolDescriptor;
|
|
13
16
|
//# sourceMappingURL=searchTool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchTool.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/search/searchTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"searchTool.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/search/searchTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE;;;;;;;GAOG;AACH,yFAAyF;AACzF,eAAO,MAAM,WAAW,uBAAwB,CAAC;AAEjD,8CAA8C;AAC9C,eAAO,MAAM,eAAe,EAAE,iBAI7B,CAAC;AAiBF,eAAO,MAAM,WAAW,EAAE,cAsCzB,CAAC"}
|
|
@@ -1,9 +1,38 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { SearchExtension } from "./searchPlugin.js";
|
|
3
3
|
export const SEARCH_KEYS = ["mod", "F"];
|
|
4
|
+
export const SEARCH_DEFAULTS = {
|
|
5
|
+
matchCase: false,
|
|
6
|
+
wholeWord: false,
|
|
7
|
+
regex: false,
|
|
8
|
+
};
|
|
9
|
+
const isFlag = (value) => typeof value === "boolean";
|
|
10
|
+
const reveal = (editor, done) => {
|
|
11
|
+
if (done)
|
|
12
|
+
void import("./revealMatch.js").then((module) => module.scheduleRevealMatch(editor));
|
|
13
|
+
return done;
|
|
14
|
+
};
|
|
4
15
|
export const SEARCH_TOOL = {
|
|
5
16
|
name: "search",
|
|
6
|
-
|
|
17
|
+
defaults: SEARCH_DEFAULTS,
|
|
18
|
+
checks: { matchCase: isFlag, wholeWord: isFlag, regex: isFlag },
|
|
19
|
+
commands: ({ editor, bridge }) => ({
|
|
20
|
+
open: (options) => bridge.openSearch(options?.replace === true, options?.query),
|
|
21
|
+
close: bridge.closeSearch,
|
|
22
|
+
setQuery: (query, flags) => !bridge.sourceOpen() &&
|
|
23
|
+
editor.commands.setSearch(query, flags) &&
|
|
24
|
+
(reveal(editor, query !== ""), true),
|
|
25
|
+
next: () => reveal(editor, editor.commands.searchStep(1)),
|
|
26
|
+
previous: () => reveal(editor, editor.commands.searchStep(-1)),
|
|
27
|
+
replace: (text) => editor.commands.replaceMatch(text),
|
|
28
|
+
replaceAll: (text) => editor.commands.replaceAllMatches(text),
|
|
29
|
+
}),
|
|
30
|
+
engine: (context, options) => [
|
|
31
|
+
SearchExtension.configure({
|
|
32
|
+
open: context.openSearch ?? (() => false),
|
|
33
|
+
flags: options,
|
|
34
|
+
}),
|
|
35
|
+
],
|
|
7
36
|
shortcuts: [
|
|
8
37
|
{ id: "search", group: "search", tool: "search", keys: SEARCH_KEYS, label: (m) => m.search },
|
|
9
38
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchTool.js","sourceRoot":"","sources":["../../../../src/editor/features/search/searchTool.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"searchTool.js","sourceRoot":"","sources":["../../../../src/editor/features/search/searchTool.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAMb,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,GAAG,CAAU,CAAC;AAGjD,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,SAAS,CAAC;AAU9D,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,IAAa,EAAE,EAAE;IAC/C,IAAI,IAAI;QAAE,KAAK,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/F,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,eAAe;IACzB,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAO/D,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAsB,EAAE,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;QAC/E,KAAK,EAAE,MAAM,CAAC,WAAW;QACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACzB,CAAC,MAAM,CAAC,UAAU,EAAE;YACpB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;YACvC,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;QACtC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACzD,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;QACrD,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC;KAC9D,CAAC;IACF,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;QAC5B,eAAe,CAAC,SAAS,CAAC;YACxB,IAAI,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACzC,KAAK,EAAE,OAA4B;SACpC,CAAC;KACH;IACD,SAAS,EAAE;QACT,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;QAC5F;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;YACzB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;SAC9B;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { Editor } from "@tiptap/core";
|
|
2
|
+
import { type HTMLAttributes, type MutableRefObject, type RefObject } from "react";
|
|
3
|
+
import type { RichTextEditorHandle } from "../../RichTextEditor.js";
|
|
4
|
+
export interface RichTextTocProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
5
|
+
/**
|
|
6
|
+
* Ref на Просмотр (`RichTextView`) или на Хэндл Редактора (`RichTextEditor`),
|
|
7
|
+
* чьи заголовки показывает Оглавление. Заголовки читаются из DOM цели после
|
|
8
|
+
* монтирования: до гидратации полосы нет.
|
|
9
|
+
*
|
|
10
|
+
* Список следит за Документом: новый `html` Просмотра, новое значение
|
|
11
|
+
* Редактора и правка в нём пересобирают его с короткой задержкой. Редактор
|
|
12
|
+
* в `readOnly` работает так же, как Просмотр. Редактор в правке тоже
|
|
13
|
+
* поддержан — список пересобирается, а переход не двигает каретку, — но
|
|
14
|
+
* контрактом этот режим не обещан. Движок Редактора появляется после
|
|
15
|
+
* монтирования, и Оглавление ждёт его само.
|
|
16
|
+
*/
|
|
17
|
+
target: RefObject<HTMLElement | RichTextEditorHandle | null>;
|
|
18
|
+
/**
|
|
19
|
+
* Имя CSS-переменной с высотой липкой шапки экрана ([ADR-0016]). Переход
|
|
20
|
+
* ставит заголовок под шапку, а не за неё, и подсветка считает раздел
|
|
21
|
+
* текущим от нижнего края шапки. Переменной нет — отступом служит
|
|
22
|
+
* `scroll-margin-top` заголовка. По умолчанию `--topbar-h`: её публикует `TopBar`.
|
|
23
|
+
*/
|
|
24
|
+
offsetVar?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Ширина списка — длина CSS или пиксели. Постоянная, а не по самому длинному
|
|
27
|
+
* заголовку: список не меняет размер от Документа к Документу. Заголовок, что
|
|
28
|
+
* не помещается, обрезается многоточием, полный текст — в подсказке пункта.
|
|
29
|
+
* По умолчанию 240px.
|
|
30
|
+
*/
|
|
31
|
+
listWidth?: number | string;
|
|
32
|
+
/**
|
|
33
|
+
* Уровни заголовков, которые попадают в Оглавление: подмножество 1–4. Заголовка
|
|
34
|
+
* другого уровня нет ни в полосе, ни в списке, а отступ пунктов считается от
|
|
35
|
+
* самого крупного из оставшихся. Читается при каждой сборке списка, поэтому
|
|
36
|
+
* смена набора уровней пересобирает его. По умолчанию все четыре.
|
|
37
|
+
*/
|
|
38
|
+
levels?: readonly (1 | 2 | 3 | 4)[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Оглавление Документа: полоса штрихов, по одному на заголовок, штрих текущего
|
|
42
|
+
* раздела подсвечен. Наведение раскрывает список заголовков, пункт ведёт к
|
|
43
|
+
* заголовку.
|
|
44
|
+
*
|
|
45
|
+
* Отдельный компонент, а не проп Просмотра (ADR-0066): `RichTextView` остаётся
|
|
46
|
+
* серверным, а место Оглавления — колонку, липкость, скрытие на узком экране —
|
|
47
|
+
* решает вёрстка экрана. Меньше двух заголовков — компонент ничего не рисует.
|
|
48
|
+
*/
|
|
49
|
+
export declare const RichTextToc: import("react").ForwardRefExoticComponent<RichTextTocProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
50
|
+
/**
|
|
51
|
+
* Ядро Оглавления: общее у `RichTextToc` и Инструмента `toc` Редактора
|
|
52
|
+
* (ADR-0068). Две настройки — только для кита, наружу не выходят: Редактор
|
|
53
|
+
* сам знает, где край его липкой Панели, и сам ставит каретку при переходе.
|
|
54
|
+
*/
|
|
55
|
+
export interface TocCoreProps extends RichTextTocProps {
|
|
56
|
+
/**
|
|
57
|
+
* Нижний край липкого верха в пикселях: от него считают подсветка, переход и
|
|
58
|
+
* шаг полосы. Нет — высота из `offsetVar`.
|
|
59
|
+
*/
|
|
60
|
+
stickyTop?: () => number | null;
|
|
61
|
+
/** Поставить фокус при переходе самому; `true` — поставлен. */
|
|
62
|
+
focusHeading?: (heading: HTMLElement) => boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Опустить полосу так, чтобы первый штрих стоял на середине первой строки
|
|
65
|
+
* первого заголовка: в поле Редактора полоса и заголовок начинаются с одного
|
|
66
|
+
* уровня, а не полоса выше текста.
|
|
67
|
+
*/
|
|
68
|
+
alignToFirstHeading?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Текущий раздел сменился (в том числе при первом показе): Редактор кладёт
|
|
71
|
+
* индекс в Состояние Инструмента `toc`. Индекс считается по списку, который
|
|
72
|
+
* видит `TocCore`; пока заголовков меньше двух, он остаётся прежним.
|
|
73
|
+
*/
|
|
74
|
+
onCurrentChange?: (index: number) => void;
|
|
75
|
+
/**
|
|
76
|
+
* Движок Редактора. Нужен команде `jumpTo` (`jumpRef`): индекс команды — это
|
|
77
|
+
* индекс заголовка в снимке Состояния `toc`, а снимок читает Документ движка
|
|
78
|
+
* на каждой транзакции. Список ядра пересобирается из DOM с задержкой
|
|
79
|
+
* (`REBUILD_DELAY`), и сразу после правки индексы двух списков расходились бы.
|
|
80
|
+
* Без движка `jumpTo` считает по списку ядра.
|
|
81
|
+
*/
|
|
82
|
+
editor?: Editor;
|
|
83
|
+
/**
|
|
84
|
+
* Куда ядро кладёт переход к заголовку по индексу снимка Состояния (команда
|
|
85
|
+
* `jumpTo` Инструмента): ведёт себя как клик по пункту. Пока ядро смонтировано,
|
|
86
|
+
* там функция, после — `null`. Нет заголовка с таким индексом — `false`.
|
|
87
|
+
*/
|
|
88
|
+
jumpRef?: MutableRefObject<((index: number) => boolean) | null>;
|
|
89
|
+
}
|
|
90
|
+
export declare const TocCore: import("react").ForwardRefExoticComponent<TocCoreProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
91
|
+
//# sourceMappingURL=RichTextToc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RichTextToc.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/toc/RichTextToc.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAML,KAAK,cAAc,EAEnB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAKpE,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACxF;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,SAAS,CAAC,WAAW,GAAG,oBAAoB,GAAG,IAAI,CAAC,CAAC;IAC7D;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;CACrC;AA+OD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,6GAIvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAChC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,OAAO,yGAoclB,CAAC"}
|