@prosekit/web 0.3.19 → 0.4.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.
@@ -0,0 +1,17 @@
1
+ // src/utils/get-default-state.ts
2
+ import {
3
+ createSignal
4
+ } from "@aria-ui/core";
5
+ function getStateWithDefaults(state, props) {
6
+ const merged = { ...state };
7
+ for (const key of Object.keys(props)) {
8
+ if (!merged[key]) {
9
+ merged[key] = createSignal(props[key].default);
10
+ }
11
+ }
12
+ return merged;
13
+ }
14
+
15
+ export {
16
+ getStateWithDefaults
17
+ };
@@ -1,12 +1,20 @@
1
1
  export { AutocompleteEmptyElement } from './_tsup-dts-rollup';
2
- export { defaultAutocompleteEmptyProps } from './_tsup-dts-rollup';
2
+ export { autocompleteEmptyEvents } from './_tsup-dts-rollup';
3
+ export { autocompleteEmptyProps } from './_tsup-dts-rollup';
4
+ export { AutocompleteEmptyEvents } from './_tsup-dts-rollup';
3
5
  export { AutocompleteEmptyProps } from './_tsup-dts-rollup';
4
6
  export { AutocompleteItemElement } from './_tsup-dts-rollup';
5
- export { defaultAutocompleteItemProps } from './_tsup-dts-rollup';
7
+ export { autocompleteItemEvents } from './_tsup-dts-rollup';
8
+ export { autocompleteItemProps } from './_tsup-dts-rollup';
9
+ export { AutocompleteItemEvents } from './_tsup-dts-rollup';
6
10
  export { AutocompleteItemProps } from './_tsup-dts-rollup';
7
11
  export { AutocompleteListElement } from './_tsup-dts-rollup';
8
- export { defaultAutocompleteListProps } from './_tsup-dts-rollup';
12
+ export { autocompleteListEvents } from './_tsup-dts-rollup';
13
+ export { autocompleteListProps } from './_tsup-dts-rollup';
14
+ export { AutocompleteListEvents } from './_tsup-dts-rollup';
9
15
  export { AutocompleteListProps } from './_tsup-dts-rollup';
10
16
  export { AutocompletePopoverElement } from './_tsup-dts-rollup';
11
- export { defaultAutocompletePopoverProps } from './_tsup-dts-rollup';
17
+ export { autocompletePopoverEvents } from './_tsup-dts-rollup';
18
+ export { autocompletePopoverProps } from './_tsup-dts-rollup';
19
+ export { AutocompletePopoverEvents } from './_tsup-dts-rollup';
12
20
  export { AutocompletePopoverProps } from './_tsup-dts-rollup';
@@ -1,41 +1,38 @@
1
+ import {
2
+ getStateWithDefaults
3
+ } from "./chunk-ZGQ225UP.js";
1
4
  import {
2
5
  useEditorExtension
3
6
  } from "./chunk-MZSYOTZT.js";
4
- import {
5
- defineCustomElement
6
- } from "./chunk-LCDA7GFP.js";
7
7
 
8
8
  // src/components/autocomplete/autocomplete-empty/element.gen.ts
9
- import { ElementBuilder } from "@aria-ui/core";
9
+ import { defineCustomElement, registerCustomElement } from "@aria-ui/core";
10
10
 
11
- // src/components/autocomplete/autocomplete-empty/props.ts
12
- var defaultAutocompleteEmptyProps = {};
11
+ // src/components/autocomplete/autocomplete-empty/setup.ts
12
+ import { useListboxEmpty } from "@aria-ui/listbox/elements";
13
+ var useAutocompleteEmpty = useListboxEmpty;
13
14
 
14
- // src/components/autocomplete/autocomplete-empty/state.ts
15
- import { useListboxEmpty } from "@aria-ui/listbox";
16
- function useAutocompleteEmpty(element) {
17
- useListboxEmpty(element);
18
- }
15
+ // src/components/autocomplete/autocomplete-empty/types.ts
16
+ var autocompleteEmptyProps = {};
17
+ var autocompleteEmptyEvents = {};
19
18
 
20
19
  // src/components/autocomplete/autocomplete-empty/element.gen.ts
21
- var AutocompleteEmptyElement = class extends ElementBuilder(useAutocompleteEmpty, defaultAutocompleteEmptyProps) {
20
+ var AutocompleteEmptyElement = class extends defineCustomElement({
21
+ props: autocompleteEmptyProps,
22
+ events: autocompleteEmptyEvents,
23
+ setup: useAutocompleteEmpty
24
+ }) {
22
25
  };
23
- defineCustomElement("prosekit-autocomplete-empty", AutocompleteEmptyElement);
26
+ registerCustomElement("prosekit-autocomplete-empty", AutocompleteEmptyElement);
24
27
 
25
28
  // src/components/autocomplete/autocomplete-item/element.gen.ts
26
- import { ElementBuilder as ElementBuilder2 } from "@aria-ui/core";
29
+ import { defineCustomElement as defineCustomElement2, registerCustomElement as registerCustomElement2 } from "@aria-ui/core";
27
30
 
28
- // src/components/autocomplete/autocomplete-item/props.ts
29
- var defaultAutocompleteItemProps = {
30
- value: "",
31
- onSelect: null
32
- };
33
-
34
- // src/components/autocomplete/autocomplete-item/state.ts
31
+ // src/components/autocomplete/autocomplete-item/setup.ts
35
32
  import {
36
33
  useEffect
37
34
  } from "@aria-ui/core";
38
- import { useListboxItem } from "@aria-ui/listbox";
35
+ import { useListboxItem } from "@aria-ui/listbox/elements";
39
36
 
40
37
  // src/components/autocomplete/context.ts
41
38
  import { createContext } from "@aria-ui/core";
@@ -52,9 +49,9 @@ var openContext = createContext(
52
49
  false
53
50
  );
54
51
 
55
- // src/components/autocomplete/autocomplete-item/state.ts
56
- function useAutocompleteItem(element, state) {
57
- useListboxItem(element, state);
52
+ // src/components/autocomplete/autocomplete-item/setup.ts
53
+ function useAutocompleteItem(element, { state, emit }) {
54
+ useListboxItem(element, { state, emit });
58
55
  const open = openContext.consume(element);
59
56
  useEffect(element, () => {
60
57
  var _a;
@@ -64,57 +61,59 @@ function useAutocompleteItem(element, state) {
64
61
  });
65
62
  }
66
63
 
64
+ // src/components/autocomplete/autocomplete-item/types.ts
65
+ import { listboxItemEvents } from "@aria-ui/listbox";
66
+ var autocompleteItemProps = {
67
+ value: {
68
+ default: ""
69
+ }
70
+ };
71
+ var autocompleteItemEvents = listboxItemEvents;
72
+
67
73
  // src/components/autocomplete/autocomplete-item/element.gen.ts
68
- var AutocompleteItemElement = class extends ElementBuilder2(useAutocompleteItem, defaultAutocompleteItemProps) {
74
+ var AutocompleteItemElement = class extends defineCustomElement2({
75
+ props: autocompleteItemProps,
76
+ events: autocompleteItemEvents,
77
+ setup: useAutocompleteItem
78
+ }) {
69
79
  };
70
- defineCustomElement("prosekit-autocomplete-item", AutocompleteItemElement);
80
+ registerCustomElement2("prosekit-autocomplete-item", AutocompleteItemElement);
71
81
 
72
82
  // src/components/autocomplete/autocomplete-list/element.gen.ts
73
- import { ElementBuilder as ElementBuilder3 } from "@aria-ui/core";
74
-
75
- // src/components/autocomplete/autocomplete-list/props.ts
76
- import { defaultListboxProps } from "@aria-ui/listbox";
77
- var defaultFilter = defaultListboxProps.filter;
78
- var defaultAutocompleteListProps = {
79
- filter: defaultFilter,
80
- editor: null
81
- };
83
+ import { defineCustomElement as defineCustomElement3, registerCustomElement as registerCustomElement3 } from "@aria-ui/core";
82
84
 
83
- // src/components/autocomplete/autocomplete-list/state.ts
85
+ // src/components/autocomplete/autocomplete-list/setup.ts
84
86
  import {
85
- mapSignals,
87
+ createSignal,
86
88
  useEffect as useEffect2
87
89
  } from "@aria-ui/core";
88
90
  import {
89
- defaultListboxProps as defaultListboxProps2,
91
+ listboxProps,
90
92
  useListbox
91
- } from "@aria-ui/listbox";
93
+ } from "@aria-ui/listbox/elements";
92
94
  import {
93
95
  Priority,
94
96
  defineDOMEventHandler,
95
97
  withPriority
96
98
  } from "@prosekit/core";
97
- import omit from "just-omit";
98
- function useAutocompleteList(element, state) {
99
+ function useAutocompleteList(element, { state, emit }) {
99
100
  const open = openContext.consume(element);
100
101
  const query = queryContext.consume(element);
101
102
  const onSubmit = onSubmitContext.consume(element);
102
- const onKeydownHandlerAdd = useKeyboardHandler(element, open, state.editor);
103
- const onValueChange = (value) => {
104
- var _a;
105
- if (value) {
106
- (_a = onSubmit.peek()) == null ? void 0 : _a();
107
- }
108
- };
109
- const listboxState = {
110
- ...mapSignals({
111
- ...omit(defaultListboxProps2, ["filter"]),
112
- onKeydownHandlerAdd,
113
- onValueChange
114
- }),
115
- filter: state.filter
116
- };
117
- useListbox(element, listboxState);
103
+ const keydownTarget = useKeyDownTarget(element, open, state.editor);
104
+ const listboxState = getStateWithDefaults(
105
+ { filter: state.filter, eventTarget: createSignal(keydownTarget) },
106
+ listboxProps
107
+ );
108
+ useEffect2(element, () => {
109
+ element.addEventListener("valueChange", () => {
110
+ var _a;
111
+ if (onSubmit) {
112
+ (_a = onSubmit.get()) == null ? void 0 : _a();
113
+ }
114
+ });
115
+ });
116
+ useListbox(element, { state: listboxState, emit });
118
117
  useEffect2(element, () => {
119
118
  listboxState.query.set(query.get());
120
119
  });
@@ -142,9 +141,8 @@ function useAutocompleteList(element, state) {
142
141
  element.tabIndex = -1;
143
142
  });
144
143
  }
145
- function useKeyboardHandler(element, open, editor) {
146
- let keydownHandler = null;
147
- let disposeKeydownHandler;
144
+ function useKeyDownTarget(element, open, editor) {
145
+ const keydownHandlers = [];
148
146
  useEffect2(element, () => {
149
147
  const editorValue = editor.get();
150
148
  if (!editorValue) {
@@ -156,62 +154,61 @@ function useKeyboardHandler(element, open, editor) {
156
154
  if (view.composing || event.defaultPrevented || !open.get()) {
157
155
  return false;
158
156
  }
159
- keydownHandler == null ? void 0 : keydownHandler(event);
157
+ keydownHandlers.forEach((handler) => handler(event));
160
158
  return event.defaultPrevented;
161
159
  }
162
160
  );
163
- disposeKeydownHandler == null ? void 0 : disposeKeydownHandler();
164
- disposeKeydownHandler = editorValue.use(
165
- withPriority(extension, Priority.highest)
166
- );
161
+ return editorValue.use(withPriority(extension, Priority.highest));
167
162
  });
168
- return (keydownHandlerValue) => {
169
- keydownHandler = keydownHandlerValue;
170
- return () => {
171
- disposeKeydownHandler == null ? void 0 : disposeKeydownHandler();
172
- disposeKeydownHandler = void 0;
173
- };
163
+ return {
164
+ addEventListener: (type, listener) => {
165
+ if (type === "keydown") {
166
+ keydownHandlers.push(listener);
167
+ }
168
+ },
169
+ removeEventListener: (type, listener) => {
170
+ if (type === "keydown") {
171
+ const index = keydownHandlers.indexOf(listener);
172
+ if (index !== -1) {
173
+ keydownHandlers.splice(index, 1);
174
+ }
175
+ }
176
+ }
174
177
  };
175
178
  }
176
179
 
180
+ // src/components/autocomplete/autocomplete-list/types.ts
181
+ import {
182
+ listboxEvents,
183
+ listboxProps as listboxProps2
184
+ } from "@aria-ui/listbox";
185
+ var autocompleteListProps = {
186
+ filter: listboxProps2.filter,
187
+ editor: { default: null }
188
+ };
189
+ var autocompleteListEvents = listboxEvents;
190
+
177
191
  // src/components/autocomplete/autocomplete-list/element.gen.ts
178
- var AutocompleteListElement = class extends ElementBuilder3(useAutocompleteList, defaultAutocompleteListProps) {
192
+ var AutocompleteListElement = class extends defineCustomElement3({
193
+ props: autocompleteListProps,
194
+ events: autocompleteListEvents,
195
+ setup: useAutocompleteList
196
+ }) {
179
197
  };
180
- defineCustomElement("prosekit-autocomplete-list", AutocompleteListElement);
198
+ registerCustomElement3("prosekit-autocomplete-list", AutocompleteListElement);
181
199
 
182
200
  // src/components/autocomplete/autocomplete-popover/element.gen.ts
183
- import { ElementBuilder as ElementBuilder4 } from "@aria-ui/core";
201
+ import { defineCustomElement as defineCustomElement4, registerCustomElement as registerCustomElement4 } from "@aria-ui/core";
184
202
 
185
- // src/components/autocomplete/autocomplete-popover/props.ts
186
- import {
187
- defaultOverlayPositionerProps
188
- } from "@aria-ui/overlay";
189
- var body = typeof document !== "undefined" && document.querySelector("body");
190
- var defaultBoundary = body || "clippingAncestors";
191
- var defaultAutocompletePopoverProps = Object.freeze({
192
- ...defaultOverlayPositionerProps,
193
- editor: null,
194
- regex: null,
195
- onQueryChange: null,
196
- onOpenChange: null,
197
- placement: "bottom-start",
198
- offset: 4,
199
- inline: true,
200
- hoist: true,
201
- fitViewport: true,
202
- boundary: defaultBoundary,
203
- overflowPadding: 8
204
- });
205
-
206
- // src/components/autocomplete/autocomplete-popover/state.ts
203
+ // src/components/autocomplete/autocomplete-popover/setup.ts
207
204
  import {
208
205
  createComputed,
209
- createSignal as createSignal2,
206
+ createSignal as createSignal3,
210
207
  useAnimationFrame,
211
208
  useAttribute,
212
209
  useEffect as useEffect4
213
210
  } from "@aria-ui/core";
214
- import { useOverlayPositionerState } from "@aria-ui/overlay";
211
+ import { useOverlayPositionerState } from "@aria-ui/overlay/elements";
215
212
  import { usePresence } from "@aria-ui/presence";
216
213
  import {
217
214
  Priority as Priority2,
@@ -225,11 +222,11 @@ import {
225
222
 
226
223
  // src/hooks/use-first-rendering.ts
227
224
  import {
228
- createSignal,
225
+ createSignal as createSignal2,
229
226
  useEffect as useEffect3
230
227
  } from "@aria-ui/core";
231
228
  function useFirstRendering(host) {
232
- const firstRendering = createSignal(true);
229
+ const firstRendering = createSignal2(true);
233
230
  useEffect3(host, () => {
234
231
  requestAnimationFrame(() => {
235
232
  firstRendering.set(false);
@@ -243,13 +240,13 @@ function defaultQueryBuilder(match) {
243
240
  return match[0].toLowerCase().replace(/[!"#$%&'()*+,-./:;<=>?@[\\\]^_`{|}~]/g, "").replace(/\s\s+/g, " ").trim();
244
241
  }
245
242
 
246
- // src/components/autocomplete/autocomplete-popover/state.ts
247
- function useAutocompletePopover(host, state) {
243
+ // src/components/autocomplete/autocomplete-popover/setup.ts
244
+ function useAutocompletePopover(host, { state }) {
248
245
  const { editor, regex, ...overlayState } = state;
249
- const reference = createSignal2(null);
250
- const query = createSignal2("");
251
- const onDismiss = createSignal2(null);
252
- const onSubmit = createSignal2(null);
246
+ const reference = createSignal3(null);
247
+ const query = createSignal3("");
248
+ const onDismiss = createSignal3(null);
249
+ const onSubmit = createSignal3(null);
253
250
  const presence = createComputed(() => !!reference.get());
254
251
  queryContext.provide(host, query);
255
252
  onSubmitContext.provide(host, onSubmit);
@@ -318,8 +315,6 @@ function createAutocompleteRule(editor, regex, reference, query, onDismiss, onSu
318
315
  const handleLeave = () => {
319
316
  reference.set(null);
320
317
  query.set("");
321
- onDismiss.set(null);
322
- onSubmit.set(null);
323
318
  };
324
319
  return new AutocompleteRule({
325
320
  regex,
@@ -344,17 +339,48 @@ function useEscapeKeydown(host, editor, handler) {
344
339
  return useEditorExtension(host, editor, extension);
345
340
  }
346
341
 
342
+ // src/components/autocomplete/autocomplete-popover/types.ts
343
+ import {
344
+ overlayPositionerEvents,
345
+ overlayPositionerProps
346
+ } from "@aria-ui/overlay/elements";
347
+ var body = typeof document !== "undefined" && document.querySelector("body");
348
+ var defaultBoundary = body || "clippingAncestors";
349
+ var autocompletePopoverProps = {
350
+ ...overlayPositionerProps,
351
+ editor: { default: null },
352
+ regex: { default: null },
353
+ onQueryChange: { default: null },
354
+ onOpenChange: { default: null },
355
+ placement: { default: "bottom-start" },
356
+ offset: { default: 4 },
357
+ inline: { default: true },
358
+ hoist: { default: true },
359
+ fitViewport: { default: true },
360
+ boundary: { default: defaultBoundary },
361
+ overflowPadding: { default: 8 }
362
+ };
363
+ var autocompletePopoverEvents = overlayPositionerEvents;
364
+
347
365
  // src/components/autocomplete/autocomplete-popover/element.gen.ts
348
- var AutocompletePopoverElement = class extends ElementBuilder4(useAutocompletePopover, defaultAutocompletePopoverProps) {
366
+ var AutocompletePopoverElement = class extends defineCustomElement4({
367
+ props: autocompletePopoverProps,
368
+ events: autocompletePopoverEvents,
369
+ setup: useAutocompletePopover
370
+ }) {
349
371
  };
350
- defineCustomElement("prosekit-autocomplete-popover", AutocompletePopoverElement);
372
+ registerCustomElement4("prosekit-autocomplete-popover", AutocompletePopoverElement);
351
373
  export {
352
374
  AutocompleteEmptyElement,
353
375
  AutocompleteItemElement,
354
376
  AutocompleteListElement,
355
377
  AutocompletePopoverElement,
356
- defaultAutocompleteEmptyProps,
357
- defaultAutocompleteItemProps,
358
- defaultAutocompleteListProps,
359
- defaultAutocompletePopoverProps
378
+ autocompleteEmptyEvents,
379
+ autocompleteEmptyProps,
380
+ autocompleteItemEvents,
381
+ autocompleteItemProps,
382
+ autocompleteListEvents,
383
+ autocompleteListProps,
384
+ autocompletePopoverEvents,
385
+ autocompletePopoverProps
360
386
  };
@@ -1,15 +1,15 @@
1
- export { BlockDragHandleElement } from './_tsup-dts-rollup';
2
- export { defaultBlockDragHandleProps } from './_tsup-dts-rollup';
3
- export { BlockDragHandleProps } from './_tsup-dts-rollup';
4
1
  export { BlockHandleAddElement } from './_tsup-dts-rollup';
5
- export { defaultBlockHandleAddProps } from './_tsup-dts-rollup';
2
+ export { blockHandleAddEvents } from './_tsup-dts-rollup';
3
+ export { blockHandleAddProps } from './_tsup-dts-rollup';
4
+ export { BlockHandleAddEvents } from './_tsup-dts-rollup';
6
5
  export { BlockHandleAddProps } from './_tsup-dts-rollup';
7
6
  export { BlockHandleDraggableElement } from './_tsup-dts-rollup';
8
- export { defaultBlockHandleDraggableProps } from './_tsup-dts-rollup';
7
+ export { blockHandleDraggableEvents } from './_tsup-dts-rollup';
8
+ export { blockHandleDraggableProps } from './_tsup-dts-rollup';
9
+ export { BlockHandleDraggableEvents } from './_tsup-dts-rollup';
9
10
  export { BlockHandleDraggableProps } from './_tsup-dts-rollup';
10
11
  export { BlockHandlePopoverElement } from './_tsup-dts-rollup';
11
- export { defaultBlockHandlePopoverProps } from './_tsup-dts-rollup';
12
+ export { blockHandlePopoverEvents } from './_tsup-dts-rollup';
13
+ export { blockHandlePopoverProps } from './_tsup-dts-rollup';
14
+ export { BlockHandlePopoverEvents } from './_tsup-dts-rollup';
12
15
  export { BlockHandlePopoverProps } from './_tsup-dts-rollup';
13
- export { BlockPopoverElement } from './_tsup-dts-rollup';
14
- export { defaultBlockPopoverProps } from './_tsup-dts-rollup';
15
- export { BlockPopoverProps } from './_tsup-dts-rollup';