@prosekit/web 0.7.13 → 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.
- package/dist/prosekit-web-autocomplete.d.ts +112 -90
- package/dist/prosekit-web-autocomplete.d.ts.map +1 -1
- package/dist/prosekit-web-autocomplete.js +292 -217
- package/dist/prosekit-web-autocomplete.js.map +1 -1
- package/dist/prosekit-web-block-handle.d.ts +95 -62
- package/dist/prosekit-web-block-handle.d.ts.map +1 -1
- package/dist/prosekit-web-block-handle.js +219 -114
- package/dist/prosekit-web-block-handle.js.map +1 -1
- package/dist/prosekit-web-drop-indicator.d.ts +13 -15
- package/dist/prosekit-web-drop-indicator.d.ts.map +1 -1
- package/dist/prosekit-web-drop-indicator.js +34 -30
- package/dist/prosekit-web-drop-indicator.js.map +1 -1
- package/dist/prosekit-web-inline-popover.d.ts +88 -54
- package/dist/prosekit-web-inline-popover.d.ts.map +1 -1
- package/dist/prosekit-web-inline-popover.js +129 -79
- package/dist/prosekit-web-inline-popover.js.map +1 -1
- package/dist/prosekit-web-menu.d.ts +13 -0
- package/dist/prosekit-web-menu.d.ts.map +1 -0
- package/dist/prosekit-web-menu.js +53 -0
- package/dist/prosekit-web-menu.js.map +1 -0
- package/dist/prosekit-web-popover.d.ts +7 -26
- package/dist/prosekit-web-popover.d.ts.map +1 -1
- package/dist/prosekit-web-popover.js +31 -29
- package/dist/prosekit-web-popover.js.map +1 -1
- package/dist/prosekit-web-resizable.d.ts +92 -51
- package/dist/prosekit-web-resizable.d.ts.map +1 -1
- package/dist/prosekit-web-resizable.js +139 -131
- package/dist/prosekit-web-resizable.js.map +1 -1
- package/dist/prosekit-web-table-handle.d.ts +166 -199
- package/dist/prosekit-web-table-handle.d.ts.map +1 -1
- package/dist/prosekit-web-table-handle.js +495 -496
- package/dist/prosekit-web-table-handle.js.map +1 -1
- package/dist/prosekit-web-tooltip.d.ts +7 -26
- package/dist/prosekit-web-tooltip.d.ts.map +1 -1
- package/dist/prosekit-web-tooltip.js +31 -29
- package/dist/prosekit-web-tooltip.js.map +1 -1
- package/dist/use-editor-extension.js +2 -2
- package/dist/use-editor-extension.js.map +1 -1
- package/dist/use-scrolling.js +17 -8
- package/dist/use-scrolling.js.map +1 -1
- package/package.json +30 -25
- package/src/components/autocomplete/autocomplete-empty.ts +45 -0
- package/src/components/autocomplete/autocomplete-item.ts +65 -0
- package/src/components/autocomplete/autocomplete-popup.ts +95 -0
- package/src/components/autocomplete/autocomplete-positioner.ts +98 -0
- package/src/components/autocomplete/autocomplete-root.ts +280 -0
- package/src/components/autocomplete/context.ts +16 -14
- package/src/components/autocomplete/index.ts +65 -0
- package/src/components/block-handle/block-handle-add.ts +71 -0
- package/src/components/block-handle/block-handle-draggable.ts +158 -0
- package/src/components/block-handle/block-handle-popup.ts +43 -0
- package/src/components/block-handle/block-handle-positioner.ts +89 -0
- package/src/components/block-handle/block-handle-root.ts +116 -0
- package/src/components/block-handle/context.ts +9 -18
- package/src/components/block-handle/hover-state.ts +16 -0
- package/src/components/block-handle/index.ts +59 -0
- package/src/components/block-handle/{block-handle-popover/pointer-move.ts → pointer-move.ts} +8 -7
- package/src/components/block-handle/{block-handle-draggable/set-drag-preview.ts → set-drag-preview.ts} +4 -4
- package/src/components/block-handle/use-hover-extension.ts +65 -0
- package/src/components/drop-indicator/drop-indicator.ts +128 -0
- package/src/components/drop-indicator/index.ts +18 -0
- package/src/components/inline-popover/index.ts +41 -0
- package/src/components/inline-popover/inline-popover-popup.ts +52 -0
- package/src/components/inline-popover/inline-popover-positioner.ts +98 -0
- package/src/components/inline-popover/inline-popover-root.ts +122 -0
- package/src/components/inline-popover/store.ts +6 -0
- package/src/components/menu/index.ts +92 -0
- package/src/components/popover/index.ts +53 -0
- package/src/components/resizable/{resizable-handle/calc-resize.ts → calc-resize.ts} +1 -1
- package/src/components/resizable/context.ts +3 -6
- package/src/components/resizable/index.ts +32 -0
- package/src/components/resizable/resizable-handle.ts +134 -0
- package/src/components/resizable/resizable-root.ts +184 -0
- package/src/components/table-handle/dnd.ts +16 -27
- package/src/components/table-handle/index.ts +125 -0
- package/src/components/table-handle/{table-handle-drag-preview/render-preview.ts → render-preview.ts} +5 -5
- package/src/components/table-handle/shared.ts +61 -0
- package/src/components/table-handle/store.ts +117 -0
- package/src/components/table-handle/table-handle-column-menu-root.ts +51 -0
- package/src/components/table-handle/table-handle-column-menu-trigger.ts +107 -0
- package/src/components/table-handle/table-handle-column-popup.ts +44 -0
- package/src/components/table-handle/table-handle-column-positioner.ts +67 -0
- package/src/components/table-handle/table-handle-drag-preview.ts +169 -0
- package/src/components/table-handle/table-handle-drop-indicator.ts +166 -0
- package/src/components/table-handle/table-handle-root.ts +103 -0
- package/src/components/table-handle/table-handle-row-menu-root.ts +51 -0
- package/src/components/table-handle/table-handle-row-menu-trigger.ts +107 -0
- package/src/components/table-handle/table-handle-row-popup.ts +42 -0
- package/src/components/table-handle/table-handle-row-positioner.ts +67 -0
- package/src/components/table-handle/use-drop.ts +74 -0
- package/src/components/table-handle/{hooks/use-empty-image.ts → use-empty-image.ts} +2 -3
- package/src/components/table-handle/utils.ts +0 -11
- package/src/components/tooltip/index.ts +52 -0
- package/src/hooks/use-editor-extension.ts +4 -4
- package/src/hooks/use-editor-focus-event.ts +4 -4
- package/src/hooks/use-editor-typing.ts +12 -16
- package/src/hooks/use-editor-update-event.ts +4 -4
- package/src/hooks/use-keymap.ts +4 -4
- package/src/hooks/use-scrolling.ts +11 -10
- package/src/hooks/use-selecting.ts +8 -15
- package/src/utils/event.ts +28 -0
- package/src/utils/lazy-signal.spec.ts +68 -0
- package/src/utils/lazy-signal.ts +17 -0
- package/src/utils/prefers-reduced-motion.ts +6 -0
- package/src/utils/prevent-default.ts +3 -0
- package/src/utils/use-html-element-at.ts +17 -0
- package/src/utils/use-no-focus.ts +7 -0
- package/dist/get-default-state.js +0 -11
- package/dist/get-default-state.js.map +0 -1
- package/src/components/autocomplete/autocomplete-empty/element.gen.ts +0 -18
- package/src/components/autocomplete/autocomplete-empty/setup.ts +0 -6
- package/src/components/autocomplete/autocomplete-empty/types.ts +0 -13
- package/src/components/autocomplete/autocomplete-item/element.gen.ts +0 -18
- package/src/components/autocomplete/autocomplete-item/setup.ts +0 -30
- package/src/components/autocomplete/autocomplete-item/types.ts +0 -25
- package/src/components/autocomplete/autocomplete-list/element.gen.ts +0 -18
- package/src/components/autocomplete/autocomplete-list/setup.ts +0 -125
- package/src/components/autocomplete/autocomplete-list/types.ts +0 -22
- package/src/components/autocomplete/autocomplete-popover/element.gen.ts +0 -18
- package/src/components/autocomplete/autocomplete-popover/setup.ts +0 -169
- package/src/components/autocomplete/autocomplete-popover/types.ts +0 -100
- package/src/components/autocomplete/index.gen.ts +0 -17
- package/src/components/block-handle/block-handle-add/element.gen.ts +0 -18
- package/src/components/block-handle/block-handle-add/setup.ts +0 -33
- package/src/components/block-handle/block-handle-add/types.ts +0 -23
- package/src/components/block-handle/block-handle-draggable/element.gen.ts +0 -18
- package/src/components/block-handle/block-handle-draggable/setup.ts +0 -113
- package/src/components/block-handle/block-handle-draggable/types.ts +0 -23
- package/src/components/block-handle/block-handle-popover/element.gen.ts +0 -18
- package/src/components/block-handle/block-handle-popover/setup.ts +0 -68
- package/src/components/block-handle/block-handle-popover/types.ts +0 -81
- package/src/components/block-handle/index.gen.ts +0 -13
- package/src/components/drop-indicator/drop-indicator/element.gen.ts +0 -18
- package/src/components/drop-indicator/drop-indicator/setup.ts +0 -75
- package/src/components/drop-indicator/drop-indicator/types.ts +0 -31
- package/src/components/drop-indicator/index.gen.ts +0 -5
- package/src/components/inline-popover/index.gen.ts +0 -5
- package/src/components/inline-popover/inline-popover/element.gen.ts +0 -18
- package/src/components/inline-popover/inline-popover/setup.ts +0 -111
- package/src/components/inline-popover/inline-popover/types.ts +0 -112
- package/src/components/popover/index.gen.ts +0 -13
- package/src/components/popover/popover-content/element.gen.ts +0 -18
- package/src/components/popover/popover-content/setup.ts +0 -1
- package/src/components/popover/popover-content/types.ts +0 -6
- package/src/components/popover/popover-root/element.gen.ts +0 -18
- package/src/components/popover/popover-root/setup.ts +0 -1
- package/src/components/popover/popover-root/types.ts +0 -6
- package/src/components/popover/popover-trigger/element.gen.ts +0 -18
- package/src/components/popover/popover-trigger/setup.ts +0 -1
- package/src/components/popover/popover-trigger/types.ts +0 -6
- package/src/components/resizable/index.gen.ts +0 -9
- package/src/components/resizable/resizable-handle/element.gen.ts +0 -18
- package/src/components/resizable/resizable-handle/setup.ts +0 -106
- package/src/components/resizable/resizable-handle/types.ts +0 -29
- package/src/components/resizable/resizable-root/element.gen.ts +0 -18
- package/src/components/resizable/resizable-root/setup.ts +0 -84
- package/src/components/resizable/resizable-root/types.ts +0 -59
- package/src/components/table-handle/context.ts +0 -43
- package/src/components/table-handle/hooks/use-drop.ts +0 -85
- package/src/components/table-handle/index.gen.ts +0 -37
- package/src/components/table-handle/table-handle-column-root/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-column-root/setup.ts +0 -60
- package/src/components/table-handle/table-handle-column-root/types.ts +0 -73
- package/src/components/table-handle/table-handle-column-trigger/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-column-trigger/setup.ts +0 -64
- package/src/components/table-handle/table-handle-column-trigger/types.ts +0 -20
- package/src/components/table-handle/table-handle-drag-preview/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-drag-preview/setup.ts +0 -57
- package/src/components/table-handle/table-handle-drag-preview/types.ts +0 -14
- package/src/components/table-handle/table-handle-drag-preview/updater.ts +0 -90
- package/src/components/table-handle/table-handle-drop-indicator/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-drop-indicator/setup.ts +0 -52
- package/src/components/table-handle/table-handle-drop-indicator/types.ts +0 -15
- package/src/components/table-handle/table-handle-drop-indicator/updater.ts +0 -96
- package/src/components/table-handle/table-handle-popover-content/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-popover-content/setup.ts +0 -83
- package/src/components/table-handle/table-handle-popover-content/types.ts +0 -32
- package/src/components/table-handle/table-handle-popover-item/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-popover-item/setup.ts +0 -17
- package/src/components/table-handle/table-handle-popover-item/types.ts +0 -16
- package/src/components/table-handle/table-handle-root/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-root/setup.ts +0 -86
- package/src/components/table-handle/table-handle-root/types.ts +0 -23
- package/src/components/table-handle/table-handle-row-root/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-row-root/setup.ts +0 -70
- package/src/components/table-handle/table-handle-row-root/types.ts +0 -68
- package/src/components/table-handle/table-handle-row-trigger/element.gen.ts +0 -18
- package/src/components/table-handle/table-handle-row-trigger/setup.ts +0 -63
- package/src/components/table-handle/table-handle-row-trigger/types.ts +0 -23
- package/src/components/tooltip/index.gen.ts +0 -13
- package/src/components/tooltip/tooltip-content/element.gen.ts +0 -18
- package/src/components/tooltip/tooltip-content/setup.ts +0 -1
- package/src/components/tooltip/tooltip-content/types.ts +0 -6
- package/src/components/tooltip/tooltip-root/element.gen.ts +0 -18
- package/src/components/tooltip/tooltip-root/setup.ts +0 -1
- package/src/components/tooltip/tooltip-root/types.ts +0 -6
- package/src/components/tooltip/tooltip-trigger/element.gen.ts +0 -18
- package/src/components/tooltip/tooltip-trigger/setup.ts +0 -1
- package/src/components/tooltip/tooltip-trigger/types.ts +0 -6
- package/src/hooks/use-first-rendering.ts +0 -15
- package/src/utils/get-default-state.spec.ts +0 -42
- package/src/utils/get-default-state.ts +0 -18
- /package/src/components/autocomplete/{autocomplete-popover/helpers.spec.ts → helpers.spec.ts} +0 -0
- /package/src/components/autocomplete/{autocomplete-popover/helpers.ts → helpers.ts} +0 -0
- /package/src/components/inline-popover/{inline-popover/virtual-selection-element.ts → virtual-selection-element.ts} +0 -0
- /package/src/components/resizable/{resizable-handle/calc-resize.spec.ts → calc-resize.spec.ts} +0 -0
- /package/src/components/table-handle/{table-handle-drop-indicator/calc-drag-over.ts → calc-drag-over.ts} +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineCustomElement,
|
|
3
|
+
defineProps,
|
|
4
|
+
registerCustomElement,
|
|
5
|
+
type HostElement,
|
|
6
|
+
type HostElementConstructor,
|
|
7
|
+
type PropsDeclaration,
|
|
8
|
+
type State,
|
|
9
|
+
} from '@aria-ui/core'
|
|
10
|
+
import { OverlayPositionerPropsDeclaration, setupOverlayPositioner, type OverlayPositionerProps } from '@aria-ui/elements/overlay'
|
|
11
|
+
|
|
12
|
+
import { InlinePopoverStoreContext } from './store.ts'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export interface InlinePopoverPositionerProps extends OverlayPositionerProps {
|
|
18
|
+
/**
|
|
19
|
+
* The initial placement of the floating element
|
|
20
|
+
*
|
|
21
|
+
* @default "top"
|
|
22
|
+
*/
|
|
23
|
+
placement: OverlayPositionerProps['placement']
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The distance between the reference and floating element.
|
|
27
|
+
*
|
|
28
|
+
* @default 12
|
|
29
|
+
*/
|
|
30
|
+
offset: OverlayPositionerProps['offset']
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Whether to hide the floating element when the reference element or the
|
|
34
|
+
* floating element is fully clipped.
|
|
35
|
+
*
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
hide: OverlayPositionerProps['hide']
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Whether the floating element can overlap the reference element to keep it
|
|
42
|
+
* in view.
|
|
43
|
+
*
|
|
44
|
+
* @default true
|
|
45
|
+
*/
|
|
46
|
+
overlap: OverlayPositionerProps['overlap']
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Whether to improve positioning for inline reference elements that span over
|
|
50
|
+
* multiple lines.
|
|
51
|
+
*
|
|
52
|
+
* @default true
|
|
53
|
+
*/
|
|
54
|
+
inline: OverlayPositionerProps['inline']
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Describes the virtual padding around the boundary to check for overflow.
|
|
58
|
+
*
|
|
59
|
+
* @default 8
|
|
60
|
+
*/
|
|
61
|
+
overflowPadding: OverlayPositionerProps['overflowPadding']
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** @internal */
|
|
65
|
+
export const InlinePopoverPositionerPropsDeclaration: PropsDeclaration<InlinePopoverPositionerProps> = /* @__PURE__ */ defineProps<
|
|
66
|
+
InlinePopoverPositionerProps
|
|
67
|
+
>({
|
|
68
|
+
...OverlayPositionerPropsDeclaration,
|
|
69
|
+
placement: { default: 'top', attribute: 'placement', type: 'string' },
|
|
70
|
+
offset: { default: 12, attribute: false, type: 'json' },
|
|
71
|
+
hide: { default: true, attribute: 'hide', type: 'boolean' },
|
|
72
|
+
overlap: { default: true, attribute: 'overlap', type: 'boolean' },
|
|
73
|
+
inline: { default: true, attribute: 'inline', type: 'boolean' },
|
|
74
|
+
overflowPadding: { default: 8, attribute: 'overflow-padding', type: 'number' },
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
/** @internal */
|
|
78
|
+
export function setupInlinePopoverPositioner(
|
|
79
|
+
host: HostElement,
|
|
80
|
+
props: State<InlinePopoverPositionerProps>,
|
|
81
|
+
): void {
|
|
82
|
+
setupOverlayPositioner(host, props, InlinePopoverStoreContext.consume(host))
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const InlinePopoverPositionerElementBase: HostElementConstructor<InlinePopoverPositionerProps> = defineCustomElement(
|
|
86
|
+
setupInlinePopoverPositioner,
|
|
87
|
+
InlinePopoverPositionerPropsDeclaration,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @public
|
|
92
|
+
*/
|
|
93
|
+
export class InlinePopoverPositionerElement extends InlinePopoverPositionerElementBase {}
|
|
94
|
+
|
|
95
|
+
/** @internal */
|
|
96
|
+
export function registerInlinePopoverPositionerElement(): void {
|
|
97
|
+
registerCustomElement('prosekit-inline-popover-positioner', InlinePopoverPositionerElement)
|
|
98
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineCustomElement,
|
|
3
|
+
defineProps,
|
|
4
|
+
registerCustomElement,
|
|
5
|
+
type HostElement,
|
|
6
|
+
type HostElementConstructor,
|
|
7
|
+
type PropsDeclaration,
|
|
8
|
+
type State,
|
|
9
|
+
} from '@aria-ui/core'
|
|
10
|
+
import type { OpenChangeEvent } from '@aria-ui/elements/overlay'
|
|
11
|
+
import { OverlayRootPropsDeclaration, useOverlayStore, type OverlayRootProps } from '@aria-ui/elements/overlay'
|
|
12
|
+
import type { Editor } from '@prosekit/core'
|
|
13
|
+
import type { Selection } from '@prosekit/pm/state'
|
|
14
|
+
|
|
15
|
+
import { useEditorFocusChangeEvent } from '../../hooks/use-editor-focus-event.ts'
|
|
16
|
+
import { useEditorUpdateEvent } from '../../hooks/use-editor-update-event.ts'
|
|
17
|
+
import { useKeymap } from '../../hooks/use-keymap.ts'
|
|
18
|
+
|
|
19
|
+
import { InlinePopoverStoreContext } from './store.ts'
|
|
20
|
+
import { getVirtualSelectionElement } from './virtual-selection-element.ts'
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export interface InlinePopoverRootProps extends OverlayRootProps {
|
|
26
|
+
/**
|
|
27
|
+
* The ProseKit editor instance.
|
|
28
|
+
*
|
|
29
|
+
* @default null
|
|
30
|
+
* @hidden
|
|
31
|
+
*/
|
|
32
|
+
editor: Editor | null
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Whether the popover is open by default when some inline content is
|
|
36
|
+
* selected.
|
|
37
|
+
*
|
|
38
|
+
* @default true
|
|
39
|
+
*/
|
|
40
|
+
defaultOpen: boolean
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Whether the inline popover should be dismissed when the editor receives an
|
|
44
|
+
* Escape key press.
|
|
45
|
+
*
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
48
|
+
dismissOnEscape: boolean
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** @internal */
|
|
52
|
+
export const InlinePopoverRootPropsDeclaration: PropsDeclaration<InlinePopoverRootProps> = /* @__PURE__ */ defineProps<
|
|
53
|
+
InlinePopoverRootProps
|
|
54
|
+
>({
|
|
55
|
+
...OverlayRootPropsDeclaration,
|
|
56
|
+
editor: { default: null, attribute: false, type: 'json' },
|
|
57
|
+
defaultOpen: { default: true, attribute: 'default-open', type: 'boolean' },
|
|
58
|
+
dismissOnEscape: { default: true, attribute: 'dismiss-on-escape', type: 'boolean' },
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @public
|
|
63
|
+
*/
|
|
64
|
+
export interface InlinePopoverRootEvents {
|
|
65
|
+
openChange: OpenChangeEvent
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** @internal */
|
|
69
|
+
export function setupInlinePopoverRoot(
|
|
70
|
+
host: HostElement,
|
|
71
|
+
props: State<InlinePopoverRootProps>,
|
|
72
|
+
): void {
|
|
73
|
+
const store = useOverlayStore(host, props)
|
|
74
|
+
InlinePopoverStoreContext.provide(host, store)
|
|
75
|
+
|
|
76
|
+
let editorFocused = false
|
|
77
|
+
useEditorFocusChangeEvent(host, props.editor.get, (focus) => {
|
|
78
|
+
editorFocused = focus
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
let prevSelection: Selection | undefined
|
|
82
|
+
useEditorUpdateEvent(host, props.editor.get, (view) => {
|
|
83
|
+
const isPopoverFocused = !editorFocused && host.contains(host.ownerDocument.activeElement)
|
|
84
|
+
if (isPopoverFocused) return
|
|
85
|
+
|
|
86
|
+
const { selection } = view.state
|
|
87
|
+
if (prevSelection?.eq(selection)) return
|
|
88
|
+
prevSelection = selection
|
|
89
|
+
|
|
90
|
+
const reference = getVirtualSelectionElement(view)
|
|
91
|
+
store.setAnchorElement(reference)
|
|
92
|
+
|
|
93
|
+
if (reference && props.defaultOpen.get()) {
|
|
94
|
+
store.requestOpenChange(true)
|
|
95
|
+
} else if (!reference) {
|
|
96
|
+
store.requestOpenChange(false)
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
useKeymap(host, props.editor.get, {
|
|
101
|
+
Escape: () => {
|
|
102
|
+
if (!props.dismissOnEscape.get() || !store.getIsOpen()) return false
|
|
103
|
+
store.requestOpenChange(false)
|
|
104
|
+
return true
|
|
105
|
+
},
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const InlinePopoverRootElementBase: HostElementConstructor<InlinePopoverRootProps> = defineCustomElement(
|
|
110
|
+
setupInlinePopoverRoot,
|
|
111
|
+
InlinePopoverRootPropsDeclaration,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @public
|
|
116
|
+
*/
|
|
117
|
+
export class InlinePopoverRootElement extends InlinePopoverRootElementBase {}
|
|
118
|
+
|
|
119
|
+
/** @internal */
|
|
120
|
+
export function registerInlinePopoverRootElement(): void {
|
|
121
|
+
registerCustomElement('prosekit-inline-popover-root', InlinePopoverRootElement)
|
|
122
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
|
|
3
|
+
@module
|
|
4
|
+
|
|
5
|
+
## Anatomy
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<prosekit-menu-root>
|
|
9
|
+
<prosekit-menu-trigger>...</prosekit-menu-trigger>
|
|
10
|
+
<prosekit-menu-positioner>
|
|
11
|
+
<prosekit-menu-popup>
|
|
12
|
+
<prosekit-menu-item>...</prosekit-menu-item>
|
|
13
|
+
<prosekit-menu-submenu-root>
|
|
14
|
+
<prosekit-menu-submenu-trigger>...</prosekit-menu-submenu-trigger>
|
|
15
|
+
<prosekit-menu-positioner>
|
|
16
|
+
<prosekit-menu-popup>
|
|
17
|
+
<prosekit-menu-item>...</prosekit-menu-item>
|
|
18
|
+
</prosekit-menu-popup>
|
|
19
|
+
</prosekit-menu-positioner>
|
|
20
|
+
</prosekit-menu-submenu-root>
|
|
21
|
+
</prosekit-menu-popup>
|
|
22
|
+
</prosekit-menu-positioner>
|
|
23
|
+
</prosekit-menu-root>
|
|
24
|
+
```
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { registerCustomElement } from '@aria-ui/core'
|
|
28
|
+
import {
|
|
29
|
+
MenuItemElement,
|
|
30
|
+
MenuPopupElement,
|
|
31
|
+
MenuPositionerElement,
|
|
32
|
+
MenuRootElement,
|
|
33
|
+
MenuSubmenuRootElement,
|
|
34
|
+
MenuSubmenuTriggerElement,
|
|
35
|
+
MenuTriggerElement,
|
|
36
|
+
} from '@aria-ui/elements/menu'
|
|
37
|
+
|
|
38
|
+
export {
|
|
39
|
+
MenuItemElement,
|
|
40
|
+
MenuItemPropsDeclaration,
|
|
41
|
+
MenuPopupElement,
|
|
42
|
+
MenuPopupPropsDeclaration,
|
|
43
|
+
MenuPositionerElement,
|
|
44
|
+
MenuPositionerPropsDeclaration,
|
|
45
|
+
MenuRootElement,
|
|
46
|
+
MenuRootPropsDeclaration,
|
|
47
|
+
MenuSubmenuRootElement,
|
|
48
|
+
MenuSubmenuRootPropsDeclaration,
|
|
49
|
+
MenuSubmenuTriggerElement,
|
|
50
|
+
MenuSubmenuTriggerPropsDeclaration,
|
|
51
|
+
MenuTriggerElement,
|
|
52
|
+
MenuTriggerPropsDeclaration,
|
|
53
|
+
OpenChangeEvent,
|
|
54
|
+
SelectEvent,
|
|
55
|
+
setupMenuItem,
|
|
56
|
+
setupMenuPopup,
|
|
57
|
+
setupMenuPositioner,
|
|
58
|
+
setupMenuRoot,
|
|
59
|
+
setupMenuSubmenuRoot,
|
|
60
|
+
setupMenuSubmenuTrigger,
|
|
61
|
+
setupMenuTrigger,
|
|
62
|
+
type MenuItemEvents,
|
|
63
|
+
type MenuItemProps,
|
|
64
|
+
type MenuPopupProps,
|
|
65
|
+
type MenuPositionerProps,
|
|
66
|
+
type MenuRootEvents,
|
|
67
|
+
type MenuRootProps,
|
|
68
|
+
type MenuTriggerEvents,
|
|
69
|
+
type MenuTriggerProps,
|
|
70
|
+
} from '@aria-ui/elements/menu'
|
|
71
|
+
|
|
72
|
+
export function registerMenuRootElement(): void {
|
|
73
|
+
registerCustomElement('prosekit-menu-root', MenuRootElement)
|
|
74
|
+
}
|
|
75
|
+
export function registerMenuTriggerElement(): void {
|
|
76
|
+
registerCustomElement('prosekit-menu-trigger', MenuTriggerElement)
|
|
77
|
+
}
|
|
78
|
+
export function registerMenuPositionerElement(): void {
|
|
79
|
+
registerCustomElement('prosekit-menu-positioner', MenuPositionerElement)
|
|
80
|
+
}
|
|
81
|
+
export function registerMenuPopupElement(): void {
|
|
82
|
+
registerCustomElement('prosekit-menu-popup', MenuPopupElement)
|
|
83
|
+
}
|
|
84
|
+
export function registerMenuItemElement(): void {
|
|
85
|
+
registerCustomElement('prosekit-menu-item', MenuItemElement)
|
|
86
|
+
}
|
|
87
|
+
export function registerMenuSubmenuRootElement(): void {
|
|
88
|
+
registerCustomElement('prosekit-menu-submenu-root', MenuSubmenuRootElement)
|
|
89
|
+
}
|
|
90
|
+
export function registerMenuSubmenuTriggerElement(): void {
|
|
91
|
+
registerCustomElement('prosekit-menu-submenu-trigger', MenuSubmenuTriggerElement)
|
|
92
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
|
|
3
|
+
@module
|
|
4
|
+
|
|
5
|
+
## Anatomy
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<prosekit-popover-root>
|
|
9
|
+
<prosekit-popover-trigger>...</prosekit-popover-trigger>
|
|
10
|
+
<prosekit-popover-positioner>
|
|
11
|
+
<prosekit-popover-popup>...</prosekit-popover-popup>
|
|
12
|
+
</prosekit-popover-positioner>
|
|
13
|
+
</prosekit-popover-root>
|
|
14
|
+
```
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { registerCustomElement } from '@aria-ui/core'
|
|
18
|
+
import { PopoverPopupElement, PopoverPositionerElement, PopoverRootElement, PopoverTriggerElement } from '@aria-ui/elements/popover'
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
OpenChangeEvent,
|
|
22
|
+
PopoverPopupElement,
|
|
23
|
+
PopoverPopupPropsDeclaration,
|
|
24
|
+
PopoverPositionerElement,
|
|
25
|
+
PopoverPositionerPropsDeclaration,
|
|
26
|
+
PopoverRootElement,
|
|
27
|
+
PopoverRootPropsDeclaration,
|
|
28
|
+
PopoverTriggerElement,
|
|
29
|
+
PopoverTriggerPropsDeclaration,
|
|
30
|
+
setupPopoverPopup,
|
|
31
|
+
setupPopoverPositioner,
|
|
32
|
+
setupPopoverRoot,
|
|
33
|
+
setupPopoverTrigger,
|
|
34
|
+
type PopoverPopupProps,
|
|
35
|
+
type PopoverPositionerProps,
|
|
36
|
+
type PopoverRootEvents,
|
|
37
|
+
type PopoverRootProps,
|
|
38
|
+
type PopoverTriggerEvents,
|
|
39
|
+
type PopoverTriggerProps,
|
|
40
|
+
} from '@aria-ui/elements/popover'
|
|
41
|
+
|
|
42
|
+
export function registerPopoverRootElement(): void {
|
|
43
|
+
registerCustomElement('prosekit-popover-root', PopoverRootElement)
|
|
44
|
+
}
|
|
45
|
+
export function registerPopoverTriggerElement(): void {
|
|
46
|
+
registerCustomElement('prosekit-popover-trigger', PopoverTriggerElement)
|
|
47
|
+
}
|
|
48
|
+
export function registerPopoverPopupElement(): void {
|
|
49
|
+
registerCustomElement('prosekit-popover-popup', PopoverPopupElement)
|
|
50
|
+
}
|
|
51
|
+
export function registerPopoverPositionerElement(): void {
|
|
52
|
+
registerCustomElement('prosekit-popover-positioner', PopoverPositionerElement)
|
|
53
|
+
}
|
|
@@ -3,25 +3,22 @@ import { createContext, type Context } from '@aria-ui/core'
|
|
|
3
3
|
/**
|
|
4
4
|
* @internal
|
|
5
5
|
*/
|
|
6
|
-
export const onResizeContext: Context<OnResize> = createContext(
|
|
6
|
+
export const onResizeContext: Context<OnResize> = createContext<OnResize>(
|
|
7
7
|
'prosekit/resizable/onResize',
|
|
8
|
-
null,
|
|
9
8
|
)
|
|
10
9
|
|
|
11
10
|
/**
|
|
12
11
|
* @internal
|
|
13
12
|
*/
|
|
14
|
-
export const onResizeStartContext: Context<OnResizeStart> = createContext(
|
|
13
|
+
export const onResizeStartContext: Context<OnResizeStart> = createContext<OnResizeStart>(
|
|
15
14
|
'prosekit/resizable/onResizeStart',
|
|
16
|
-
null,
|
|
17
15
|
)
|
|
18
16
|
|
|
19
17
|
/**
|
|
20
18
|
* @internal
|
|
21
19
|
*/
|
|
22
|
-
export const onResizeEndContext: Context<OnResizeEnd> = createContext(
|
|
20
|
+
export const onResizeEndContext: Context<OnResizeEnd> = createContext<OnResizeEnd>(
|
|
23
21
|
'prosekit/resizable/onResizeEnd',
|
|
24
|
-
null,
|
|
25
22
|
)
|
|
26
23
|
|
|
27
24
|
/**
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
|
|
3
|
+
@module
|
|
4
|
+
|
|
5
|
+
## Anatomy
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<prosekit-resizable-root>
|
|
9
|
+
<img src="..." />
|
|
10
|
+
<prosekit-resizable-handle>...</prosekit-resizable-handle>
|
|
11
|
+
</prosekit-resizable-root>
|
|
12
|
+
```
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export {
|
|
16
|
+
registerResizableRootElement,
|
|
17
|
+
ResizableRootElement,
|
|
18
|
+
ResizableRootPropsDeclaration,
|
|
19
|
+
ResizeEndEvent,
|
|
20
|
+
ResizeStartEvent,
|
|
21
|
+
setupResizableRoot,
|
|
22
|
+
type ResizableRootEvents,
|
|
23
|
+
type ResizableRootProps,
|
|
24
|
+
} from './resizable-root.ts'
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
registerResizableHandleElement,
|
|
28
|
+
ResizableHandleElement,
|
|
29
|
+
ResizableHandlePropsDeclaration,
|
|
30
|
+
setupResizableHandle,
|
|
31
|
+
type ResizableHandleProps,
|
|
32
|
+
} from './resizable-handle.ts'
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { HostElement, HostElementConstructor, PropsDeclaration } from '@aria-ui/core'
|
|
2
|
+
import { createSignal, defineCustomElement, defineProps, registerCustomElement, useEffect, type State } from '@aria-ui/core'
|
|
3
|
+
import { getWindow } from '@ocavue/utils'
|
|
4
|
+
|
|
5
|
+
import { calcResize } from './calc-resize.ts'
|
|
6
|
+
import { onResizeContext, onResizeEndContext, onResizeStartContext } from './context.ts'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export interface ResizableHandleProps {
|
|
12
|
+
/**
|
|
13
|
+
* The position of the handle.
|
|
14
|
+
*
|
|
15
|
+
* @default "bottom-right"
|
|
16
|
+
*/
|
|
17
|
+
position:
|
|
18
|
+
| 'top'
|
|
19
|
+
| 'right'
|
|
20
|
+
| 'bottom'
|
|
21
|
+
| 'left'
|
|
22
|
+
| 'top-left'
|
|
23
|
+
| 'top-right'
|
|
24
|
+
| 'bottom-left'
|
|
25
|
+
| 'bottom-right'
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
export const ResizableHandlePropsDeclaration: PropsDeclaration<ResizableHandleProps> = defineProps<ResizableHandleProps>({
|
|
32
|
+
position: { default: 'bottom-right', attribute: 'position', type: 'string' },
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export function setupResizableHandle(
|
|
39
|
+
host: HostElement,
|
|
40
|
+
props: State<ResizableHandleProps>,
|
|
41
|
+
): void {
|
|
42
|
+
const getOnResize = onResizeContext.consume(host)
|
|
43
|
+
const getOnResizeStart = onResizeStartContext.consume(host)
|
|
44
|
+
const getOnResizeEnd = onResizeEndContext.consume(host)
|
|
45
|
+
|
|
46
|
+
let startX = 0
|
|
47
|
+
let startY = 0
|
|
48
|
+
let width = 0
|
|
49
|
+
let height = 0
|
|
50
|
+
let aspectRatio = 1
|
|
51
|
+
|
|
52
|
+
const pointerPressing = createSignal(false)
|
|
53
|
+
|
|
54
|
+
const handlePointerDown = (event: PointerEvent) => {
|
|
55
|
+
event.preventDefault()
|
|
56
|
+
pointerPressing.set(true)
|
|
57
|
+
|
|
58
|
+
startX = event.x
|
|
59
|
+
startY = event.y
|
|
60
|
+
|
|
61
|
+
const size = getOnResizeStart()?.()
|
|
62
|
+
if (size) {
|
|
63
|
+
;[width, height, aspectRatio] = size
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const handlePointerMove = (event: PointerEvent) => {
|
|
68
|
+
event.preventDefault()
|
|
69
|
+
|
|
70
|
+
const dx = event.x - startX
|
|
71
|
+
const dy = event.y - startY
|
|
72
|
+
|
|
73
|
+
const [w, h] = calcResize(
|
|
74
|
+
props.position.get(),
|
|
75
|
+
width,
|
|
76
|
+
height,
|
|
77
|
+
dx,
|
|
78
|
+
dy,
|
|
79
|
+
aspectRatio,
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
getOnResize()?.(w, h)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const handlePointerUp = (event: PointerEvent) => {
|
|
86
|
+
event.preventDefault()
|
|
87
|
+
pointerPressing.set(false)
|
|
88
|
+
|
|
89
|
+
getOnResizeEnd()?.()
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
useEffect(host, () => {
|
|
93
|
+
host.addEventListener('pointerdown', handlePointerDown)
|
|
94
|
+
return () => {
|
|
95
|
+
host.removeEventListener('pointerdown', handlePointerDown)
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
useEffect(host, () => {
|
|
100
|
+
if (!pointerPressing.get()) {
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const win = getWindow(host)
|
|
105
|
+
|
|
106
|
+
win.addEventListener('pointermove', handlePointerMove)
|
|
107
|
+
win.addEventListener('pointerup', handlePointerUp)
|
|
108
|
+
return () => {
|
|
109
|
+
win.removeEventListener('pointermove', handlePointerMove)
|
|
110
|
+
win.removeEventListener('pointerup', handlePointerUp)
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const ResizableHandleElementBase: HostElementConstructor<ResizableHandleProps> = defineCustomElement(
|
|
116
|
+
setupResizableHandle,
|
|
117
|
+
ResizableHandlePropsDeclaration,
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* @public
|
|
122
|
+
*/
|
|
123
|
+
export class ResizableHandleElement extends ResizableHandleElementBase {}
|
|
124
|
+
|
|
125
|
+
let isResizableHandleRegistered = false
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
130
|
+
export function registerResizableHandleElement(): void {
|
|
131
|
+
if (isResizableHandleRegistered) return
|
|
132
|
+
isResizableHandleRegistered = true
|
|
133
|
+
registerCustomElement('prosekit-resizable-handle', ResizableHandleElement)
|
|
134
|
+
}
|