@prosekit/web 0.1.10 → 0.2.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.
@@ -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
- open: true;
324
+ defaultOpen: true;
325
+ open: false;
324
326
  onOpenChange: null;
325
327
  placement: "top";
326
328
  offset: 12;
@@ -406,11 +408,9 @@ export { defaultTooltipTriggerProps as defaultTooltipTriggerProps_alias_1 }
406
408
  export declare function defineCustomElement(name: string, constructor: CustomElementConstructor, options?: ElementDefinitionOptions): void;
407
409
 
408
410
  export declare function defineElementHoverHandler(handler: ElementHoverHandler): Extension< {
409
- Nodes: any;
410
- Marks: any;
411
- Commands: {
412
- [x: string]: any;
413
- };
411
+ Nodes: never;
412
+ Marks: never;
413
+ Commands: never;
414
414
  }>;
415
415
 
416
416
  export declare type ElementHoverHandler = (reference: VirtualElement | null, element: HTMLElement | null, node: ProseMirrorNode | null, pos: number | null) => void;
@@ -434,16 +434,27 @@ declare interface InlinePopoverProps extends Omit<OverlayPositionerProps, 'place
434
434
  * @default null
435
435
  */
436
436
  editor: Editor | null;
437
+ /**
438
+ * Whether the popover is open by default when some inline content is
439
+ * selected.
440
+ *
441
+ * When `defaultOpen` is true, the popover will open or close based on the
442
+ * inline selection. When `defaultOpen` is false, the popover will never be
443
+ * opened unless the `open` prop is true.
444
+ *
445
+ * @default true
446
+ */
447
+ defaultOpen: boolean;
437
448
  /**
438
449
  * Whether the popover is open.
439
450
  *
440
451
  * Notice that the popover will be always hidden if the inline selection is empty.
441
452
  *
442
- * @default `true`
453
+ * @default false
443
454
  */
444
455
  open: boolean;
445
456
  /**
446
- * A callback that is called when the popover's open state changes.
457
+ * Event handler called when the open state changed caused by user interaction (i.e. select or unselect inline content).
447
458
  *
448
459
  * @default null
449
460
  */
@@ -486,6 +497,8 @@ export declare function isFinitePositiveNumber(value: unknown): value is number;
486
497
 
487
498
  export declare function isInCodeBlock(selection: Selection_2): boolean | undefined;
488
499
 
500
+ export declare function omit<T extends Record<string, unknown>, K extends keyof T>(object: T, keys: K[]): Omit<T, K>;
501
+
489
502
  /**
490
503
  * @internal
491
504
  */
@@ -656,17 +669,17 @@ declare const TooltipTriggerElement_base: {
656
669
  export { TooltipTriggerProps }
657
670
  export { TooltipTriggerProps as TooltipTriggerProps_alias_1 }
658
671
 
659
- export declare function useAutocompleteEmpty(element: ConnectableElement, _props?: Partial<AutocompleteEmptyProps>): SignalState<AutocompleteEmptyProps>;
672
+ export declare function useAutocompleteEmpty(element: ConnectableElement): void;
660
673
 
661
- export declare function useAutocompleteItem(element: ConnectableElement, props?: Partial<AutocompleteItemProps>): SignalState<AutocompleteItemProps>;
674
+ export declare function useAutocompleteItem(element: ConnectableElement, state: SignalState<AutocompleteItemProps>): void;
662
675
 
663
- export declare function useAutocompleteList(element: ConnectableElement, props?: Partial<AutocompleteListProps>): SignalState<AutocompleteListProps>;
676
+ export declare function useAutocompleteList(element: ConnectableElement, state: SignalState<AutocompleteListProps>): void;
664
677
 
665
- export declare function useAutocompletePopover(host: ConnectableElement, props?: Partial<AutocompletePopoverProps>): SignalState<Readonly<AutocompletePopoverProps>>;
678
+ export declare function useAutocompletePopover(host: ConnectableElement, state: SignalState<AutocompletePopoverProps>): void;
666
679
 
667
- export declare function useBlockDragHandle(host: ConnectableElement, props?: Partial<BlockDragHandleProps>): SignalState<BlockDragHandleProps>;
680
+ export declare function useBlockDragHandle(host: ConnectableElement, state: SignalState<BlockDragHandleProps>): void;
668
681
 
669
- export declare function useBlockPopover(host: ConnectableElement, props?: Partial<BlockPopoverProps>): SignalState<BlockPopoverProps>;
682
+ export declare function useBlockPopover(host: ConnectableElement, state: SignalState<BlockPopoverProps>): void;
670
683
 
671
684
  export declare function useEditorExtension(host: ConnectableElement, editor: ReadonlySignal<Editor | null>, extension: Extension): void;
672
685
 
@@ -682,7 +695,7 @@ export declare function useEditorUpdateEvent(host: ConnectableElement, editor: R
682
695
 
683
696
  export declare function useFirstRendering(host: ConnectableElement): ReadonlySignal<boolean>;
684
697
 
685
- export declare function useInlinePopover(host: ConnectableElement, props?: Partial<InlinePopoverProps>): SignalState<Readonly<InlinePopoverProps>>;
698
+ export declare function useInlinePopover(host: ConnectableElement, state: SignalState<InlinePopoverProps>): void;
686
699
 
687
700
  export { usePopoverContent }
688
701
 
@@ -690,11 +703,11 @@ export { usePopoverRoot }
690
703
 
691
704
  export { usePopoverTrigger }
692
705
 
693
- export declare function useResizableHandle(host: ConnectableElement, props?: Partial<ResizableHandleProps>): SignalState<Readonly<ResizableHandleProps>>;
706
+ export declare function useResizableHandle(host: ConnectableElement, state: SignalState<ResizableHandleProps>): void;
694
707
 
695
- export declare function useResizableRoot(host: ConnectableElement, props?: Partial<ResizableRootProps>): SignalState<Readonly<ResizableRootProps>>;
708
+ export declare function useResizableRoot(host: ConnectableElement, state: SignalState<ResizableRootProps>): void;
696
709
 
697
- export declare function useTooltipContent(element: ConnectableElement, props?: Partial<TooltipContentProps>): SignalState<TooltipContentProps>;
710
+ export { useTooltipContent }
698
711
 
699
712
  export { useTooltipRoot }
700
713
 
@@ -5,7 +5,7 @@ import {
5
5
  function useEditorExtension(host, editor, extension) {
6
6
  useEffect(host, () => {
7
7
  var _a;
8
- return (_a = editor.value) == null ? void 0 : _a.use(extension);
8
+ return (_a = editor.get()) == null ? void 0 : _a.use(extension);
9
9
  });
10
10
  }
11
11
 
@@ -1,29 +1,29 @@
1
1
  import {
2
2
  useEditorExtension
3
- } from "./chunk-VJEVDINM.js";
3
+ } from "./chunk-MZSYOTZT.js";
4
4
  import {
5
5
  defineCustomElement
6
6
  } from "./chunk-Y2CJYXR5.js";
7
7
 
8
8
  // src/components/autocomplete/autocomplete-empty/element.gen.ts
9
- import { ElementMixin } from "@aria-ui/core";
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, _props) {
17
- return useListboxEmpty(element), {};
16
+ function useAutocompleteEmpty(element) {
17
+ useListboxEmpty(element);
18
18
  }
19
19
 
20
20
  // src/components/autocomplete/autocomplete-empty/element.gen.ts
21
- var AutocompleteEmptyElement = class extends ElementMixin(useAutocompleteEmpty, defaultAutocompleteEmptyProps) {
21
+ var AutocompleteEmptyElement = class extends ElementBuilder(useAutocompleteEmpty, defaultAutocompleteEmptyProps) {
22
22
  };
23
23
  defineCustomElement("prosekit-autocomplete-empty", AutocompleteEmptyElement);
24
24
 
25
25
  // src/components/autocomplete/autocomplete-item/element.gen.ts
26
- import { ElementMixin as ElementMixin2 } from "@aria-ui/core";
26
+ import { ElementBuilder as ElementBuilder2 } from "@aria-ui/core";
27
27
 
28
28
  // src/components/autocomplete/autocomplete-item/props.ts
29
29
  var defaultAutocompleteItemProps = {
@@ -51,21 +51,22 @@ var queryContext = createContext(
51
51
  );
52
52
 
53
53
  // src/components/autocomplete/autocomplete-item/state.ts
54
- function useAutocompleteItem(element, props) {
55
- let { onSelect, value } = useListboxItem(element, props), open = openContext.consume(element);
56
- return useEffect(element, () => {
54
+ function useAutocompleteItem(element, state) {
55
+ useListboxItem(element, state);
56
+ let open = openContext.consume(element);
57
+ useEffect(element, () => {
57
58
  var _a;
58
- !value.peek() && open.value && (value.value = (_a = element.textContent) != null ? _a : "");
59
- }), { onSelect, value };
59
+ !state.value.peek() && open.get() && state.value.set((_a = element.textContent) != null ? _a : "");
60
+ });
60
61
  }
61
62
 
62
63
  // src/components/autocomplete/autocomplete-item/element.gen.ts
63
- var AutocompleteItemElement = class extends ElementMixin2(useAutocompleteItem, defaultAutocompleteItemProps) {
64
+ var AutocompleteItemElement = class extends ElementBuilder2(useAutocompleteItem, defaultAutocompleteItemProps) {
64
65
  };
65
66
  defineCustomElement("prosekit-autocomplete-item", AutocompleteItemElement);
66
67
 
67
68
  // src/components/autocomplete/autocomplete-list/element.gen.ts
68
- import { ElementMixin as ElementMixin3 } from "@aria-ui/core";
69
+ import { ElementBuilder as ElementBuilder3 } from "@aria-ui/core";
69
70
 
70
71
  // src/components/autocomplete/autocomplete-list/props.ts
71
72
  import { defaultListboxProps } from "@aria-ui/listbox";
@@ -76,76 +77,86 @@ var defaultFilter = defaultListboxProps.filter, defaultAutocompleteListProps = {
76
77
 
77
78
  // src/components/autocomplete/autocomplete-list/state.ts
78
79
  import {
79
- assignProps,
80
80
  createSignal,
81
+ mapSignals,
81
82
  useEffect as useEffect2
82
83
  } from "@aria-ui/core";
83
- import { useListbox } from "@aria-ui/listbox";
84
+ import {
85
+ defaultListboxProps as defaultListboxProps2,
86
+ useListbox
87
+ } from "@aria-ui/listbox";
84
88
  import {
85
89
  Priority,
86
90
  defineDOMEventHandler,
87
91
  withPriority
88
92
  } from "@prosekit/core";
89
- function useAutocompleteList(element, props) {
90
- let fullProps = assignProps(defaultAutocompleteListProps, props), editor = createSignal(fullProps.editor), open = openContext.consume(element), query = queryContext.consume(element), onSubmit = onSubmitContext.consume(element), onKeydownHandlerAdd = useKeyboardHandler(element, open, editor), onValueChange = (value) => {
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) => {
91
104
  var _a;
92
105
  value && ((_a = onSubmit.peek()) == null || _a());
93
- }, {
94
- query: listboxQuery,
95
- value: listboxValue,
96
- filter,
97
- autoFocus
98
- } = useListbox(element, {
99
- onKeydownHandlerAdd,
100
- onValueChange,
101
- filter: fullProps.filter
102
- });
103
- return useEffect2(element, () => {
104
- listboxQuery.value = query.value;
106
+ }, listboxState = {
107
+ ...mapSignals({
108
+ ...omit(defaultListboxProps2, ["filter"]),
109
+ onKeydownHandlerAdd,
110
+ onValueChange
111
+ }),
112
+ filter: state.filter
113
+ };
114
+ useListbox(element, listboxState), useEffect2(element, () => {
115
+ listboxState.query.set(query.get());
105
116
  }), useEffect2(element, () => {
106
- open.value || (listboxValue.value = "", query.value = "");
117
+ open.get() || (listboxState.value.set(""), query.set(""));
107
118
  }), useEffect2(element, () => {
108
- if (!open.value)
109
- autoFocus.value = !1;
119
+ if (!open.get())
120
+ listboxState.autoFocus.set(!1);
110
121
  else {
111
122
  let canceled = !1;
112
123
  return requestAnimationFrame(() => {
113
- canceled || (autoFocus.value = !0);
124
+ canceled || listboxState.autoFocus.set(!0);
114
125
  }), () => {
115
126
  canceled = !0;
116
127
  };
117
128
  }
118
129
  }), useEffect2(element, () => {
119
130
  element.tabIndex = -1;
120
- }), { editor, filter };
131
+ });
121
132
  }
122
133
  function useKeyboardHandler(element, open, editor) {
123
134
  let keydownHandler = createSignal(
124
135
  null
125
136
  ), disposeKeydownHandler = null;
126
137
  return useEffect2(element, () => {
127
- let editorValue = editor.value, keydownHandlerValue = keydownHandler.value;
138
+ let editorValue = editor.get(), keydownHandlerValue = keydownHandler.get();
128
139
  if (!editorValue || !keydownHandlerValue)
129
140
  return;
130
141
  let extension = defineDOMEventHandler(
131
142
  "keydown",
132
- (view, event) => view.composing || event.defaultPrevented || !open.value ? !1 : (keydownHandlerValue(event), event.defaultPrevented)
143
+ (view, event) => view.composing || event.defaultPrevented || !open.get() ? !1 : (keydownHandlerValue(event), event.defaultPrevented)
133
144
  );
134
145
  disposeKeydownHandler == null || disposeKeydownHandler(), disposeKeydownHandler = editorValue.use(
135
146
  withPriority(extension, Priority.highest)
136
147
  );
137
- }), (keydownHandlerValue) => (keydownHandler.value = keydownHandlerValue, () => {
148
+ }), (keydownHandlerValue) => (keydownHandler.set(keydownHandlerValue), () => {
138
149
  disposeKeydownHandler == null || disposeKeydownHandler(), disposeKeydownHandler = null;
139
150
  });
140
151
  }
141
152
 
142
153
  // src/components/autocomplete/autocomplete-list/element.gen.ts
143
- var AutocompleteListElement = class extends ElementMixin3(useAutocompleteList, defaultAutocompleteListProps) {
154
+ var AutocompleteListElement = class extends ElementBuilder3(useAutocompleteList, defaultAutocompleteListProps) {
144
155
  };
145
156
  defineCustomElement("prosekit-autocomplete-list", AutocompleteListElement);
146
157
 
147
158
  // src/components/autocomplete/autocomplete-popover/element.gen.ts
148
- import { ElementMixin as ElementMixin4 } from "@aria-ui/core";
159
+ import { ElementBuilder as ElementBuilder4 } from "@aria-ui/core";
149
160
 
150
161
  // src/components/autocomplete/autocomplete-popover/props.ts
151
162
  import { defaultOverlayPositionerProps } from "@aria-ui/overlay";
@@ -166,10 +177,8 @@ var body = typeof document != "undefined" && document.querySelector("body"), def
166
177
 
167
178
  // src/components/autocomplete/autocomplete-popover/state.ts
168
179
  import {
169
- assignProps as assignProps2,
170
180
  createComputed,
171
181
  createSignal as createSignal3,
172
- mapSignals,
173
182
  useAnimationFrame,
174
183
  useEffect as useEffect4
175
184
  } from "@aria-ui/core";
@@ -194,7 +203,7 @@ function useFirstRendering(host) {
194
203
  let firstRendering = createSignal2(!0);
195
204
  return useEffect3(host, () => {
196
205
  requestAnimationFrame(() => {
197
- firstRendering.value = !1;
206
+ firstRendering.set(!1);
198
207
  });
199
208
  }), firstRendering;
200
209
  }
@@ -205,12 +214,8 @@ function defaultQueryBuilder(match) {
205
214
  }
206
215
 
207
216
  // src/components/autocomplete/autocomplete-popover/state.ts
208
- function useAutocompletePopover(host, props) {
209
- let state = mapSignals(assignProps2(defaultAutocompletePopoverProps, props));
210
- return useAutocompletePopoverState(host, state), state;
211
- }
212
- function useAutocompletePopoverState(host, state) {
213
- let { editor, regex, ...overlayState } = state, reference = createSignal3(null), query = createSignal3(""), onDismiss = createSignal3(null), onSubmit = createSignal3(null), presence = createComputed(() => !!reference.value);
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());
214
219
  queryContext.provide(host, query), onSubmitContext.provide(host, onSubmit), openContext.provide(host, presence), useEscapeKeydown(host, editor, createKeymapHandler(onDismiss, presence)), useAutocompleteExtension(
215
220
  host,
216
221
  editor,
@@ -223,10 +228,10 @@ function useAutocompletePopoverState(host, state) {
223
228
  let firstRendering = useFirstRendering(host);
224
229
  useEffect4(host, () => {
225
230
  var _a;
226
- let queryValue = query.value;
231
+ let queryValue = query.get();
227
232
  firstRendering.peek() || (_a = state.onQueryChange.peek()) == null || _a(queryValue);
228
233
  }), useAnimationFrame(host, () => {
229
- let presenceValue = presence.value, onOpenChangeValue = state.onOpenChange.peek();
234
+ let presenceValue = presence.get(), onOpenChangeValue = state.onOpenChange.peek();
230
235
  if (onOpenChangeValue)
231
236
  return () => {
232
237
  onOpenChangeValue(presenceValue);
@@ -235,7 +240,7 @@ function useAutocompletePopoverState(host, state) {
235
240
  }
236
241
  function useAutocompleteExtension(host, editor, regex, reference, query, onDismiss, onSubmit) {
237
242
  useEffect4(host, () => {
238
- let editorValue = editor.value, regexValue = regex.value;
243
+ let editorValue = editor.get(), regexValue = regex.get();
239
244
  if (!(!editorValue || !regexValue))
240
245
  return addAutocompleteExtension(
241
246
  editorValue,
@@ -250,9 +255,9 @@ function useAutocompleteExtension(host, editor, regex, reference, query, onDismi
250
255
  function addAutocompleteExtension(editor, regex, reference, query, onDismiss, onSubmit) {
251
256
  let handleEnter = (options) => {
252
257
  let span = editor.view.dom.querySelector(".prosemirror-prediction-match");
253
- span && (reference.value = span), query.value = defaultQueryBuilder(options.match), onDismiss.value = options.ignoreMatch, onSubmit.value = options.deleteMatch;
258
+ span && reference.set(span), query.set(defaultQueryBuilder(options.match)), onDismiss.set(options.ignoreMatch), onSubmit.set(options.deleteMatch);
254
259
  }, handleLeave = () => {
255
- reference.value = null, query.value = "", onDismiss.value = null, onSubmit.value = null;
260
+ reference.set(null), query.set(""), onDismiss.set(null), onSubmit.set(null);
256
261
  }, rule = new AutocompleteRule({
257
262
  regex,
258
263
  onEnter: handleEnter,
@@ -262,7 +267,7 @@ function addAutocompleteExtension(editor, regex, reference, query, onDismiss, on
262
267
  }
263
268
  function createKeymapHandler(handler, enabled) {
264
269
  return () => {
265
- if (!enabled.value)
270
+ if (!enabled.get())
266
271
  return !1;
267
272
  let fn = handler.peek();
268
273
  return fn ? (fn(), !0) : !1;
@@ -274,7 +279,7 @@ function useEscapeKeydown(host, editor, handler) {
274
279
  }
275
280
 
276
281
  // src/components/autocomplete/autocomplete-popover/element.gen.ts
277
- var AutocompletePopoverElement = class extends ElementMixin4(useAutocompletePopover, defaultAutocompletePopoverProps) {
282
+ var AutocompletePopoverElement = class extends ElementBuilder4(useAutocompletePopover, defaultAutocompletePopoverProps) {
278
283
  };
279
284
  defineCustomElement("prosekit-autocomplete-popover", AutocompletePopoverElement);
280
285
  export {
@@ -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
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,13 +33,13 @@ var blockPopoverContext = createContext(
35
33
  );
36
34
 
37
35
  // src/components/block-handle/block-drag-handle/state.ts
38
- function useBlockDragHandle(host, props) {
39
- let context = blockPopoverContext.consume(host), state = mapSignals(assignProps(defaultBlockDragHandleProps, props));
40
- return useEffect(host, () => {
36
+ function useBlockDragHandle(host, state) {
37
+ let context = blockPopoverContext.consume(host);
38
+ useEffect(host, () => {
41
39
  host.draggable = !0;
42
40
  }), useEventListener(host, "pointerdown", () => {
43
41
  var _a, _b;
44
- let { pos } = (_a = context.value) != null ? _a : {}, { view } = (_b = state.editor.value) != null ? _b : {};
42
+ let { pos } = (_a = context.get()) != null ? _a : {}, { view } = (_b = state.editor.get()) != null ? _b : {};
45
43
  pos == null || view == null || (view.dispatch(
46
44
  view.state.tr.setSelection(NodeSelection.create(view.state.doc, pos))
47
45
  ), requestAnimationFrame(() => {
@@ -49,21 +47,21 @@ function useBlockDragHandle(host, props) {
49
47
  }));
50
48
  }), useEventListener(host, "dragstart", (event) => {
51
49
  var _a, _b;
52
- let { pos, element, node } = (_a = context.value) != null ? _a : {}, { view } = (_b = state.editor.value) != null ? _b : {};
50
+ let { pos, element, node } = (_a = context.get()) != null ? _a : {}, { view } = (_b = state.editor.get()) != null ? _b : {};
53
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 = {
54
52
  slice: new Slice(Fragment.from(node), 0, 0),
55
53
  move: !0
56
54
  });
57
- }), state;
55
+ });
58
56
  }
59
57
 
60
58
  // src/components/block-handle/block-drag-handle/element.gen.ts
61
- var BlockDragHandleElement = class extends ElementMixin(useBlockDragHandle, defaultBlockDragHandleProps) {
59
+ var BlockDragHandleElement = class extends ElementBuilder(useBlockDragHandle, defaultBlockDragHandleProps) {
62
60
  };
63
61
  defineCustomElement("prosekit-block-drag-handle", BlockDragHandleElement);
64
62
 
65
63
  // src/components/block-handle/block-popover/element.gen.ts
66
- import { ElementMixin as ElementMixin2 } from "@aria-ui/core";
64
+ import { ElementBuilder as ElementBuilder2 } from "@aria-ui/core";
67
65
 
68
66
  // src/components/block-handle/block-popover/props.ts
69
67
  import { defaultOverlayPositionerProps } from "@aria-ui/overlay";
@@ -76,10 +74,8 @@ var defaultBlockPopoverProps = Object.freeze({
76
74
 
77
75
  // src/components/block-handle/block-popover/state.ts
78
76
  import {
79
- assignProps as assignProps2,
80
77
  createComputed,
81
78
  createSignal,
82
- mapSignals as mapSignals2,
83
79
  useAttribute,
84
80
  useEffect as useEffect2
85
81
  } from "@aria-ui/core";
@@ -148,8 +144,8 @@ function defineElementHoverHandler(handler) {
148
144
  }
149
145
 
150
146
  // src/components/block-handle/block-popover/state.ts
151
- function useBlockPopover(host, props) {
152
- let state = mapSignals2(assignProps2(defaultBlockPopoverProps, props)), { editor, ...overlayState } = state, reference = createSignal(null);
147
+ function useBlockPopover(host, state) {
148
+ let { editor, ...overlayState } = state, reference = createSignal(null);
153
149
  useOverlayPositionerState(host, overlayState, { reference });
154
150
  let context = createSignal({
155
151
  pos: null,
@@ -159,12 +155,12 @@ function useBlockPopover(host, props) {
159
155
  blockPopoverContext.provide(host, context);
160
156
  let open = createSignal(!1);
161
157
  useEffect2(host, () => {
162
- open.value = !!context.value.element;
158
+ open.set(!!context.get().element);
163
159
  }), useHoverExtension(host, editor, (referenceValue, element, node, pos) => {
164
- reference.value = referenceValue, context.value = { element, node, pos };
160
+ reference.set(referenceValue), context.set({ element, node, pos });
165
161
  });
166
- let presence = createComputed(() => !!reference.value);
167
- return useAttribute(host, "data-state", () => presence.value ? "open" : "closed"), usePresence(host, presence), state;
162
+ let presence = createComputed(() => !!reference.get());
163
+ useAttribute(host, "data-state", () => presence.get() ? "open" : "closed"), usePresence(host, presence);
168
164
  }
169
165
  function useHoverExtension(host, editor, handler) {
170
166
  let prevElement = null, prevPos = null, extension = defineElementHoverHandler(
@@ -176,7 +172,7 @@ function useHoverExtension(host, editor, handler) {
176
172
  }
177
173
 
178
174
  // src/components/block-handle/block-popover/element.gen.ts
179
- var BlockPopoverElement = class extends ElementMixin2(useBlockPopover, defaultBlockPopoverProps) {
175
+ var BlockPopoverElement = class extends ElementBuilder2(useBlockPopover, defaultBlockPopoverProps) {
180
176
  };
181
177
  defineCustomElement("prosekit-block-popover", BlockPopoverElement);
182
178
  export {
@@ -1,19 +1,20 @@
1
1
  import {
2
2
  useEditorExtension
3
- } from "./chunk-VJEVDINM.js";
3
+ } from "./chunk-MZSYOTZT.js";
4
4
  import {
5
5
  defineCustomElement
6
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: !0,
16
+ defaultOpen: !0,
17
+ open: !1,
17
18
  onOpenChange: null,
18
19
  placement: "top",
19
20
  offset: 12,
@@ -30,10 +31,8 @@ var defaultInlinePopoverProps = Object.freeze({
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";
@@ -107,31 +106,27 @@ function getInlineDecoration(view) {
107
106
  }
108
107
 
109
108
  // src/components/inline-popover/inline-popover/state.ts
110
- function useInlinePopover(host, props) {
111
- let state = mapSignals(assignProps(defaultInlinePopoverProps, props));
112
- return useInlinePopoverState(host, state), state;
113
- }
114
- function useInlinePopoverState(host, state) {
115
- let { editor, open, onOpenChange, ...overlayState } = state, reference = useInlinePopoverReference(host, editor);
116
- useOverlayPositionerState(host, overlayState, { reference });
117
- let presence = createComputed(() => !!reference.value && open.value);
118
- useAttribute(host, "data-state", () => presence.value ? "open" : "closed"), usePresence(host, presence), useEffect(host, () => {
119
- var _a;
120
- let presenceValue = presence.value;
121
- (_a = onOpenChange.peek()) == null || _a(presenceValue);
122
- });
109
+ function useInlinePopover(host, state) {
110
+ let { editor, defaultOpen, open, onOpenChange, ...overlayState } = state, reference = useInlinePopoverReference(host, editor), hasReference = createComputed(() => !!reference.get());
111
+ useEffect(host, () => {
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);
123
118
  }
124
119
  function useInlinePopoverReference(host, editor) {
125
120
  let reference = createSignal(null), editorFocused = !1;
126
121
  return useEditorFocusChangeEvent(host, editor, (focus) => {
127
122
  editorFocused = focus;
128
123
  }), useEditorUpdateEvent(host, editor, (view) => {
129
- !editorFocused && host.contains(host.ownerDocument.activeElement) || (reference.value = getVirtualSelectionElement(view));
124
+ !editorFocused && host.contains(host.ownerDocument.activeElement) || reference.set(getVirtualSelectionElement(view));
130
125
  }), reference;
131
126
  }
132
127
 
133
128
  // src/components/inline-popover/inline-popover/element.gen.ts
134
- var InlinePopoverElement = class extends ElementMixin(useInlinePopover, defaultInlinePopoverProps) {
129
+ var InlinePopoverElement = class extends ElementBuilder(useInlinePopover, defaultInlinePopoverProps) {
135
130
  };
136
131
  defineCustomElement("prosekit-inline-popover", InlinePopoverElement);
137
132
  export {
@@ -3,7 +3,7 @@ import {
3
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 {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-Y2CJYXR5.js";
4
4
 
5
5
  // src/components/resizable/resizable-handle/element.gen.ts
6
- import { ElementMixin } from "@aria-ui/core";
6
+ import { ElementBuilder } from "@aria-ui/core";
7
7
 
8
8
  // src/components/resizable/resizable-handle/props.ts
9
9
  var defaultResizableHandleProps = {
@@ -12,9 +12,7 @@ var defaultResizableHandleProps = {
12
12
 
13
13
  // src/components/resizable/resizable-handle/state.ts
14
14
  import {
15
- assignProps,
16
15
  createSignal,
17
- mapSignals,
18
16
  useEffect
19
17
  } from "@aria-ui/core";
20
18
  import { getWindow } from "@zag-js/dom-query";
@@ -79,18 +77,18 @@ var calcBottomRightResize = (w, h, dx, dy, r) => {
79
77
  }, calcTopResize = (w, h, dx, dy, r) => (h -= dy, w = h * r, [w, h]), calcRightResize = (w, h, dx, dy, r) => (w += dx, h = w / r, [w, h]), calcBottomResize = (w, h, dx, dy, r) => (h += dy, w = h * r, [w, h]), calcLeftResize = (w, h, dx, dy, r) => (w -= dx, h = w / r, [w, h]);
80
78
 
81
79
  // src/components/resizable/resizable-handle/state.ts
82
- function useResizableHandle(host, props) {
83
- let state = mapSignals(assignProps(defaultResizableHandleProps, props)), onResize = onResizeContext.consume(host), onResizeStart = onResizeStartContext.consume(host), onResizeEnd = onResizeEndContext.consume(host);
84
- return useResizableHandleState(host, state, { onResize, onResizeStart, onResizeEnd }), state;
80
+ function useResizableHandle(host, state) {
81
+ let onResize = onResizeContext.consume(host), onResizeStart = onResizeStartContext.consume(host), onResizeEnd = onResizeEndContext.consume(host);
82
+ useResizableHandleState(host, state, { onResize, onResizeStart, onResizeEnd });
85
83
  }
86
84
  function useResizableHandleState(host, state, context) {
87
85
  let startX = 0, startY = 0, width = 0, height = 0, aspectRatio = 1, pointerPressing = createSignal(!1), handlePointerDown = (event) => {
88
- var _a, _b;
89
- event.preventDefault(), pointerPressing.value = !0, startX = event.x, startY = event.y;
90
- let size = (_b = (_a = context.onResizeStart).value) == null ? void 0 : _b.call(_a);
86
+ var _a;
87
+ event.preventDefault(), pointerPressing.set(!0), startX = event.x, startY = event.y;
88
+ let size = (_a = context.onResizeStart.get()) == null ? void 0 : _a();
91
89
  size && ([width, height, aspectRatio] = size);
92
90
  }, handlePointerMove = (event) => {
93
- var _a, _b;
91
+ var _a;
94
92
  event.preventDefault();
95
93
  let dx = event.x - startX, dy = event.y - startY, [w, h] = calcResize(
96
94
  state.position.peek(),
@@ -100,15 +98,15 @@ function useResizableHandleState(host, state, context) {
100
98
  dy,
101
99
  aspectRatio
102
100
  );
103
- (_b = (_a = context.onResize).value) == null || _b.call(_a, w, h);
101
+ (_a = context.onResize.get()) == null || _a(w, h);
104
102
  }, handlePointerUp = (event) => {
105
- var _a, _b;
106
- event.preventDefault(), pointerPressing.value = !1, (_b = (_a = context.onResizeEnd).value) == null || _b.call(_a);
103
+ var _a;
104
+ event.preventDefault(), pointerPressing.set(!1), (_a = context.onResizeEnd.get()) == null || _a();
107
105
  };
108
106
  useEffect(host, () => (host.addEventListener("pointerdown", handlePointerDown), () => {
109
107
  host.removeEventListener("pointerdown", handlePointerDown);
110
108
  })), useEffect(host, () => {
111
- if (!pointerPressing.value)
109
+ if (!pointerPressing.get())
112
110
  return;
113
111
  let win = getWindow(host);
114
112
  return win.addEventListener("pointermove", handlePointerMove), win.addEventListener("pointerup", handlePointerUp), () => {
@@ -118,12 +116,12 @@ function useResizableHandleState(host, state, context) {
118
116
  }
119
117
 
120
118
  // src/components/resizable/resizable-handle/element.gen.ts
121
- var ResizableHandleElement = class extends ElementMixin(useResizableHandle, defaultResizableHandleProps) {
119
+ var ResizableHandleElement = class extends ElementBuilder(useResizableHandle, defaultResizableHandleProps) {
122
120
  };
123
121
  defineCustomElement("prosekit-resizable-handle", ResizableHandleElement);
124
122
 
125
123
  // src/components/resizable/resizable-root/element.gen.ts
126
- import { ElementMixin as ElementMixin2 } from "@aria-ui/core";
124
+ import { ElementBuilder as ElementBuilder2 } from "@aria-ui/core";
127
125
 
128
126
  // src/components/resizable/resizable-root/props.ts
129
127
  var defaultResizableRootProps = {
@@ -137,23 +135,17 @@ var defaultResizableRootProps = {
137
135
 
138
136
  // src/components/resizable/resizable-root/state.ts
139
137
  import {
140
- assignProps as assignProps2,
141
138
  createSignal as createSignal2,
142
- mapSignals as mapSignals2,
143
139
  useEffect as useEffect2
144
140
  } from "@aria-ui/core";
145
- function useResizableRoot(host, props) {
146
- let state = mapSignals2(assignProps2(defaultResizableRootProps, props));
147
- return useResizableRootState(host, state), state;
148
- }
149
- function useResizableRootState(host, state) {
141
+ function useResizableRoot(host, state) {
150
142
  let onResizeStart = () => {
151
143
  var _a, _b;
152
144
  let { width, height } = host.getBoundingClientRect(), aspectRatio = (_a = state.aspectRatio.peek()) != null ? _a : width / height;
153
145
  return isFinitePositiveNumber(aspectRatio) || (aspectRatio = 0), (_b = state.onSizeChangeStart.peek()) == null || _b({ width, height }), [width, height, aspectRatio];
154
146
  }, onResize = (width, height) => {
155
147
  var _a;
156
- (_a = state.onSizeChange.peek()) == null || _a({ width, height }), state.width.value = width, state.height.value = height;
148
+ (_a = state.onSizeChange.peek()) == null || _a({ width, height }), state.width.set(width), state.height.set(height);
157
149
  }, onResizeEnd = () => {
158
150
  var _a;
159
151
  let { width, height } = host.getBoundingClientRect();
@@ -162,9 +154,9 @@ function useResizableRootState(host, state) {
162
154
  onResizeStartContext.provide(host, createSignal2(onResizeStart)), onResizeContext.provide(host, createSignal2(onResize)), onResizeEndContext.provide(host, createSignal2(onResizeEnd)), useEffect2(host, () => {
163
155
  updateResizableRootStyles(
164
156
  host,
165
- state.width.value,
166
- state.height.value,
167
- state.aspectRatio.value
157
+ state.width.get(),
158
+ state.height.get(),
159
+ state.aspectRatio.get()
168
160
  );
169
161
  });
170
162
  }
@@ -173,7 +165,7 @@ function updateResizableRootStyles(host, width, height, aspectRatio) {
173
165
  }
174
166
 
175
167
  // src/components/resizable/resizable-root/element.gen.ts
176
- var ResizableRootElement = class extends ElementMixin2(useResizableRoot, defaultResizableRootProps) {
168
+ var ResizableRootElement = class extends ElementBuilder2(useResizableRoot, defaultResizableRootProps) {
177
169
  };
178
170
  defineCustomElement("prosekit-resizable-root", ResizableRootElement);
179
171
  export {
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-Y2CJYXR5.js";
4
4
 
5
5
  // src/components/tooltip/tooltip-content/element.gen.ts
6
- import { ElementMixin } from "@aria-ui/core";
6
+ import { ElementBuilder } from "@aria-ui/core";
7
7
 
8
8
  // src/components/tooltip/tooltip-content/props.ts
9
9
  import { defaultTooltipContentProps as defaultProps } from "@aria-ui/tooltip";
@@ -19,19 +19,15 @@ var defaultTooltipContentProps = {
19
19
  };
20
20
 
21
21
  // src/components/tooltip/tooltip-content/state.ts
22
- import { assignProps } from "@aria-ui/core";
23
- import { useTooltipContent as useElement } from "@aria-ui/tooltip";
24
- function useTooltipContent(element, props) {
25
- return useElement(element, assignProps(defaultTooltipContentProps, props));
26
- }
22
+ import { useTooltipContent } from "@aria-ui/tooltip";
27
23
 
28
24
  // src/components/tooltip/tooltip-content/element.gen.ts
29
- var TooltipContentElement = class extends ElementMixin(useTooltipContent, defaultTooltipContentProps) {
25
+ var TooltipContentElement = class extends ElementBuilder(useTooltipContent, defaultTooltipContentProps) {
30
26
  };
31
27
  defineCustomElement("prosekit-tooltip-content", TooltipContentElement);
32
28
 
33
29
  // src/components/tooltip/tooltip-root/element.gen.ts
34
- import { ElementMixin as ElementMixin2 } from "@aria-ui/core";
30
+ import { ElementBuilder as ElementBuilder2 } from "@aria-ui/core";
35
31
 
36
32
  // src/components/tooltip/tooltip-root/props.ts
37
33
  import { defaultTooltipRootProps } from "@aria-ui/tooltip";
@@ -40,12 +36,12 @@ import { defaultTooltipRootProps } from "@aria-ui/tooltip";
40
36
  import { useTooltipRoot } from "@aria-ui/tooltip";
41
37
 
42
38
  // src/components/tooltip/tooltip-root/element.gen.ts
43
- var TooltipRootElement = class extends ElementMixin2(useTooltipRoot, defaultTooltipRootProps) {
39
+ var TooltipRootElement = class extends ElementBuilder2(useTooltipRoot, defaultTooltipRootProps) {
44
40
  };
45
41
  defineCustomElement("prosekit-tooltip-root", TooltipRootElement);
46
42
 
47
43
  // src/components/tooltip/tooltip-trigger/element.gen.ts
48
- import { ElementMixin as ElementMixin3 } from "@aria-ui/core";
44
+ import { ElementBuilder as ElementBuilder3 } from "@aria-ui/core";
49
45
 
50
46
  // src/components/tooltip/tooltip-trigger/props.ts
51
47
  import { defaultTooltipTriggerProps } from "@aria-ui/tooltip";
@@ -54,7 +50,7 @@ import { defaultTooltipTriggerProps } from "@aria-ui/tooltip";
54
50
  import { useTooltipTrigger } from "@aria-ui/tooltip";
55
51
 
56
52
  // src/components/tooltip/tooltip-trigger/element.gen.ts
57
- var TooltipTriggerElement = class extends ElementMixin3(useTooltipTrigger, defaultTooltipTriggerProps) {
53
+ var TooltipTriggerElement = class extends ElementBuilder3(useTooltipTrigger, defaultTooltipTriggerProps) {
58
54
  };
59
55
  defineCustomElement("prosekit-tooltip-trigger", TooltipTriggerElement);
60
56
  export {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prosekit/web",
3
3
  "type": "module",
4
- "version": "0.1.10",
4
+ "version": "0.2.1",
5
5
  "private": false,
6
6
  "author": {
7
7
  "name": "ocavue",
@@ -66,21 +66,21 @@
66
66
  ],
67
67
  "dependencies": {
68
68
  "@aria-ui/collection": "^0.0.3",
69
- "@aria-ui/core": "^0.0.14",
70
- "@aria-ui/listbox": "^0.0.13",
71
- "@aria-ui/overlay": "^0.0.15",
72
- "@aria-ui/popover": "^0.0.14",
73
- "@aria-ui/presence": "^0.0.9",
74
- "@aria-ui/tooltip": "^0.0.16",
69
+ "@aria-ui/core": "^0.0.16",
70
+ "@aria-ui/listbox": "^0.0.15",
71
+ "@aria-ui/overlay": "^0.0.17",
72
+ "@aria-ui/popover": "^0.0.17",
73
+ "@aria-ui/presence": "^0.0.11",
74
+ "@aria-ui/tooltip": "^0.0.19",
75
75
  "@floating-ui/dom": "^1.6.5",
76
- "@zag-js/dom-query": "^0.53.0",
77
- "@prosekit/core": "^0.5.5",
78
- "@prosekit/pm": "^0.1.5",
79
- "@prosekit/extensions": "^0.5.3"
76
+ "@zag-js/dom-query": "^0.58.2",
77
+ "@prosekit/core": "^0.6.1",
78
+ "@prosekit/extensions": "^0.6.1",
79
+ "@prosekit/pm": "^0.1.5"
80
80
  },
81
81
  "devDependencies": {
82
82
  "tsup": "^8.1.0",
83
- "typescript": "^5.4.5",
83
+ "typescript": "^5.5.2",
84
84
  "vitest": "^1.6.0",
85
85
  "@prosekit/dev": "0.0.0"
86
86
  },