@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.
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  useEditorExtension
3
- } from "./chunk-VJEVDINM.js";
3
+ } from "./chunk-MZSYOTZT.js";
4
4
  import {
5
5
  defineCustomElement
6
- } from "./chunk-LCDA7GFP.js";
6
+ } from "./chunk-Y2CJYXR5.js";
7
7
 
8
8
  // src/components/block-handle/block-drag-handle/element.gen.ts
9
- import { ElementMixin } from "@aria-ui/core";
9
+ import { ElementBuilder } from "@aria-ui/core";
10
10
 
11
11
  // src/components/block-handle/block-drag-handle/props.ts
12
12
  var defaultBlockDragHandleProps = Object.freeze({
@@ -15,8 +15,6 @@ var defaultBlockDragHandleProps = Object.freeze({
15
15
 
16
16
  // src/components/block-handle/block-drag-handle/state.ts
17
17
  import {
18
- assignProps,
19
- mapSignals,
20
18
  useEffect,
21
19
  useEventListener
22
20
  } from "@aria-ui/core";
@@ -35,52 +33,35 @@ var blockPopoverContext = createContext(
35
33
  );
36
34
 
37
35
  // src/components/block-handle/block-drag-handle/state.ts
38
- function useBlockDragHandle(host, props) {
39
- const context = blockPopoverContext.consume(host);
40
- const state = mapSignals(assignProps(defaultBlockDragHandleProps, props));
36
+ function useBlockDragHandle(host, state) {
37
+ let context = blockPopoverContext.consume(host);
41
38
  useEffect(host, () => {
42
- host.draggable = true;
43
- });
44
- useEventListener(host, "pointerdown", () => {
39
+ host.draggable = !0;
40
+ }), useEventListener(host, "pointerdown", () => {
45
41
  var _a, _b;
46
- const { pos } = (_a = context.value) != null ? _a : {};
47
- const { view } = (_b = state.editor.value) != null ? _b : {};
48
- if (pos == null || view == null) {
49
- return;
50
- }
51
- view.dispatch(
42
+ let { pos } = (_a = context.get()) != null ? _a : {}, { view } = (_b = state.editor.get()) != null ? _b : {};
43
+ pos == null || view == null || (view.dispatch(
52
44
  view.state.tr.setSelection(NodeSelection.create(view.state.doc, pos))
53
- );
54
- requestAnimationFrame(() => {
45
+ ), requestAnimationFrame(() => {
55
46
  view.focus();
56
- });
57
- });
58
- useEventListener(host, "dragstart", (event) => {
47
+ }));
48
+ }), useEventListener(host, "dragstart", (event) => {
59
49
  var _a, _b;
60
- const { pos, element, node } = (_a = context.value) != null ? _a : {};
61
- const { view } = (_b = state.editor.value) != null ? _b : {};
62
- if (pos == null || !element || !node || !view || !event.dataTransfer) {
63
- return;
64
- }
65
- event.dataTransfer.clearData();
66
- event.dataTransfer.setData("text/html", element.outerHTML);
67
- event.dataTransfer.effectAllowed = "copyMove";
68
- event.dataTransfer.setDragImage(element, 0, 0);
69
- view.dragging = {
50
+ let { pos, element, node } = (_a = context.get()) != null ? _a : {}, { view } = (_b = state.editor.get()) != null ? _b : {};
51
+ pos == null || !element || !node || !view || !event.dataTransfer || (event.dataTransfer.clearData(), event.dataTransfer.setData("text/html", element.outerHTML), event.dataTransfer.effectAllowed = "copyMove", event.dataTransfer.setDragImage(element, 0, 0), view.dragging = {
70
52
  slice: new Slice(Fragment.from(node), 0, 0),
71
- move: true
72
- };
53
+ move: !0
54
+ });
73
55
  });
74
- return state;
75
56
  }
76
57
 
77
58
  // src/components/block-handle/block-drag-handle/element.gen.ts
78
- var BlockDragHandleElement = class extends ElementMixin(useBlockDragHandle, defaultBlockDragHandleProps) {
59
+ var BlockDragHandleElement = class extends ElementBuilder(useBlockDragHandle, defaultBlockDragHandleProps) {
79
60
  };
80
61
  defineCustomElement("prosekit-block-drag-handle", BlockDragHandleElement);
81
62
 
82
63
  // src/components/block-handle/block-popover/element.gen.ts
83
- import { ElementMixin as ElementMixin2 } from "@aria-ui/core";
64
+ import { ElementBuilder as ElementBuilder2 } from "@aria-ui/core";
84
65
 
85
66
  // src/components/block-handle/block-popover/props.ts
86
67
  import { defaultOverlayPositionerProps } from "@aria-ui/overlay";
@@ -93,10 +74,8 @@ var defaultBlockPopoverProps = Object.freeze({
93
74
 
94
75
  // src/components/block-handle/block-popover/state.ts
95
76
  import {
96
- assignProps as assignProps2,
97
77
  createComputed,
98
78
  createSignal,
99
- mapSignals as mapSignals2,
100
79
  useAttribute,
101
80
  useEffect as useEffect2
102
81
  } from "@aria-ui/core";
@@ -110,20 +89,16 @@ import { defineDOMEventHandler, union } from "@prosekit/core";
110
89
  function throttle(callback, wait) {
111
90
  let lastTime = 0;
112
91
  return (...args) => {
113
- const now = Date.now();
114
- if (now - lastTime >= wait) {
115
- callback(...args);
116
- lastTime = now;
117
- }
92
+ let now = Date.now();
93
+ now - lastTime >= wait && (callback(...args), lastTime = now);
118
94
  };
119
95
  }
120
96
 
121
97
  // src/components/block-handle/block-popover/pointer-move.ts
122
98
  function defineElementHoverHandler(handler) {
123
- const handlePointerEvent = (view, event) => {
99
+ let handlePointerEvent = (view, event) => {
124
100
  var _a;
125
- const rect = view.dom.getBoundingClientRect();
126
- const pos = (_a = view.posAtCoords({
101
+ let rect = view.dom.getBoundingClientRect(), pos = (_a = view.posAtCoords({
127
102
  top: event.clientY,
128
103
  // Use the center of the editor
129
104
  left: rect.left + rect.width / 2
@@ -132,28 +107,19 @@ function defineElementHoverHandler(handler) {
132
107
  handler(null, null, null, null);
133
108
  return;
134
109
  }
135
- const $pos = view.state.doc.resolve(pos);
136
- const node = view.state.doc.nodeAt(pos);
137
- const element = view.nodeDOM(pos);
110
+ let $pos = view.state.doc.resolve(pos), node = view.state.doc.nodeAt(pos), element = view.nodeDOM(pos);
138
111
  if ($pos.depth >= 1 && $pos.index($pos.depth) === 0) {
139
- const ancestorPos = $pos.before($pos.depth);
140
- const node2 = view.state.doc.nodeAt(ancestorPos);
141
- const element2 = view.nodeDOM(ancestorPos);
112
+ let ancestorPos = $pos.before($pos.depth), node2 = view.state.doc.nodeAt(ancestorPos), element2 = view.nodeDOM(ancestorPos);
142
113
  if (!element2) {
143
114
  handler(null, null, null, null);
144
115
  return;
145
116
  }
146
- const reference = {
117
+ handler({
147
118
  contextElement: element2,
148
119
  // Get the bounding client rect of the parent node, including its
149
120
  // margins.
150
121
  getBoundingClientRect: () => {
151
- const rect2 = element2.getBoundingClientRect();
152
- const style = window.getComputedStyle(element2);
153
- const marginTop = Number.parseInt(style.marginTop, 10) || 0;
154
- const marginRight = Number.parseInt(style.marginRight, 10) || 0;
155
- const marginBottom = Number.parseInt(style.marginBottom, 10) || 0;
156
- const marginLeft = Number.parseInt(style.marginLeft, 10) || 0;
122
+ let rect2 = element2.getBoundingClientRect(), style = window.getComputedStyle(element2), marginTop = Number.parseInt(style.marginTop, 10) || 0, marginRight = Number.parseInt(style.marginRight, 10) || 0, marginBottom = Number.parseInt(style.marginBottom, 10) || 0, marginLeft = Number.parseInt(style.marginLeft, 10) || 0;
157
123
  return {
158
124
  top: rect2.top - marginTop,
159
125
  right: rect2.right + marginRight,
@@ -165,8 +131,7 @@ function defineElementHoverHandler(handler) {
165
131
  y: rect2.y - marginTop
166
132
  };
167
133
  }
168
- };
169
- handler(reference, element2, node2, ancestorPos);
134
+ }, element2, node2, ancestorPos);
170
135
  return;
171
136
  }
172
137
  handler(element, element, node, pos);
@@ -179,48 +144,35 @@ function defineElementHoverHandler(handler) {
179
144
  }
180
145
 
181
146
  // src/components/block-handle/block-popover/state.ts
182
- function useBlockPopover(host, props) {
183
- const state = mapSignals2(assignProps2(defaultBlockPopoverProps, props));
184
- const { editor, ...overlayState } = state;
185
- const reference = createSignal(null);
147
+ function useBlockPopover(host, state) {
148
+ let { editor, ...overlayState } = state, reference = createSignal(null);
186
149
  useOverlayPositionerState(host, overlayState, { reference });
187
- const context = createSignal({
150
+ let context = createSignal({
188
151
  pos: null,
189
152
  node: null,
190
153
  element: null
191
154
  });
192
155
  blockPopoverContext.provide(host, context);
193
- const open = createSignal(false);
156
+ let open = createSignal(!1);
194
157
  useEffect2(host, () => {
195
- open.value = !!context.value.element;
158
+ open.set(!!context.get().element);
159
+ }), useHoverExtension(host, editor, (referenceValue, element, node, pos) => {
160
+ reference.set(referenceValue), context.set({ element, node, pos });
196
161
  });
197
- useHoverExtension(host, editor, (referenceValue, element, node, pos) => {
198
- reference.value = referenceValue;
199
- context.value = { element, node, pos };
200
- });
201
- const presence = createComputed(() => !!reference.value);
202
- useAttribute(host, "data-state", () => presence.value ? "open" : "closed");
203
- usePresence(host, presence);
204
- return state;
162
+ let presence = createComputed(() => !!reference.get());
163
+ useAttribute(host, "data-state", () => presence.get() ? "open" : "closed"), usePresence(host, presence);
205
164
  }
206
165
  function useHoverExtension(host, editor, handler) {
207
- let prevElement = null;
208
- let prevPos = null;
209
- const extension = defineElementHoverHandler(
166
+ let prevElement = null, prevPos = null, extension = defineElementHoverHandler(
210
167
  (reference, element, node, pos) => {
211
- if (prevElement === element && prevPos === pos) {
212
- return;
213
- }
214
- prevElement = element;
215
- prevPos = pos;
216
- handler(reference, element, node, pos);
168
+ prevElement === element && prevPos === pos || (prevElement = element, prevPos = pos, handler(reference, element, node, pos));
217
169
  }
218
170
  );
219
171
  useEditorExtension(host, editor, extension);
220
172
  }
221
173
 
222
174
  // src/components/block-handle/block-popover/element.gen.ts
223
- var BlockPopoverElement = class extends ElementMixin2(useBlockPopover, defaultBlockPopoverProps) {
175
+ var BlockPopoverElement = class extends ElementBuilder2(useBlockPopover, defaultBlockPopoverProps) {
224
176
  };
225
177
  defineCustomElement("prosekit-block-popover", BlockPopoverElement);
226
178
  export {
@@ -1,39 +1,38 @@
1
1
  import {
2
2
  useEditorExtension
3
- } from "./chunk-VJEVDINM.js";
3
+ } from "./chunk-MZSYOTZT.js";
4
4
  import {
5
5
  defineCustomElement
6
- } from "./chunk-LCDA7GFP.js";
6
+ } from "./chunk-Y2CJYXR5.js";
7
7
 
8
8
  // src/components/inline-popover/inline-popover/element.gen.ts
9
- import { ElementMixin } from "@aria-ui/core";
9
+ import { ElementBuilder } from "@aria-ui/core";
10
10
 
11
11
  // src/components/inline-popover/inline-popover/props.ts
12
12
  import { defaultOverlayPositionerProps } from "@aria-ui/overlay";
13
13
  var defaultInlinePopoverProps = Object.freeze({
14
14
  ...defaultOverlayPositionerProps,
15
15
  editor: null,
16
- open: true,
16
+ defaultOpen: !0,
17
+ open: !1,
17
18
  onOpenChange: null,
18
19
  placement: "top",
19
20
  offset: 12,
20
- shift: true,
21
- flip: true,
22
- hide: true,
23
- overlap: true,
24
- inline: true,
21
+ shift: !0,
22
+ flip: !0,
23
+ hide: !0,
24
+ overlap: !0,
25
+ inline: !0,
25
26
  overflowPadding: 8,
26
27
  // Don't need boundary when hoist is true.
27
- hoist: true,
28
+ hoist: !0,
28
29
  boundary: []
29
30
  });
30
31
 
31
32
  // src/components/inline-popover/inline-popover/state.ts
32
33
  import {
33
- assignProps,
34
34
  createComputed,
35
35
  createSignal,
36
- mapSignals,
37
36
  useAttribute,
38
37
  useEffect
39
38
  } from "@aria-ui/core";
@@ -45,14 +44,14 @@ import {
45
44
  defineFocusChangeHandler
46
45
  } from "@prosekit/core";
47
46
  function useEditorFocusChangeEvent(host, editor, handler) {
48
- const extension = defineFocusChangeHandler(handler);
47
+ let extension = defineFocusChangeHandler(handler);
49
48
  useEditorExtension(host, editor, extension);
50
49
  }
51
50
 
52
51
  // src/hooks/use-editor-update-event.ts
53
52
  import { defineUpdateHandler } from "@prosekit/core";
54
53
  function useEditorUpdateEvent(host, editor, handler) {
55
- const extension = defineUpdateHandler(handler);
54
+ let extension = defineUpdateHandler(handler);
56
55
  useEditorExtension(host, editor, extension);
57
56
  }
58
57
 
@@ -61,52 +60,44 @@ import { isTextSelection } from "@prosekit/core";
61
60
 
62
61
  // src/utils/is-in-code-block.ts
63
62
  function isInCodeBlock(selection) {
64
- const type = selection.$from.parent.type;
63
+ let type = selection.$from.parent.type;
65
64
  return type.spec.code && type.isBlock;
66
65
  }
67
66
 
68
67
  // src/components/inline-popover/inline-popover/virtual-selection-element.ts
69
68
  function getVirtualSelectionElement(view) {
70
- if (typeof window === "undefined" || view.isDestroyed) {
69
+ if (typeof window == "undefined" || view.isDestroyed)
71
70
  return null;
72
- }
73
- const selection = view.state.selection;
71
+ let selection = view.state.selection;
74
72
  if (!selection.empty && !isInCodeBlock(selection) && isTextSelection(selection)) {
75
- const decoration = getInlineDecoration(view);
76
- if (decoration) {
73
+ let decoration = getInlineDecoration(view);
74
+ if (decoration)
77
75
  return decoration;
78
- }
79
- const range = getDomRange();
80
- if (range) {
76
+ let range = getDomRange();
77
+ if (range)
81
78
  return {
82
79
  contextElement: view.dom,
83
80
  getBoundingClientRect: () => range.getBoundingClientRect(),
84
81
  getClientRects: () => range.getClientRects()
85
82
  };
86
- }
87
83
  }
88
84
  return null;
89
85
  }
90
86
  function getDomRange() {
91
- const selection = window.getSelection();
92
- if (!selection || selection.isCollapsed) {
93
- return;
94
- }
95
- const range = typeof selection.rangeCount === "number" && selection.rangeCount > 0 && selection.getRangeAt(0);
96
- if (!range) {
87
+ let selection = window.getSelection();
88
+ if (!selection || selection.isCollapsed)
97
89
  return;
98
- }
99
- return range;
90
+ let range = typeof selection.rangeCount == "number" && selection.rangeCount > 0 && selection.getRangeAt(0);
91
+ if (range)
92
+ return range;
100
93
  }
101
94
  function getInlineDecoration(view) {
102
- const match = view.dom.querySelectorAll(".prosekit-virtual-selection");
103
- if (match.length === 0) {
95
+ let match = view.dom.querySelectorAll(".prosekit-virtual-selection");
96
+ if (match.length === 0)
104
97
  return;
105
- }
106
- if (match.length === 1) {
98
+ if (match.length === 1)
107
99
  return match[0];
108
- }
109
- const items = Array.from(match);
100
+ let items = Array.from(match);
110
101
  return {
111
102
  contextElement: items[0],
112
103
  getBoundingClientRect: () => items[0].getBoundingClientRect(),
@@ -115,42 +106,27 @@ function getInlineDecoration(view) {
115
106
  }
116
107
 
117
108
  // src/components/inline-popover/inline-popover/state.ts
118
- function useInlinePopover(host, props) {
119
- const state = mapSignals(assignProps(defaultInlinePopoverProps, props));
120
- useInlinePopoverState(host, state);
121
- return state;
122
- }
123
- function useInlinePopoverState(host, state) {
124
- const { editor, open, onOpenChange, ...overlayState } = state;
125
- const reference = useInlinePopoverReference(host, editor);
126
- useOverlayPositionerState(host, overlayState, { reference });
127
- const presence = createComputed(() => !!reference.value && open.value);
128
- useAttribute(host, "data-state", () => presence.value ? "open" : "closed");
129
- usePresence(host, presence);
109
+ function useInlinePopover(host, state) {
110
+ let { editor, defaultOpen, open, onOpenChange, ...overlayState } = state, reference = useInlinePopoverReference(host, editor), hasReference = createComputed(() => !!reference.get());
130
111
  useEffect(host, () => {
131
- var _a;
132
- const presenceValue = presence.value;
133
- (_a = onOpenChange.peek()) == null ? void 0 : _a(presenceValue);
134
- });
112
+ let hasReferenceValue = hasReference.get(), onOpenChangeValue = onOpenChange.peek(), defaultOpenValue = defaultOpen.peek(), openValue = open.peek();
113
+ onOpenChangeValue && (defaultOpenValue || openValue) && onOpenChangeValue(hasReferenceValue);
114
+ }), useEffect(host, () => {
115
+ let hasReferenceValue = hasReference.get(), defaultOpenValue = defaultOpen.peek();
116
+ hasReferenceValue && defaultOpenValue ? open.set(!0) : hasReferenceValue || open.set(!1);
117
+ }), useOverlayPositionerState(host, overlayState, { reference }), useAttribute(host, "data-state", () => open.get() ? "open" : "closed"), usePresence(host, open);
135
118
  }
136
119
  function useInlinePopoverReference(host, editor) {
137
- const reference = createSignal(null);
138
- let editorFocused = false;
139
- useEditorFocusChangeEvent(host, editor, (focus) => {
120
+ let reference = createSignal(null), editorFocused = !1;
121
+ return useEditorFocusChangeEvent(host, editor, (focus) => {
140
122
  editorFocused = focus;
141
- });
142
- useEditorUpdateEvent(host, editor, (view) => {
143
- const isPopoverFocused = !editorFocused && host.contains(host.ownerDocument.activeElement);
144
- if (isPopoverFocused) {
145
- return;
146
- }
147
- reference.value = getVirtualSelectionElement(view);
148
- });
149
- return reference;
123
+ }), useEditorUpdateEvent(host, editor, (view) => {
124
+ !editorFocused && host.contains(host.ownerDocument.activeElement) || reference.set(getVirtualSelectionElement(view));
125
+ }), reference;
150
126
  }
151
127
 
152
128
  // src/components/inline-popover/inline-popover/element.gen.ts
153
- var InlinePopoverElement = class extends ElementMixin(useInlinePopover, defaultInlinePopoverProps) {
129
+ var InlinePopoverElement = class extends ElementBuilder(useInlinePopover, defaultInlinePopoverProps) {
154
130
  };
155
131
  defineCustomElement("prosekit-inline-popover", InlinePopoverElement);
156
132
  export {
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  defineCustomElement
3
- } from "./chunk-LCDA7GFP.js";
3
+ } from "./chunk-Y2CJYXR5.js";
4
4
 
5
5
  // src/components/popover/popover-content/element.gen.ts
6
- import { ElementMixin } from "@aria-ui/core";
6
+ import { ElementBuilder } from "@aria-ui/core";
7
7
 
8
8
  // src/components/popover/popover-content/props.ts
9
9
  import {
@@ -14,12 +14,12 @@ import {
14
14
  import { usePopoverContent } from "@aria-ui/popover";
15
15
 
16
16
  // src/components/popover/popover-content/element.gen.ts
17
- var PopoverContentElement = class extends ElementMixin(usePopoverContent, defaultPopoverContentProps) {
17
+ var PopoverContentElement = class extends ElementBuilder(usePopoverContent, defaultPopoverContentProps) {
18
18
  };
19
19
  defineCustomElement("prosekit-popover-content", PopoverContentElement);
20
20
 
21
21
  // src/components/popover/popover-root/element.gen.ts
22
- import { ElementMixin as ElementMixin2 } from "@aria-ui/core";
22
+ import { ElementBuilder as ElementBuilder2 } from "@aria-ui/core";
23
23
 
24
24
  // src/components/popover/popover-root/props.ts
25
25
  import {
@@ -30,12 +30,12 @@ import {
30
30
  import { usePopoverRoot } from "@aria-ui/popover";
31
31
 
32
32
  // src/components/popover/popover-root/element.gen.ts
33
- var PopoverRootElement = class extends ElementMixin2(usePopoverRoot, defaultPopoverRootProps) {
33
+ var PopoverRootElement = class extends ElementBuilder2(usePopoverRoot, defaultPopoverRootProps) {
34
34
  };
35
35
  defineCustomElement("prosekit-popover-root", PopoverRootElement);
36
36
 
37
37
  // src/components/popover/popover-trigger/element.gen.ts
38
- import { ElementMixin as ElementMixin3 } from "@aria-ui/core";
38
+ import { ElementBuilder as ElementBuilder3 } from "@aria-ui/core";
39
39
 
40
40
  // src/components/popover/popover-trigger/props.ts
41
41
  import {
@@ -46,7 +46,7 @@ import {
46
46
  import { usePopoverTrigger } from "@aria-ui/popover";
47
47
 
48
48
  // src/components/popover/popover-trigger/element.gen.ts
49
- var PopoverTriggerElement = class extends ElementMixin3(usePopoverTrigger, defaultPopoverTriggerProps) {
49
+ var PopoverTriggerElement = class extends ElementBuilder3(usePopoverTrigger, defaultPopoverTriggerProps) {
50
50
  };
51
51
  defineCustomElement("prosekit-popover-trigger", PopoverTriggerElement);
52
52
  export {