@prosekit/web 0.1.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_tsup-dts-rollup.d.ts +28 -13
- package/dist/{chunk-VJEVDINM.js → chunk-MZSYOTZT.js} +1 -1
- package/dist/{chunk-LCDA7GFP.js → chunk-Y2CJYXR5.js} +1 -4
- package/dist/prosekit-web-autocomplete.js +110 -187
- package/dist/prosekit-web-block-handle.js +39 -87
- package/dist/prosekit-web-inline-popover.js +43 -67
- package/dist/prosekit-web-popover.js +7 -7
- package/dist/prosekit-web-resizable.js +60 -159
- package/dist/prosekit-web-tooltip.js +11 -15
- package/package.json +13 -13
|
@@ -29,6 +29,7 @@ import { UpdateHandler } from '@prosekit/core';
|
|
|
29
29
|
import { usePopoverContent } from '@aria-ui/popover';
|
|
30
30
|
import { usePopoverRoot } from '@aria-ui/popover';
|
|
31
31
|
import { usePopoverTrigger } from '@aria-ui/popover';
|
|
32
|
+
import { useTooltipContent } from '@aria-ui/tooltip';
|
|
32
33
|
import { useTooltipRoot } from '@aria-ui/tooltip';
|
|
33
34
|
import { useTooltipTrigger } from '@aria-ui/tooltip';
|
|
34
35
|
import type { VirtualElement } from '@floating-ui/dom';
|
|
@@ -320,7 +321,8 @@ export { defaultBlockPopoverProps as defaultBlockPopoverProps_alias_1 }
|
|
|
320
321
|
|
|
321
322
|
declare const defaultInlinePopoverProps: Readonly<{
|
|
322
323
|
editor: null;
|
|
323
|
-
|
|
324
|
+
defaultOpen: true;
|
|
325
|
+
open: false;
|
|
324
326
|
onOpenChange: null;
|
|
325
327
|
placement: "top";
|
|
326
328
|
offset: 12;
|
|
@@ -434,16 +436,27 @@ declare interface InlinePopoverProps extends Omit<OverlayPositionerProps, 'place
|
|
|
434
436
|
* @default null
|
|
435
437
|
*/
|
|
436
438
|
editor: Editor | null;
|
|
439
|
+
/**
|
|
440
|
+
* Whether the popover is open by default when some inline content is
|
|
441
|
+
* selected.
|
|
442
|
+
*
|
|
443
|
+
* When `defaultOpen` is true, the popover will open or close based on the
|
|
444
|
+
* inline selection. When `defaultOpen` is false, the popover will never be
|
|
445
|
+
* opened unless the `open` prop is true.
|
|
446
|
+
*
|
|
447
|
+
* @default true
|
|
448
|
+
*/
|
|
449
|
+
defaultOpen: boolean;
|
|
437
450
|
/**
|
|
438
451
|
* Whether the popover is open.
|
|
439
452
|
*
|
|
440
453
|
* Notice that the popover will be always hidden if the inline selection is empty.
|
|
441
454
|
*
|
|
442
|
-
* @default
|
|
455
|
+
* @default false
|
|
443
456
|
*/
|
|
444
457
|
open: boolean;
|
|
445
458
|
/**
|
|
446
|
-
*
|
|
459
|
+
* Event handler called when the open state changed caused by user interaction (i.e. select or unselect inline content).
|
|
447
460
|
*
|
|
448
461
|
* @default null
|
|
449
462
|
*/
|
|
@@ -486,6 +499,8 @@ export declare function isFinitePositiveNumber(value: unknown): value is number;
|
|
|
486
499
|
|
|
487
500
|
export declare function isInCodeBlock(selection: Selection_2): boolean | undefined;
|
|
488
501
|
|
|
502
|
+
export declare function omit<T extends Record<string, unknown>, K extends keyof T>(object: T, keys: K[]): Omit<T, K>;
|
|
503
|
+
|
|
489
504
|
/**
|
|
490
505
|
* @internal
|
|
491
506
|
*/
|
|
@@ -656,17 +671,17 @@ declare const TooltipTriggerElement_base: {
|
|
|
656
671
|
export { TooltipTriggerProps }
|
|
657
672
|
export { TooltipTriggerProps as TooltipTriggerProps_alias_1 }
|
|
658
673
|
|
|
659
|
-
export declare function useAutocompleteEmpty(element: ConnectableElement
|
|
674
|
+
export declare function useAutocompleteEmpty(element: ConnectableElement): void;
|
|
660
675
|
|
|
661
|
-
export declare function useAutocompleteItem(element: ConnectableElement,
|
|
676
|
+
export declare function useAutocompleteItem(element: ConnectableElement, state: SignalState<AutocompleteItemProps>): void;
|
|
662
677
|
|
|
663
|
-
export declare function useAutocompleteList(element: ConnectableElement,
|
|
678
|
+
export declare function useAutocompleteList(element: ConnectableElement, state: SignalState<AutocompleteListProps>): void;
|
|
664
679
|
|
|
665
|
-
export declare function useAutocompletePopover(host: ConnectableElement,
|
|
680
|
+
export declare function useAutocompletePopover(host: ConnectableElement, state: SignalState<AutocompletePopoverProps>): void;
|
|
666
681
|
|
|
667
|
-
export declare function useBlockDragHandle(host: ConnectableElement,
|
|
682
|
+
export declare function useBlockDragHandle(host: ConnectableElement, state: SignalState<BlockDragHandleProps>): void;
|
|
668
683
|
|
|
669
|
-
export declare function useBlockPopover(host: ConnectableElement,
|
|
684
|
+
export declare function useBlockPopover(host: ConnectableElement, state: SignalState<BlockPopoverProps>): void;
|
|
670
685
|
|
|
671
686
|
export declare function useEditorExtension(host: ConnectableElement, editor: ReadonlySignal<Editor | null>, extension: Extension): void;
|
|
672
687
|
|
|
@@ -682,7 +697,7 @@ export declare function useEditorUpdateEvent(host: ConnectableElement, editor: R
|
|
|
682
697
|
|
|
683
698
|
export declare function useFirstRendering(host: ConnectableElement): ReadonlySignal<boolean>;
|
|
684
699
|
|
|
685
|
-
export declare function useInlinePopover(host: ConnectableElement,
|
|
700
|
+
export declare function useInlinePopover(host: ConnectableElement, state: SignalState<InlinePopoverProps>): void;
|
|
686
701
|
|
|
687
702
|
export { usePopoverContent }
|
|
688
703
|
|
|
@@ -690,11 +705,11 @@ export { usePopoverRoot }
|
|
|
690
705
|
|
|
691
706
|
export { usePopoverTrigger }
|
|
692
707
|
|
|
693
|
-
export declare function useResizableHandle(host: ConnectableElement,
|
|
708
|
+
export declare function useResizableHandle(host: ConnectableElement, state: SignalState<ResizableHandleProps>): void;
|
|
694
709
|
|
|
695
|
-
export declare function useResizableRoot(host: ConnectableElement,
|
|
710
|
+
export declare function useResizableRoot(host: ConnectableElement, state: SignalState<ResizableRootProps>): void;
|
|
696
711
|
|
|
697
|
-
export
|
|
712
|
+
export { useTooltipContent }
|
|
698
713
|
|
|
699
714
|
export { useTooltipRoot }
|
|
700
715
|
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
// src/utils/define-custom-element.ts
|
|
2
2
|
function defineCustomElement(name, constructor, options) {
|
|
3
|
-
|
|
4
|
-
return;
|
|
5
|
-
}
|
|
6
|
-
customElements.define(name, constructor, options);
|
|
3
|
+
typeof customElements != "undefined" && customElements.define(name, constructor, options);
|
|
7
4
|
}
|
|
8
5
|
|
|
9
6
|
export {
|
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useEditorExtension
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MZSYOTZT.js";
|
|
4
4
|
import {
|
|
5
5
|
defineCustomElement
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-Y2CJYXR5.js";
|
|
7
7
|
|
|
8
8
|
// src/components/autocomplete/autocomplete-empty/element.gen.ts
|
|
9
|
-
import {
|
|
9
|
+
import { ElementBuilder } from "@aria-ui/core";
|
|
10
10
|
|
|
11
11
|
// src/components/autocomplete/autocomplete-empty/props.ts
|
|
12
12
|
var defaultAutocompleteEmptyProps = {};
|
|
13
13
|
|
|
14
14
|
// src/components/autocomplete/autocomplete-empty/state.ts
|
|
15
15
|
import { useListboxEmpty } from "@aria-ui/listbox";
|
|
16
|
-
function useAutocompleteEmpty(element
|
|
16
|
+
function useAutocompleteEmpty(element) {
|
|
17
17
|
useListboxEmpty(element);
|
|
18
|
-
return {};
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
// src/components/autocomplete/autocomplete-empty/element.gen.ts
|
|
22
|
-
var AutocompleteEmptyElement = class extends
|
|
21
|
+
var AutocompleteEmptyElement = class extends ElementBuilder(useAutocompleteEmpty, defaultAutocompleteEmptyProps) {
|
|
23
22
|
};
|
|
24
23
|
defineCustomElement("prosekit-autocomplete-empty", AutocompleteEmptyElement);
|
|
25
24
|
|
|
26
25
|
// src/components/autocomplete/autocomplete-item/element.gen.ts
|
|
27
|
-
import {
|
|
26
|
+
import { ElementBuilder as ElementBuilder2 } from "@aria-ui/core";
|
|
28
27
|
|
|
29
28
|
// src/components/autocomplete/autocomplete-item/props.ts
|
|
30
29
|
var defaultAutocompleteItemProps = {
|
|
@@ -43,157 +42,125 @@ import { createContext } from "@aria-ui/core";
|
|
|
43
42
|
var queryContext = createContext(
|
|
44
43
|
"prosekit/autocomplete-popover/query",
|
|
45
44
|
""
|
|
46
|
-
)
|
|
47
|
-
var onSubmitContext = createContext(
|
|
45
|
+
), onSubmitContext = createContext(
|
|
48
46
|
"prosekit/autocomplete-popover/onSubmit",
|
|
49
47
|
null
|
|
50
|
-
)
|
|
51
|
-
var openContext = createContext(
|
|
48
|
+
), openContext = createContext(
|
|
52
49
|
"prosekit/autocomplete-popover/open",
|
|
53
|
-
|
|
50
|
+
!1
|
|
54
51
|
);
|
|
55
52
|
|
|
56
53
|
// src/components/autocomplete/autocomplete-item/state.ts
|
|
57
|
-
function useAutocompleteItem(element,
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
function useAutocompleteItem(element, state) {
|
|
55
|
+
useListboxItem(element, state);
|
|
56
|
+
let open = openContext.consume(element);
|
|
60
57
|
useEffect(element, () => {
|
|
61
58
|
var _a;
|
|
62
|
-
|
|
63
|
-
value.value = (_a = element.textContent) != null ? _a : "";
|
|
64
|
-
}
|
|
59
|
+
!state.value.peek() && open.get() && state.value.set((_a = element.textContent) != null ? _a : "");
|
|
65
60
|
});
|
|
66
|
-
return { onSelect, value };
|
|
67
61
|
}
|
|
68
62
|
|
|
69
63
|
// src/components/autocomplete/autocomplete-item/element.gen.ts
|
|
70
|
-
var AutocompleteItemElement = class extends
|
|
64
|
+
var AutocompleteItemElement = class extends ElementBuilder2(useAutocompleteItem, defaultAutocompleteItemProps) {
|
|
71
65
|
};
|
|
72
66
|
defineCustomElement("prosekit-autocomplete-item", AutocompleteItemElement);
|
|
73
67
|
|
|
74
68
|
// src/components/autocomplete/autocomplete-list/element.gen.ts
|
|
75
|
-
import {
|
|
69
|
+
import { ElementBuilder as ElementBuilder3 } from "@aria-ui/core";
|
|
76
70
|
|
|
77
71
|
// src/components/autocomplete/autocomplete-list/props.ts
|
|
78
72
|
import { defaultListboxProps } from "@aria-ui/listbox";
|
|
79
|
-
var defaultFilter = defaultListboxProps.filter
|
|
80
|
-
var defaultAutocompleteListProps = {
|
|
73
|
+
var defaultFilter = defaultListboxProps.filter, defaultAutocompleteListProps = {
|
|
81
74
|
filter: defaultFilter,
|
|
82
75
|
editor: null
|
|
83
76
|
};
|
|
84
77
|
|
|
85
78
|
// src/components/autocomplete/autocomplete-list/state.ts
|
|
86
79
|
import {
|
|
87
|
-
assignProps,
|
|
88
80
|
createSignal,
|
|
81
|
+
mapSignals,
|
|
89
82
|
useEffect as useEffect2
|
|
90
83
|
} from "@aria-ui/core";
|
|
91
|
-
import {
|
|
84
|
+
import {
|
|
85
|
+
defaultListboxProps as defaultListboxProps2,
|
|
86
|
+
useListbox
|
|
87
|
+
} from "@aria-ui/listbox";
|
|
92
88
|
import {
|
|
93
89
|
Priority,
|
|
94
90
|
defineDOMEventHandler,
|
|
95
91
|
withPriority
|
|
96
92
|
} from "@prosekit/core";
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
93
|
+
|
|
94
|
+
// src/utils/omit.ts
|
|
95
|
+
function omit(object, keys) {
|
|
96
|
+
return Object.fromEntries(
|
|
97
|
+
Object.entries(object).filter(([key]) => !keys.includes(key))
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// src/components/autocomplete/autocomplete-list/state.ts
|
|
102
|
+
function useAutocompleteList(element, state) {
|
|
103
|
+
let open = openContext.consume(element), query = queryContext.consume(element), onSubmit = onSubmitContext.consume(element), onKeydownHandlerAdd = useKeyboardHandler(element, open, state.editor), onValueChange = (value) => {
|
|
105
104
|
var _a;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
value && ((_a = onSubmit.peek()) == null || _a());
|
|
106
|
+
}, listboxState = {
|
|
107
|
+
...mapSignals({
|
|
108
|
+
...omit(defaultListboxProps2, ["filter"]),
|
|
109
|
+
onKeydownHandlerAdd,
|
|
110
|
+
onValueChange
|
|
111
|
+
}),
|
|
112
|
+
filter: state.filter
|
|
109
113
|
};
|
|
110
|
-
|
|
111
|
-
query
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
useEffect2(element, () => {
|
|
124
|
-
if (!open.value) {
|
|
125
|
-
listboxValue.value = "";
|
|
126
|
-
query.value = "";
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
useEffect2(element, () => {
|
|
130
|
-
if (!open.value) {
|
|
131
|
-
autoFocus.value = false;
|
|
132
|
-
} else {
|
|
133
|
-
let canceled = false;
|
|
134
|
-
requestAnimationFrame(() => {
|
|
135
|
-
if (canceled)
|
|
136
|
-
return;
|
|
137
|
-
autoFocus.value = true;
|
|
138
|
-
});
|
|
139
|
-
return () => {
|
|
140
|
-
canceled = true;
|
|
114
|
+
useListbox(element, listboxState), useEffect2(element, () => {
|
|
115
|
+
listboxState.query.set(query.get());
|
|
116
|
+
}), useEffect2(element, () => {
|
|
117
|
+
open.get() || (listboxState.value.set(""), query.set(""));
|
|
118
|
+
}), useEffect2(element, () => {
|
|
119
|
+
if (!open.get())
|
|
120
|
+
listboxState.autoFocus.set(!1);
|
|
121
|
+
else {
|
|
122
|
+
let canceled = !1;
|
|
123
|
+
return requestAnimationFrame(() => {
|
|
124
|
+
canceled || listboxState.autoFocus.set(!0);
|
|
125
|
+
}), () => {
|
|
126
|
+
canceled = !0;
|
|
141
127
|
};
|
|
142
128
|
}
|
|
143
|
-
})
|
|
144
|
-
useEffect2(element, () => {
|
|
129
|
+
}), useEffect2(element, () => {
|
|
145
130
|
element.tabIndex = -1;
|
|
146
131
|
});
|
|
147
|
-
return { editor, filter };
|
|
148
132
|
}
|
|
149
133
|
function useKeyboardHandler(element, open, editor) {
|
|
150
|
-
|
|
134
|
+
let keydownHandler = createSignal(
|
|
151
135
|
null
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const keydownHandlerValue = keydownHandler.value;
|
|
157
|
-
if (!editorValue || !keydownHandlerValue) {
|
|
136
|
+
), disposeKeydownHandler = null;
|
|
137
|
+
return useEffect2(element, () => {
|
|
138
|
+
let editorValue = editor.get(), keydownHandlerValue = keydownHandler.get();
|
|
139
|
+
if (!editorValue || !keydownHandlerValue)
|
|
158
140
|
return;
|
|
159
|
-
|
|
160
|
-
const extension = defineDOMEventHandler(
|
|
141
|
+
let extension = defineDOMEventHandler(
|
|
161
142
|
"keydown",
|
|
162
|
-
(view, event) =>
|
|
163
|
-
if (view.composing || event.defaultPrevented || !open.value) {
|
|
164
|
-
return false;
|
|
165
|
-
}
|
|
166
|
-
keydownHandlerValue(event);
|
|
167
|
-
return event.defaultPrevented;
|
|
168
|
-
}
|
|
143
|
+
(view, event) => view.composing || event.defaultPrevented || !open.get() ? !1 : (keydownHandlerValue(event), event.defaultPrevented)
|
|
169
144
|
);
|
|
170
|
-
disposeKeydownHandler == null
|
|
171
|
-
disposeKeydownHandler = editorValue.use(
|
|
145
|
+
disposeKeydownHandler == null || disposeKeydownHandler(), disposeKeydownHandler = editorValue.use(
|
|
172
146
|
withPriority(extension, Priority.highest)
|
|
173
147
|
);
|
|
148
|
+
}), (keydownHandlerValue) => (keydownHandler.set(keydownHandlerValue), () => {
|
|
149
|
+
disposeKeydownHandler == null || disposeKeydownHandler(), disposeKeydownHandler = null;
|
|
174
150
|
});
|
|
175
|
-
return (keydownHandlerValue) => {
|
|
176
|
-
keydownHandler.value = keydownHandlerValue;
|
|
177
|
-
return () => {
|
|
178
|
-
disposeKeydownHandler == null ? void 0 : disposeKeydownHandler();
|
|
179
|
-
disposeKeydownHandler = null;
|
|
180
|
-
};
|
|
181
|
-
};
|
|
182
151
|
}
|
|
183
152
|
|
|
184
153
|
// src/components/autocomplete/autocomplete-list/element.gen.ts
|
|
185
|
-
var AutocompleteListElement = class extends
|
|
154
|
+
var AutocompleteListElement = class extends ElementBuilder3(useAutocompleteList, defaultAutocompleteListProps) {
|
|
186
155
|
};
|
|
187
156
|
defineCustomElement("prosekit-autocomplete-list", AutocompleteListElement);
|
|
188
157
|
|
|
189
158
|
// src/components/autocomplete/autocomplete-popover/element.gen.ts
|
|
190
|
-
import {
|
|
159
|
+
import { ElementBuilder as ElementBuilder4 } from "@aria-ui/core";
|
|
191
160
|
|
|
192
161
|
// src/components/autocomplete/autocomplete-popover/props.ts
|
|
193
162
|
import { defaultOverlayPositionerProps } from "@aria-ui/overlay";
|
|
194
|
-
var body = typeof document
|
|
195
|
-
var defaultBoundary = body || "clippingAncestors";
|
|
196
|
-
var defaultAutocompletePopoverProps = Object.freeze({
|
|
163
|
+
var body = typeof document != "undefined" && document.querySelector("body"), defaultBoundary = body || "clippingAncestors", defaultAutocompletePopoverProps = Object.freeze({
|
|
197
164
|
...defaultOverlayPositionerProps,
|
|
198
165
|
editor: null,
|
|
199
166
|
regex: null,
|
|
@@ -201,19 +168,17 @@ var defaultAutocompletePopoverProps = Object.freeze({
|
|
|
201
168
|
onOpenChange: null,
|
|
202
169
|
placement: "bottom-start",
|
|
203
170
|
offset: 4,
|
|
204
|
-
inline:
|
|
205
|
-
hoist:
|
|
206
|
-
fitViewport:
|
|
171
|
+
inline: !0,
|
|
172
|
+
hoist: !0,
|
|
173
|
+
fitViewport: !0,
|
|
207
174
|
boundary: defaultBoundary,
|
|
208
175
|
overflowPadding: 8
|
|
209
176
|
});
|
|
210
177
|
|
|
211
178
|
// src/components/autocomplete/autocomplete-popover/state.ts
|
|
212
179
|
import {
|
|
213
|
-
assignProps as assignProps2,
|
|
214
180
|
createComputed,
|
|
215
181
|
createSignal as createSignal3,
|
|
216
|
-
mapSignals,
|
|
217
182
|
useAnimationFrame,
|
|
218
183
|
useEffect as useEffect4
|
|
219
184
|
} from "@aria-ui/core";
|
|
@@ -235,13 +200,12 @@ import {
|
|
|
235
200
|
useEffect as useEffect3
|
|
236
201
|
} from "@aria-ui/core";
|
|
237
202
|
function useFirstRendering(host) {
|
|
238
|
-
|
|
239
|
-
useEffect3(host, () => {
|
|
203
|
+
let firstRendering = createSignal2(!0);
|
|
204
|
+
return useEffect3(host, () => {
|
|
240
205
|
requestAnimationFrame(() => {
|
|
241
|
-
firstRendering.
|
|
206
|
+
firstRendering.set(!1);
|
|
242
207
|
});
|
|
243
|
-
});
|
|
244
|
-
return firstRendering;
|
|
208
|
+
}), firstRendering;
|
|
245
209
|
}
|
|
246
210
|
|
|
247
211
|
// src/components/autocomplete/autocomplete-popover/helpers.ts
|
|
@@ -250,23 +214,9 @@ function defaultQueryBuilder(match) {
|
|
|
250
214
|
}
|
|
251
215
|
|
|
252
216
|
// src/components/autocomplete/autocomplete-popover/state.ts
|
|
253
|
-
function useAutocompletePopover(host,
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
return state;
|
|
257
|
-
}
|
|
258
|
-
function useAutocompletePopoverState(host, state) {
|
|
259
|
-
const { editor, regex, ...overlayState } = state;
|
|
260
|
-
const reference = createSignal3(null);
|
|
261
|
-
const query = createSignal3("");
|
|
262
|
-
const onDismiss = createSignal3(null);
|
|
263
|
-
const onSubmit = createSignal3(null);
|
|
264
|
-
const presence = createComputed(() => !!reference.value);
|
|
265
|
-
queryContext.provide(host, query);
|
|
266
|
-
onSubmitContext.provide(host, onSubmit);
|
|
267
|
-
openContext.provide(host, presence);
|
|
268
|
-
useEscapeKeydown(host, editor, createKeymapHandler(onDismiss, presence));
|
|
269
|
-
useAutocompleteExtension(
|
|
217
|
+
function useAutocompletePopover(host, state) {
|
|
218
|
+
let { editor, regex, ...overlayState } = state, reference = createSignal3(null), query = createSignal3(""), onDismiss = createSignal3(null), onSubmit = createSignal3(null), presence = createComputed(() => !!reference.get());
|
|
219
|
+
queryContext.provide(host, query), onSubmitContext.provide(host, onSubmit), openContext.provide(host, presence), useEscapeKeydown(host, editor, createKeymapHandler(onDismiss, presence)), useAutocompleteExtension(
|
|
270
220
|
host,
|
|
271
221
|
editor,
|
|
272
222
|
regex,
|
|
@@ -274,89 +224,62 @@ function useAutocompletePopoverState(host, state) {
|
|
|
274
224
|
query,
|
|
275
225
|
onDismiss,
|
|
276
226
|
onSubmit
|
|
277
|
-
);
|
|
278
|
-
|
|
279
|
-
usePresence(host, presence);
|
|
280
|
-
const firstRendering = useFirstRendering(host);
|
|
227
|
+
), useOverlayPositionerState(host, overlayState, { reference }), usePresence(host, presence);
|
|
228
|
+
let firstRendering = useFirstRendering(host);
|
|
281
229
|
useEffect4(host, () => {
|
|
282
230
|
var _a;
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
if (!onOpenChangeValue) {
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
return () => {
|
|
295
|
-
onOpenChangeValue(presenceValue);
|
|
296
|
-
};
|
|
231
|
+
let queryValue = query.get();
|
|
232
|
+
firstRendering.peek() || (_a = state.onQueryChange.peek()) == null || _a(queryValue);
|
|
233
|
+
}), useAnimationFrame(host, () => {
|
|
234
|
+
let presenceValue = presence.get(), onOpenChangeValue = state.onOpenChange.peek();
|
|
235
|
+
if (onOpenChangeValue)
|
|
236
|
+
return () => {
|
|
237
|
+
onOpenChangeValue(presenceValue);
|
|
238
|
+
};
|
|
297
239
|
});
|
|
298
240
|
}
|
|
299
241
|
function useAutocompleteExtension(host, editor, regex, reference, query, onDismiss, onSubmit) {
|
|
300
242
|
useEffect4(host, () => {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
onDismiss,
|
|
312
|
-
onSubmit
|
|
313
|
-
);
|
|
243
|
+
let editorValue = editor.get(), regexValue = regex.get();
|
|
244
|
+
if (!(!editorValue || !regexValue))
|
|
245
|
+
return addAutocompleteExtension(
|
|
246
|
+
editorValue,
|
|
247
|
+
regexValue,
|
|
248
|
+
reference,
|
|
249
|
+
query,
|
|
250
|
+
onDismiss,
|
|
251
|
+
onSubmit
|
|
252
|
+
);
|
|
314
253
|
});
|
|
315
254
|
}
|
|
316
255
|
function addAutocompleteExtension(editor, regex, reference, query, onDismiss, onSubmit) {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
onDismiss.value = options.ignoreMatch;
|
|
324
|
-
onSubmit.value = options.deleteMatch;
|
|
325
|
-
};
|
|
326
|
-
const handleLeave = () => {
|
|
327
|
-
reference.value = null;
|
|
328
|
-
query.value = "";
|
|
329
|
-
onDismiss.value = null;
|
|
330
|
-
onSubmit.value = null;
|
|
331
|
-
};
|
|
332
|
-
const rule = new AutocompleteRule({
|
|
256
|
+
let handleEnter = (options) => {
|
|
257
|
+
let span = editor.view.dom.querySelector(".prosemirror-prediction-match");
|
|
258
|
+
span && reference.set(span), query.set(defaultQueryBuilder(options.match)), onDismiss.set(options.ignoreMatch), onSubmit.set(options.deleteMatch);
|
|
259
|
+
}, handleLeave = () => {
|
|
260
|
+
reference.set(null), query.set(""), onDismiss.set(null), onSubmit.set(null);
|
|
261
|
+
}, rule = new AutocompleteRule({
|
|
333
262
|
regex,
|
|
334
263
|
onEnter: handleEnter,
|
|
335
264
|
onLeave: handleLeave
|
|
336
|
-
});
|
|
337
|
-
const extension = defineAutocomplete(rule);
|
|
265
|
+
}), extension = defineAutocomplete(rule);
|
|
338
266
|
return editor.use(extension);
|
|
339
267
|
}
|
|
340
268
|
function createKeymapHandler(handler, enabled) {
|
|
341
269
|
return () => {
|
|
342
|
-
if (!enabled.
|
|
343
|
-
return
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
if (!fn)
|
|
347
|
-
return false;
|
|
348
|
-
fn();
|
|
349
|
-
return true;
|
|
270
|
+
if (!enabled.get())
|
|
271
|
+
return !1;
|
|
272
|
+
let fn = handler.peek();
|
|
273
|
+
return fn ? (fn(), !0) : !1;
|
|
350
274
|
};
|
|
351
275
|
}
|
|
352
276
|
function useEscapeKeydown(host, editor, handler) {
|
|
353
|
-
|
|
354
|
-
const extension = withPriority2(defineKeymap(keymap), Priority2.highest);
|
|
277
|
+
let extension = withPriority2(defineKeymap({ Escape: handler }), Priority2.highest);
|
|
355
278
|
return useEditorExtension(host, editor, extension);
|
|
356
279
|
}
|
|
357
280
|
|
|
358
281
|
// src/components/autocomplete/autocomplete-popover/element.gen.ts
|
|
359
|
-
var AutocompletePopoverElement = class extends
|
|
282
|
+
var AutocompletePopoverElement = class extends ElementBuilder4(useAutocompletePopover, defaultAutocompletePopoverProps) {
|
|
360
283
|
};
|
|
361
284
|
defineCustomElement("prosekit-autocomplete-popover", AutocompletePopoverElement);
|
|
362
285
|
export {
|