@prosekit/web 0.8.0-beta.0 → 0.8.0-beta.2
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/prosekit-web-autocomplete.d.ts +112 -90
- package/dist/prosekit-web-autocomplete.d.ts.map +1 -1
- package/dist/prosekit-web-autocomplete.js +292 -217
- package/dist/prosekit-web-autocomplete.js.map +1 -1
- package/dist/prosekit-web-block-handle.d.ts +95 -62
- package/dist/prosekit-web-block-handle.d.ts.map +1 -1
- package/dist/prosekit-web-block-handle.js +219 -114
- package/dist/prosekit-web-block-handle.js.map +1 -1
- package/dist/prosekit-web-drop-indicator.d.ts +13 -15
- package/dist/prosekit-web-drop-indicator.d.ts.map +1 -1
- package/dist/prosekit-web-drop-indicator.js +34 -30
- package/dist/prosekit-web-drop-indicator.js.map +1 -1
- package/dist/prosekit-web-inline-popover.d.ts +94 -53
- package/dist/prosekit-web-inline-popover.d.ts.map +1 -1
- package/dist/prosekit-web-inline-popover.js +134 -79
- package/dist/prosekit-web-inline-popover.js.map +1 -1
- package/dist/prosekit-web-menu.d.ts +13 -0
- package/dist/prosekit-web-menu.d.ts.map +1 -0
- package/dist/prosekit-web-menu.js +53 -0
- package/dist/prosekit-web-menu.js.map +1 -0
- package/dist/prosekit-web-popover.d.ts +7 -26
- package/dist/prosekit-web-popover.d.ts.map +1 -1
- package/dist/prosekit-web-popover.js +31 -29
- package/dist/prosekit-web-popover.js.map +1 -1
- package/dist/prosekit-web-resizable.d.ts +92 -51
- package/dist/prosekit-web-resizable.d.ts.map +1 -1
- package/dist/prosekit-web-resizable.js +139 -131
- package/dist/prosekit-web-resizable.js.map +1 -1
- package/dist/prosekit-web-table-handle.d.ts +166 -199
- package/dist/prosekit-web-table-handle.d.ts.map +1 -1
- package/dist/prosekit-web-table-handle.js +495 -496
- package/dist/prosekit-web-table-handle.js.map +1 -1
- package/dist/prosekit-web-tooltip.d.ts +7 -26
- package/dist/prosekit-web-tooltip.d.ts.map +1 -1
- package/dist/prosekit-web-tooltip.js +31 -29
- package/dist/prosekit-web-tooltip.js.map +1 -1
- package/dist/use-editor-extension.js +2 -2
- package/dist/use-editor-extension.js.map +1 -1
- package/dist/use-scrolling.js +17 -8
- package/dist/use-scrolling.js.map +1 -1
- package/package.json +26 -21
- package/src/components/autocomplete/autocomplete-empty.ts +45 -0
- package/src/components/autocomplete/autocomplete-item.ts +65 -0
- package/src/components/autocomplete/autocomplete-popup.ts +95 -0
- package/src/components/autocomplete/autocomplete-positioner.ts +98 -0
- package/src/components/autocomplete/autocomplete-root.ts +280 -0
- package/src/components/autocomplete/context.ts +16 -14
- package/src/components/autocomplete/index.ts +65 -0
- package/src/components/block-handle/block-handle-add.ts +71 -0
- package/src/components/block-handle/block-handle-draggable.ts +158 -0
- package/src/components/block-handle/block-handle-popup.ts +43 -0
- package/src/components/block-handle/block-handle-positioner.ts +89 -0
- package/src/components/block-handle/block-handle-root.ts +116 -0
- package/src/components/block-handle/context.ts +9 -18
- package/src/components/block-handle/hover-state.ts +16 -0
- package/src/components/block-handle/index.ts +59 -0
- package/src/components/block-handle/{block-handle-popover/pointer-move.ts → pointer-move.ts} +8 -7
- package/src/components/block-handle/{block-handle-draggable/set-drag-preview.ts → set-drag-preview.ts} +4 -4
- package/src/components/block-handle/use-hover-extension.ts +65 -0
- package/src/components/drop-indicator/drop-indicator.ts +128 -0
- package/src/components/drop-indicator/index.ts +18 -0
- package/src/components/inline-popover/index.ts +41 -0
- package/src/components/inline-popover/inline-popover-popup.ts +52 -0
- package/src/components/inline-popover/inline-popover-positioner.ts +118 -0
- package/src/components/inline-popover/inline-popover-root.ts +122 -0
- package/src/components/inline-popover/store.ts +6 -0
- package/src/components/menu/index.ts +92 -0
- package/src/components/popover/index.ts +53 -0
- package/src/components/resizable/{resizable-handle/calc-resize.ts → calc-resize.ts} +1 -1
- package/src/components/resizable/context.ts +3 -6
- package/src/components/resizable/index.ts +32 -0
- package/src/components/resizable/resizable-handle.ts +134 -0
- package/src/components/resizable/resizable-root.ts +184 -0
- package/src/components/table-handle/dnd.ts +16 -27
- package/src/components/table-handle/index.ts +125 -0
- package/src/components/table-handle/{table-handle-drag-preview/render-preview.ts → render-preview.ts} +5 -5
- package/src/components/table-handle/shared.ts +61 -0
- package/src/components/table-handle/store.ts +117 -0
- package/src/components/table-handle/table-handle-column-menu-root.ts +51 -0
- package/src/components/table-handle/table-handle-column-menu-trigger.ts +107 -0
- package/src/components/table-handle/table-handle-column-popup.ts +44 -0
- package/src/components/table-handle/table-handle-column-positioner.ts +67 -0
- package/src/components/table-handle/table-handle-drag-preview.ts +169 -0
- package/src/components/table-handle/table-handle-drop-indicator.ts +166 -0
- package/src/components/table-handle/table-handle-root.ts +103 -0
- package/src/components/table-handle/table-handle-row-menu-root.ts +51 -0
- package/src/components/table-handle/table-handle-row-menu-trigger.ts +107 -0
- package/src/components/table-handle/table-handle-row-popup.ts +42 -0
- package/src/components/table-handle/table-handle-row-positioner.ts +67 -0
- package/src/components/table-handle/use-drop.ts +74 -0
- package/src/components/table-handle/{hooks/use-empty-image.ts → use-empty-image.ts} +2 -3
- package/src/components/table-handle/utils.ts +0 -11
- package/src/components/tooltip/index.ts +52 -0
- package/src/hooks/use-editor-extension.ts +4 -4
- package/src/hooks/use-editor-focus-event.ts +4 -4
- package/src/hooks/use-editor-typing.ts +12 -16
- package/src/hooks/use-editor-update-event.ts +4 -4
- package/src/hooks/use-keymap.ts +4 -4
- package/src/hooks/use-scrolling.ts +11 -10
- package/src/hooks/use-selecting.ts +8 -15
- package/src/utils/event.ts +28 -0
- package/src/utils/lazy-signal.spec.ts +68 -0
- package/src/utils/lazy-signal.ts +17 -0
- package/src/utils/prefers-reduced-motion.ts +6 -0
- package/src/utils/prevent-default.ts +3 -0
- package/src/utils/use-html-element-at.ts +17 -0
- package/src/utils/use-no-focus.ts +7 -0
- package/dist/get-default-state.js +0 -11
- package/dist/get-default-state.js.map +0 -1
- package/src/components/autocomplete/autocomplete-empty/element.gen.ts +0 -18
- package/src/components/autocomplete/autocomplete-empty/setup.ts +0 -6
- package/src/components/autocomplete/autocomplete-empty/types.ts +0 -13
- package/src/components/autocomplete/autocomplete-item/element.gen.ts +0 -18
- package/src/components/autocomplete/autocomplete-item/setup.ts +0 -30
- package/src/components/autocomplete/autocomplete-item/types.ts +0 -25
- package/src/components/autocomplete/autocomplete-list/element.gen.ts +0 -18
- package/src/components/autocomplete/autocomplete-list/setup.ts +0 -125
- package/src/components/autocomplete/autocomplete-list/types.ts +0 -22
- package/src/components/autocomplete/autocomplete-popover/element.gen.ts +0 -18
- package/src/components/autocomplete/autocomplete-popover/setup.ts +0 -169
- package/src/components/autocomplete/autocomplete-popover/types.ts +0 -100
- package/src/components/autocomplete/index.gen.ts +0 -17
- package/src/components/block-handle/block-handle-add/element.gen.ts +0 -18
- package/src/components/block-handle/block-handle-add/setup.ts +0 -33
- package/src/components/block-handle/block-handle-add/types.ts +0 -23
- package/src/components/block-handle/block-handle-draggable/element.gen.ts +0 -18
- package/src/components/block-handle/block-handle-draggable/setup.ts +0 -113
- package/src/components/block-handle/block-handle-draggable/types.ts +0 -23
- package/src/components/block-handle/block-handle-popover/element.gen.ts +0 -18
- package/src/components/block-handle/block-handle-popover/setup.ts +0 -68
- package/src/components/block-handle/block-handle-popover/types.ts +0 -81
- package/src/components/block-handle/index.gen.ts +0 -13
- package/src/components/drop-indicator/drop-indicator/element.gen.ts +0 -18
- package/src/components/drop-indicator/drop-indicator/setup.ts +0 -75
- package/src/components/drop-indicator/drop-indicator/types.ts +0 -31
- package/src/components/drop-indicator/index.gen.ts +0 -5
- package/src/components/inline-popover/index.gen.ts +0 -5
- package/src/components/inline-popover/inline-popover/element.gen.ts +0 -18
- package/src/components/inline-popover/inline-popover/setup.ts +0 -111
- package/src/components/inline-popover/inline-popover/types.ts +0 -112
- package/src/components/popover/index.gen.ts +0 -13
- package/src/components/popover/popover-content/element.gen.ts +0 -18
- package/src/components/popover/popover-content/setup.ts +0 -1
- package/src/components/popover/popover-content/types.ts +0 -6
- package/src/components/popover/popover-root/element.gen.ts +0 -18
- package/src/components/popover/popover-root/setup.ts +0 -1
- package/src/components/popover/popover-root/types.ts +0 -6
- package/src/components/popover/popover-trigger/element.gen.ts +0 -18
- package/src/components/popover/popover-trigger/setup.ts +0 -1
- package/src/components/popover/popover-trigger/types.ts +0 -6
- package/src/components/resizable/index.gen.ts +0 -9
- package/src/components/resizable/resizable-handle/element.gen.ts +0 -18
- package/src/components/resizable/resizable-handle/setup.ts +0 -106
- package/src/components/resizable/resizable-handle/types.ts +0 -29
- package/src/components/resizable/resizable-root/element.gen.ts +0 -18
- package/src/components/resizable/resizable-root/setup.ts +0 -84
- package/src/components/resizable/resizable-root/types.ts +0 -59
- package/src/components/table-handle/context.ts +0 -43
- package/src/components/table-handle/hooks/use-drop.ts +0 -85
- package/src/components/table-handle/index.gen.ts +0 -37
- package/src/components/table-handle/table-handle-column-root/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-column-root/setup.ts +0 -60
- package/src/components/table-handle/table-handle-column-root/types.ts +0 -73
- package/src/components/table-handle/table-handle-column-trigger/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-column-trigger/setup.ts +0 -64
- package/src/components/table-handle/table-handle-column-trigger/types.ts +0 -20
- package/src/components/table-handle/table-handle-drag-preview/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-drag-preview/setup.ts +0 -57
- package/src/components/table-handle/table-handle-drag-preview/types.ts +0 -14
- package/src/components/table-handle/table-handle-drag-preview/updater.ts +0 -90
- package/src/components/table-handle/table-handle-drop-indicator/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-drop-indicator/setup.ts +0 -52
- package/src/components/table-handle/table-handle-drop-indicator/types.ts +0 -15
- package/src/components/table-handle/table-handle-drop-indicator/updater.ts +0 -96
- package/src/components/table-handle/table-handle-popover-content/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-popover-content/setup.ts +0 -83
- package/src/components/table-handle/table-handle-popover-content/types.ts +0 -32
- package/src/components/table-handle/table-handle-popover-item/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-popover-item/setup.ts +0 -17
- package/src/components/table-handle/table-handle-popover-item/types.ts +0 -16
- package/src/components/table-handle/table-handle-root/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-root/setup.ts +0 -86
- package/src/components/table-handle/table-handle-root/types.ts +0 -23
- package/src/components/table-handle/table-handle-row-root/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-row-root/setup.ts +0 -70
- package/src/components/table-handle/table-handle-row-root/types.ts +0 -68
- package/src/components/table-handle/table-handle-row-trigger/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-row-trigger/setup.ts +0 -63
- package/src/components/table-handle/table-handle-row-trigger/types.ts +0 -23
- package/src/components/tooltip/index.gen.ts +0 -13
- package/src/components/tooltip/tooltip-content/element.gen.ts +0 -18
- package/src/components/tooltip/tooltip-content/setup.ts +0 -1
- package/src/components/tooltip/tooltip-content/types.ts +0 -6
- package/src/components/tooltip/tooltip-root/element.gen.ts +0 -18
- package/src/components/tooltip/tooltip-root/setup.ts +0 -1
- package/src/components/tooltip/tooltip-root/types.ts +0 -6
- package/src/components/tooltip/tooltip-trigger/element.gen.ts +0 -18
- package/src/components/tooltip/tooltip-trigger/setup.ts +0 -1
- package/src/components/tooltip/tooltip-trigger/types.ts +0 -6
- package/src/hooks/use-first-rendering.ts +0 -15
- package/src/utils/get-default-state.spec.ts +0 -42
- package/src/utils/get-default-state.ts +0 -18
- /package/src/components/autocomplete/{autocomplete-popover/helpers.spec.ts → helpers.spec.ts} +0 -0
- /package/src/components/autocomplete/{autocomplete-popover/helpers.ts → helpers.ts} +0 -0
- /package/src/components/inline-popover/{inline-popover/virtual-selection-element.ts → virtual-selection-element.ts} +0 -0
- /package/src/components/resizable/{resizable-handle/calc-resize.spec.ts → calc-resize.spec.ts} +0 -0
- /package/src/components/table-handle/{table-handle-drop-indicator/calc-drag-over.ts → calc-drag-over.ts} +0 -0
|
@@ -1,228 +1,334 @@
|
|
|
1
|
-
import { t as getStateWithDefaults } from "./get-default-state.js";
|
|
2
1
|
import { t as useEditorExtension } from "./use-editor-extension.js";
|
|
3
2
|
import { t as getSafeEditorView } from "./get-safe-editor-view.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { createContext, createSignal, defineCustomElement, defineProps, onMount, registerCustomElement, useEffect, useEventListener } from "@aria-ui/core";
|
|
4
|
+
import { SelectEvent, ValueChangeEvent, ValuesChangeEvent, defaultItemFilter, setupListboxEmpty, setupListboxItem, setupListboxRoot } from "@aria-ui/elements/listbox";
|
|
5
|
+
import { OpenChangeEvent, OverlayPopupPropsDeclaration, OverlayPositionerPropsDeclaration, createOverlayStore, setupOverlayPopup, setupOverlayPositioner } from "@aria-ui/elements/overlay";
|
|
7
6
|
import { defineDOMEventHandler, defineKeymap, withPriority } from "@prosekit/core";
|
|
8
|
-
import { overlayPositionerEvents, overlayPositionerProps, useOverlayPositionerState } from "@aria-ui/overlay/elements";
|
|
9
|
-
import { usePresence } from "@aria-ui/presence";
|
|
10
7
|
import { AutocompleteRule, defineAutocomplete } from "@prosekit/extensions/autocomplete";
|
|
11
|
-
//#region src/components/autocomplete/autocomplete-empty
|
|
8
|
+
//#region src/components/autocomplete/autocomplete-empty.ts
|
|
9
|
+
/** @internal */
|
|
10
|
+
const AutocompleteEmptyPropsDeclaration = /* @__PURE__ */ defineProps({});
|
|
12
11
|
/**
|
|
13
12
|
* @internal
|
|
14
13
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
//#endregion
|
|
23
|
-
//#region src/components/autocomplete/autocomplete-empty/element.gen.ts
|
|
24
|
-
const AutocompleteEmptyElementBase = defineCustomElement({
|
|
25
|
-
props: autocompleteEmptyProps,
|
|
26
|
-
events: autocompleteEmptyEvents,
|
|
27
|
-
setup: useAutocompleteEmpty
|
|
28
|
-
});
|
|
14
|
+
function setupAutocompleteEmpty(host, props) {
|
|
15
|
+
setupListboxEmpty(host, props);
|
|
16
|
+
}
|
|
17
|
+
const AutocompleteEmptyElementBase = defineCustomElement(setupAutocompleteEmpty, AutocompleteEmptyPropsDeclaration);
|
|
18
|
+
/**
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
29
21
|
var AutocompleteEmptyElement = class extends AutocompleteEmptyElementBase {};
|
|
30
|
-
|
|
22
|
+
/** @internal */
|
|
23
|
+
function registerAutocompleteEmptyElement() {
|
|
24
|
+
registerCustomElement("prosekit-autocomplete-empty", AutocompleteEmptyElement);
|
|
25
|
+
}
|
|
31
26
|
//#endregion
|
|
32
|
-
//#region src/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
//#region src/utils/prevent-default.ts
|
|
28
|
+
function preventDefault(event) {
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
}
|
|
36
31
|
//#endregion
|
|
37
|
-
//#region src/components/autocomplete/autocomplete-item
|
|
32
|
+
//#region src/components/autocomplete/autocomplete-item.ts
|
|
33
|
+
/** @internal */
|
|
34
|
+
const AutocompleteItemPropsDeclaration = /* @__PURE__ */ defineProps({
|
|
35
|
+
value: {
|
|
36
|
+
default: "",
|
|
37
|
+
attribute: "value",
|
|
38
|
+
type: "string"
|
|
39
|
+
},
|
|
40
|
+
disabled: {
|
|
41
|
+
default: false,
|
|
42
|
+
attribute: "disabled",
|
|
43
|
+
type: "boolean"
|
|
44
|
+
}
|
|
45
|
+
});
|
|
38
46
|
/**
|
|
39
47
|
* @internal
|
|
40
48
|
*/
|
|
41
|
-
function
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
});
|
|
46
|
-
const open = openContext.consume(element);
|
|
47
|
-
useEffect(element, () => {
|
|
48
|
-
if (!state.value.peek() && open.get()) state.value.set(element.textContent ?? "");
|
|
49
|
-
});
|
|
50
|
-
useEventListener(element, "pointerdown", (event) => {
|
|
51
|
-
event.preventDefault();
|
|
52
|
-
});
|
|
49
|
+
function setupAutocompleteItem(host, props) {
|
|
50
|
+
setupListboxItem(host, props);
|
|
51
|
+
useEventListener(host, "pointerdown", preventDefault);
|
|
52
|
+
useEventListener(host, "mousedown", preventDefault);
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
const AutocompleteItemElementBase = defineCustomElement(setupAutocompleteItem, AutocompleteItemPropsDeclaration);
|
|
55
|
+
/**
|
|
56
|
+
* @public
|
|
57
|
+
*/
|
|
58
|
+
var AutocompleteItemElement = class extends AutocompleteItemElementBase {};
|
|
58
59
|
/** @internal */
|
|
59
|
-
|
|
60
|
+
function registerAutocompleteItemElement() {
|
|
61
|
+
registerCustomElement("prosekit-autocomplete-item", AutocompleteItemElement);
|
|
62
|
+
}
|
|
60
63
|
//#endregion
|
|
61
|
-
//#region src/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
//#region src/utils/lazy-signal.ts
|
|
65
|
+
function createLazySignal(getRemote, fallback) {
|
|
66
|
+
return {
|
|
67
|
+
get: () => {
|
|
68
|
+
const remote = getRemote();
|
|
69
|
+
return remote ? remote.get() : fallback;
|
|
70
|
+
},
|
|
71
|
+
set: (value) => {
|
|
72
|
+
const remote = getRemote();
|
|
73
|
+
if (remote) remote.set(value);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
//#region src/utils/use-no-focus.ts
|
|
79
|
+
function useNoFocus(host) {
|
|
80
|
+
onMount(host, () => {
|
|
81
|
+
host.tabIndex = -1;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
69
84
|
//#endregion
|
|
70
|
-
//#region src/components/autocomplete/
|
|
85
|
+
//#region src/components/autocomplete/context.ts
|
|
71
86
|
/**
|
|
72
87
|
* @internal
|
|
73
88
|
*/
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
listboxState.query.set(query.get());
|
|
94
|
-
});
|
|
95
|
-
useEffect(element, () => {
|
|
96
|
-
if (!open.get()) {
|
|
97
|
-
listboxState.value.set("");
|
|
98
|
-
query.set("");
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
useEffect(element, () => {
|
|
102
|
-
if (!open.get()) listboxState.autoFocus.set(false);
|
|
103
|
-
else {
|
|
104
|
-
let canceled = false;
|
|
105
|
-
requestAnimationFrame(() => {
|
|
106
|
-
if (canceled) return;
|
|
107
|
-
listboxState.autoFocus.set(true);
|
|
108
|
-
});
|
|
109
|
-
return () => {
|
|
110
|
-
canceled = true;
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
useEffect(element, () => {
|
|
115
|
-
element.tabIndex = -1;
|
|
116
|
-
});
|
|
89
|
+
const autocompleteStoreContext = createContext("prosekit-autocomplete-store");
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/components/autocomplete/autocomplete-popup.ts
|
|
92
|
+
/** @internal */
|
|
93
|
+
const AutocompletePopupPropsDeclaration = /* @__PURE__ */ defineProps(OverlayPopupPropsDeclaration);
|
|
94
|
+
/** @internal */
|
|
95
|
+
function setupAutocompletePopup(host, _props) {
|
|
96
|
+
const getStore = autocompleteStoreContext.consume(host);
|
|
97
|
+
const getOverlayStore = () => getStore()?.overlayStore;
|
|
98
|
+
setupOverlayPopup(host, getOverlayStore);
|
|
99
|
+
const query = createLazySignal(() => getStore()?.query, " ");
|
|
100
|
+
const eventTarget = createLazySignal(() => getStore()?.eventTarget, null);
|
|
101
|
+
const filter = createLazySignal(() => getStore()?.filter, defaultItemFilter);
|
|
102
|
+
const getDisabled = () => !getOverlayStore()?.getIsOpen?.();
|
|
103
|
+
setupListboxRoot(host, createPopupListboxProps(filter, query, eventTarget, {
|
|
104
|
+
get: getDisabled,
|
|
105
|
+
set: () => {}
|
|
106
|
+
}));
|
|
107
|
+
useNoFocus(host);
|
|
117
108
|
}
|
|
118
|
-
function
|
|
119
|
-
const keydownHandlers = [];
|
|
120
|
-
useEffect(element, () => {
|
|
121
|
-
const editorValue = editor.get();
|
|
122
|
-
if (!editorValue) return;
|
|
123
|
-
const extension = defineDOMEventHandler("keydown", (view, event) => {
|
|
124
|
-
if (view.composing || event.defaultPrevented || !open.get()) return false;
|
|
125
|
-
keydownHandlers.forEach((handler) => handler(event));
|
|
126
|
-
return event.defaultPrevented;
|
|
127
|
-
});
|
|
128
|
-
return editorValue.use(withPriority(extension, 4));
|
|
129
|
-
});
|
|
109
|
+
function createPopupListboxProps(filter, query, eventTarget, disabled) {
|
|
130
110
|
return {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
111
|
+
value: createSignal(""),
|
|
112
|
+
values: createSignal([]),
|
|
113
|
+
multiple: createSignal(false),
|
|
114
|
+
disabled,
|
|
115
|
+
orientation: createSignal("vertical"),
|
|
116
|
+
loop: createSignal(false),
|
|
117
|
+
autoHighlight: createSignal(true),
|
|
118
|
+
query,
|
|
119
|
+
eventTarget,
|
|
120
|
+
filter
|
|
140
121
|
};
|
|
141
122
|
}
|
|
123
|
+
const AutocompletePopupElementBase = defineCustomElement(setupAutocompletePopup, AutocompletePopupPropsDeclaration);
|
|
124
|
+
/**
|
|
125
|
+
* @public
|
|
126
|
+
*/
|
|
127
|
+
var AutocompletePopupElement = class extends AutocompletePopupElementBase {};
|
|
128
|
+
/** @internal */
|
|
129
|
+
function registerAutocompletePopupElement() {
|
|
130
|
+
registerCustomElement("prosekit-autocomplete-popup", AutocompletePopupElement);
|
|
131
|
+
}
|
|
142
132
|
//#endregion
|
|
143
|
-
//#region src/components/autocomplete/autocomplete-
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
133
|
+
//#region src/components/autocomplete/autocomplete-positioner.ts
|
|
134
|
+
const defaultBoundary = typeof document !== "undefined" && document.querySelector("body") || "clippingAncestors";
|
|
135
|
+
/** @internal */
|
|
136
|
+
const AutocompletePositionerPropsDeclaration = /* @__PURE__ */ defineProps({
|
|
137
|
+
...OverlayPositionerPropsDeclaration,
|
|
138
|
+
placement: {
|
|
139
|
+
default: "bottom-start",
|
|
140
|
+
attribute: "placement",
|
|
141
|
+
type: "string"
|
|
142
|
+
},
|
|
143
|
+
offset: {
|
|
144
|
+
default: 4,
|
|
145
|
+
attribute: false,
|
|
146
|
+
type: "json"
|
|
147
|
+
},
|
|
148
|
+
inline: {
|
|
149
|
+
default: true,
|
|
150
|
+
attribute: "inline",
|
|
151
|
+
type: "boolean"
|
|
152
|
+
},
|
|
153
|
+
hoist: {
|
|
154
|
+
default: true,
|
|
155
|
+
attribute: "hoist",
|
|
156
|
+
type: "boolean"
|
|
157
|
+
},
|
|
158
|
+
fitViewport: {
|
|
159
|
+
default: true,
|
|
160
|
+
attribute: "fit-viewport",
|
|
161
|
+
type: "boolean"
|
|
162
|
+
},
|
|
163
|
+
boundary: {
|
|
164
|
+
default: defaultBoundary,
|
|
165
|
+
attribute: false,
|
|
166
|
+
type: "json"
|
|
167
|
+
},
|
|
168
|
+
overflowPadding: {
|
|
169
|
+
default: 8,
|
|
170
|
+
attribute: "overflow-padding",
|
|
171
|
+
type: "number"
|
|
172
|
+
}
|
|
155
173
|
});
|
|
156
|
-
|
|
157
|
-
|
|
174
|
+
/** @internal */
|
|
175
|
+
function setupAutocompletePositioner(host, props) {
|
|
176
|
+
const getStore = autocompleteStoreContext.consume(host);
|
|
177
|
+
const getOverlayStore = () => getStore()?.overlayStore;
|
|
178
|
+
setupOverlayPositioner(host, props, getOverlayStore);
|
|
179
|
+
}
|
|
180
|
+
const AutocompletePositionerElementBase = defineCustomElement(setupAutocompletePositioner, AutocompletePositionerPropsDeclaration);
|
|
181
|
+
/**
|
|
182
|
+
* @public
|
|
183
|
+
*/
|
|
184
|
+
var AutocompletePositionerElement = class extends AutocompletePositionerElementBase {};
|
|
185
|
+
/** @internal */
|
|
186
|
+
function registerAutocompletePositionerElement() {
|
|
187
|
+
registerCustomElement("prosekit-autocomplete-positioner", AutocompletePositionerElement);
|
|
188
|
+
}
|
|
158
189
|
//#endregion
|
|
159
|
-
//#region src/
|
|
160
|
-
function
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
190
|
+
//#region src/utils/event.ts
|
|
191
|
+
function cloneKeyboardEvent(source) {
|
|
192
|
+
return new KeyboardEvent(source.type, {
|
|
193
|
+
code: source.code,
|
|
194
|
+
key: source.key,
|
|
195
|
+
location: source.location,
|
|
196
|
+
repeat: source.repeat,
|
|
197
|
+
altKey: source.altKey,
|
|
198
|
+
ctrlKey: source.ctrlKey,
|
|
199
|
+
metaKey: source.metaKey,
|
|
200
|
+
shiftKey: source.shiftKey,
|
|
201
|
+
view: source.view,
|
|
202
|
+
bubbles: false,
|
|
203
|
+
cancelable: true
|
|
166
204
|
});
|
|
167
|
-
return firstRendering;
|
|
168
205
|
}
|
|
206
|
+
var KeyboardEventTarget = class extends EventTarget {
|
|
207
|
+
dispatchEvent(event) {
|
|
208
|
+
const newEvent = cloneKeyboardEvent(event);
|
|
209
|
+
const result = super.dispatchEvent(newEvent);
|
|
210
|
+
if (newEvent.defaultPrevented) event.preventDefault();
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
};
|
|
169
214
|
//#endregion
|
|
170
|
-
//#region src/components/autocomplete/
|
|
215
|
+
//#region src/components/autocomplete/helpers.ts
|
|
171
216
|
function defaultQueryBuilder(match) {
|
|
172
217
|
return match[0].toLowerCase().replaceAll(/[!"#$%&'()*+,-./:;<=>?@[\\\]^_`{|}~]/g, "").replaceAll(/\s\s+/g, " ").trim();
|
|
173
218
|
}
|
|
174
219
|
//#endregion
|
|
175
|
-
//#region src/components/autocomplete/autocomplete-
|
|
220
|
+
//#region src/components/autocomplete/autocomplete-root.ts
|
|
221
|
+
/** @internal */
|
|
222
|
+
const AutocompleteRootPropsDeclaration = /* @__PURE__ */ defineProps({
|
|
223
|
+
editor: {
|
|
224
|
+
default: null,
|
|
225
|
+
attribute: false,
|
|
226
|
+
type: "json"
|
|
227
|
+
},
|
|
228
|
+
regex: {
|
|
229
|
+
default: null,
|
|
230
|
+
attribute: false,
|
|
231
|
+
type: "json"
|
|
232
|
+
},
|
|
233
|
+
filter: {
|
|
234
|
+
default: defaultItemFilter,
|
|
235
|
+
attribute: false,
|
|
236
|
+
type: "json"
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
/**
|
|
240
|
+
* @public
|
|
241
|
+
*/
|
|
242
|
+
var QueryChangeEvent = class extends Event {
|
|
243
|
+
constructor(query) {
|
|
244
|
+
super("queryChange", { bubbles: true });
|
|
245
|
+
this.detail = query;
|
|
246
|
+
}
|
|
247
|
+
};
|
|
176
248
|
/**
|
|
177
249
|
* @internal
|
|
178
250
|
*/
|
|
179
|
-
function
|
|
180
|
-
const
|
|
181
|
-
const reference = createSignal(
|
|
251
|
+
function setupAutocompleteRoot(host, props) {
|
|
252
|
+
const getEditor = props.editor.get;
|
|
253
|
+
const reference = createSignal(void 0);
|
|
254
|
+
const open = createSignal(false);
|
|
182
255
|
const query = createSignal("");
|
|
183
|
-
const
|
|
184
|
-
const
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
onSubmitContext.provide(host, onSubmit);
|
|
188
|
-
openContext.provide(host, presence);
|
|
189
|
-
useEscapeKeydown(host, editor, createKeymapHandler(onDismiss, presence));
|
|
190
|
-
useAutocompleteExtension(host, editor, regex, reference, query, onDismiss, onSubmit);
|
|
191
|
-
useOverlayPositionerState(host, overlayState, { reference });
|
|
192
|
-
useAttribute(host, "data-state", () => presence.get() ? "open" : "closed");
|
|
193
|
-
usePresence(host, presence);
|
|
194
|
-
const firstRendering = useFirstRendering(host);
|
|
256
|
+
const keyboardTarget = new KeyboardEventTarget();
|
|
257
|
+
const eventTarget = createSignal(keyboardTarget);
|
|
258
|
+
const handlers = {};
|
|
259
|
+
const overlayStore = createOverlayStore(open.get, open.set, () => false, () => false, (event) => host.dispatchEvent(event));
|
|
195
260
|
useEffect(host, () => {
|
|
196
|
-
|
|
197
|
-
if (!firstRendering.peek()) emit("queryChange", queryValue);
|
|
261
|
+
overlayStore.setAnchorElement(reference.get());
|
|
198
262
|
});
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
263
|
+
const autocompleteStore = {
|
|
264
|
+
overlayStore,
|
|
265
|
+
query,
|
|
266
|
+
eventTarget,
|
|
267
|
+
filter: props.filter
|
|
268
|
+
};
|
|
269
|
+
autocompleteStoreContext.provide(host, autocompleteStore);
|
|
270
|
+
useEventListener(host, "valueChange", () => {
|
|
271
|
+
handlers.submit?.();
|
|
272
|
+
});
|
|
273
|
+
useKeyboardBridge(host, getEditor, open.get, keyboardTarget);
|
|
274
|
+
useEscapeKeydown(host, getEditor, () => {
|
|
275
|
+
if (!open.get() || !handlers.dismiss) return false;
|
|
276
|
+
handlers.dismiss();
|
|
277
|
+
return true;
|
|
204
278
|
});
|
|
279
|
+
const setQuery = (next) => {
|
|
280
|
+
if (query.get() === next) return;
|
|
281
|
+
query.set(next);
|
|
282
|
+
host.dispatchEvent(new QueryChangeEvent(next));
|
|
283
|
+
};
|
|
284
|
+
useAutocompleteExtension(host, getEditor, props.regex.get, {
|
|
285
|
+
reference,
|
|
286
|
+
handlers,
|
|
287
|
+
setQuery,
|
|
288
|
+
requestOpenChange: (open) => overlayStore.requestOpenChange(open)
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
const EVENT_KEYS = [
|
|
292
|
+
"ArrowDown",
|
|
293
|
+
"ArrowRight",
|
|
294
|
+
"ArrowUp",
|
|
295
|
+
"ArrowLeft",
|
|
296
|
+
"Home",
|
|
297
|
+
"End",
|
|
298
|
+
"Enter"
|
|
299
|
+
];
|
|
300
|
+
function useKeyboardBridge(host, getEditor, getOpen, target) {
|
|
301
|
+
useEditorExtension(host, getEditor, withPriority(defineDOMEventHandler("keydown", (view, event) => {
|
|
302
|
+
if (view.composing || event.defaultPrevented || !getOpen() || !EVENT_KEYS.includes(event.key)) return false;
|
|
303
|
+
target.dispatchEvent(event);
|
|
304
|
+
return event.defaultPrevented;
|
|
305
|
+
}), 4));
|
|
205
306
|
}
|
|
206
|
-
function useAutocompleteExtension(host,
|
|
307
|
+
function useAutocompleteExtension(host, getEditor, getRegex, deps) {
|
|
207
308
|
useEffect(host, () => {
|
|
208
|
-
const
|
|
209
|
-
const
|
|
210
|
-
if (!
|
|
211
|
-
const extension = defineAutocomplete(createAutocompleteRule(
|
|
212
|
-
return
|
|
309
|
+
const editor = getEditor();
|
|
310
|
+
const regex = getRegex();
|
|
311
|
+
if (!editor || !regex) return;
|
|
312
|
+
const extension = defineAutocomplete(createAutocompleteRule(editor, regex, deps));
|
|
313
|
+
return editor.use(extension);
|
|
213
314
|
});
|
|
214
315
|
}
|
|
215
|
-
function createAutocompleteRule(editor, regex,
|
|
316
|
+
function createAutocompleteRule(editor, regex, deps) {
|
|
317
|
+
const { reference, handlers, setQuery, requestOpenChange } = deps;
|
|
216
318
|
const handleEnter = (options) => {
|
|
217
319
|
const span = getSafeEditorView(editor)?.dom.querySelector(".prosekit-autocomplete-match");
|
|
218
320
|
if (span) reference.set(span);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
321
|
+
handlers.submit = options.deleteMatch;
|
|
322
|
+
handlers.dismiss = options.ignoreMatch;
|
|
323
|
+
setQuery(defaultQueryBuilder(options.match));
|
|
324
|
+
requestOpenChange(true);
|
|
222
325
|
};
|
|
223
326
|
const handleLeave = () => {
|
|
224
|
-
reference.set(
|
|
225
|
-
|
|
327
|
+
reference.set(void 0);
|
|
328
|
+
setQuery("");
|
|
329
|
+
handlers.submit = void 0;
|
|
330
|
+
handlers.dismiss = void 0;
|
|
331
|
+
requestOpenChange(false);
|
|
226
332
|
};
|
|
227
333
|
return new AutocompleteRule({
|
|
228
334
|
regex,
|
|
@@ -230,50 +336,19 @@ function createAutocompleteRule(editor, regex, reference, query, onDismiss, onSu
|
|
|
230
336
|
onLeave: handleLeave
|
|
231
337
|
});
|
|
232
338
|
}
|
|
233
|
-
function
|
|
234
|
-
|
|
235
|
-
if (!enabled.get()) return false;
|
|
236
|
-
const fn = handler.peek();
|
|
237
|
-
if (!fn) return false;
|
|
238
|
-
fn();
|
|
239
|
-
return true;
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
function useEscapeKeydown(host, editor, handler) {
|
|
243
|
-
useEditorExtension(host, editor, withPriority(defineKeymap({ Escape: handler }), 4));
|
|
339
|
+
function useEscapeKeydown(host, getEditor, handler) {
|
|
340
|
+
useEditorExtension(host, getEditor, withPriority(defineKeymap({ Escape: handler }), 4));
|
|
244
341
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
...overlayPositionerProps,
|
|
251
|
-
editor: { default: null },
|
|
252
|
-
regex: { default: null },
|
|
253
|
-
placement: { default: "bottom-start" },
|
|
254
|
-
offset: { default: 4 },
|
|
255
|
-
inline: { default: true },
|
|
256
|
-
hoist: { default: true },
|
|
257
|
-
fitViewport: { default: true },
|
|
258
|
-
boundary: { default: defaultBoundary },
|
|
259
|
-
overflowPadding: { default: 8 }
|
|
260
|
-
};
|
|
342
|
+
const AutocompleteRootElementBase = defineCustomElement(setupAutocompleteRoot, AutocompleteRootPropsDeclaration);
|
|
343
|
+
/**
|
|
344
|
+
* @public
|
|
345
|
+
*/
|
|
346
|
+
var AutocompleteRootElement = class extends AutocompleteRootElementBase {};
|
|
261
347
|
/** @internal */
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
queryChange: {}
|
|
266
|
-
};
|
|
267
|
-
//#endregion
|
|
268
|
-
//#region src/components/autocomplete/autocomplete-popover/element.gen.ts
|
|
269
|
-
const AutocompletePopoverElementBase = defineCustomElement({
|
|
270
|
-
props: autocompletePopoverProps,
|
|
271
|
-
events: autocompletePopoverEvents,
|
|
272
|
-
setup: useAutocompletePopover
|
|
273
|
-
});
|
|
274
|
-
var AutocompletePopoverElement = class extends AutocompletePopoverElementBase {};
|
|
275
|
-
registerCustomElement("prosekit-autocomplete-popover", AutocompletePopoverElement);
|
|
348
|
+
function registerAutocompleteRootElement() {
|
|
349
|
+
registerCustomElement("prosekit-autocomplete-root", AutocompleteRootElement);
|
|
350
|
+
}
|
|
276
351
|
//#endregion
|
|
277
|
-
export { AutocompleteEmptyElement, AutocompleteItemElement,
|
|
352
|
+
export { AutocompleteEmptyElement, AutocompleteEmptyPropsDeclaration, AutocompleteItemElement, AutocompleteItemPropsDeclaration, AutocompletePopupElement, AutocompletePopupPropsDeclaration, AutocompletePositionerElement, AutocompletePositionerPropsDeclaration, AutocompleteRootElement, AutocompleteRootPropsDeclaration, OpenChangeEvent, QueryChangeEvent, SelectEvent, ValueChangeEvent, ValuesChangeEvent, registerAutocompleteEmptyElement, registerAutocompleteItemElement, registerAutocompletePopupElement, registerAutocompletePositionerElement, registerAutocompleteRootElement, setupAutocompleteEmpty, setupAutocompleteItem, setupAutocompletePopup, setupAutocompletePositioner, setupAutocompleteRoot };
|
|
278
353
|
|
|
279
354
|
//# sourceMappingURL=prosekit-web-autocomplete.js.map
|