@prosekit/web 0.1.10 → 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.
@@ -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;
@@ -434,16 +436,27 @@ declare interface InlinePopoverProps extends Omit<OverlayPositionerProps, 'place
434
436
  * @default null
435
437
  */
436
438
  editor: Editor | null;
439
+ /**
440
+ * Whether the popover is open by default when some inline content is
441
+ * selected.
442
+ *
443
+ * When `defaultOpen` is true, the popover will open or close based on the
444
+ * inline selection. When `defaultOpen` is false, the popover will never be
445
+ * opened unless the `open` prop is true.
446
+ *
447
+ * @default true
448
+ */
449
+ defaultOpen: boolean;
437
450
  /**
438
451
  * Whether the popover is open.
439
452
  *
440
453
  * Notice that the popover will be always hidden if the inline selection is empty.
441
454
  *
442
- * @default `true`
455
+ * @default false
443
456
  */
444
457
  open: boolean;
445
458
  /**
446
- * A callback that is called when the popover's open state changes.
459
+ * Event handler called when the open state changed caused by user interaction (i.e. select or unselect inline content).
447
460
  *
448
461
  * @default null
449
462
  */
@@ -486,6 +499,8 @@ export declare function isFinitePositiveNumber(value: unknown): value is number;
486
499
 
487
500
  export declare function isInCodeBlock(selection: Selection_2): boolean | undefined;
488
501
 
502
+ export declare function omit<T extends Record<string, unknown>, K extends keyof T>(object: T, keys: K[]): Omit<T, K>;
503
+
489
504
  /**
490
505
  * @internal
491
506
  */
@@ -656,17 +671,17 @@ declare const TooltipTriggerElement_base: {
656
671
  export { TooltipTriggerProps }
657
672
  export { TooltipTriggerProps as TooltipTriggerProps_alias_1 }
658
673
 
659
- export declare function useAutocompleteEmpty(element: ConnectableElement, _props?: Partial<AutocompleteEmptyProps>): SignalState<AutocompleteEmptyProps>;
674
+ export declare function useAutocompleteEmpty(element: ConnectableElement): void;
660
675
 
661
- export declare function useAutocompleteItem(element: ConnectableElement, props?: Partial<AutocompleteItemProps>): SignalState<AutocompleteItemProps>;
676
+ export declare function useAutocompleteItem(element: ConnectableElement, state: SignalState<AutocompleteItemProps>): void;
662
677
 
663
- export declare function useAutocompleteList(element: ConnectableElement, props?: Partial<AutocompleteListProps>): SignalState<AutocompleteListProps>;
678
+ export declare function useAutocompleteList(element: ConnectableElement, state: SignalState<AutocompleteListProps>): void;
664
679
 
665
- export declare function useAutocompletePopover(host: ConnectableElement, props?: Partial<AutocompletePopoverProps>): SignalState<Readonly<AutocompletePopoverProps>>;
680
+ export declare function useAutocompletePopover(host: ConnectableElement, state: SignalState<AutocompletePopoverProps>): void;
666
681
 
667
- export declare function useBlockDragHandle(host: ConnectableElement, props?: Partial<BlockDragHandleProps>): SignalState<BlockDragHandleProps>;
682
+ export declare function useBlockDragHandle(host: ConnectableElement, state: SignalState<BlockDragHandleProps>): void;
668
683
 
669
- export declare function useBlockPopover(host: ConnectableElement, props?: Partial<BlockPopoverProps>): SignalState<BlockPopoverProps>;
684
+ export declare function useBlockPopover(host: ConnectableElement, state: SignalState<BlockPopoverProps>): void;
670
685
 
671
686
  export declare function useEditorExtension(host: ConnectableElement, editor: ReadonlySignal<Editor | null>, extension: Extension): void;
672
687
 
@@ -682,7 +697,7 @@ export declare function useEditorUpdateEvent(host: ConnectableElement, editor: R
682
697
 
683
698
  export declare function useFirstRendering(host: ConnectableElement): ReadonlySignal<boolean>;
684
699
 
685
- export declare function useInlinePopover(host: ConnectableElement, props?: Partial<InlinePopoverProps>): SignalState<Readonly<InlinePopoverProps>>;
700
+ export declare function useInlinePopover(host: ConnectableElement, state: SignalState<InlinePopoverProps>): void;
686
701
 
687
702
  export { usePopoverContent }
688
703
 
@@ -690,11 +705,11 @@ export { usePopoverRoot }
690
705
 
691
706
  export { usePopoverTrigger }
692
707
 
693
- export declare function useResizableHandle(host: ConnectableElement, props?: Partial<ResizableHandleProps>): SignalState<Readonly<ResizableHandleProps>>;
708
+ export declare function useResizableHandle(host: ConnectableElement, state: SignalState<ResizableHandleProps>): void;
694
709
 
695
- export declare function useResizableRoot(host: ConnectableElement, props?: Partial<ResizableRootProps>): SignalState<Readonly<ResizableRootProps>>;
710
+ export declare function useResizableRoot(host: ConnectableElement, state: SignalState<ResizableRootProps>): void;
696
711
 
697
- export declare function useTooltipContent(element: ConnectableElement, props?: Partial<TooltipContentProps>): SignalState<TooltipContentProps>;
712
+ export { useTooltipContent }
698
713
 
699
714
  export { useTooltipRoot }
700
715
 
@@ -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.0",
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",
76
+ "@zag-js/dom-query": "^0.58.2",
77
+ "@prosekit/core": "^0.6.0",
78
78
  "@prosekit/pm": "^0.1.5",
79
- "@prosekit/extensions": "^0.5.3"
79
+ "@prosekit/extensions": "^0.6.0"
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
  },