@kerebron/extension-ui 0.8.1
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/LICENSE +23 -0
- package/README.md +40 -0
- package/assets/ui.css +32 -0
- package/esm/ExtensionUi.d.ts +6 -0
- package/esm/ExtensionUi.d.ts.map +1 -0
- package/esm/ExtensionUi.js +9 -0
- package/esm/ExtensionUi.js.map +1 -0
- package/esm/autocomplete/AutocompletePlugin.d.ts +53 -0
- package/esm/autocomplete/AutocompletePlugin.d.ts.map +1 -0
- package/esm/autocomplete/AutocompletePlugin.js +417 -0
- package/esm/autocomplete/AutocompletePlugin.js.map +1 -0
- package/esm/autocomplete/DefaultRenderer.d.ts +25 -0
- package/esm/autocomplete/DefaultRenderer.d.ts.map +1 -0
- package/esm/autocomplete/DefaultRenderer.js +162 -0
- package/esm/autocomplete/DefaultRenderer.js.map +1 -0
- package/esm/autocomplete/ExtensionAutocomplete.d.ts +11 -0
- package/esm/autocomplete/ExtensionAutocomplete.d.ts.map +1 -0
- package/esm/autocomplete/ExtensionAutocomplete.js +33 -0
- package/esm/autocomplete/ExtensionAutocomplete.js.map +1 -0
- package/esm/autocomplete/createDefaultMatcher.d.ts +11 -0
- package/esm/autocomplete/createDefaultMatcher.d.ts.map +1 -0
- package/esm/autocomplete/createDefaultMatcher.js +58 -0
- package/esm/autocomplete/createDefaultMatcher.js.map +1 -0
- package/esm/autocomplete/createPosMatcher.d.ts +3 -0
- package/esm/autocomplete/createPosMatcher.d.ts.map +1 -0
- package/esm/autocomplete/createPosMatcher.js +16 -0
- package/esm/autocomplete/createPosMatcher.js.map +1 -0
- package/esm/autocomplete/createRegexMatcher.d.ts +4 -0
- package/esm/autocomplete/createRegexMatcher.d.ts.map +1 -0
- package/esm/autocomplete/createRegexMatcher.js +50 -0
- package/esm/autocomplete/createRegexMatcher.js.map +1 -0
- package/esm/autocomplete/mod.d.ts +6 -0
- package/esm/autocomplete/mod.d.ts.map +1 -0
- package/esm/autocomplete/mod.js +6 -0
- package/esm/autocomplete/mod.js.map +1 -0
- package/esm/autocomplete/types.d.ts +49 -0
- package/esm/autocomplete/types.d.ts.map +1 -0
- package/esm/autocomplete/types.js +2 -0
- package/esm/autocomplete/types.js.map +1 -0
- package/esm/hover/ExtensionHover.d.ts +11 -0
- package/esm/hover/ExtensionHover.d.ts.map +1 -0
- package/esm/hover/ExtensionHover.js +33 -0
- package/esm/hover/ExtensionHover.js.map +1 -0
- package/esm/hover/HoverPlugin.d.ts +49 -0
- package/esm/hover/HoverPlugin.d.ts.map +1 -0
- package/esm/hover/HoverPlugin.js +368 -0
- package/esm/hover/HoverPlugin.js.map +1 -0
- package/esm/hover/MarkdownRenderer.d.ts +23 -0
- package/esm/hover/MarkdownRenderer.d.ts.map +1 -0
- package/esm/hover/MarkdownRenderer.js +54 -0
- package/esm/hover/MarkdownRenderer.js.map +1 -0
- package/esm/hover/mod.d.ts +3 -0
- package/esm/hover/mod.d.ts.map +1 -0
- package/esm/hover/mod.js +3 -0
- package/esm/hover/mod.js.map +1 -0
- package/esm/hover/types.d.ts +23 -0
- package/esm/hover/types.d.ts.map +1 -0
- package/esm/hover/types.js +2 -0
- package/esm/hover/types.js.map +1 -0
- package/esm/mod.d.ts +2 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +2 -0
- package/esm/mod.js.map +1 -0
- package/esm/overlayer/mod.d.ts +13 -0
- package/esm/overlayer/mod.d.ts.map +1 -0
- package/esm/overlayer/mod.js +111 -0
- package/esm/overlayer/mod.js.map +1 -0
- package/esm/package.json +3 -0
- package/package.json +43 -0
- package/src/ExtensionUi.ts +10 -0
- package/src/autocomplete/AutocompletePlugin.ts +580 -0
- package/src/autocomplete/DefaultRenderer.ts +189 -0
- package/src/autocomplete/ExtensionAutocomplete.ts +49 -0
- package/src/autocomplete/createDefaultMatcher.ts +94 -0
- package/src/autocomplete/createPosMatcher.ts +21 -0
- package/src/autocomplete/createRegexMatcher.ts +70 -0
- package/src/autocomplete/mod.ts +5 -0
- package/src/autocomplete/types.ts +90 -0
- package/src/hover/ExtensionHover.ts +46 -0
- package/src/hover/HoverPlugin.ts +467 -0
- package/src/hover/MarkdownRenderer.ts +68 -0
- package/src/hover/mod.ts +2 -0
- package/src/hover/types.ts +26 -0
- package/src/mod.ts +1 -0
- package/src/overlayer/mod.ts +146 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Permission is hereby granted, free of charge, to any
|
|
2
|
+
person obtaining a copy of this software and associated
|
|
3
|
+
documentation files (the "Software"), to deal in the
|
|
4
|
+
Software without restriction, including without
|
|
5
|
+
limitation the rights to use, copy, modify, merge,
|
|
6
|
+
publish, distribute, sublicense, and/or sell copies of
|
|
7
|
+
the Software, and to permit persons to whom the Software
|
|
8
|
+
is furnished to do so, subject to the following
|
|
9
|
+
conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice
|
|
12
|
+
shall be included in all copies or substantial portions
|
|
13
|
+
of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
|
16
|
+
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
17
|
+
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
18
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
19
|
+
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
22
|
+
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
23
|
+
DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
```mermaid
|
|
2
|
+
quadrantChart
|
|
3
|
+
title Reach and engagement of campaigns
|
|
4
|
+
x-axis Low Reach --> High Reach
|
|
5
|
+
y-axis Low Engagement --> High Engagement
|
|
6
|
+
quadrant-1 We should expand
|
|
7
|
+
quadrant-2 Need to promote
|
|
8
|
+
quadrant-3 Re-evaluate
|
|
9
|
+
quadrant-4 May be improved
|
|
10
|
+
Campaign A: [0.3, 0.6]
|
|
11
|
+
Campaign B: [0.45, 0.23]
|
|
12
|
+
Campaign C: [0.57, 0.69]
|
|
13
|
+
Campaign D: [0.78, 0.34]
|
|
14
|
+
Campaign E: [0.40, 0.34]
|
|
15
|
+
Campaign F: [0.35, 0.78]
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
graph TD;
|
|
21
|
+
A-->B;
|
|
22
|
+
A-->C;
|
|
23
|
+
B-->D;
|
|
24
|
+
C-->D;
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```mermaid
|
|
29
|
+
stateDiagram-v2
|
|
30
|
+
[*] --> Active
|
|
31
|
+
|
|
32
|
+
state Active {
|
|
33
|
+
[*] --> Idle
|
|
34
|
+
Idle --> Processing : start
|
|
35
|
+
Processing --> Idle : complete
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
Active --> Disabled : disable
|
|
39
|
+
Disabled --> Active : enable
|
|
40
|
+
```
|
package/assets/ui.css
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* Autocomplete */
|
|
2
|
+
.kb-autocomplete__wrapper {
|
|
3
|
+
position: absolute;
|
|
4
|
+
/*position: fixed;*/
|
|
5
|
+
/*z-index: 99999;*/
|
|
6
|
+
margin: 0;
|
|
7
|
+
padding: 6px var(--kb-space-sm);
|
|
8
|
+
background: var(--kb-color-surface-elevated);
|
|
9
|
+
list-style: none;
|
|
10
|
+
|
|
11
|
+
border: 1px solid #ccc;
|
|
12
|
+
border-radius: 6px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.kb-autocomplete__wrapper li.active {
|
|
16
|
+
background: rgba(232, 234, 237, 0.08);
|
|
17
|
+
color: #fff;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.kb-autocomplete--decor {
|
|
21
|
+
outline: 3px dotted red;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* Hover */
|
|
25
|
+
.kb-hover__wrapper {
|
|
26
|
+
background: var(--kb-color-surface-elevated);
|
|
27
|
+
outline: 3px dotted blue;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.kb-hover--decor {
|
|
31
|
+
outline: 3px dotted green;
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionUi.d.ts","sourceRoot":"","sources":["../src/ExtensionUi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,qBAAa,WAAY,SAAQ,SAAS;IACxC,IAAI,SAAQ;IAEH,OAAO,IAAI,IAAI;CAGzB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Extension } from '@kerebron/editor';
|
|
2
|
+
import { OverLayer } from './overlayer/mod.js';
|
|
3
|
+
export class ExtensionUi extends Extension {
|
|
4
|
+
name = 'ui';
|
|
5
|
+
created() {
|
|
6
|
+
this.editor.ci.register('overlayer', new OverLayer());
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=ExtensionUi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionUi.js","sourceRoot":"","sources":["../src/ExtensionUi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,OAAO,WAAY,SAAQ,SAAS;IACxC,IAAI,GAAG,IAAI,CAAC;IAEH,OAAO;QACd,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Plugin, PluginKey, Transaction } from 'prosemirror-state';
|
|
2
|
+
import { type CoreEditor } from '@kerebron/editor';
|
|
3
|
+
import { AutocompleteConfig, AutocompleteRenderer, AutocompleteSource, MatchedSource, SuggestionMatch } from './types.js';
|
|
4
|
+
interface AutocompleteMeta {
|
|
5
|
+
addAutocompleteSource?: {
|
|
6
|
+
autocompleteSource: AutocompleteSource;
|
|
7
|
+
};
|
|
8
|
+
trigger?: {
|
|
9
|
+
manual: boolean;
|
|
10
|
+
};
|
|
11
|
+
setRequest?: {
|
|
12
|
+
match: SuggestionMatch;
|
|
13
|
+
source: AutocompleteSource;
|
|
14
|
+
};
|
|
15
|
+
setResponse?: {
|
|
16
|
+
items: any[];
|
|
17
|
+
};
|
|
18
|
+
clearRequest?: boolean;
|
|
19
|
+
}
|
|
20
|
+
declare class AutoCompleteState {
|
|
21
|
+
private editor;
|
|
22
|
+
idGenerator: number;
|
|
23
|
+
autocompleteSources: AutocompleteSource[];
|
|
24
|
+
manual: boolean;
|
|
25
|
+
request?: {
|
|
26
|
+
id: number;
|
|
27
|
+
decorationId: string;
|
|
28
|
+
match: SuggestionMatch;
|
|
29
|
+
source: AutocompleteSource;
|
|
30
|
+
renderer: AutocompleteRenderer;
|
|
31
|
+
};
|
|
32
|
+
response?: {
|
|
33
|
+
items: any[];
|
|
34
|
+
};
|
|
35
|
+
composing: boolean;
|
|
36
|
+
matchSource: typeof this.matchSourceImpl;
|
|
37
|
+
constructor(editor: CoreEditor);
|
|
38
|
+
destroy(): void;
|
|
39
|
+
include(from: number): boolean;
|
|
40
|
+
addSource(source: AutocompleteSource): void;
|
|
41
|
+
clearRequest(): void;
|
|
42
|
+
handleSource(matched?: MatchedSource): void;
|
|
43
|
+
docChanged(): void;
|
|
44
|
+
private matchSourceImpl;
|
|
45
|
+
handleCommands(pluginMeta: AutocompleteMeta | undefined, transaction: Transaction): boolean;
|
|
46
|
+
dispatchMeta(meta: AutocompleteMeta): void;
|
|
47
|
+
}
|
|
48
|
+
export declare const AutocompletePluginKey: PluginKey<AutoCompleteState>;
|
|
49
|
+
export declare class AutocompletePlugin<Item, TSelected> extends Plugin<AutoCompleteState> {
|
|
50
|
+
constructor(config: AutocompleteConfig, editor: CoreEditor);
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=AutocompletePlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutocompletePlugin.d.ts","sourceRoot":"","sources":["../../src/autocomplete/AutocompletePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAa,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG9E,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,EACL,kBAAkB,EAGlB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,eAAe,EAEhB,MAAM,YAAY,CAAC;AASpB,UAAU,gBAAgB;IACxB,qBAAqB,CAAC,EAAE;QACtB,kBAAkB,EAAE,kBAAkB,CAAC;KACxC,CAAC;IAEF,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,eAAe,CAAC;QACvB,MAAM,EAAE,kBAAkB,CAAC;KAE5B,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,GAAG,EAAE,CAAC;KACd,CAAC;IAEF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,cAAM,iBAAiB;IAwBT,OAAO,CAAC,MAAM;IAvB1B,WAAW,SAAK;IAEhB,mBAAmB,EAAE,kBAAkB,EAAE,CAAM;IAC/C,MAAM,EAAE,OAAO,CAAS;IAExB,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QAEX,YAAY,EAAE,MAAM,CAAC;QAErB,KAAK,EAAE,eAAe,CAAC;QACvB,MAAM,EAAE,kBAAkB,CAAC;QAC3B,QAAQ,EAAE,oBAAoB,CAAC;KAChC,CAAC;IAEF,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,GAAG,EAAE,CAAC;KACd,CAAC;IAEF,SAAS,EAAE,OAAO,CAAS;IAE3B,WAAW,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC;gBAErB,MAAM,EAAE,UAAU;IAItC,OAAO;IAMP,OAAO,CAAC,IAAI,EAAE,MAAM;IAWpB,SAAS,CAAC,MAAM,EAAE,kBAAkB;IAWpC,YAAY;IAQZ,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa;IAuBpC,UAAU;IA+BV,OAAO,CAAC,eAAe;IA0CvB,cAAc,CACZ,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,WAAW,EAAE,WAAW;IAyH1B,YAAY,CAAC,IAAI,EAAE,gBAAgB;CAKpC;AAED,eAAO,MAAM,qBAAqB,8BAEjC,CAAC;AAEF,qBAAa,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAC7C,SAAQ,MAAM,CAAC,iBAAiB,CAAC;gBACrB,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU;CA8O3D"}
|
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
import { Plugin, PluginKey } from 'prosemirror-state';
|
|
2
|
+
import { Decoration, DecorationSet } from 'prosemirror-view';
|
|
3
|
+
import { debounce } from '@kerebron/editor/utilities';
|
|
4
|
+
import { DefaultRenderer } from './DefaultRenderer.js';
|
|
5
|
+
import { createDefaultMatcher } from './createDefaultMatcher.js';
|
|
6
|
+
class AutoCompleteState {
|
|
7
|
+
editor;
|
|
8
|
+
idGenerator = 1;
|
|
9
|
+
autocompleteSources = [];
|
|
10
|
+
manual = false;
|
|
11
|
+
request;
|
|
12
|
+
response;
|
|
13
|
+
composing = false;
|
|
14
|
+
matchSource;
|
|
15
|
+
constructor(editor) {
|
|
16
|
+
this.editor = editor;
|
|
17
|
+
this.matchSource = debounce(this.matchSourceImpl.bind(this), 200);
|
|
18
|
+
}
|
|
19
|
+
destroy() {
|
|
20
|
+
if (this.request) {
|
|
21
|
+
this.request.renderer.destroy();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
include(from) {
|
|
25
|
+
if (!this.request) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
if (from < this.request.match.range.from)
|
|
29
|
+
return false;
|
|
30
|
+
if (from > this.request.match.range.to)
|
|
31
|
+
return false;
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
addSource(source) {
|
|
35
|
+
if (!source.matchers && source.triggerKeys?.length === 1) {
|
|
36
|
+
source.matchers = [
|
|
37
|
+
createDefaultMatcher({ char: source.triggerKeys[0] }),
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
this.autocompleteSources.push(source);
|
|
41
|
+
}
|
|
42
|
+
clearRequest() {
|
|
43
|
+
if (this.request) {
|
|
44
|
+
this.request.renderer.destroy();
|
|
45
|
+
this.request = undefined;
|
|
46
|
+
}
|
|
47
|
+
this.response = undefined;
|
|
48
|
+
}
|
|
49
|
+
handleSource(matched) {
|
|
50
|
+
// If we found a match, update the current state to show it
|
|
51
|
+
if (matched && (!matched.source.allow || matched.source.allow({
|
|
52
|
+
range: matched.match.range,
|
|
53
|
+
isActive: !!this.request,
|
|
54
|
+
}))) {
|
|
55
|
+
const { source, match } = matched;
|
|
56
|
+
if (match) {
|
|
57
|
+
this.dispatchMeta({
|
|
58
|
+
setRequest: {
|
|
59
|
+
match,
|
|
60
|
+
source,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.clearRequest();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
docChanged() {
|
|
70
|
+
this.matchSource({ manual: false });
|
|
71
|
+
// for (const source of sources) {
|
|
72
|
+
// if (!source.matchers) {
|
|
73
|
+
// continue;
|
|
74
|
+
// }
|
|
75
|
+
// const matchers: AutocompleteMatcher[] = source.matchers;
|
|
76
|
+
// if (
|
|
77
|
+
// !['code_blocxk'].includes(parentNode.type.name)
|
|
78
|
+
// ) {
|
|
79
|
+
// for (const matcher of matchers) {
|
|
80
|
+
// const match = matcher(selection.$from);
|
|
81
|
+
// if (match) {
|
|
82
|
+
// matched = {
|
|
83
|
+
// source,
|
|
84
|
+
// match,
|
|
85
|
+
// };
|
|
86
|
+
// this.handleSource(matched);
|
|
87
|
+
// break;
|
|
88
|
+
// // return matched;
|
|
89
|
+
// }
|
|
90
|
+
// }
|
|
91
|
+
// }
|
|
92
|
+
// }
|
|
93
|
+
// throw new Error('Method not implemented.');
|
|
94
|
+
}
|
|
95
|
+
matchSourceImpl({ manual }) {
|
|
96
|
+
this.manual = manual;
|
|
97
|
+
const selection = this.editor.state.selection;
|
|
98
|
+
const sources = this.autocompleteSources;
|
|
99
|
+
let matched = undefined;
|
|
100
|
+
const parentNode = selection.$anchor.parent;
|
|
101
|
+
for (const source of sources) {
|
|
102
|
+
if (!source.matchers) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const matchers = source.matchers;
|
|
106
|
+
if (!['code_blocxk'].includes(parentNode.type.name)) {
|
|
107
|
+
for (const matcher of matchers) {
|
|
108
|
+
const match = matcher(selection.$from);
|
|
109
|
+
console.log('matchSourceImpl', source, match);
|
|
110
|
+
if (match) {
|
|
111
|
+
matched = {
|
|
112
|
+
source,
|
|
113
|
+
match,
|
|
114
|
+
};
|
|
115
|
+
this.handleSource(matched);
|
|
116
|
+
break;
|
|
117
|
+
// return matched;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (!matched) {
|
|
123
|
+
this.dispatchMeta({ clearRequest: true });
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
handleCommands(pluginMeta, transaction) {
|
|
128
|
+
if (!pluginMeta) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
if (pluginMeta?.addAutocompleteSource) {
|
|
132
|
+
this.addSource({
|
|
133
|
+
...pluginMeta.addAutocompleteSource.autocompleteSource,
|
|
134
|
+
});
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
if (pluginMeta?.trigger) {
|
|
138
|
+
const { selection } = transaction;
|
|
139
|
+
this.matchSource(pluginMeta?.trigger);
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
if (pluginMeta?.setRequest) {
|
|
143
|
+
const id = this.idGenerator++;
|
|
144
|
+
const decorationId = `id_${Math.floor(Math.random() * 0xffffffff)}`;
|
|
145
|
+
let renderer = this.request?.renderer;
|
|
146
|
+
if (this.request?.source !== pluginMeta.setRequest.source) {
|
|
147
|
+
if (renderer) {
|
|
148
|
+
renderer.destroy();
|
|
149
|
+
renderer = undefined;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (!renderer) {
|
|
153
|
+
renderer = new DefaultRenderer(this.editor);
|
|
154
|
+
renderer.setAnchorSelector(`[data-decoration-id="${decorationId}"]`);
|
|
155
|
+
if (this.request) {
|
|
156
|
+
const onSelect = this.request.source.onSelect;
|
|
157
|
+
renderer.setCommand((selected) => {
|
|
158
|
+
console.log('COM', selected);
|
|
159
|
+
if (!this.request) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
return onSelect(selected, this.request.match.range);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
renderer.addEventListener('close', () => {
|
|
166
|
+
this.dispatchMeta({
|
|
167
|
+
clearRequest: true,
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
this.request = {
|
|
172
|
+
id,
|
|
173
|
+
decorationId,
|
|
174
|
+
match: pluginMeta.setRequest.match,
|
|
175
|
+
source: pluginMeta.setRequest.source,
|
|
176
|
+
renderer,
|
|
177
|
+
};
|
|
178
|
+
const request = this.request;
|
|
179
|
+
const go = async () => {
|
|
180
|
+
const ctx = {
|
|
181
|
+
range: request.match.range,
|
|
182
|
+
isActive: !!request,
|
|
183
|
+
};
|
|
184
|
+
const items = await request.source.getItems(request.match.query, ctx);
|
|
185
|
+
this.dispatchMeta({
|
|
186
|
+
setResponse: {
|
|
187
|
+
items,
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
go();
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
if (pluginMeta?.setResponse && this.request) {
|
|
195
|
+
this.response = {
|
|
196
|
+
...pluginMeta?.setResponse,
|
|
197
|
+
};
|
|
198
|
+
const props = {
|
|
199
|
+
match: this.request.match,
|
|
200
|
+
items: this.response.items,
|
|
201
|
+
// anchor: ,
|
|
202
|
+
// decorationNode,
|
|
203
|
+
// virtual node for popper.js or tippy.js
|
|
204
|
+
// this can be used for building popups without a DOM node
|
|
205
|
+
// clientRect: () => {
|
|
206
|
+
// // because of `items` can be asynchrounous we’ll search for the current decoration node
|
|
207
|
+
// const { decorationId } = next; // eslint-disable-line
|
|
208
|
+
// const currentDecorationNode = view.dom.querySelector(
|
|
209
|
+
// `[data-decoration-id="${decorationId}"]`,
|
|
210
|
+
// );
|
|
211
|
+
// return currentDecorationNode?.getBoundingClientRect() ||
|
|
212
|
+
// null;
|
|
213
|
+
// },
|
|
214
|
+
};
|
|
215
|
+
this.request?.renderer.onUpdate(props);
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
if (pluginMeta?.clearRequest) {
|
|
219
|
+
this.clearRequest();
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
dispatchMeta(meta) {
|
|
225
|
+
const tr = this.editor.state.tr;
|
|
226
|
+
tr.setMeta(AutocompletePluginKey, meta);
|
|
227
|
+
this.editor.dispatchTransaction(tr);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
export const AutocompletePluginKey = new PluginKey('autocomplete');
|
|
231
|
+
export class AutocompletePlugin extends Plugin {
|
|
232
|
+
constructor(config, editor) {
|
|
233
|
+
super({
|
|
234
|
+
key: AutocompletePluginKey,
|
|
235
|
+
state: {
|
|
236
|
+
init() {
|
|
237
|
+
return new AutoCompleteState(editor);
|
|
238
|
+
},
|
|
239
|
+
apply(transaction, value, prevState, state) {
|
|
240
|
+
const pluginMeta = transaction.getMeta(AutocompletePluginKey);
|
|
241
|
+
const nextAutocompleteState = value;
|
|
242
|
+
if (!pluginMeta && !transaction.isGeneric) {
|
|
243
|
+
// return next;
|
|
244
|
+
}
|
|
245
|
+
const { editable, composing } = editor.view;
|
|
246
|
+
const { selection } = transaction;
|
|
247
|
+
nextAutocompleteState.composing = composing;
|
|
248
|
+
if (!editable) {
|
|
249
|
+
nextAutocompleteState.clearRequest();
|
|
250
|
+
return nextAutocompleteState;
|
|
251
|
+
}
|
|
252
|
+
if (!selection.empty && !editor.view.composing) {
|
|
253
|
+
nextAutocompleteState.clearRequest();
|
|
254
|
+
return nextAutocompleteState;
|
|
255
|
+
}
|
|
256
|
+
if (nextAutocompleteState.handleCommands(pluginMeta, transaction)) {
|
|
257
|
+
return nextAutocompleteState;
|
|
258
|
+
}
|
|
259
|
+
if (transaction.docChanged) {
|
|
260
|
+
nextAutocompleteState.docChanged();
|
|
261
|
+
// nextAutocompleteState.clearActive();
|
|
262
|
+
}
|
|
263
|
+
// Reset active state if we just left the previous suggestion range
|
|
264
|
+
if (!composing && !nextAutocompleteState.include(selection.from)) {
|
|
265
|
+
nextAutocompleteState.clearRequest();
|
|
266
|
+
return nextAutocompleteState;
|
|
267
|
+
}
|
|
268
|
+
if (transaction.getMeta('isCommand')) {
|
|
269
|
+
return nextAutocompleteState;
|
|
270
|
+
}
|
|
271
|
+
nextAutocompleteState.matchSource({ manual: false });
|
|
272
|
+
return nextAutocompleteState;
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
view(editorView) {
|
|
276
|
+
return {
|
|
277
|
+
update: async (view, prevState) => {
|
|
278
|
+
const prev = this.key?.getState(prevState);
|
|
279
|
+
const next = this.key?.getState(view.state);
|
|
280
|
+
const pluginState = next;
|
|
281
|
+
if (next.request?.decorationId) {
|
|
282
|
+
const decorationNode = view.dom.querySelector(`[data-decoration-id="${next.request.decorationId}"]`);
|
|
283
|
+
}
|
|
284
|
+
const moved = prev.request && next.request &&
|
|
285
|
+
prev.request.match.range.from !== next.request.match.range.from;
|
|
286
|
+
const started = !prev.request?.match && next.request?.match;
|
|
287
|
+
const stopped = prev.request?.match && !next.request?.match;
|
|
288
|
+
const changed = !started && !stopped &&
|
|
289
|
+
prev.request?.match.query !== next.request?.match.query;
|
|
290
|
+
if (stopped && prev.request) {
|
|
291
|
+
prev.request.renderer.destroy();
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
if (next.activexxx) {
|
|
295
|
+
for (const source of next.autocompleteSources) {
|
|
296
|
+
if (!source.triggerKeys) {
|
|
297
|
+
pluginState.dispatchMeta({
|
|
298
|
+
trigger: {
|
|
299
|
+
manual: false,
|
|
300
|
+
},
|
|
301
|
+
});
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
const changedQuery = prev.request?.match.query !== next.request.match.query;
|
|
306
|
+
if (changedQuery || moved) {
|
|
307
|
+
const decorationNode = view.dom.querySelector(`[data-decoration-id="${next.request.decorationId}"]`);
|
|
308
|
+
const props = {
|
|
309
|
+
match: next.request.match,
|
|
310
|
+
items: [],
|
|
311
|
+
// anchor: ,
|
|
312
|
+
// decorationNode,
|
|
313
|
+
// virtual node for popper.js or tippy.js
|
|
314
|
+
// this can be used for building popups without a DOM node
|
|
315
|
+
// clientRect: () => {
|
|
316
|
+
// // because of `items` can be asynchrounous we’ll search for the current decoration node
|
|
317
|
+
// const { decorationId } = next; // eslint-disable-line
|
|
318
|
+
// const currentDecorationNode = view.dom.querySelector(
|
|
319
|
+
// `[data-decoration-id="${decorationId}"]`,
|
|
320
|
+
// );
|
|
321
|
+
// return currentDecorationNode?.getBoundingClientRect() ||
|
|
322
|
+
// null;
|
|
323
|
+
// },
|
|
324
|
+
};
|
|
325
|
+
next.request.renderer.onUpdate(props);
|
|
326
|
+
try {
|
|
327
|
+
const ctx = {
|
|
328
|
+
range: next.request.match.range,
|
|
329
|
+
isActive: !!next.request,
|
|
330
|
+
};
|
|
331
|
+
const items = await next.request.source.getItems(next.request.match.query, ctx);
|
|
332
|
+
next.request.renderer.onUpdate({ ...props, items });
|
|
333
|
+
}
|
|
334
|
+
catch (err) {
|
|
335
|
+
if (err.isLSP) {
|
|
336
|
+
console.error('LSP error config.getItems()', err.message, next.request.source.getItems);
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
throw err;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
const handleStart = started || (moved && changed);
|
|
345
|
+
const handleChange = changed || moved;
|
|
346
|
+
const handleExit = stopped || (moved && changed);
|
|
347
|
+
if (!handleStart && !handleChange && !handleExit) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const state = handleExit && !handleStart ? prev : next;
|
|
351
|
+
// const active = state.active;
|
|
352
|
+
},
|
|
353
|
+
destroy: () => {
|
|
354
|
+
const pluginState = AutocompletePluginKey.getState(editor.state);
|
|
355
|
+
if (!pluginState) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
pluginState.destroy();
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
},
|
|
362
|
+
props: {
|
|
363
|
+
// Call the keydown hook if suggestion is active.
|
|
364
|
+
handleKeyDown(view, event) {
|
|
365
|
+
const pluginState = this.getState(view.state);
|
|
366
|
+
const { autocompleteSources } = pluginState;
|
|
367
|
+
for (const source of autocompleteSources) {
|
|
368
|
+
if (source.triggerKeys) {
|
|
369
|
+
const triggerKeys = source.triggerKeys;
|
|
370
|
+
for (const origKey of triggerKeys) {
|
|
371
|
+
let key = origKey.toLowerCase();
|
|
372
|
+
if (key.startsWith('ctrl+')) {
|
|
373
|
+
if (!event.ctrlKey) {
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
key = key.substring('ctrl+'.length);
|
|
377
|
+
}
|
|
378
|
+
if (key === event.key) {
|
|
379
|
+
pluginState.dispatchMeta({
|
|
380
|
+
trigger: {
|
|
381
|
+
manual: true,
|
|
382
|
+
},
|
|
383
|
+
});
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return false;
|
|
390
|
+
},
|
|
391
|
+
// Setup decorator on the currently active suggestion.
|
|
392
|
+
decorations(state) {
|
|
393
|
+
const { request, response } = this.getState(state) || {};
|
|
394
|
+
if (!request) {
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
const anchor = document.createElement('span');
|
|
398
|
+
anchor.className = config.decorationClass || 'kb-autocomplete--decor';
|
|
399
|
+
anchor.setAttribute('data-decoration-id', request.decorationId);
|
|
400
|
+
return DecorationSet.create(state.doc, [
|
|
401
|
+
Decoration.inline(request.match.range.from, request.match.range.to, {
|
|
402
|
+
class: config.decorationClass || 'kb-autocomplete--decor',
|
|
403
|
+
'data-decoration-id': request.decorationId,
|
|
404
|
+
decorationId: request.decorationId,
|
|
405
|
+
}),
|
|
406
|
+
// Decoration.widget(active.match.range.from, anchor, {
|
|
407
|
+
// class: anchor.className,
|
|
408
|
+
// decorationId,
|
|
409
|
+
// // refresh: () => active.renderer.refresh(),
|
|
410
|
+
// }),
|
|
411
|
+
]);
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=AutocompletePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutocompletePlugin.js","sourceRoot":"","sources":["../../src/autocomplete/AutocompletePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAA0B,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAI7D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAYtD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AA2BjE,MAAM,iBAAiB;IAwBD;IAvBpB,WAAW,GAAG,CAAC,CAAC;IAEhB,mBAAmB,GAAyB,EAAE,CAAC;IAC/C,MAAM,GAAY,KAAK,CAAC;IAExB,OAAO,CAQL;IAEF,QAAQ,CAEN;IAEF,SAAS,GAAY,KAAK,CAAC;IAE3B,WAAW,CAA8B;IAEzC,YAAoB,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;QACpC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACvD,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAErD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,MAA0B;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,MAAM,CAAC,QAAQ,GAAG;gBAChB,oBAAoB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;aACtD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAC3B,MAAM,CACP,CAAC;IACJ,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,YAAY,CAAC,OAAuB;QAClC,2DAA2D;QAC3D,IACE,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACxD,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;YAC1B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;SACzB,CAAC,CAAC,EACH,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;YAElC,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,YAAY,CAAC;oBAChB,UAAU,EAAE;wBACV,KAAK;wBACL,MAAM;qBACP;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,UAAU;QACR,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,kCAAkC;QAClC,4BAA4B;QAC5B,gBAAgB;QAChB,MAAM;QACN,6DAA6D;QAE7D,SAAS;QACT,sDAAsD;QACtD,QAAQ;QACR,wCAAwC;QACxC,gDAAgD;QAChD,qBAAqB;QACrB,sBAAsB;QACtB,oBAAoB;QACpB,mBAAmB;QACnB,aAAa;QAEb,sCAAsC;QACtC,iBAAiB;QACjB,6BAA6B;QAC7B,UAAU;QAEV,QAAQ;QAER,MAAM;QACN,IAAI;QACJ,8CAA8C;IAChD,CAAC;IAEO,eAAe,CAAC,EAAE,MAAM,EAAuB;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,SAAS,GAAc,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAEzD,MAAM,OAAO,GAAyB,IAAI,CAAC,mBAAmB,CAAC;QAC/D,IAAI,OAAO,GAA8B,SAAS,CAAC;QACnD,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QAE5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAA0B,MAAM,CAAC,QAAQ,CAAC;YAExD,IACE,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/C,CAAC;gBACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;oBAC9C,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,GAAG;4BACR,MAAM;4BACN,KAAK;yBACN,CAAC;wBAEF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;wBAC3B,MAAM;wBACN,kBAAkB;oBACpB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,cAAc,CACZ,UAAwC,EACxC,WAAwB;QAExB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,UAAU,EAAE,qBAAqB,EAAE,CAAC;YACtC,IAAI,CAAC,SAAS,CAAC;gBACb,GAAG,UAAU,CAAC,qBAAqB,CAAC,kBAAkB;aACvD,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,UAAU,EAAE,OAAO,EAAE,CAAC;YACxB,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;YAElC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAEtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,UAAU,EAAE,UAAU,EAAE,CAAC;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC;YAEpE,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;YACtC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC1D,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,QAAQ,GAAG,SAAS,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5C,QAAQ,CAAC,iBAAiB,CAAC,wBAAwB,YAAY,IAAI,CAAC,CAAC;gBAErE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAC9C,QAAQ,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE;wBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;wBAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;4BAClB,OAAO;wBACT,CAAC;wBACD,OAAO,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACtD,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBACtC,IAAI,CAAC,YAAY,CAAC;wBAChB,YAAY,EAAE,IAAI;qBACnB,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,OAAO,GAAG;gBACb,EAAE;gBACF,YAAY;gBACZ,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK;gBAClC,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM;gBACpC,QAAQ;aACT,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAE7B,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;gBACpB,MAAM,GAAG,GAAG;oBACV,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;oBAC1B,QAAQ,EAAE,CAAC,CAAC,OAAO;iBACpB,CAAC;gBACF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CACzC,OAAO,CAAC,KAAK,CAAC,KAAK,EACnB,GAAG,CACJ,CAAC;gBAEF,IAAI,CAAC,YAAY,CAAC;oBAChB,WAAW,EAAE;wBACX,KAAK;qBACN;iBACF,CAAC,CAAC;YACL,CAAC,CAAC;YACF,EAAE,EAAE,CAAC;YAEL,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,UAAU,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,CAAC,QAAQ,GAAG;gBACd,GAAG,UAAU,EAAE,WAAW;aAC3B,CAAC;YAEF,MAAM,KAAK,GAAoB;gBAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACzB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;gBAC1B,YAAY;gBACZ,kBAAkB;gBAClB,yCAAyC;gBACzC,0DAA0D;gBAC1D,sBAAsB;gBACtB,4FAA4F;gBAC5F,0DAA0D;gBAC1D,0DAA0D;gBAC1D,gDAAgD;gBAChD,OAAO;gBAEP,6DAA6D;gBAC7D,YAAY;gBACZ,KAAK;aACN,CAAC;YAEF,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,UAAU,EAAE,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY,CAAC,IAAsB;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,SAAS,CAChD,cAAc,CACf,CAAC;AAEF,MAAM,OAAO,kBACX,SAAQ,MAAyB;IACjC,YAAY,MAA0B,EAAE,MAAkB;QACxD,KAAK,CAAC;YACJ,GAAG,EAAE,qBAAqB;YAC1B,KAAK,EAAE;gBACL,IAAI;oBACF,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBACvC,CAAC;gBAED,KAAK,CAAC,WAAW,EAAE,KAAwB,EAAE,SAAS,EAAE,KAAK;oBAC3D,MAAM,UAAU,GAAiC,WAAW,CAAC,OAAO,CAClE,qBAAqB,CACtB,CAAC;oBAEF,MAAM,qBAAqB,GAAG,KAAK,CAAC;oBAEpC,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;wBAC1C,eAAe;oBACjB,CAAC;oBAED,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;oBAC5C,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;oBAElC,qBAAqB,CAAC,SAAS,GAAG,SAAS,CAAC;oBAE5C,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,qBAAqB,CAAC,YAAY,EAAE,CAAC;wBACrC,OAAO,qBAAqB,CAAC;oBAC/B,CAAC;oBAED,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;wBAC/C,qBAAqB,CAAC,YAAY,EAAE,CAAC;wBACrC,OAAO,qBAAqB,CAAC;oBAC/B,CAAC;oBAED,IAAI,qBAAqB,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,CAAC;wBAClE,OAAO,qBAAqB,CAAC;oBAC/B,CAAC;oBAED,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;wBAC3B,qBAAqB,CAAC,UAAU,EAAE,CAAC;wBACnC,uCAAuC;oBACzC,CAAC;oBAED,mEAAmE;oBACnE,IAAI,CAAC,SAAS,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjE,qBAAqB,CAAC,YAAY,EAAE,CAAC;wBACrC,OAAO,qBAAqB,CAAC;oBAC/B,CAAC;oBAED,IAAI,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;wBACrC,OAAO,qBAAqB,CAAC;oBAC/B,CAAC;oBAED,qBAAqB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;oBAErD,OAAO,qBAAqB,CAAC;gBAC/B,CAAC;aACF;YAED,IAAI,CAAC,UAAU;gBACb,OAAO;oBACL,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;wBAChC,MAAM,IAAI,GAAsB,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;wBAC9D,MAAM,IAAI,GAAsB,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC/D,MAAM,WAAW,GAAG,IAAI,CAAC;wBAEzB,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;4BAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAC3C,wBAAwB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CACtD,CAAC;wBACJ,CAAC;wBAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;4BACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;wBAClE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;wBAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;wBAC5D,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO;4BAClC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;wBAE1D,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;4BAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;4BAChC,OAAO;wBACT,CAAC;wBAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;4BACnB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gCAC9C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oCACxB,WAAW,CAAC,YAAY,CAAC;wCACvB,OAAO,EAAE;4CACP,MAAM,EAAE,KAAK;yCACd;qCACF,CAAC,CAAC;oCACH,OAAO,KAAK,CAAC;gCACf,CAAC;4BACH,CAAC;4BAED,MAAM,YAAY,GAChB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;4BAEzD,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;gCAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAC3C,wBAAwB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CACtD,CAAC;gCAEF,MAAM,KAAK,GAAoB;oCAC7B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;oCACzB,KAAK,EAAE,EAAE;oCACT,YAAY;oCACZ,kBAAkB;oCAClB,yCAAyC;oCACzC,0DAA0D;oCAC1D,sBAAsB;oCACtB,4FAA4F;oCAC5F,0DAA0D;oCAC1D,0DAA0D;oCAC1D,gDAAgD;oCAChD,OAAO;oCAEP,6DAA6D;oCAC7D,YAAY;oCACZ,KAAK;iCACN,CAAC;gCAEF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gCAEtC,IAAI,CAAC;oCACH,MAAM,GAAG,GAAG;wCACV,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;wCAC/B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;qCACzB,CAAC;oCACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EACxB,GAAG,CACJ,CAAC;oCACF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gCACtD,CAAC;gCAAC,OAAO,GAAQ,EAAE,CAAC;oCAClB,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;wCACd,OAAO,CAAC,KAAK,CACX,6BAA6B,EAC7B,GAAG,CAAC,OAAO,EACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAC7B,CAAC;oCACJ,CAAC;yCAAM,CAAC;wCACN,MAAM,GAAG,CAAC;oCACZ,CAAC;gCACH,CAAC;4BACH,CAAC;wBACH,CAAC;wBAED,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC;wBAClD,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,CAAC;wBACtC,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC;wBAEjD,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;4BACjD,OAAO;wBACT,CAAC;wBAED,MAAM,KAAK,GAAG,UAAU,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;wBAEvD,+BAA+B;oBACjC,CAAC;oBAED,OAAO,EAAE,GAAG,EAAE;wBACZ,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACjE,IAAI,CAAC,WAAW,EAAE,CAAC;4BACjB,OAAO;wBACT,CAAC;wBAED,WAAW,CAAC,OAAO,EAAE,CAAC;oBACxB,CAAC;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,EAAE;gBACL,iDAAiD;gBACjD,aAAa,CAAC,IAAI,EAAE,KAAK;oBACvB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAsB,CAAC;oBACnE,MAAM,EAAE,mBAAmB,EAAE,GAAG,WAAW,CAAC;oBAE5C,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;wBACzC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;4BACvB,MAAM,WAAW,GAAa,MAAM,CAAC,WAAW,CAAC;4BACjD,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gCAClC,IAAI,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;gCAChC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oCAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wCACnB,SAAS;oCACX,CAAC;oCACD,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gCACtC,CAAC;gCAED,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;oCACtB,WAAW,CAAC,YAAY,CAAC;wCACvB,OAAO,EAAE;4CACP,MAAM,EAAE,IAAI;yCACb;qCACF,CAAC,CAAC;oCACH,OAAO,KAAK,CAAC;gCACf,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,sDAAsD;gBACtD,WAAW,CAAC,KAAK;oBACf,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,IAAI,CAAC;oBACd,CAAC;oBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAC9C,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,eAAe,IAAI,wBAAwB,CAAC;oBACtE,MAAM,CAAC,YAAY,CAAC,oBAAoB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;oBAEhE,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;wBACrC,UAAU,CAAC,MAAM,CACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EACtB;4BACE,KAAK,EAAE,MAAM,CAAC,eAAe,IAAI,wBAAwB;4BACzD,oBAAoB,EAAE,OAAO,CAAC,YAAY;4BAC1C,YAAY,EAAE,OAAO,CAAC,YAAY;yBACnC,CACF;wBACD,uDAAuD;wBACvD,6BAA6B;wBAC7B,kBAAkB;wBAClB,iDAAiD;wBACjD,MAAM;qBACP,CAAC,CAAC;gBACL,CAAC;aACF;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CoreEditor } from '@kerebron/editor';
|
|
2
|
+
import { AutocompleteRenderer, SuggestionKeyDownProps, SuggestionProps } from './types.js';
|
|
3
|
+
import { OverLayer } from '../overlayer/mod.js';
|
|
4
|
+
export declare class DefaultRenderer<Item> extends EventTarget implements AutocompleteRenderer {
|
|
5
|
+
private editor;
|
|
6
|
+
command: (props: any) => void;
|
|
7
|
+
wrapper: HTMLElement | undefined;
|
|
8
|
+
list: HTMLElement | undefined;
|
|
9
|
+
items: Array<Item>;
|
|
10
|
+
pos: number;
|
|
11
|
+
props: SuggestionProps<Item, any> | undefined;
|
|
12
|
+
readonly keyDownHandler: (this: HTMLElement, ev: KeyboardEvent) => any;
|
|
13
|
+
overlayer: OverLayer;
|
|
14
|
+
anchor?: string;
|
|
15
|
+
constructor(editor: CoreEditor);
|
|
16
|
+
setCommand(command: (props: any) => void): void;
|
|
17
|
+
setResponse(): void;
|
|
18
|
+
onUpdate(props: SuggestionProps<Item>): void;
|
|
19
|
+
destroy(): void;
|
|
20
|
+
onKeyDown(props: SuggestionKeyDownProps): boolean;
|
|
21
|
+
createListItem(item: Item, cnt: number): any;
|
|
22
|
+
refresh(): void;
|
|
23
|
+
setAnchorSelector(anchor: string): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=DefaultRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultRenderer.d.ts","sourceRoot":"","sources":["../../src/autocomplete/DefaultRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAiB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAI/D,qBAAa,eAAe,CAAC,IAAI,CAAE,SAAQ,WACzC,YAAW,oBAAoB;IAWnB,OAAO,CAAC,MAAM;IAV1B,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9B,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAM;IACxB,GAAG,EAAE,MAAM,CAAM;IACjB,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,KAAK,GAAG,CAAC;IACvE,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEI,MAAM,EAAE,UAAU;IAetC,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI;IAKxC,WAAW;IAIX,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC;IAMrC,OAAO;IAYP,SAAS,CAAC,KAAK,EAAE,sBAAsB;IA2CvC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM;IActC,OAAO;IA+DP,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAIxC"}
|