@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,106 +0,0 @@
1
- import { createSignal, useEffect, type ConnectableElement, type ReadonlySignal, type SignalState } from '@aria-ui/core'
2
- import { getWindow } from '@ocavue/utils'
3
-
4
- import {
5
- onResizeContext,
6
- onResizeEndContext,
7
- onResizeStartContext,
8
- type OnResize,
9
- type OnResizeEnd,
10
- type OnResizeStart,
11
- } from '../context.ts'
12
-
13
- import { calcResize } from './calc-resize.ts'
14
- import type { ResizableHandleProps } from './types.ts'
15
-
16
- /**
17
- * @internal
18
- */
19
- export function useResizableHandle(
20
- host: ConnectableElement,
21
- { state }: { state: SignalState<ResizableHandleProps> },
22
- ): void {
23
- const onResize = onResizeContext.consume(host)
24
- const onResizeStart = onResizeStartContext.consume(host)
25
- const onResizeEnd = onResizeEndContext.consume(host)
26
-
27
- useResizableHandleState(host, state, { onResize, onResizeStart, onResizeEnd })
28
- }
29
-
30
- function useResizableHandleState(
31
- host: ConnectableElement,
32
- state: SignalState<ResizableHandleProps>,
33
- context: {
34
- onResizeStart: ReadonlySignal<OnResizeStart>
35
- onResize: ReadonlySignal<OnResize>
36
- onResizeEnd: ReadonlySignal<OnResizeEnd>
37
- },
38
- ) {
39
- let startX = 0
40
- let startY = 0
41
- let width = 0
42
- let height = 0
43
- let aspectRatio = 1
44
-
45
- const pointerPressing = createSignal(false)
46
-
47
- const handlePointerDown = (event: PointerEvent) => {
48
- event.preventDefault()
49
- pointerPressing.set(true)
50
-
51
- startX = event.x
52
- startY = event.y
53
-
54
- const size = context.onResizeStart.get()?.()
55
- if (size) {
56
- ;[width, height, aspectRatio] = size
57
- }
58
- }
59
-
60
- const handlePointerMove = (event: PointerEvent) => {
61
- event.preventDefault()
62
-
63
- const dx = event.x - startX
64
- const dy = event.y - startY
65
-
66
- const [w, h] = calcResize(
67
- state.position.peek(),
68
- width,
69
- height,
70
- dx,
71
- dy,
72
- aspectRatio,
73
- )
74
-
75
- context.onResize.get()?.(w, h)
76
- }
77
-
78
- const handlePointerUp = (event: PointerEvent) => {
79
- event.preventDefault()
80
- pointerPressing.set(false)
81
-
82
- context.onResizeEnd.get()?.()
83
- }
84
-
85
- useEffect(host, () => {
86
- host.addEventListener('pointerdown', handlePointerDown)
87
- return () => {
88
- host.removeEventListener('pointerdown', handlePointerDown)
89
- }
90
- })
91
-
92
- useEffect(host, () => {
93
- if (!pointerPressing.get()) {
94
- return
95
- }
96
-
97
- const win = getWindow(host)
98
-
99
- win.addEventListener('pointermove', handlePointerMove)
100
- win.addEventListener('pointerup', handlePointerUp)
101
- return () => {
102
- win.removeEventListener('pointermove', handlePointerMove)
103
- win.removeEventListener('pointerup', handlePointerUp)
104
- }
105
- })
106
- }
@@ -1,29 +0,0 @@
1
- import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'
2
-
3
- export interface ResizableHandleProps {
4
- /**
5
- * The position of the handle.
6
- *
7
- * @default "bottom-right"
8
- */
9
- position:
10
- | 'top'
11
- | 'right'
12
- | 'bottom'
13
- | 'left'
14
- | 'top-left'
15
- | 'top-right'
16
- | 'bottom-left'
17
- | 'bottom-right'
18
- }
19
-
20
- /** @internal */
21
- export const resizableHandleProps: PropDeclarations<ResizableHandleProps> = {
22
- position: { default: 'bottom-right' },
23
- }
24
-
25
- /** @internal */
26
- export interface ResizableHandleEvents {}
27
-
28
- /** @internal */
29
- export const resizableHandleEvents: EventDeclarations<ResizableHandleEvents> = {}
@@ -1,18 +0,0 @@
1
- import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
2
-
3
- import { useResizableRoot } from "./setup.ts"
4
- import { resizableRootEvents, resizableRootProps, type ResizableRootEvents, type ResizableRootProps } from "./types.ts"
5
-
6
- const ResizableRootElementBase: BaseElementConstructor<ResizableRootProps> = defineCustomElement<
7
- ResizableRootProps,
8
- ResizableRootEvents
9
- >({
10
- props: resizableRootProps,
11
- events: resizableRootEvents,
12
- setup: useResizableRoot,
13
- })
14
- class ResizableRootElement extends ResizableRootElementBase {}
15
-
16
- registerCustomElement('prosekit-resizable-root', ResizableRootElement)
17
-
18
- export { ResizableRootElement }
@@ -1,84 +0,0 @@
1
- import { createSignal, useAttribute, useEffect, type ConnectableElement, type SetupOptions } from '@aria-ui/core'
2
-
3
- import { isFinitePositiveNumber } from '../../../utils/is-finite-positive-number.ts'
4
- import {
5
- onResizeContext,
6
- onResizeEndContext,
7
- onResizeStartContext,
8
- type OnResize,
9
- type OnResizeEnd,
10
- type OnResizeStart,
11
- } from '../context.ts'
12
-
13
- import type { ResizableRootEvents, ResizableRootProps } from './types.ts'
14
-
15
- /**
16
- * @internal
17
- */
18
- export function useResizableRoot(
19
- host: ConnectableElement,
20
- { state, emit }: SetupOptions<ResizableRootProps, ResizableRootEvents>,
21
- ): void {
22
- const resizing = createSignal(false)
23
-
24
- const onResizeStart: OnResizeStart = () => {
25
- const { width, height } = host.getBoundingClientRect()
26
-
27
- let aspectRatio: number = state.aspectRatio.peek() ?? width / height
28
-
29
- if (!isFinitePositiveNumber(aspectRatio)) {
30
- aspectRatio = 0
31
- }
32
-
33
- emit('resizeStart', { width, height })
34
- resizing.set(true)
35
- return [width, height, aspectRatio]
36
- }
37
-
38
- const onResize: OnResize = (width, height) => {
39
- state.width.set(width)
40
- state.height.set(height)
41
- }
42
-
43
- const onResizeEnd: OnResizeEnd = () => {
44
- const { width, height } = host.getBoundingClientRect()
45
- emit('resizeEnd', { width, height })
46
- resizing.set(false)
47
- }
48
-
49
- onResizeStartContext.provide(host, createSignal(onResizeStart))
50
- onResizeContext.provide(host, createSignal(onResize))
51
- onResizeEndContext.provide(host, createSignal(onResizeEnd))
52
-
53
- useEffect(host, () => {
54
- updateResizableRootStyles(
55
- host,
56
- Math.max(state.width.get() || 0, 1),
57
- Math.max(state.height.get() || 0, 1),
58
- state.aspectRatio.get(),
59
- )
60
- })
61
-
62
- useAttribute(host, 'data-resizing', () => (resizing.get() ? '' : undefined))
63
- }
64
-
65
- function updateResizableRootStyles(
66
- host: ConnectableElement,
67
- width: number,
68
- height: number,
69
- aspectRatio: number | null,
70
- ) {
71
- host.style.width = isFinitePositiveNumber(width) ? `${width}px` : ''
72
-
73
- host.style.height = isFinitePositiveNumber(height) ? `${height}px` : ''
74
-
75
- if (isFinitePositiveNumber(aspectRatio)) {
76
- host.style.aspectRatio = `${aspectRatio}`
77
-
78
- if (width && width > 0 && aspectRatio >= 1) {
79
- host.style.height = 'auto'
80
- } else if (height && height > 0 && aspectRatio <= 1) {
81
- host.style.width = 'min-content'
82
- }
83
- }
84
- }
@@ -1,59 +0,0 @@
1
- import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'
2
-
3
- import { isFinitePositiveNumber } from '../../../utils/is-finite-positive-number.ts'
4
-
5
- export interface ResizableRootProps {
6
- width: number | null
7
- height: number | null
8
- aspectRatio: number | null
9
- }
10
-
11
- function fromNumberAttribute(value: string | null): number | null {
12
- if (typeof value === 'string') {
13
- const number = Number.parseFloat(value)
14
- if (isFinitePositiveNumber(number)) {
15
- return number
16
- }
17
- }
18
- return null
19
- }
20
-
21
- function toNumberAttribute(value: number | null): string | null {
22
- if (typeof value === 'number') {
23
- return `${value}`
24
- }
25
- return null
26
- }
27
-
28
- /** @internal */
29
- export const resizableRootProps: PropDeclarations<ResizableRootProps> = {
30
- width: {
31
- default: null,
32
- attribute: 'data-width',
33
- fromAttribute: fromNumberAttribute,
34
- toAttribute: toNumberAttribute,
35
- },
36
- height: {
37
- default: null,
38
- attribute: 'data-height',
39
- fromAttribute: fromNumberAttribute,
40
- toAttribute: toNumberAttribute,
41
- },
42
- aspectRatio: {
43
- default: null,
44
- attribute: 'data-aspect-ratio',
45
- fromAttribute: fromNumberAttribute,
46
- toAttribute: toNumberAttribute,
47
- },
48
- }
49
-
50
- export interface ResizableRootEvents {
51
- resizeStart: CustomEvent<{ width: number; height: number }>
52
- resizeEnd: CustomEvent<{ width: number; height: number }>
53
- }
54
-
55
- /** @internal */
56
- export const resizableRootEvents: EventDeclarations<ResizableRootEvents> = {
57
- resizeStart: {},
58
- resizeEnd: {},
59
- }
@@ -1,43 +0,0 @@
1
- import { createContext, type Context } from '@aria-ui/core'
2
-
3
- import type { DndInfo, HoveringCellInfo } from './utils.ts'
4
-
5
- /**
6
- * @internal
7
- */
8
- export type TableHandleRootContext = HoveringCellInfo | null
9
-
10
- /**
11
- * @internal
12
- */
13
- export const tableHandleRootContext: Context<TableHandleRootContext> = createContext(
14
- 'prosekit-table-handle-root-context',
15
- null,
16
- )
17
-
18
- /**
19
- * @internal
20
- */
21
- export type TableHandleDndContext = DndInfo
22
-
23
- /**
24
- * @internal
25
- */
26
- export const defaultTableHandleDndContext: TableHandleDndContext = {
27
- dragging: false,
28
- direction: 'row',
29
- draggingIndex: -1,
30
- droppingIndex: -1,
31
- x: -1,
32
- y: -1,
33
- startX: -1,
34
- startY: -1,
35
- }
36
-
37
- /**
38
- * @internal
39
- */
40
- export const tableHandleDndContext: Context<TableHandleDndContext> = createContext(
41
- 'prosekit-table-handle-dnd-context',
42
- defaultTableHandleDndContext,
43
- )
@@ -1,85 +0,0 @@
1
- import { createComputed, useEffect, type ConnectableElement, type ReadonlySignal, type Signal } from '@aria-ui/core'
2
- import type { Editor } from '@prosekit/core'
3
- import { moveTableColumn, moveTableRow } from '@prosekit/extensions/table'
4
-
5
- import { getSafeEditorView } from '../../../utils/get-safe-editor-view.ts'
6
- import type { TableHandleDndContext } from '../context.ts'
7
-
8
- export function useDrop(
9
- host: ConnectableElement,
10
- editor: ReadonlySignal<Editor | null>,
11
- dndContext: Signal<TableHandleDndContext>,
12
- ): void {
13
- const dragging = createComputed(() => dndContext.get().dragging)
14
-
15
- useEffect(host, () => {
16
- const view = getSafeEditorView(editor.get())
17
- if (!view || !view.editable) return
18
-
19
- const ownerDocument = view.dom?.ownerDocument
20
- if (!ownerDocument) return
21
-
22
- const handleDrop = () => {
23
- if (!dragging.peek()) return
24
- const editorValue = editor.peek()
25
- if (!editorValue) return
26
- const { droppingIndex, draggingIndex, direction } = dndContext.peek()
27
-
28
- // Validate indices
29
- if (draggingIndex < 0 || droppingIndex < 0) {
30
- console.warn('[prosekit] Invalid drag indices:', { draggingIndex, droppingIndex })
31
- return
32
- }
33
-
34
- if (direction === 'row') {
35
- editorValue.exec(moveTableRow({
36
- from: draggingIndex,
37
- to: droppingIndex,
38
- }))
39
- return
40
- }
41
- if (direction === 'col') {
42
- editorValue.exec(moveTableColumn({
43
- from: draggingIndex,
44
- to: droppingIndex,
45
- }))
46
- return
47
- }
48
- }
49
-
50
- // To make `drop` event work, we need to prevent the default behavior of the
51
- // `dragover` event for drop zone. Here we set the whole document as the
52
- // drop zone so that even the mouse moves outside the editor, the `drop`
53
- // event will still be triggered.
54
- const handleDragOver = (event: DragEvent) => {
55
- if (!dragging.peek()) return
56
- event.preventDefault()
57
- const prev = dndContext.peek()
58
-
59
- dndContext.set({
60
- ...prev,
61
- dragging: true,
62
- x: event.clientX,
63
- y: event.clientY,
64
- })
65
- }
66
-
67
- const handleDragEnd = () => {
68
- if (!dragging.peek()) return
69
- const prev = dndContext.peek()
70
- dndContext.set({
71
- ...prev,
72
- dragging: false,
73
- })
74
- }
75
-
76
- ownerDocument.addEventListener('dragover', handleDragOver)
77
- ownerDocument.addEventListener('drop', handleDrop)
78
- ownerDocument.addEventListener('dragend', handleDragEnd)
79
- return () => {
80
- ownerDocument.removeEventListener('dragover', handleDragOver)
81
- ownerDocument.removeEventListener('drop', handleDrop)
82
- ownerDocument.removeEventListener('dragend', handleDragEnd)
83
- }
84
- })
85
- }
@@ -1,37 +0,0 @@
1
- // This file is generated by packages/dev/src/gen-components.ts
2
-
3
- export { TableHandleColumnRootElement } from './table-handle-column-root/element.gen.ts'
4
- export { tableHandleColumnRootEvents, tableHandleColumnRootProps, type TableHandleColumnRootEvents, type TableHandleColumnRootProps } from './table-handle-column-root/types.ts'
5
- export { useTableHandleColumnRoot } from './table-handle-column-root/setup.ts'
6
-
7
- export { TableHandleColumnTriggerElement } from './table-handle-column-trigger/element.gen.ts'
8
- export { tableHandleColumnTriggerEvents, tableHandleColumnTriggerProps, type TableHandleColumnTriggerEvents, type TableHandleColumnTriggerProps } from './table-handle-column-trigger/types.ts'
9
- export { useTableHandleColumnTrigger } from './table-handle-column-trigger/setup.ts'
10
-
11
- export { TableHandleDragPreviewElement } from './table-handle-drag-preview/element.gen.ts'
12
- export { tableHandleDragPreviewEvents, tableHandleDragPreviewProps, type TableHandleDragPreviewEvents, type TableHandleDragPreviewProps } from './table-handle-drag-preview/types.ts'
13
- export { useTableHandleDragPreview } from './table-handle-drag-preview/setup.ts'
14
-
15
- export { TableHandleDropIndicatorElement } from './table-handle-drop-indicator/element.gen.ts'
16
- export { tableHandleDropIndicatorEvents, tableHandleDropIndicatorProps, type TableHandleDropIndicatorEvents, type TableHandleDropIndicatorProps } from './table-handle-drop-indicator/types.ts'
17
- export { useTableHandleDropIndicator } from './table-handle-drop-indicator/setup.ts'
18
-
19
- export { TableHandlePopoverContentElement } from './table-handle-popover-content/element.gen.ts'
20
- export { tableHandlePopoverContentEvents, tableHandlePopoverContentProps, type TableHandlePopoverContentEvents, type TableHandlePopoverContentProps } from './table-handle-popover-content/types.ts'
21
- export { useTableHandlePopoverContent } from './table-handle-popover-content/setup.ts'
22
-
23
- export { TableHandlePopoverItemElement } from './table-handle-popover-item/element.gen.ts'
24
- export { tableHandlePopoverItemEvents, tableHandlePopoverItemProps, type TableHandlePopoverItemEvents, type TableHandlePopoverItemProps } from './table-handle-popover-item/types.ts'
25
- export { useTableHandlePopoverItem } from './table-handle-popover-item/setup.ts'
26
-
27
- export { TableHandleRootElement } from './table-handle-root/element.gen.ts'
28
- export { tableHandleRootEvents, tableHandleRootProps, type TableHandleRootEvents, type TableHandleRootProps } from './table-handle-root/types.ts'
29
- export { useTableHandleRoot } from './table-handle-root/setup.ts'
30
-
31
- export { TableHandleRowRootElement } from './table-handle-row-root/element.gen.ts'
32
- export { tableHandleRowRootEvents, tableHandleRowRootProps, type TableHandleRowRootEvents, type TableHandleRowRootProps } from './table-handle-row-root/types.ts'
33
- export { useTableHandleRowRoot } from './table-handle-row-root/setup.ts'
34
-
35
- export { TableHandleRowTriggerElement } from './table-handle-row-trigger/element.gen.ts'
36
- export { tableHandleRowTriggerEvents, tableHandleRowTriggerProps, type TableHandleRowTriggerEvents, type TableHandleRowTriggerProps } from './table-handle-row-trigger/types.ts'
37
- export { useTableHandleRowTrigger } from './table-handle-row-trigger/setup.ts'
@@ -1,18 +0,0 @@
1
- import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
2
-
3
- import { useTableHandleColumnRoot } from "./setup.ts"
4
- import { tableHandleColumnRootEvents, tableHandleColumnRootProps, type TableHandleColumnRootEvents, type TableHandleColumnRootProps } from "./types.ts"
5
-
6
- const TableHandleColumnRootElementBase: BaseElementConstructor<TableHandleColumnRootProps> = defineCustomElement<
7
- TableHandleColumnRootProps,
8
- TableHandleColumnRootEvents
9
- >({
10
- props: tableHandleColumnRootProps,
11
- events: tableHandleColumnRootEvents,
12
- setup: useTableHandleColumnRoot,
13
- })
14
- class TableHandleColumnRootElement extends TableHandleColumnRootElementBase {}
15
-
16
- registerCustomElement('prosekit-table-handle-column-root', TableHandleColumnRootElement)
17
-
18
- export { TableHandleColumnRootElement }
@@ -1,60 +0,0 @@
1
- import { createComputed, createSignal, useAttribute, useEffect, type ConnectableElement, type SignalState } from '@aria-ui/core'
2
- import { menuRootProps, useMenuRoot, type MenuRootProps } from '@aria-ui/menu/elements'
3
- import { useOverlayPositionerState } from '@aria-ui/overlay/elements'
4
- import { usePresence } from '@aria-ui/presence'
5
-
6
- import { getStateWithDefaults } from '../../../utils/get-default-state.ts'
7
- import { getSafeEditorView } from '../../../utils/get-safe-editor-view.ts'
8
- import { tableHandleRootContext } from '../context.ts'
9
-
10
- import type { TableHandleColumnRootProps } from './types.ts'
11
-
12
- /**
13
- * @internal
14
- */
15
- export function useTableHandleColumnRoot(
16
- host: ConnectableElement,
17
- { state }: { state: SignalState<TableHandleColumnRootProps> },
18
- ): void {
19
- const { editor, ...overlayState } = state
20
-
21
- const rootContext = tableHandleRootContext.consume(host)
22
-
23
- const colFirstCellPos = createComputed<number | undefined>(() => {
24
- return rootContext.get()?.colFirstCellPos
25
- })
26
-
27
- const referenceCell = createComputed<HTMLElement | null>(() => {
28
- const pos = colFirstCellPos.get()
29
- const view = getSafeEditorView(editor.get())
30
- if (!pos || !view) return null
31
- return view.nodeDOM(pos) as HTMLElement | null
32
- })
33
-
34
- const contentOpen = createSignal(false)
35
-
36
- // Close the menu when the hovering element is changed
37
- // TODO: add a delay
38
- useEffect(host, () => {
39
- colFirstCellPos.get()
40
- contentOpen.set(false)
41
- })
42
-
43
- useOverlayPositionerState(host, overlayState, {
44
- reference: referenceCell,
45
- })
46
-
47
- const presence = createComputed(() => !!referenceCell.get())
48
- useAttribute(host, 'data-state', () => (presence.get() ? 'open' : 'closed'))
49
- usePresence(host, presence)
50
-
51
- const menuRootState: SignalState<MenuRootProps> = getStateWithDefaults(
52
- { open: contentOpen },
53
- menuRootProps,
54
- )
55
-
56
- useMenuRoot(host, {
57
- state: menuRootState,
58
- emit: () => void 0,
59
- })
60
- }
@@ -1,73 +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'
8
- import type { Placement } from '@floating-ui/dom'
9
- import type { Editor } from '@prosekit/core'
10
-
11
- export interface TableHandleColumnRootProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {
12
- /**
13
- * The ProseKit editor instance.
14
- *
15
- * @default null
16
- * @hidden
17
- */
18
- editor: Editor | null
19
-
20
- /**
21
- * The placement of the popover, relative to the hovered table cell.
22
- *
23
- * @default "top"
24
- */
25
- placement: Placement
26
-
27
- /**
28
- * Whether to use the browser [Popover API](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API)
29
- * to place the floating element on top of other page content.
30
- *
31
- * @default false
32
- */
33
- hoist: boolean
34
-
35
- /**
36
- * @default false
37
- * @hidden
38
- */
39
- flip: boolean
40
-
41
- /**
42
- * @default false
43
- * @hidden
44
- */
45
- shift: boolean
46
-
47
- /**
48
- * @default true
49
- * @hidden
50
- */
51
- hide: boolean
52
- }
53
-
54
- /** @internal */
55
- export const tableHandleColumnRootProps: PropDeclarations<TableHandleColumnRootProps> = Object.freeze({
56
- ...overlayPositionerProps,
57
- editor: { default: null },
58
- placement: { default: 'top' },
59
-
60
- // Enabling `hoist` will cause the popover to have a small delay when
61
- // scrolling the page.
62
- hoist: { default: false },
63
-
64
- flip: { default: false },
65
- shift: { default: false },
66
- hide: { default: true },
67
- })
68
-
69
- /** @internal */
70
- export interface TableHandleColumnRootEvents extends OverlayPositionerEvents {}
71
-
72
- /** @internal */
73
- export const tableHandleColumnRootEvents: EventDeclarations<TableHandleColumnRootEvents> = overlayPositionerEvents
@@ -1,18 +0,0 @@
1
- import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
2
-
3
- import { useTableHandleColumnTrigger } from "./setup.ts"
4
- import { tableHandleColumnTriggerEvents, tableHandleColumnTriggerProps, type TableHandleColumnTriggerEvents, type TableHandleColumnTriggerProps } from "./types.ts"
5
-
6
- const TableHandleColumnTriggerElementBase: BaseElementConstructor<TableHandleColumnTriggerProps> = defineCustomElement<
7
- TableHandleColumnTriggerProps,
8
- TableHandleColumnTriggerEvents
9
- >({
10
- props: tableHandleColumnTriggerProps,
11
- events: tableHandleColumnTriggerEvents,
12
- setup: useTableHandleColumnTrigger,
13
- })
14
- class TableHandleColumnTriggerElement extends TableHandleColumnTriggerElementBase {}
15
-
16
- registerCustomElement('prosekit-table-handle-column-trigger', TableHandleColumnTriggerElement)
17
-
18
- export { TableHandleColumnTriggerElement }