@prosekit/web 0.7.2 → 0.7.4
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/get-default-state-CIEy7xrl.js +2 -1
- package/dist/get-default-state-CIEy7xrl.js.map +1 -0
- package/dist/get-safe-editor-view-DENm4avv.js +2 -1
- package/dist/get-safe-editor-view-DENm4avv.js.map +1 -0
- package/dist/{inject-style-RwRNoINh.js → inject-style-BJQNFufI.js} +12 -13
- package/dist/inject-style-BJQNFufI.js.map +1 -0
- package/dist/prosekit-web-autocomplete.d.ts +2 -1
- package/dist/prosekit-web-autocomplete.d.ts.map +1 -0
- package/dist/prosekit-web-autocomplete.js +5 -7
- package/dist/prosekit-web-autocomplete.js.map +1 -0
- package/dist/prosekit-web-block-handle.d.ts +2 -1
- package/dist/prosekit-web-block-handle.d.ts.map +1 -0
- package/dist/prosekit-web-block-handle.js +33 -20
- package/dist/prosekit-web-block-handle.js.map +1 -0
- package/dist/prosekit-web-drop-indicator.d.ts +2 -1
- package/dist/prosekit-web-drop-indicator.d.ts.map +1 -0
- package/dist/prosekit-web-drop-indicator.js +2 -1
- package/dist/prosekit-web-drop-indicator.js.map +1 -0
- package/dist/prosekit-web-inline-popover.d.ts +2 -1
- package/dist/prosekit-web-inline-popover.d.ts.map +1 -0
- package/dist/prosekit-web-inline-popover.js +4 -5
- package/dist/prosekit-web-inline-popover.js.map +1 -0
- package/dist/prosekit-web-popover.d.ts +2 -1
- package/dist/prosekit-web-popover.d.ts.map +1 -0
- package/dist/prosekit-web-popover.js +2 -1
- package/dist/prosekit-web-popover.js.map +1 -0
- package/dist/prosekit-web-resizable.d.ts +2 -1
- package/dist/prosekit-web-resizable.d.ts.map +1 -0
- package/dist/prosekit-web-resizable.js +2 -1
- package/dist/prosekit-web-resizable.js.map +1 -0
- package/dist/prosekit-web-table-handle.d.ts +2 -1
- package/dist/prosekit-web-table-handle.d.ts.map +1 -0
- package/dist/prosekit-web-table-handle.js +38 -75
- package/dist/prosekit-web-table-handle.js.map +1 -0
- package/dist/prosekit-web-tooltip.d.ts +2 -1
- package/dist/prosekit-web-tooltip.d.ts.map +1 -0
- package/dist/prosekit-web-tooltip.js +2 -1
- package/dist/prosekit-web-tooltip.js.map +1 -0
- package/dist/prosekit-web.d.ts +1 -1
- package/dist/prosekit-web.js +1 -0
- package/dist/use-editor-extension-Cc7ZG7uj.js +2 -1
- package/dist/use-editor-extension-Cc7ZG7uj.js.map +1 -0
- package/dist/use-scrolling-BNfsQs3S.js +2 -1
- package/dist/use-scrolling-BNfsQs3S.js.map +1 -0
- package/package.json +21 -20
- package/src/components/autocomplete/autocomplete-empty/element.gen.ts +18 -0
- package/src/components/autocomplete/autocomplete-empty/setup.ts +6 -0
- package/src/components/autocomplete/autocomplete-empty/types.ts +16 -0
- package/src/components/autocomplete/autocomplete-item/element.gen.ts +18 -0
- package/src/components/autocomplete/autocomplete-item/setup.ts +38 -0
- package/src/components/autocomplete/autocomplete-item/types.ts +31 -0
- package/src/components/autocomplete/autocomplete-list/element.gen.ts +18 -0
- package/src/components/autocomplete/autocomplete-list/setup.ts +140 -0
- package/src/components/autocomplete/autocomplete-list/types.ts +30 -0
- package/src/components/autocomplete/autocomplete-popover/element.gen.ts +18 -0
- package/src/components/autocomplete/autocomplete-popover/helpers.spec.ts +21 -0
- package/src/components/autocomplete/autocomplete-popover/helpers.ts +7 -0
- package/src/components/autocomplete/autocomplete-popover/setup.ts +185 -0
- package/src/components/autocomplete/autocomplete-popover/types.ts +103 -0
- package/src/components/autocomplete/context.ts +19 -0
- package/src/components/autocomplete/index.gen.ts +17 -0
- package/src/components/block-handle/block-handle-add/element.gen.ts +18 -0
- package/src/components/block-handle/block-handle-add/setup.ts +37 -0
- package/src/components/block-handle/block-handle-add/types.ts +26 -0
- package/src/components/block-handle/block-handle-draggable/element.gen.ts +18 -0
- package/src/components/block-handle/block-handle-draggable/set-drag-preview.ts +88 -0
- package/src/components/block-handle/block-handle-draggable/setup.ts +133 -0
- package/src/components/block-handle/block-handle-draggable/types.ts +26 -0
- package/src/components/block-handle/block-handle-popover/element.gen.ts +18 -0
- package/src/components/block-handle/block-handle-popover/pointer-move.ts +243 -0
- package/src/components/block-handle/block-handle-popover/setup.ts +88 -0
- package/src/components/block-handle/block-handle-popover/types.ts +84 -0
- package/src/components/block-handle/context.ts +34 -0
- package/src/components/block-handle/index.gen.ts +13 -0
- package/src/components/drop-indicator/drop-indicator/element.gen.ts +18 -0
- package/src/components/drop-indicator/drop-indicator/setup.ts +87 -0
- package/src/components/drop-indicator/drop-indicator/types.ts +34 -0
- package/src/components/drop-indicator/index.gen.ts +5 -0
- package/src/components/inline-popover/index.gen.ts +5 -0
- package/src/components/inline-popover/inline-popover/element.gen.ts +18 -0
- package/src/components/inline-popover/inline-popover/setup.ts +97 -0
- package/src/components/inline-popover/inline-popover/types.ts +115 -0
- package/src/components/inline-popover/inline-popover/virtual-selection-element.ts +75 -0
- package/src/components/popover/index.gen.ts +13 -0
- package/src/components/popover/popover-content/element.gen.ts +18 -0
- package/src/components/popover/popover-content/setup.ts +1 -0
- package/src/components/popover/popover-content/types.ts +12 -0
- package/src/components/popover/popover-root/element.gen.ts +18 -0
- package/src/components/popover/popover-root/setup.ts +1 -0
- package/src/components/popover/popover-root/types.ts +12 -0
- package/src/components/popover/popover-trigger/element.gen.ts +18 -0
- package/src/components/popover/popover-trigger/setup.ts +1 -0
- package/src/components/popover/popover-trigger/types.ts +12 -0
- package/src/components/resizable/context.ts +45 -0
- package/src/components/resizable/index.gen.ts +9 -0
- package/src/components/resizable/resizable-handle/calc-resize.spec.ts +280 -0
- package/src/components/resizable/resizable-handle/calc-resize.ts +121 -0
- package/src/components/resizable/resizable-handle/element.gen.ts +18 -0
- package/src/components/resizable/resizable-handle/setup.ts +112 -0
- package/src/components/resizable/resizable-handle/types.ts +32 -0
- package/src/components/resizable/resizable-root/element.gen.ts +18 -0
- package/src/components/resizable/resizable-root/setup.ts +93 -0
- package/src/components/resizable/resizable-root/types.ts +28 -0
- package/src/components/table-handle/context.ts +49 -0
- package/src/components/table-handle/dnd.ts +135 -0
- package/src/components/table-handle/hooks/use-drop.ts +94 -0
- package/src/components/table-handle/hooks/use-empty-image.ts +30 -0
- package/src/components/table-handle/index.gen.ts +37 -0
- package/src/components/table-handle/table-handle-column-root/element.gen.ts +18 -0
- package/src/components/table-handle/table-handle-column-root/setup.ts +71 -0
- package/src/components/table-handle/table-handle-column-root/types.ts +76 -0
- package/src/components/table-handle/table-handle-column-trigger/element.gen.ts +18 -0
- package/src/components/table-handle/table-handle-column-trigger/setup.ts +75 -0
- package/src/components/table-handle/table-handle-column-trigger/types.ts +23 -0
- package/src/components/table-handle/table-handle-drag-preview/element.gen.ts +18 -0
- package/src/components/table-handle/table-handle-drag-preview/render-preview.ts +80 -0
- package/src/components/table-handle/table-handle-drag-preview/setup.ts +67 -0
- package/src/components/table-handle/table-handle-drag-preview/types.ts +17 -0
- package/src/components/table-handle/table-handle-drag-preview/updater.ts +101 -0
- package/src/components/table-handle/table-handle-drop-indicator/calc-drag-over.ts +44 -0
- package/src/components/table-handle/table-handle-drop-indicator/element.gen.ts +18 -0
- package/src/components/table-handle/table-handle-drop-indicator/setup.ts +56 -0
- package/src/components/table-handle/table-handle-drop-indicator/types.ts +18 -0
- package/src/components/table-handle/table-handle-drop-indicator/updater.ts +110 -0
- package/src/components/table-handle/table-handle-popover-content/element.gen.ts +18 -0
- package/src/components/table-handle/table-handle-popover-content/setup.ts +90 -0
- package/src/components/table-handle/table-handle-popover-content/types.ts +40 -0
- package/src/components/table-handle/table-handle-popover-item/element.gen.ts +18 -0
- package/src/components/table-handle/table-handle-popover-item/setup.ts +23 -0
- package/src/components/table-handle/table-handle-popover-item/types.ts +24 -0
- package/src/components/table-handle/table-handle-root/element.gen.ts +18 -0
- package/src/components/table-handle/table-handle-root/setup.ts +93 -0
- package/src/components/table-handle/table-handle-root/types.ts +26 -0
- package/src/components/table-handle/table-handle-row-root/element.gen.ts +18 -0
- package/src/components/table-handle/table-handle-row-root/setup.ts +77 -0
- package/src/components/table-handle/table-handle-row-root/types.ts +75 -0
- package/src/components/table-handle/table-handle-row-trigger/element.gen.ts +18 -0
- package/src/components/table-handle/table-handle-row-trigger/setup.ts +74 -0
- package/src/components/table-handle/table-handle-row-trigger/types.ts +26 -0
- package/src/components/table-handle/utils.ts +107 -0
- package/src/components/tooltip/index.gen.ts +13 -0
- package/src/components/tooltip/tooltip-content/element.gen.ts +18 -0
- package/src/components/tooltip/tooltip-content/setup.ts +1 -0
- package/src/components/tooltip/tooltip-content/types.ts +12 -0
- package/src/components/tooltip/tooltip-root/element.gen.ts +18 -0
- package/src/components/tooltip/tooltip-root/setup.ts +1 -0
- package/src/components/tooltip/tooltip-root/types.ts +12 -0
- package/src/components/tooltip/tooltip-trigger/element.gen.ts +18 -0
- package/src/components/tooltip/tooltip-trigger/setup.ts +1 -0
- package/src/components/tooltip/tooltip-trigger/types.ts +12 -0
- package/src/hooks/use-editor-extension.ts +19 -0
- package/src/hooks/use-editor-focus-event.ts +23 -0
- package/src/hooks/use-editor-typing.ts +36 -0
- package/src/hooks/use-editor-update-event.ts +23 -0
- package/src/hooks/use-first-rendering.ts +20 -0
- package/src/hooks/use-keymap.ts +20 -0
- package/src/hooks/use-scrolling.ts +33 -0
- package/src/hooks/use-selecting.ts +63 -0
- package/src/index.ts +1 -0
- package/src/utils/assign-styles.ts +14 -0
- package/src/utils/clone-element.ts +110 -0
- package/src/utils/css-feature-detection.ts +9 -0
- package/src/utils/fade-color.ts +15 -0
- package/src/utils/get-box-element.ts +20 -0
- package/src/utils/get-client-rect.ts +35 -0
- package/src/utils/get-default-state.spec.ts +50 -0
- package/src/utils/get-default-state.ts +22 -0
- package/src/utils/get-effective-background-color.ts +21 -0
- package/src/utils/get-safe-editor-view.ts +10 -0
- package/src/utils/inject-style.ts +11 -0
- package/src/utils/is-finite-positive-number.ts +3 -0
- package/src/utils/max-z-index.ts +3 -0
- package/src/utils/throttle.ts +17 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createComputed,
|
|
3
|
+
createSignal,
|
|
4
|
+
useAttribute,
|
|
5
|
+
useEffect,
|
|
6
|
+
type ConnectableElement,
|
|
7
|
+
type ReadonlySignal,
|
|
8
|
+
type SetupOptions,
|
|
9
|
+
} from '@aria-ui/core'
|
|
10
|
+
import { useOverlayPositionerState } from '@aria-ui/overlay/elements'
|
|
11
|
+
import { usePresence } from '@aria-ui/presence'
|
|
12
|
+
import type { ReferenceElement } from '@floating-ui/dom'
|
|
13
|
+
import type { Editor } from '@prosekit/core'
|
|
14
|
+
|
|
15
|
+
import { useEditorFocusChangeEvent } from '../../../hooks/use-editor-focus-event'
|
|
16
|
+
import { useEditorUpdateEvent } from '../../../hooks/use-editor-update-event'
|
|
17
|
+
import { useKeymap } from '../../../hooks/use-keymap'
|
|
18
|
+
|
|
19
|
+
import type {
|
|
20
|
+
InlinePopoverEvents,
|
|
21
|
+
InlinePopoverProps,
|
|
22
|
+
} from './types'
|
|
23
|
+
import { getVirtualSelectionElement } from './virtual-selection-element'
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export function useInlinePopover(
|
|
29
|
+
host: ConnectableElement,
|
|
30
|
+
{ state, emit }: SetupOptions<InlinePopoverProps, InlinePopoverEvents>,
|
|
31
|
+
): void {
|
|
32
|
+
const { editor, defaultOpen, open, ...overlayState } = state
|
|
33
|
+
|
|
34
|
+
const reference = useInlinePopoverReference(host, editor)
|
|
35
|
+
const hasReference = createComputed(() => !!reference.get())
|
|
36
|
+
|
|
37
|
+
useEffect(host, () => {
|
|
38
|
+
const hasReferenceValue = hasReference.get()
|
|
39
|
+
const defaultOpenValue = defaultOpen.peek()
|
|
40
|
+
const openValue = open.peek()
|
|
41
|
+
|
|
42
|
+
if (defaultOpenValue || openValue) {
|
|
43
|
+
emit('openChange', hasReferenceValue)
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
useEffect(host, () => {
|
|
48
|
+
const hasReferenceValue = hasReference.get()
|
|
49
|
+
const defaultOpenValue = defaultOpen.peek()
|
|
50
|
+
|
|
51
|
+
if (hasReferenceValue && defaultOpenValue) {
|
|
52
|
+
open.set(true)
|
|
53
|
+
} else if (!hasReferenceValue) {
|
|
54
|
+
open.set(false)
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
useKeymap(host, editor, {
|
|
59
|
+
Escape: () => {
|
|
60
|
+
if (!state.dismissOnEscape.peek() || !open.peek()) {
|
|
61
|
+
return false
|
|
62
|
+
}
|
|
63
|
+
open.set(false)
|
|
64
|
+
emit('openChange', false)
|
|
65
|
+
return true
|
|
66
|
+
},
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
useOverlayPositionerState(host, overlayState, { reference })
|
|
70
|
+
|
|
71
|
+
useAttribute(host, 'data-state', () => (open.get() ? 'open' : 'closed'))
|
|
72
|
+
usePresence(host, open)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function useInlinePopoverReference(
|
|
76
|
+
host: ConnectableElement,
|
|
77
|
+
editor: ReadonlySignal<Editor | null>,
|
|
78
|
+
) {
|
|
79
|
+
const reference = createSignal<ReferenceElement | null>(null)
|
|
80
|
+
let editorFocused = false
|
|
81
|
+
|
|
82
|
+
useEditorFocusChangeEvent(host, editor, (focus) => {
|
|
83
|
+
editorFocused = focus
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
useEditorUpdateEvent(host, editor, (view) => {
|
|
87
|
+
const isPopoverFocused = !editorFocused && host.contains(host.ownerDocument.activeElement)
|
|
88
|
+
|
|
89
|
+
if (isPopoverFocused) {
|
|
90
|
+
return
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
reference.set(getVirtualSelectionElement(view) || null)
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
return reference
|
|
97
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
EventDeclarations,
|
|
3
|
+
PropDeclarations,
|
|
4
|
+
} from '@aria-ui/core'
|
|
5
|
+
import {
|
|
6
|
+
overlayPositionerEvents,
|
|
7
|
+
overlayPositionerProps,
|
|
8
|
+
type OverlayPositionerEvents,
|
|
9
|
+
type OverlayPositionerProps,
|
|
10
|
+
} from '@aria-ui/overlay'
|
|
11
|
+
import type { Editor } from '@prosekit/core'
|
|
12
|
+
|
|
13
|
+
export interface InlinePopoverProps extends
|
|
14
|
+
Omit<
|
|
15
|
+
OverlayPositionerProps,
|
|
16
|
+
'placement' | 'offset' | 'hide' | 'overlap' | 'inline' | 'overflowPadding'
|
|
17
|
+
>
|
|
18
|
+
{
|
|
19
|
+
/**
|
|
20
|
+
* The ProseKit editor instance.
|
|
21
|
+
*
|
|
22
|
+
* @default null
|
|
23
|
+
* @hidden
|
|
24
|
+
*/
|
|
25
|
+
editor: Editor | null
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Whether the popover is open by default when some inline content is
|
|
29
|
+
* selected.
|
|
30
|
+
*
|
|
31
|
+
* When `defaultOpen` is true, the popover will open or close based on the
|
|
32
|
+
* inline selection. When `defaultOpen` is false, the popover will never be
|
|
33
|
+
* opened unless the `open` prop is true.
|
|
34
|
+
*
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
37
|
+
defaultOpen: boolean
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Whether the popover is open.
|
|
41
|
+
*
|
|
42
|
+
* Notice that the popover will be always hidden if the inline selection is
|
|
43
|
+
* empty.
|
|
44
|
+
*
|
|
45
|
+
* @default false
|
|
46
|
+
*/
|
|
47
|
+
open: boolean
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Whether the inline popover should be dismissed when the editor receives an
|
|
51
|
+
* Escape key press.
|
|
52
|
+
*
|
|
53
|
+
* @default true
|
|
54
|
+
*/
|
|
55
|
+
dismissOnEscape: boolean
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @default "top"
|
|
59
|
+
*/
|
|
60
|
+
placement: OverlayPositionerProps['placement']
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @default 12
|
|
64
|
+
*/
|
|
65
|
+
offset: OverlayPositionerProps['offset']
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @default true
|
|
69
|
+
*/
|
|
70
|
+
hide: OverlayPositionerProps['hide']
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @default true
|
|
74
|
+
*/
|
|
75
|
+
overlap: OverlayPositionerProps['overlap']
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @default true
|
|
79
|
+
*/
|
|
80
|
+
inline: OverlayPositionerProps['inline']
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @default 8
|
|
84
|
+
*/
|
|
85
|
+
overflowPadding: OverlayPositionerProps['overflowPadding']
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** @internal */
|
|
89
|
+
export const inlinePopoverProps: PropDeclarations<InlinePopoverProps> = Object.freeze({
|
|
90
|
+
...overlayPositionerProps,
|
|
91
|
+
editor: { default: null },
|
|
92
|
+
defaultOpen: { default: true },
|
|
93
|
+
open: { default: false },
|
|
94
|
+
dismissOnEscape: { default: true },
|
|
95
|
+
|
|
96
|
+
placement: { default: 'top' },
|
|
97
|
+
offset: { default: 12 },
|
|
98
|
+
hide: { default: true },
|
|
99
|
+
overlap: { default: true },
|
|
100
|
+
inline: { default: true },
|
|
101
|
+
overflowPadding: { default: 8 },
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
export interface InlinePopoverEvents extends OverlayPositionerEvents {
|
|
105
|
+
/**
|
|
106
|
+
* Fired when the open state changes.
|
|
107
|
+
*/
|
|
108
|
+
openChange: CustomEvent<boolean>
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** @internal */
|
|
112
|
+
export const inlinePopoverEvents: EventDeclarations<InlinePopoverEvents> = {
|
|
113
|
+
...overlayPositionerEvents,
|
|
114
|
+
openChange: {},
|
|
115
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { ReferenceElement } from '@floating-ui/dom'
|
|
2
|
+
import {
|
|
3
|
+
containsInlineNode,
|
|
4
|
+
isInCodeBlock,
|
|
5
|
+
isTextSelection,
|
|
6
|
+
} from '@prosekit/core'
|
|
7
|
+
import type { EditorView } from '@prosekit/pm/view'
|
|
8
|
+
|
|
9
|
+
export function getVirtualSelectionElement(
|
|
10
|
+
view: EditorView,
|
|
11
|
+
): ReferenceElement | undefined {
|
|
12
|
+
if (typeof window === 'undefined' || view.isDestroyed) {
|
|
13
|
+
return
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const selection = view.state.selection
|
|
17
|
+
|
|
18
|
+
if (
|
|
19
|
+
!selection.empty
|
|
20
|
+
&& !isInCodeBlock(selection)
|
|
21
|
+
&& isTextSelection(selection)
|
|
22
|
+
&& containsInlineNode(view.state.doc, selection.from, selection.to)
|
|
23
|
+
) {
|
|
24
|
+
return getDomDecoration(view) || getInlineDecoration(view)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getDomDecoration(view: EditorView): ReferenceElement | undefined {
|
|
29
|
+
const range = getDomRange(view)
|
|
30
|
+
if (range) {
|
|
31
|
+
// To get it work properly in Safari, we cannot return the range directly.
|
|
32
|
+
// We have to return a contextElement.
|
|
33
|
+
return {
|
|
34
|
+
contextElement: view.dom,
|
|
35
|
+
getBoundingClientRect: () => range.getBoundingClientRect(),
|
|
36
|
+
getClientRects: () => range.getClientRects(),
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function getDomRange(view: EditorView): Range | undefined {
|
|
42
|
+
const win = view.dom.ownerDocument.defaultView
|
|
43
|
+
const selection = win?.getSelection()
|
|
44
|
+
if (!selection || selection.isCollapsed) {
|
|
45
|
+
return
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const range = typeof selection.rangeCount === 'number'
|
|
49
|
+
&& selection.rangeCount > 0
|
|
50
|
+
&& selection.getRangeAt(0)
|
|
51
|
+
|
|
52
|
+
if (!range) {
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return range
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function getInlineDecoration(view: EditorView): ReferenceElement | undefined {
|
|
60
|
+
const match = view.dom.querySelectorAll('.prosekit-virtual-selection')
|
|
61
|
+
|
|
62
|
+
if (match.length === 0) {
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
if (match.length === 1) {
|
|
66
|
+
return match[0]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const items = Array.from(match)
|
|
70
|
+
return {
|
|
71
|
+
contextElement: items[0],
|
|
72
|
+
getBoundingClientRect: () => items[0].getBoundingClientRect(),
|
|
73
|
+
getClientRects: () => items.map((item) => item.getBoundingClientRect()),
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// This file is generated by packages/dev/src/gen-components.ts
|
|
2
|
+
|
|
3
|
+
export { PopoverContentElement } from './popover-content/element.gen'
|
|
4
|
+
export { popoverContentEvents, popoverContentProps, type PopoverContentEvents, type PopoverContentProps } from './popover-content/types'
|
|
5
|
+
export { usePopoverContent } from './popover-content/setup'
|
|
6
|
+
|
|
7
|
+
export { PopoverRootElement } from './popover-root/element.gen'
|
|
8
|
+
export { popoverRootEvents, popoverRootProps, type PopoverRootEvents, type PopoverRootProps } from './popover-root/types'
|
|
9
|
+
export { usePopoverRoot } from './popover-root/setup'
|
|
10
|
+
|
|
11
|
+
export { PopoverTriggerElement } from './popover-trigger/element.gen'
|
|
12
|
+
export { popoverTriggerEvents, popoverTriggerProps, type PopoverTriggerEvents, type PopoverTriggerProps } from './popover-trigger/types'
|
|
13
|
+
export { usePopoverTrigger } from './popover-trigger/setup'
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
|
|
2
|
+
|
|
3
|
+
import { usePopoverContent } from "./setup"
|
|
4
|
+
import { popoverContentEvents, popoverContentProps, type PopoverContentEvents, type PopoverContentProps } from "./types"
|
|
5
|
+
|
|
6
|
+
const PopoverContentElementBase: BaseElementConstructor<PopoverContentProps> = defineCustomElement<
|
|
7
|
+
PopoverContentProps,
|
|
8
|
+
PopoverContentEvents
|
|
9
|
+
>({
|
|
10
|
+
props: popoverContentProps,
|
|
11
|
+
events: popoverContentEvents,
|
|
12
|
+
setup: usePopoverContent,
|
|
13
|
+
})
|
|
14
|
+
class PopoverContentElement extends PopoverContentElementBase {}
|
|
15
|
+
|
|
16
|
+
registerCustomElement('prosekit-popover-content', PopoverContentElement)
|
|
17
|
+
|
|
18
|
+
export { PopoverContentElement }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { usePopoverContent } from '@aria-ui/popover/elements'
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
PopoverContentEvents as Events,
|
|
3
|
+
PopoverContentProps as Props,
|
|
4
|
+
} from '@aria-ui/popover/elements'
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
popoverContentEvents,
|
|
8
|
+
popoverContentProps,
|
|
9
|
+
} from '@aria-ui/popover/elements'
|
|
10
|
+
|
|
11
|
+
export interface PopoverContentProps extends Props {}
|
|
12
|
+
export interface PopoverContentEvents extends Events {}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
|
|
2
|
+
|
|
3
|
+
import { usePopoverRoot } from "./setup"
|
|
4
|
+
import { popoverRootEvents, popoverRootProps, type PopoverRootEvents, type PopoverRootProps } from "./types"
|
|
5
|
+
|
|
6
|
+
const PopoverRootElementBase: BaseElementConstructor<PopoverRootProps> = defineCustomElement<
|
|
7
|
+
PopoverRootProps,
|
|
8
|
+
PopoverRootEvents
|
|
9
|
+
>({
|
|
10
|
+
props: popoverRootProps,
|
|
11
|
+
events: popoverRootEvents,
|
|
12
|
+
setup: usePopoverRoot,
|
|
13
|
+
})
|
|
14
|
+
class PopoverRootElement extends PopoverRootElementBase {}
|
|
15
|
+
|
|
16
|
+
registerCustomElement('prosekit-popover-root', PopoverRootElement)
|
|
17
|
+
|
|
18
|
+
export { PopoverRootElement }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { usePopoverRoot } from '@aria-ui/popover/elements'
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
PopoverRootEvents as Events,
|
|
3
|
+
PopoverRootProps as Props,
|
|
4
|
+
} from '@aria-ui/popover/elements'
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
popoverRootEvents,
|
|
8
|
+
popoverRootProps,
|
|
9
|
+
} from '@aria-ui/popover/elements'
|
|
10
|
+
|
|
11
|
+
export interface PopoverRootProps extends Props {}
|
|
12
|
+
export interface PopoverRootEvents extends Events {}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from "@aria-ui/core"
|
|
2
|
+
|
|
3
|
+
import { usePopoverTrigger } from "./setup"
|
|
4
|
+
import { popoverTriggerEvents, popoverTriggerProps, type PopoverTriggerEvents, type PopoverTriggerProps } from "./types"
|
|
5
|
+
|
|
6
|
+
const PopoverTriggerElementBase: BaseElementConstructor<PopoverTriggerProps> = defineCustomElement<
|
|
7
|
+
PopoverTriggerProps,
|
|
8
|
+
PopoverTriggerEvents
|
|
9
|
+
>({
|
|
10
|
+
props: popoverTriggerProps,
|
|
11
|
+
events: popoverTriggerEvents,
|
|
12
|
+
setup: usePopoverTrigger,
|
|
13
|
+
})
|
|
14
|
+
class PopoverTriggerElement extends PopoverTriggerElementBase {}
|
|
15
|
+
|
|
16
|
+
registerCustomElement('prosekit-popover-trigger', PopoverTriggerElement)
|
|
17
|
+
|
|
18
|
+
export { PopoverTriggerElement }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { usePopoverTrigger } from '@aria-ui/popover/elements'
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
PopoverTriggerEvents as Events,
|
|
3
|
+
PopoverTriggerProps as Props,
|
|
4
|
+
} from '@aria-ui/popover/elements'
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
popoverTriggerEvents,
|
|
8
|
+
popoverTriggerProps,
|
|
9
|
+
} from '@aria-ui/popover/elements'
|
|
10
|
+
|
|
11
|
+
export interface PopoverTriggerProps extends Props {}
|
|
12
|
+
export interface PopoverTriggerEvents extends Events {}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createContext,
|
|
3
|
+
type Context,
|
|
4
|
+
} from '@aria-ui/core'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export const onResizeContext: Context<OnResize> = createContext(
|
|
10
|
+
'prosekit/resizable/onResize',
|
|
11
|
+
null,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export const onResizeStartContext: Context<OnResizeStart> = createContext(
|
|
18
|
+
'prosekit/resizable/onResizeStart',
|
|
19
|
+
null,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export const onResizeEndContext: Context<OnResizeEnd> = createContext(
|
|
26
|
+
'prosekit/resizable/onResizeEnd',
|
|
27
|
+
null,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export type OnResize = ((width: number, height: number) => void) | null
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export type OnResizeStart =
|
|
39
|
+
| (() => readonly [width: number, height: number, aspectRatio: number])
|
|
40
|
+
| null
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @internal
|
|
44
|
+
*/
|
|
45
|
+
export type OnResizeEnd = (() => void) | null
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// This file is generated by packages/dev/src/gen-components.ts
|
|
2
|
+
|
|
3
|
+
export { ResizableHandleElement } from './resizable-handle/element.gen'
|
|
4
|
+
export { resizableHandleEvents, resizableHandleProps, type ResizableHandleEvents, type ResizableHandleProps } from './resizable-handle/types'
|
|
5
|
+
export { useResizableHandle } from './resizable-handle/setup'
|
|
6
|
+
|
|
7
|
+
export { ResizableRootElement } from './resizable-root/element.gen'
|
|
8
|
+
export { resizableRootEvents, resizableRootProps, type ResizableRootEvents, type ResizableRootProps } from './resizable-root/types'
|
|
9
|
+
export { useResizableRoot } from './resizable-root/setup'
|