@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.
Files changed (85) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +40 -0
  3. package/assets/ui.css +32 -0
  4. package/esm/ExtensionUi.d.ts +6 -0
  5. package/esm/ExtensionUi.d.ts.map +1 -0
  6. package/esm/ExtensionUi.js +9 -0
  7. package/esm/ExtensionUi.js.map +1 -0
  8. package/esm/autocomplete/AutocompletePlugin.d.ts +53 -0
  9. package/esm/autocomplete/AutocompletePlugin.d.ts.map +1 -0
  10. package/esm/autocomplete/AutocompletePlugin.js +417 -0
  11. package/esm/autocomplete/AutocompletePlugin.js.map +1 -0
  12. package/esm/autocomplete/DefaultRenderer.d.ts +25 -0
  13. package/esm/autocomplete/DefaultRenderer.d.ts.map +1 -0
  14. package/esm/autocomplete/DefaultRenderer.js +162 -0
  15. package/esm/autocomplete/DefaultRenderer.js.map +1 -0
  16. package/esm/autocomplete/ExtensionAutocomplete.d.ts +11 -0
  17. package/esm/autocomplete/ExtensionAutocomplete.d.ts.map +1 -0
  18. package/esm/autocomplete/ExtensionAutocomplete.js +33 -0
  19. package/esm/autocomplete/ExtensionAutocomplete.js.map +1 -0
  20. package/esm/autocomplete/createDefaultMatcher.d.ts +11 -0
  21. package/esm/autocomplete/createDefaultMatcher.d.ts.map +1 -0
  22. package/esm/autocomplete/createDefaultMatcher.js +58 -0
  23. package/esm/autocomplete/createDefaultMatcher.js.map +1 -0
  24. package/esm/autocomplete/createPosMatcher.d.ts +3 -0
  25. package/esm/autocomplete/createPosMatcher.d.ts.map +1 -0
  26. package/esm/autocomplete/createPosMatcher.js +16 -0
  27. package/esm/autocomplete/createPosMatcher.js.map +1 -0
  28. package/esm/autocomplete/createRegexMatcher.d.ts +4 -0
  29. package/esm/autocomplete/createRegexMatcher.d.ts.map +1 -0
  30. package/esm/autocomplete/createRegexMatcher.js +50 -0
  31. package/esm/autocomplete/createRegexMatcher.js.map +1 -0
  32. package/esm/autocomplete/mod.d.ts +6 -0
  33. package/esm/autocomplete/mod.d.ts.map +1 -0
  34. package/esm/autocomplete/mod.js +6 -0
  35. package/esm/autocomplete/mod.js.map +1 -0
  36. package/esm/autocomplete/types.d.ts +49 -0
  37. package/esm/autocomplete/types.d.ts.map +1 -0
  38. package/esm/autocomplete/types.js +2 -0
  39. package/esm/autocomplete/types.js.map +1 -0
  40. package/esm/hover/ExtensionHover.d.ts +11 -0
  41. package/esm/hover/ExtensionHover.d.ts.map +1 -0
  42. package/esm/hover/ExtensionHover.js +33 -0
  43. package/esm/hover/ExtensionHover.js.map +1 -0
  44. package/esm/hover/HoverPlugin.d.ts +49 -0
  45. package/esm/hover/HoverPlugin.d.ts.map +1 -0
  46. package/esm/hover/HoverPlugin.js +368 -0
  47. package/esm/hover/HoverPlugin.js.map +1 -0
  48. package/esm/hover/MarkdownRenderer.d.ts +23 -0
  49. package/esm/hover/MarkdownRenderer.d.ts.map +1 -0
  50. package/esm/hover/MarkdownRenderer.js +54 -0
  51. package/esm/hover/MarkdownRenderer.js.map +1 -0
  52. package/esm/hover/mod.d.ts +3 -0
  53. package/esm/hover/mod.d.ts.map +1 -0
  54. package/esm/hover/mod.js +3 -0
  55. package/esm/hover/mod.js.map +1 -0
  56. package/esm/hover/types.d.ts +23 -0
  57. package/esm/hover/types.d.ts.map +1 -0
  58. package/esm/hover/types.js +2 -0
  59. package/esm/hover/types.js.map +1 -0
  60. package/esm/mod.d.ts +2 -0
  61. package/esm/mod.d.ts.map +1 -0
  62. package/esm/mod.js +2 -0
  63. package/esm/mod.js.map +1 -0
  64. package/esm/overlayer/mod.d.ts +13 -0
  65. package/esm/overlayer/mod.d.ts.map +1 -0
  66. package/esm/overlayer/mod.js +111 -0
  67. package/esm/overlayer/mod.js.map +1 -0
  68. package/esm/package.json +3 -0
  69. package/package.json +43 -0
  70. package/src/ExtensionUi.ts +10 -0
  71. package/src/autocomplete/AutocompletePlugin.ts +580 -0
  72. package/src/autocomplete/DefaultRenderer.ts +189 -0
  73. package/src/autocomplete/ExtensionAutocomplete.ts +49 -0
  74. package/src/autocomplete/createDefaultMatcher.ts +94 -0
  75. package/src/autocomplete/createPosMatcher.ts +21 -0
  76. package/src/autocomplete/createRegexMatcher.ts +70 -0
  77. package/src/autocomplete/mod.ts +5 -0
  78. package/src/autocomplete/types.ts +90 -0
  79. package/src/hover/ExtensionHover.ts +46 -0
  80. package/src/hover/HoverPlugin.ts +467 -0
  81. package/src/hover/MarkdownRenderer.ts +68 -0
  82. package/src/hover/mod.ts +2 -0
  83. package/src/hover/types.ts +26 -0
  84. package/src/mod.ts +1 -0
  85. 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,6 @@
1
+ import { Extension } from '@kerebron/editor';
2
+ export declare class ExtensionUi extends Extension {
3
+ name: string;
4
+ created(): void;
5
+ }
6
+ //# sourceMappingURL=ExtensionUi.d.ts.map
@@ -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":"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"}
@@ -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"}