@prosekit/web 0.8.0-beta.0 → 0.8.0-beta.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.
Files changed (207) hide show
  1. package/dist/prosekit-web-autocomplete.d.ts +112 -90
  2. package/dist/prosekit-web-autocomplete.d.ts.map +1 -1
  3. package/dist/prosekit-web-autocomplete.js +292 -217
  4. package/dist/prosekit-web-autocomplete.js.map +1 -1
  5. package/dist/prosekit-web-block-handle.d.ts +95 -62
  6. package/dist/prosekit-web-block-handle.d.ts.map +1 -1
  7. package/dist/prosekit-web-block-handle.js +219 -114
  8. package/dist/prosekit-web-block-handle.js.map +1 -1
  9. package/dist/prosekit-web-drop-indicator.d.ts +13 -15
  10. package/dist/prosekit-web-drop-indicator.d.ts.map +1 -1
  11. package/dist/prosekit-web-drop-indicator.js +34 -30
  12. package/dist/prosekit-web-drop-indicator.js.map +1 -1
  13. package/dist/prosekit-web-inline-popover.d.ts +88 -54
  14. package/dist/prosekit-web-inline-popover.d.ts.map +1 -1
  15. package/dist/prosekit-web-inline-popover.js +129 -79
  16. package/dist/prosekit-web-inline-popover.js.map +1 -1
  17. package/dist/prosekit-web-menu.d.ts +13 -0
  18. package/dist/prosekit-web-menu.d.ts.map +1 -0
  19. package/dist/prosekit-web-menu.js +53 -0
  20. package/dist/prosekit-web-menu.js.map +1 -0
  21. package/dist/prosekit-web-popover.d.ts +7 -26
  22. package/dist/prosekit-web-popover.d.ts.map +1 -1
  23. package/dist/prosekit-web-popover.js +31 -29
  24. package/dist/prosekit-web-popover.js.map +1 -1
  25. package/dist/prosekit-web-resizable.d.ts +92 -51
  26. package/dist/prosekit-web-resizable.d.ts.map +1 -1
  27. package/dist/prosekit-web-resizable.js +139 -131
  28. package/dist/prosekit-web-resizable.js.map +1 -1
  29. package/dist/prosekit-web-table-handle.d.ts +166 -199
  30. package/dist/prosekit-web-table-handle.d.ts.map +1 -1
  31. package/dist/prosekit-web-table-handle.js +495 -496
  32. package/dist/prosekit-web-table-handle.js.map +1 -1
  33. package/dist/prosekit-web-tooltip.d.ts +7 -26
  34. package/dist/prosekit-web-tooltip.d.ts.map +1 -1
  35. package/dist/prosekit-web-tooltip.js +31 -29
  36. package/dist/prosekit-web-tooltip.js.map +1 -1
  37. package/dist/use-editor-extension.js +2 -2
  38. package/dist/use-editor-extension.js.map +1 -1
  39. package/dist/use-scrolling.js +17 -8
  40. package/dist/use-scrolling.js.map +1 -1
  41. package/package.json +28 -23
  42. package/src/components/autocomplete/autocomplete-empty.ts +45 -0
  43. package/src/components/autocomplete/autocomplete-item.ts +65 -0
  44. package/src/components/autocomplete/autocomplete-popup.ts +95 -0
  45. package/src/components/autocomplete/autocomplete-positioner.ts +98 -0
  46. package/src/components/autocomplete/autocomplete-root.ts +280 -0
  47. package/src/components/autocomplete/context.ts +16 -14
  48. package/src/components/autocomplete/index.ts +65 -0
  49. package/src/components/block-handle/block-handle-add.ts +71 -0
  50. package/src/components/block-handle/block-handle-draggable.ts +158 -0
  51. package/src/components/block-handle/block-handle-popup.ts +43 -0
  52. package/src/components/block-handle/block-handle-positioner.ts +89 -0
  53. package/src/components/block-handle/block-handle-root.ts +116 -0
  54. package/src/components/block-handle/context.ts +9 -18
  55. package/src/components/block-handle/hover-state.ts +16 -0
  56. package/src/components/block-handle/index.ts +59 -0
  57. package/src/components/block-handle/{block-handle-popover/pointer-move.ts → pointer-move.ts} +8 -7
  58. package/src/components/block-handle/{block-handle-draggable/set-drag-preview.ts → set-drag-preview.ts} +4 -4
  59. package/src/components/block-handle/use-hover-extension.ts +65 -0
  60. package/src/components/drop-indicator/drop-indicator.ts +128 -0
  61. package/src/components/drop-indicator/index.ts +18 -0
  62. package/src/components/inline-popover/index.ts +41 -0
  63. package/src/components/inline-popover/inline-popover-popup.ts +52 -0
  64. package/src/components/inline-popover/inline-popover-positioner.ts +98 -0
  65. package/src/components/inline-popover/inline-popover-root.ts +122 -0
  66. package/src/components/inline-popover/store.ts +6 -0
  67. package/src/components/menu/index.ts +92 -0
  68. package/src/components/popover/index.ts +53 -0
  69. package/src/components/resizable/{resizable-handle/calc-resize.ts → calc-resize.ts} +1 -1
  70. package/src/components/resizable/context.ts +3 -6
  71. package/src/components/resizable/index.ts +32 -0
  72. package/src/components/resizable/resizable-handle.ts +134 -0
  73. package/src/components/resizable/resizable-root.ts +184 -0
  74. package/src/components/table-handle/dnd.ts +16 -27
  75. package/src/components/table-handle/index.ts +125 -0
  76. package/src/components/table-handle/{table-handle-drag-preview/render-preview.ts → render-preview.ts} +5 -5
  77. package/src/components/table-handle/shared.ts +61 -0
  78. package/src/components/table-handle/store.ts +117 -0
  79. package/src/components/table-handle/table-handle-column-menu-root.ts +51 -0
  80. package/src/components/table-handle/table-handle-column-menu-trigger.ts +107 -0
  81. package/src/components/table-handle/table-handle-column-popup.ts +44 -0
  82. package/src/components/table-handle/table-handle-column-positioner.ts +67 -0
  83. package/src/components/table-handle/table-handle-drag-preview.ts +169 -0
  84. package/src/components/table-handle/table-handle-drop-indicator.ts +166 -0
  85. package/src/components/table-handle/table-handle-root.ts +103 -0
  86. package/src/components/table-handle/table-handle-row-menu-root.ts +51 -0
  87. package/src/components/table-handle/table-handle-row-menu-trigger.ts +107 -0
  88. package/src/components/table-handle/table-handle-row-popup.ts +42 -0
  89. package/src/components/table-handle/table-handle-row-positioner.ts +67 -0
  90. package/src/components/table-handle/use-drop.ts +74 -0
  91. package/src/components/table-handle/{hooks/use-empty-image.ts → use-empty-image.ts} +2 -3
  92. package/src/components/table-handle/utils.ts +0 -11
  93. package/src/components/tooltip/index.ts +52 -0
  94. package/src/hooks/use-editor-extension.ts +4 -4
  95. package/src/hooks/use-editor-focus-event.ts +4 -4
  96. package/src/hooks/use-editor-typing.ts +12 -16
  97. package/src/hooks/use-editor-update-event.ts +4 -4
  98. package/src/hooks/use-keymap.ts +4 -4
  99. package/src/hooks/use-scrolling.ts +11 -10
  100. package/src/hooks/use-selecting.ts +8 -15
  101. package/src/utils/event.ts +28 -0
  102. package/src/utils/lazy-signal.spec.ts +68 -0
  103. package/src/utils/lazy-signal.ts +17 -0
  104. package/src/utils/prefers-reduced-motion.ts +6 -0
  105. package/src/utils/prevent-default.ts +3 -0
  106. package/src/utils/use-html-element-at.ts +17 -0
  107. package/src/utils/use-no-focus.ts +7 -0
  108. package/dist/get-default-state.js +0 -11
  109. package/dist/get-default-state.js.map +0 -1
  110. package/src/components/autocomplete/autocomplete-empty/element.gen.ts +0 -18
  111. package/src/components/autocomplete/autocomplete-empty/setup.ts +0 -6
  112. package/src/components/autocomplete/autocomplete-empty/types.ts +0 -13
  113. package/src/components/autocomplete/autocomplete-item/element.gen.ts +0 -18
  114. package/src/components/autocomplete/autocomplete-item/setup.ts +0 -30
  115. package/src/components/autocomplete/autocomplete-item/types.ts +0 -25
  116. package/src/components/autocomplete/autocomplete-list/element.gen.ts +0 -18
  117. package/src/components/autocomplete/autocomplete-list/setup.ts +0 -125
  118. package/src/components/autocomplete/autocomplete-list/types.ts +0 -22
  119. package/src/components/autocomplete/autocomplete-popover/element.gen.ts +0 -18
  120. package/src/components/autocomplete/autocomplete-popover/setup.ts +0 -169
  121. package/src/components/autocomplete/autocomplete-popover/types.ts +0 -100
  122. package/src/components/autocomplete/index.gen.ts +0 -17
  123. package/src/components/block-handle/block-handle-add/element.gen.ts +0 -18
  124. package/src/components/block-handle/block-handle-add/setup.ts +0 -33
  125. package/src/components/block-handle/block-handle-add/types.ts +0 -23
  126. package/src/components/block-handle/block-handle-draggable/element.gen.ts +0 -18
  127. package/src/components/block-handle/block-handle-draggable/setup.ts +0 -113
  128. package/src/components/block-handle/block-handle-draggable/types.ts +0 -23
  129. package/src/components/block-handle/block-handle-popover/element.gen.ts +0 -18
  130. package/src/components/block-handle/block-handle-popover/setup.ts +0 -68
  131. package/src/components/block-handle/block-handle-popover/types.ts +0 -81
  132. package/src/components/block-handle/index.gen.ts +0 -13
  133. package/src/components/drop-indicator/drop-indicator/element.gen.ts +0 -18
  134. package/src/components/drop-indicator/drop-indicator/setup.ts +0 -75
  135. package/src/components/drop-indicator/drop-indicator/types.ts +0 -31
  136. package/src/components/drop-indicator/index.gen.ts +0 -5
  137. package/src/components/inline-popover/index.gen.ts +0 -5
  138. package/src/components/inline-popover/inline-popover/element.gen.ts +0 -18
  139. package/src/components/inline-popover/inline-popover/setup.ts +0 -111
  140. package/src/components/inline-popover/inline-popover/types.ts +0 -112
  141. package/src/components/popover/index.gen.ts +0 -13
  142. package/src/components/popover/popover-content/element.gen.ts +0 -18
  143. package/src/components/popover/popover-content/setup.ts +0 -1
  144. package/src/components/popover/popover-content/types.ts +0 -6
  145. package/src/components/popover/popover-root/element.gen.ts +0 -18
  146. package/src/components/popover/popover-root/setup.ts +0 -1
  147. package/src/components/popover/popover-root/types.ts +0 -6
  148. package/src/components/popover/popover-trigger/element.gen.ts +0 -18
  149. package/src/components/popover/popover-trigger/setup.ts +0 -1
  150. package/src/components/popover/popover-trigger/types.ts +0 -6
  151. package/src/components/resizable/index.gen.ts +0 -9
  152. package/src/components/resizable/resizable-handle/element.gen.ts +0 -18
  153. package/src/components/resizable/resizable-handle/setup.ts +0 -106
  154. package/src/components/resizable/resizable-handle/types.ts +0 -29
  155. package/src/components/resizable/resizable-root/element.gen.ts +0 -18
  156. package/src/components/resizable/resizable-root/setup.ts +0 -84
  157. package/src/components/resizable/resizable-root/types.ts +0 -59
  158. package/src/components/table-handle/context.ts +0 -43
  159. package/src/components/table-handle/hooks/use-drop.ts +0 -85
  160. package/src/components/table-handle/index.gen.ts +0 -37
  161. package/src/components/table-handle/table-handle-column-root/element.gen.ts +0 -18
  162. package/src/components/table-handle/table-handle-column-root/setup.ts +0 -60
  163. package/src/components/table-handle/table-handle-column-root/types.ts +0 -73
  164. package/src/components/table-handle/table-handle-column-trigger/element.gen.ts +0 -18
  165. package/src/components/table-handle/table-handle-column-trigger/setup.ts +0 -64
  166. package/src/components/table-handle/table-handle-column-trigger/types.ts +0 -20
  167. package/src/components/table-handle/table-handle-drag-preview/element.gen.ts +0 -18
  168. package/src/components/table-handle/table-handle-drag-preview/setup.ts +0 -57
  169. package/src/components/table-handle/table-handle-drag-preview/types.ts +0 -14
  170. package/src/components/table-handle/table-handle-drag-preview/updater.ts +0 -90
  171. package/src/components/table-handle/table-handle-drop-indicator/element.gen.ts +0 -18
  172. package/src/components/table-handle/table-handle-drop-indicator/setup.ts +0 -52
  173. package/src/components/table-handle/table-handle-drop-indicator/types.ts +0 -15
  174. package/src/components/table-handle/table-handle-drop-indicator/updater.ts +0 -96
  175. package/src/components/table-handle/table-handle-popover-content/element.gen.ts +0 -18
  176. package/src/components/table-handle/table-handle-popover-content/setup.ts +0 -83
  177. package/src/components/table-handle/table-handle-popover-content/types.ts +0 -32
  178. package/src/components/table-handle/table-handle-popover-item/element.gen.ts +0 -18
  179. package/src/components/table-handle/table-handle-popover-item/setup.ts +0 -17
  180. package/src/components/table-handle/table-handle-popover-item/types.ts +0 -16
  181. package/src/components/table-handle/table-handle-root/element.gen.ts +0 -18
  182. package/src/components/table-handle/table-handle-root/setup.ts +0 -86
  183. package/src/components/table-handle/table-handle-root/types.ts +0 -23
  184. package/src/components/table-handle/table-handle-row-root/element.gen.ts +0 -18
  185. package/src/components/table-handle/table-handle-row-root/setup.ts +0 -70
  186. package/src/components/table-handle/table-handle-row-root/types.ts +0 -68
  187. package/src/components/table-handle/table-handle-row-trigger/element.gen.ts +0 -18
  188. package/src/components/table-handle/table-handle-row-trigger/setup.ts +0 -63
  189. package/src/components/table-handle/table-handle-row-trigger/types.ts +0 -23
  190. package/src/components/tooltip/index.gen.ts +0 -13
  191. package/src/components/tooltip/tooltip-content/element.gen.ts +0 -18
  192. package/src/components/tooltip/tooltip-content/setup.ts +0 -1
  193. package/src/components/tooltip/tooltip-content/types.ts +0 -6
  194. package/src/components/tooltip/tooltip-root/element.gen.ts +0 -18
  195. package/src/components/tooltip/tooltip-root/setup.ts +0 -1
  196. package/src/components/tooltip/tooltip-root/types.ts +0 -6
  197. package/src/components/tooltip/tooltip-trigger/element.gen.ts +0 -18
  198. package/src/components/tooltip/tooltip-trigger/setup.ts +0 -1
  199. package/src/components/tooltip/tooltip-trigger/types.ts +0 -6
  200. package/src/hooks/use-first-rendering.ts +0 -15
  201. package/src/utils/get-default-state.spec.ts +0 -42
  202. package/src/utils/get-default-state.ts +0 -18
  203. /package/src/components/autocomplete/{autocomplete-popover/helpers.spec.ts → helpers.spec.ts} +0 -0
  204. /package/src/components/autocomplete/{autocomplete-popover/helpers.ts → helpers.ts} +0 -0
  205. /package/src/components/inline-popover/{inline-popover/virtual-selection-element.ts → virtual-selection-element.ts} +0 -0
  206. /package/src/components/resizable/{resizable-handle/calc-resize.spec.ts → calc-resize.spec.ts} +0 -0
  207. /package/src/components/table-handle/{table-handle-drop-indicator/calc-drag-over.ts → calc-drag-over.ts} +0 -0
@@ -1,22 +0,0 @@
1
- import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'
2
- import { listboxEvents, listboxProps, type ListboxEvents, type ListboxProps } from '@aria-ui/listbox'
3
- import type { Editor } from '@prosekit/core'
4
-
5
- export interface AutocompleteListProps extends Pick<ListboxProps, 'filter'> {
6
- /**
7
- * The ProseKit editor instance.
8
- *
9
- * @default null
10
- * @hidden
11
- */
12
- editor: Editor | null
13
- }
14
-
15
- export const autocompleteListProps: PropDeclarations<AutocompleteListProps> = {
16
- filter: listboxProps.filter,
17
- editor: { default: null },
18
- }
19
-
20
- export interface AutocompleteListEvents extends ListboxEvents {}
21
-
22
- export const autocompleteListEvents: EventDeclarations<AutocompleteListEvents> = { ...listboxEvents }
@@ -1,18 +0,0 @@
1
- import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
2
-
3
- import { useAutocompletePopover } from "./setup.ts"
4
- import { autocompletePopoverEvents, autocompletePopoverProps, type AutocompletePopoverEvents, type AutocompletePopoverProps } from "./types.ts"
5
-
6
- const AutocompletePopoverElementBase: BaseElementConstructor<AutocompletePopoverProps> = defineCustomElement<
7
- AutocompletePopoverProps,
8
- AutocompletePopoverEvents
9
- >({
10
- props: autocompletePopoverProps,
11
- events: autocompletePopoverEvents,
12
- setup: useAutocompletePopover,
13
- })
14
- class AutocompletePopoverElement extends AutocompletePopoverElementBase {}
15
-
16
- registerCustomElement('prosekit-autocomplete-popover', AutocompletePopoverElement)
17
-
18
- export { AutocompletePopoverElement }
@@ -1,169 +0,0 @@
1
- import {
2
- createComputed,
3
- createSignal,
4
- useAnimationFrame,
5
- useAttribute,
6
- useEffect,
7
- type ConnectableElement,
8
- type ReadonlySignal,
9
- type SetupOptions,
10
- type Signal,
11
- } from '@aria-ui/core'
12
- import { useOverlayPositionerState } from '@aria-ui/overlay/elements'
13
- import { usePresence } from '@aria-ui/presence'
14
- import { defineKeymap, withPriority, type Editor, type Priority } from '@prosekit/core'
15
- import { AutocompleteRule, defineAutocomplete, type MatchHandler } from '@prosekit/extensions/autocomplete'
16
-
17
- import { useEditorExtension } from '../../../hooks/use-editor-extension.ts'
18
- import { useFirstRendering } from '../../../hooks/use-first-rendering.ts'
19
- import { getSafeEditorView } from '../../../utils/get-safe-editor-view.ts'
20
- import { onSubmitContext, openContext, queryContext } from '../context.ts'
21
-
22
- import { defaultQueryBuilder } from './helpers.ts'
23
- import type { AutocompletePopoverEvents, AutocompletePopoverProps } from './types.ts'
24
-
25
- /**
26
- * @internal
27
- */
28
- export function useAutocompletePopover(
29
- host: ConnectableElement,
30
- {
31
- state,
32
- emit,
33
- }: SetupOptions<AutocompletePopoverProps, AutocompletePopoverEvents>,
34
- ): void {
35
- const { editor, regex, ...overlayState } = state
36
-
37
- const reference = createSignal<Element | null>(null)
38
- const query = createSignal<string>('')
39
- const onDismiss = createSignal<VoidFunction | null>(null)
40
- const onSubmit = createSignal<VoidFunction | null>(null)
41
- const presence = createComputed(() => !!reference.get())
42
-
43
- queryContext.provide(host, query)
44
- onSubmitContext.provide(host, onSubmit)
45
- openContext.provide(host, presence)
46
-
47
- useEscapeKeydown(host, editor, createKeymapHandler(onDismiss, presence))
48
-
49
- useAutocompleteExtension(
50
- host,
51
- editor,
52
- regex,
53
- reference,
54
- query,
55
- onDismiss,
56
- onSubmit,
57
- )
58
-
59
- useOverlayPositionerState(host, overlayState, { reference })
60
-
61
- useAttribute(host, 'data-state', () => (presence.get() ? 'open' : 'closed'))
62
- usePresence(host, presence)
63
-
64
- const firstRendering = useFirstRendering(host)
65
-
66
- useEffect(host, () => {
67
- const queryValue = query.get()
68
-
69
- if (!firstRendering.peek()) {
70
- emit('queryChange', queryValue)
71
- }
72
- })
73
-
74
- useAnimationFrame(host, () => {
75
- const presenceValue = presence.get()
76
- return () => {
77
- emit('openChange', presenceValue)
78
- }
79
- })
80
- }
81
-
82
- function useAutocompleteExtension(
83
- host: ConnectableElement,
84
- editor: ReadonlySignal<Editor | null>,
85
- regex: ReadonlySignal<RegExp | null>,
86
- reference: Signal<Element | null>,
87
- query: Signal<string>,
88
- onDismiss: Signal<VoidFunction | null>,
89
- onSubmit: Signal<VoidFunction | null>,
90
- ) {
91
- useEffect(host, () => {
92
- const editorValue = editor.get()
93
- const regexValue = regex.get()
94
-
95
- if (!editorValue || !regexValue) {
96
- return
97
- }
98
-
99
- const rule = createAutocompleteRule(
100
- editorValue,
101
- regexValue,
102
- reference,
103
- query,
104
- onDismiss,
105
- onSubmit,
106
- )
107
- const extension = defineAutocomplete(rule)
108
- return editorValue.use(extension)
109
- })
110
- }
111
-
112
- function createAutocompleteRule(
113
- editor: Editor,
114
- regex: RegExp,
115
- reference: Signal<Element | null>,
116
- query: Signal<string>,
117
- onDismiss: Signal<VoidFunction | null>,
118
- onSubmit: Signal<VoidFunction | null>,
119
- ) {
120
- const handleEnter: MatchHandler = (options) => {
121
- const view = getSafeEditorView(editor)
122
- const span = view?.dom.querySelector('.prosekit-autocomplete-match')
123
-
124
- if (span) {
125
- reference.set(span)
126
- }
127
-
128
- query.set(defaultQueryBuilder(options.match))
129
- onDismiss.set(options.ignoreMatch)
130
- onSubmit.set(options.deleteMatch)
131
- }
132
-
133
- const handleLeave = () => {
134
- reference.set(null)
135
- query.set('')
136
- }
137
-
138
- return new AutocompleteRule({
139
- regex,
140
- onEnter: handleEnter,
141
- onLeave: handleLeave,
142
- })
143
- }
144
-
145
- function createKeymapHandler(
146
- handler: ReadonlySignal<VoidFunction | null>,
147
- enabled: ReadonlySignal<boolean>,
148
- ) {
149
- return (): boolean => {
150
- if (!enabled.get()) {
151
- return false
152
- }
153
-
154
- const fn = handler.peek()
155
- if (!fn) return false
156
- fn()
157
- return true
158
- }
159
- }
160
-
161
- function useEscapeKeydown(
162
- host: ConnectableElement,
163
- editor: ReadonlySignal<Editor | null>,
164
- handler: () => boolean,
165
- ): void {
166
- const keymap = { Escape: handler }
167
- const extension = withPriority(defineKeymap(keymap), 4 satisfies typeof Priority.highest)
168
- useEditorExtension(host, editor, extension)
169
- }
@@ -1,100 +0,0 @@
1
- import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'
2
- import {
3
- overlayPositionerEvents,
4
- overlayPositionerProps,
5
- type OverlayPositionerEvents,
6
- type OverlayPositionerProps,
7
- } from '@aria-ui/overlay/elements'
8
- import type { Editor } from '@prosekit/core'
9
-
10
- export interface AutocompletePopoverProps extends OverlayPositionerProps {
11
- /**
12
- * The ProseKit editor instance.
13
- *
14
- * @default null
15
- * @hidden
16
- */
17
- editor: Editor | null
18
-
19
- /**
20
- * The regular expression to match the query text to autocomplete.
21
- *
22
- * @default null
23
- */
24
- regex: RegExp | null
25
-
26
- /**
27
- * The placement of the popover, relative to the text cursor.
28
- *
29
- * @default "bottom-start"
30
- */
31
- placement: OverlayPositionerProps['placement']
32
-
33
- /**
34
- * The distance between the popover and the hovered block.
35
- *
36
- * @default 4
37
- */
38
- offset: OverlayPositionerProps['offset']
39
-
40
- /**
41
- * @default true
42
- */
43
- inline: OverlayPositionerProps['inline']
44
-
45
- /**
46
- * @default true
47
- */
48
- hoist: OverlayPositionerProps['hoist']
49
-
50
- /**
51
- * @default true
52
- */
53
- fitViewport: OverlayPositionerProps['fitViewport']
54
-
55
- /**
56
- * @default "The body element"
57
- */
58
- boundary: OverlayPositionerProps['boundary']
59
-
60
- /**
61
- * @default 8
62
- */
63
- overflowPadding: OverlayPositionerProps['overflowPadding']
64
- }
65
-
66
- const body = typeof document !== 'undefined' && document.querySelector('body')
67
- const defaultBoundary = body || 'clippingAncestors'
68
-
69
- /** @internal */
70
- export const autocompletePopoverProps: PropDeclarations<AutocompletePopoverProps> = {
71
- ...overlayPositionerProps,
72
- editor: { default: null },
73
- regex: { default: null },
74
- placement: { default: 'bottom-start' },
75
- offset: { default: 4 },
76
- inline: { default: true },
77
- hoist: { default: true },
78
- fitViewport: { default: true },
79
- boundary: { default: defaultBoundary },
80
- overflowPadding: { default: 8 },
81
- }
82
-
83
- export interface AutocompletePopoverEvents extends OverlayPositionerEvents {
84
- /**
85
- * Fired when the open state changes.
86
- */
87
- openChange: CustomEvent<boolean>
88
-
89
- /**
90
- * Fired when the query changes.
91
- */
92
- queryChange: CustomEvent<string>
93
- }
94
-
95
- /** @internal */
96
- export const autocompletePopoverEvents: EventDeclarations<AutocompletePopoverEvents> = {
97
- ...overlayPositionerEvents,
98
- openChange: {},
99
- queryChange: {},
100
- }
@@ -1,17 +0,0 @@
1
- // This file is generated by packages/dev/src/gen-components.ts
2
-
3
- export { AutocompleteEmptyElement } from './autocomplete-empty/element.gen.ts'
4
- export { autocompleteEmptyEvents, autocompleteEmptyProps, type AutocompleteEmptyEvents, type AutocompleteEmptyProps } from './autocomplete-empty/types.ts'
5
- export { useAutocompleteEmpty } from './autocomplete-empty/setup.ts'
6
-
7
- export { AutocompleteItemElement } from './autocomplete-item/element.gen.ts'
8
- export { autocompleteItemEvents, autocompleteItemProps, type AutocompleteItemEvents, type AutocompleteItemProps } from './autocomplete-item/types.ts'
9
- export { useAutocompleteItem } from './autocomplete-item/setup.ts'
10
-
11
- export { AutocompleteListElement } from './autocomplete-list/element.gen.ts'
12
- export { autocompleteListEvents, autocompleteListProps, type AutocompleteListEvents, type AutocompleteListProps } from './autocomplete-list/types.ts'
13
- export { useAutocompleteList } from './autocomplete-list/setup.ts'
14
-
15
- export { AutocompletePopoverElement } from './autocomplete-popover/element.gen.ts'
16
- export { autocompletePopoverEvents, autocompletePopoverProps, type AutocompletePopoverEvents, type AutocompletePopoverProps } from './autocomplete-popover/types.ts'
17
- export { useAutocompletePopover } from './autocomplete-popover/setup.ts'
@@ -1,18 +0,0 @@
1
- import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
2
-
3
- import { useBlockHandleAdd } from "./setup.ts"
4
- import { blockHandleAddEvents, blockHandleAddProps, type BlockHandleAddEvents, type BlockHandleAddProps } from "./types.ts"
5
-
6
- const BlockHandleAddElementBase: BaseElementConstructor<BlockHandleAddProps> = defineCustomElement<
7
- BlockHandleAddProps,
8
- BlockHandleAddEvents
9
- >({
10
- props: blockHandleAddProps,
11
- events: blockHandleAddEvents,
12
- setup: useBlockHandleAdd,
13
- })
14
- class BlockHandleAddElement extends BlockHandleAddElementBase {}
15
-
16
- registerCustomElement('prosekit-block-handle-add', BlockHandleAddElement)
17
-
18
- export { BlockHandleAddElement }
@@ -1,33 +0,0 @@
1
- import { useEventListener, type ConnectableElement, type SignalState } from '@aria-ui/core'
2
- import { insertDefaultBlock } from '@prosekit/core'
3
-
4
- import { blockPopoverContext } from '../context.ts'
5
-
6
- import type { BlockHandleAddProps } from './types.ts'
7
-
8
- /**
9
- * @internal
10
- */
11
- export function useBlockHandleAdd(
12
- host: ConnectableElement,
13
- { state }: { state: SignalState<BlockHandleAddProps> },
14
- ): void {
15
- const context = blockPopoverContext.consume(host)
16
-
17
- useEventListener(host, 'pointerdown', (event) => {
18
- event.preventDefault()
19
-
20
- const editor = state.editor.get()
21
- const hoverState = context.get()
22
- if (!editor || !hoverState) {
23
- return
24
- }
25
-
26
- const { node, pos } = hoverState
27
- editor.exec(insertDefaultBlock({ pos: pos + node.nodeSize }))
28
- editor.focus()
29
-
30
- // Hide the drag handle
31
- context.set(null)
32
- })
33
- }
@@ -1,23 +0,0 @@
1
- import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'
2
- import type { Editor } from '@prosekit/core'
3
-
4
- export interface BlockHandleAddProps {
5
- /**
6
- * The ProseKit editor instance.
7
- *
8
- * @default null
9
- * @hidden
10
- */
11
- editor: Editor | null
12
- }
13
-
14
- /** @internal */
15
- export const blockHandleAddProps: PropDeclarations<BlockHandleAddProps> = {
16
- editor: { default: null },
17
- }
18
-
19
- /** @internal */
20
- export interface BlockHandleAddEvents {}
21
-
22
- /** @internal */
23
- export const blockHandleAddEvents: EventDeclarations<BlockHandleAddEvents> = {}
@@ -1,18 +0,0 @@
1
- import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
2
-
3
- import { useBlockHandleDraggable } from "./setup.ts"
4
- import { blockHandleDraggableEvents, blockHandleDraggableProps, type BlockHandleDraggableEvents, type BlockHandleDraggableProps } from "./types.ts"
5
-
6
- const BlockHandleDraggableElementBase: BaseElementConstructor<BlockHandleDraggableProps> = defineCustomElement<
7
- BlockHandleDraggableProps,
8
- BlockHandleDraggableEvents
9
- >({
10
- props: blockHandleDraggableProps,
11
- events: blockHandleDraggableEvents,
12
- setup: useBlockHandleDraggable,
13
- })
14
- class BlockHandleDraggableElement extends BlockHandleDraggableElementBase {}
15
-
16
- registerCustomElement('prosekit-block-handle-draggable', BlockHandleDraggableElement)
17
-
18
- export { BlockHandleDraggableElement }
@@ -1,113 +0,0 @@
1
- import { useAttribute, useEffect, useEventListener, type ConnectableElement, type ReadonlySignal, type SignalState } from '@aria-ui/core'
2
- import { isHTMLElement } from '@ocavue/utils'
3
- import type { Editor } from '@prosekit/core'
4
- import type { ViewDragging } from '@prosekit/extensions/drop-indicator'
5
- import { Fragment, Slice } from '@prosekit/pm/model'
6
- import { NodeSelection } from '@prosekit/pm/state'
7
- import type { EditorView } from '@prosekit/pm/view'
8
-
9
- import { DRAGGING_CLASS_NAME } from '../../../constants.ts'
10
- import { getSafeEditorView } from '../../../utils/get-safe-editor-view.ts'
11
- import { blockPopoverContext, draggingContext, type BlockPopoverContext, type HoverState } from '../context.ts'
12
-
13
- import { setDragPreview } from './set-drag-preview.ts'
14
- import type { BlockHandleDraggableProps } from './types.ts'
15
-
16
- /**
17
- * @internal
18
- */
19
- export function useBlockHandleDraggable(
20
- host: ConnectableElement,
21
- { state }: { state: SignalState<BlockHandleDraggableProps> },
22
- ): void {
23
- const context = blockPopoverContext.consume(host)
24
- const dragging = draggingContext.consume(host)
25
-
26
- useEffect(host, () => {
27
- host.draggable = true
28
- })
29
-
30
- usePointerDownHandler(host, context, state.editor)
31
-
32
- useEventListener(host, 'dragstart', (event) => {
33
- dragging.set(true)
34
-
35
- const view = getSafeEditorView(state.editor.get())
36
- const hoverState = context.get()
37
-
38
- if (view && hoverState) {
39
- view.dom.classList.add(DRAGGING_CLASS_NAME)
40
- createDraggingPreview(view, hoverState, event)
41
- setViewDragging(view, hoverState)
42
- }
43
- })
44
-
45
- useEventListener(host, 'dragend', () => {
46
- dragging.set(false)
47
-
48
- const view = getSafeEditorView(state.editor.get())
49
- if (view) {
50
- view.dom.classList.remove(DRAGGING_CLASS_NAME)
51
- }
52
- })
53
-
54
- useAttribute(host, 'data-dragging', () => (dragging.get() ? '' : undefined))
55
- }
56
-
57
- function usePointerDownHandler(
58
- host: ConnectableElement,
59
- context: ReadonlySignal<BlockPopoverContext>,
60
- editor: ReadonlySignal<Editor | null>,
61
- ) {
62
- useEventListener(host, 'pointerdown', () => {
63
- const { pos } = context.get() ?? {}
64
- const { view } = editor.get() ?? {}
65
-
66
- if (pos == null || view == null) {
67
- return
68
- }
69
-
70
- view.dispatch(
71
- view.state.tr.setSelection(NodeSelection.create(view.state.doc, pos)),
72
- )
73
-
74
- // Clicking the handle will blur the editor, so we need to focus it again.
75
- // We cannot call `event.preventDefault()` here to prevent the blur
76
- // because it will prevent the drag event from firing.
77
- requestAnimationFrame(() => {
78
- view.focus()
79
- })
80
- })
81
- }
82
-
83
- function createDraggingPreview(view: EditorView, hoverState: HoverState, event: DragEvent): void {
84
- if (!event.dataTransfer) {
85
- return
86
- }
87
-
88
- const { pos } = hoverState
89
-
90
- const element = view.nodeDOM(pos)
91
- if (!element || !isHTMLElement(element)) {
92
- return
93
- }
94
-
95
- event.dataTransfer.clearData()
96
- event.dataTransfer.setData('text/html', element.outerHTML)
97
- event.dataTransfer.effectAllowed = 'copyMove'
98
- setDragPreview(event, element)
99
-
100
- return
101
- }
102
-
103
- function setViewDragging(view: EditorView, hoverState: HoverState): void {
104
- const { node, pos } = hoverState
105
-
106
- const dragging: ViewDragging = {
107
- slice: new Slice(Fragment.from(node), 0, 0),
108
- move: true,
109
- node: NodeSelection.create(view.state.doc, pos),
110
- }
111
-
112
- view.dragging = dragging
113
- }
@@ -1,23 +0,0 @@
1
- import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'
2
- import type { Editor } from '@prosekit/core'
3
-
4
- export interface BlockHandleDraggableProps {
5
- /**
6
- * The ProseKit editor instance.
7
- *
8
- * @default null
9
- * @hidden
10
- */
11
- editor: Editor | null
12
- }
13
-
14
- /** @internal */
15
- export const blockHandleDraggableProps: PropDeclarations<BlockHandleDraggableProps> = {
16
- editor: { default: null },
17
- }
18
-
19
- /** @internal */
20
- export interface BlockHandleDraggableEvents {}
21
-
22
- /** @internal */
23
- export const blockHandleDraggableEvents: EventDeclarations<BlockHandleDraggableEvents> = {}
@@ -1,18 +0,0 @@
1
- import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
2
-
3
- import { useBlockHandlePopover } from "./setup.ts"
4
- import { blockHandlePopoverEvents, blockHandlePopoverProps, type BlockHandlePopoverEvents, type BlockHandlePopoverProps } from "./types.ts"
5
-
6
- const BlockHandlePopoverElementBase: BaseElementConstructor<BlockHandlePopoverProps> = defineCustomElement<
7
- BlockHandlePopoverProps,
8
- BlockHandlePopoverEvents
9
- >({
10
- props: blockHandlePopoverProps,
11
- events: blockHandlePopoverEvents,
12
- setup: useBlockHandlePopover,
13
- })
14
- class BlockHandlePopoverElement extends BlockHandlePopoverElementBase {}
15
-
16
- registerCustomElement('prosekit-block-handle-popover', BlockHandlePopoverElement)
17
-
18
- export { BlockHandlePopoverElement }
@@ -1,68 +0,0 @@
1
- import { createComputed, createSignal, useAttribute, type ConnectableElement, type ReadonlySignal, type SetupOptions } from '@aria-ui/core'
2
- import { useOverlayPositionerState } from '@aria-ui/overlay/elements'
3
- import { usePresence } from '@aria-ui/presence'
4
- import type { VirtualElement } from '@floating-ui/dom'
5
- import type { Editor } from '@prosekit/core'
6
-
7
- import { useEditorExtension } from '../../../hooks/use-editor-extension.ts'
8
- import { useScrolling } from '../../../hooks/use-scrolling.ts'
9
- import { blockPopoverContext, draggingContext, type BlockPopoverContext, type HoverState } from '../context.ts'
10
-
11
- import { defineElementHoverHandler, type ElementHoverHandler } from './pointer-move.ts'
12
- import type { BlockHandlePopoverEvents, BlockHandlePopoverProps } from './types.ts'
13
-
14
- /**
15
- * @internal
16
- */
17
- export function useBlockHandlePopover(
18
- host: ConnectableElement,
19
- { state, emit }: SetupOptions<BlockHandlePopoverProps, BlockHandlePopoverEvents>,
20
- ): void {
21
- const { editor, ...overlayState } = state
22
- const reference = createSignal<VirtualElement | null>(null)
23
- useOverlayPositionerState(host, overlayState, { reference })
24
-
25
- const context = createSignal<BlockPopoverContext>(null)
26
- blockPopoverContext.provide(host, context)
27
-
28
- const dragging = createSignal(false)
29
- draggingContext.provide(host, dragging)
30
-
31
- const scrolling = useScrolling(host)
32
- const open = createComputed(() => {
33
- return !!context.get() && !scrolling.get()
34
- })
35
-
36
- useHoverExtension(host, editor, (referenceValue, hoverState) => {
37
- reference.set(referenceValue)
38
- context.set(hoverState)
39
- const stateChangeDetails = hoverState ? { node: hoverState.node, pos: hoverState.pos } : null
40
- emit('stateChange', stateChangeDetails)
41
- })
42
-
43
- useAttribute(host, 'data-state', () => (open.get() ? 'open' : 'closed'))
44
- usePresence(host, open)
45
- }
46
-
47
- function useHoverExtension(
48
- host: ConnectableElement,
49
- editor: ReadonlySignal<Editor | null>,
50
- handler: ElementHoverHandler,
51
- ) {
52
- let prevHoverState: HoverState | null = null
53
-
54
- const extension = defineElementHoverHandler((reference, hoverState) => {
55
- if (isHoverStateEqual(prevHoverState, hoverState)) {
56
- return
57
- }
58
-
59
- prevHoverState = hoverState
60
- handler(reference, hoverState)
61
- })
62
-
63
- useEditorExtension(host, editor, extension)
64
- }
65
-
66
- function isHoverStateEqual(a: HoverState | null, b: HoverState | null) {
67
- return (!a && !b) || (a && b && a.pos === b.pos && a.node.eq(b.node))
68
- }