@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.
- 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 +28 -23
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-web-autocomplete.js","names":["listboxProps"],"sources":["../src/components/autocomplete/autocomplete-empty/setup.ts","../src/components/autocomplete/autocomplete-empty/types.ts","../src/components/autocomplete/autocomplete-empty/element.gen.ts","../src/components/autocomplete/context.ts","../src/components/autocomplete/autocomplete-item/setup.ts","../src/components/autocomplete/autocomplete-item/types.ts","../src/components/autocomplete/autocomplete-item/element.gen.ts","../src/components/autocomplete/autocomplete-list/setup.ts","../src/components/autocomplete/autocomplete-list/types.ts","../src/components/autocomplete/autocomplete-list/element.gen.ts","../src/hooks/use-first-rendering.ts","../src/components/autocomplete/autocomplete-popover/helpers.ts","../src/components/autocomplete/autocomplete-popover/setup.ts","../src/components/autocomplete/autocomplete-popover/types.ts","../src/components/autocomplete/autocomplete-popover/element.gen.ts"],"sourcesContent":["import { useListboxEmpty } from '@aria-ui/listbox/elements'\n\n/**\n * @internal\n */\nexport const useAutocompleteEmpty: typeof useListboxEmpty = useListboxEmpty\n","import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'\n\n/** @internal */\nexport interface AutocompleteEmptyProps {}\n\n/** @internal */\nexport const autocompleteEmptyProps: PropDeclarations<AutocompleteEmptyProps> = {}\n\n/** @internal */\nexport interface AutocompleteEmptyEvents {}\n\n/** @internal */\nexport const autocompleteEmptyEvents: EventDeclarations<AutocompleteEmptyEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useAutocompleteEmpty } from \"./setup.ts\"\nimport { autocompleteEmptyEvents, autocompleteEmptyProps, type AutocompleteEmptyEvents, type AutocompleteEmptyProps } from \"./types.ts\"\n\nconst AutocompleteEmptyElementBase: BaseElementConstructor<AutocompleteEmptyProps> = defineCustomElement<\n AutocompleteEmptyProps,\n AutocompleteEmptyEvents\n>({\n props: autocompleteEmptyProps,\n events: autocompleteEmptyEvents,\n setup: useAutocompleteEmpty,\n})\nclass AutocompleteEmptyElement extends AutocompleteEmptyElementBase {}\n\nregisterCustomElement('prosekit-autocomplete-empty', AutocompleteEmptyElement)\n \nexport { AutocompleteEmptyElement }\n","import { createContext, type Context } from '@aria-ui/core'\n\nexport const queryContext: Context<string> = createContext(\n 'prosekit/autocomplete-popover/query',\n '',\n)\n\nexport const onSubmitContext: Context<VoidFunction | null> = createContext(\n 'prosekit/autocomplete-popover/onSubmit',\n null,\n)\n\nexport const openContext: Context<boolean> = createContext(\n 'prosekit/autocomplete-popover/open',\n false,\n)\n","import { useEffect, useEventListener, type ConnectableElement, type SetupOptions } from '@aria-ui/core'\nimport { useListboxItem } from '@aria-ui/listbox/elements'\n\nimport { openContext } from '../context.ts'\n\nimport type { AutocompleteItemEvents, AutocompleteItemProps } from './types.ts'\n\n/**\n * @internal\n */\nexport function useAutocompleteItem(\n element: ConnectableElement,\n { state, emit }: SetupOptions<AutocompleteItemProps, AutocompleteItemEvents>,\n): void {\n useListboxItem(element, { state, emit })\n\n const open = openContext.consume(element)\n\n useEffect(element, () => {\n // Check the text content again when the open state changes\n if (!state.value.peek() && open.get()) {\n state.value.set(element.textContent ?? '')\n }\n })\n\n useEventListener(element, 'pointerdown', (event) => {\n // Prevent the editor from losing focus\n event.preventDefault()\n })\n}\n","import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'\nimport { listboxItemEvents, type ListboxItemEvents } from '@aria-ui/listbox'\n\nexport interface AutocompleteItemProps {\n /**\n * The value of the item, which will be matched against the query.\n *\n * If not provided, the value is the item's text content.\n *\n * @default \"\"\n */\n value: string\n}\n\n/** @internal */\nexport const autocompleteItemProps: PropDeclarations<AutocompleteItemProps> = {\n value: {\n default: '',\n },\n}\n\nexport interface AutocompleteItemEvents extends ListboxItemEvents {}\n\n/** @internal */\nexport const autocompleteItemEvents: EventDeclarations<AutocompleteItemEvents> = listboxItemEvents\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useAutocompleteItem } from \"./setup.ts\"\nimport { autocompleteItemEvents, autocompleteItemProps, type AutocompleteItemEvents, type AutocompleteItemProps } from \"./types.ts\"\n\nconst AutocompleteItemElementBase: BaseElementConstructor<AutocompleteItemProps> = defineCustomElement<\n AutocompleteItemProps,\n AutocompleteItemEvents\n>({\n props: autocompleteItemProps,\n events: autocompleteItemEvents,\n setup: useAutocompleteItem,\n})\nclass AutocompleteItemElement extends AutocompleteItemElementBase {}\n\nregisterCustomElement('prosekit-autocomplete-item', AutocompleteItemElement)\n \nexport { AutocompleteItemElement }\n","import {\n createSignal,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type SetupOptions,\n type TypedEventTarget,\n} from '@aria-ui/core'\nimport { listboxProps, useListbox, type ListboxProps } from '@aria-ui/listbox/elements'\nimport type { Priority } from '@prosekit/core'\nimport { defineDOMEventHandler, withPriority, type Editor } from '@prosekit/core'\n\nimport { getStateWithDefaults } from '../../../utils/get-default-state.ts'\nimport { onSubmitContext, openContext, queryContext } from '../context.ts'\n\nimport type { AutocompleteListEvents, AutocompleteListProps } from './types.ts'\n\n/**\n * @internal\n */\nexport function useAutocompleteList(\n element: ConnectableElement,\n { state, emit }: SetupOptions<AutocompleteListProps, AutocompleteListEvents>,\n): void {\n const open = openContext.consume(element)\n const query = queryContext.consume(element)\n const onSubmit = onSubmitContext.consume(element)\n\n const keydownTarget = useKeyDownTarget(element, open, state.editor)\n\n const listboxState = getStateWithDefaults<ListboxProps>(\n { filter: state.filter, eventTarget: createSignal(keydownTarget) },\n listboxProps,\n )\n\n useEffect(element, () => {\n element.addEventListener('valueChange', () => {\n if (onSubmit) {\n onSubmit.get()?.()\n }\n })\n })\n\n useListbox(element, { state: listboxState, emit })\n\n useEffect(element, () => {\n listboxState.query.set(query.get())\n })\n\n useEffect(element, () => {\n if (!open.get()) {\n listboxState.value.set('')\n query.set('')\n }\n })\n\n // Reset the focused item when the popover is open\n useEffect(element, () => {\n if (!open.get()) {\n listboxState.autoFocus.set(false)\n } else {\n let canceled = false\n\n requestAnimationFrame(() => {\n if (canceled) return\n listboxState.autoFocus.set(true)\n })\n\n return () => {\n canceled = true\n }\n }\n })\n\n // The autocomplete list should not be focusable because the editor will get\n // the focus during typing.\n useEffect(element, () => {\n element.tabIndex = -1\n })\n}\n\nfunction useKeyDownTarget(\n element: ConnectableElement,\n open: ReadonlySignal<boolean>,\n editor: ReadonlySignal<Editor | null>,\n): TypedEventTarget<'keydown'> {\n const keydownHandlers: ((event: KeyboardEvent) => void)[] = []\n\n useEffect(element, () => {\n const editorValue = editor.get()\n\n if (!editorValue) {\n return\n }\n\n const extension = defineDOMEventHandler(\n 'keydown',\n (view, event): boolean => {\n if (view.composing || event.defaultPrevented || !open.get()) {\n return false\n }\n keydownHandlers.forEach((handler) => handler(event))\n return event.defaultPrevented\n },\n )\n\n return editorValue.use(withPriority(extension, 4 satisfies typeof Priority.highest))\n })\n\n return {\n addEventListener: (type, listener) => {\n if (type === 'keydown') {\n keydownHandlers.push(listener)\n }\n },\n removeEventListener: (type, listener) => {\n if (type === 'keydown') {\n const index = keydownHandlers.indexOf(listener)\n if (index !== -1) {\n keydownHandlers.splice(index, 1)\n }\n }\n },\n }\n}\n","import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'\nimport { listboxEvents, listboxProps, type ListboxEvents, type ListboxProps } from '@aria-ui/listbox'\nimport type { Editor } from '@prosekit/core'\n\nexport interface AutocompleteListProps extends Pick<ListboxProps, 'filter'> {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n}\n\nexport const autocompleteListProps: PropDeclarations<AutocompleteListProps> = {\n filter: listboxProps.filter,\n editor: { default: null },\n}\n\nexport interface AutocompleteListEvents extends ListboxEvents {}\n\nexport const autocompleteListEvents: EventDeclarations<AutocompleteListEvents> = { ...listboxEvents }\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useAutocompleteList } from \"./setup.ts\"\nimport { autocompleteListEvents, autocompleteListProps, type AutocompleteListEvents, type AutocompleteListProps } from \"./types.ts\"\n\nconst AutocompleteListElementBase: BaseElementConstructor<AutocompleteListProps> = defineCustomElement<\n AutocompleteListProps,\n AutocompleteListEvents\n>({\n props: autocompleteListProps,\n events: autocompleteListEvents,\n setup: useAutocompleteList,\n})\nclass AutocompleteListElement extends AutocompleteListElementBase {}\n\nregisterCustomElement('prosekit-autocomplete-list', AutocompleteListElement)\n \nexport { AutocompleteListElement }\n","import { createSignal, useEffect, type ConnectableElement, type ReadonlySignal } from '@aria-ui/core'\n\nexport function useFirstRendering(\n host: ConnectableElement,\n): ReadonlySignal<boolean> {\n const firstRendering = createSignal(true)\n\n useEffect(host, () => {\n requestAnimationFrame(() => {\n firstRendering.set(false)\n })\n })\n\n return firstRendering\n}\n","export function defaultQueryBuilder(match: RegExpExecArray): string {\n return match[0]\n .toLowerCase()\n .replaceAll(/[!\"#$%&'()*+,-./:;<=>?@[\\\\\\]^_`{|}~]/g, '')\n .replaceAll(/\\s\\s+/g, ' ')\n .trim()\n}\n","import {\n createComputed,\n createSignal,\n useAnimationFrame,\n useAttribute,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type SetupOptions,\n type Signal,\n} from '@aria-ui/core'\nimport { useOverlayPositionerState } from '@aria-ui/overlay/elements'\nimport { usePresence } from '@aria-ui/presence'\nimport { defineKeymap, withPriority, type Editor, type Priority } from '@prosekit/core'\nimport { AutocompleteRule, defineAutocomplete, type MatchHandler } from '@prosekit/extensions/autocomplete'\n\nimport { useEditorExtension } from '../../../hooks/use-editor-extension.ts'\nimport { useFirstRendering } from '../../../hooks/use-first-rendering.ts'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view.ts'\nimport { onSubmitContext, openContext, queryContext } from '../context.ts'\n\nimport { defaultQueryBuilder } from './helpers.ts'\nimport type { AutocompletePopoverEvents, AutocompletePopoverProps } from './types.ts'\n\n/**\n * @internal\n */\nexport function useAutocompletePopover(\n host: ConnectableElement,\n {\n state,\n emit,\n }: SetupOptions<AutocompletePopoverProps, AutocompletePopoverEvents>,\n): void {\n const { editor, regex, ...overlayState } = state\n\n const reference = createSignal<Element | null>(null)\n const query = createSignal<string>('')\n const onDismiss = createSignal<VoidFunction | null>(null)\n const onSubmit = createSignal<VoidFunction | null>(null)\n const presence = createComputed(() => !!reference.get())\n\n queryContext.provide(host, query)\n onSubmitContext.provide(host, onSubmit)\n openContext.provide(host, presence)\n\n useEscapeKeydown(host, editor, createKeymapHandler(onDismiss, presence))\n\n useAutocompleteExtension(\n host,\n editor,\n regex,\n reference,\n query,\n onDismiss,\n onSubmit,\n )\n\n useOverlayPositionerState(host, overlayState, { reference })\n\n useAttribute(host, 'data-state', () => (presence.get() ? 'open' : 'closed'))\n usePresence(host, presence)\n\n const firstRendering = useFirstRendering(host)\n\n useEffect(host, () => {\n const queryValue = query.get()\n\n if (!firstRendering.peek()) {\n emit('queryChange', queryValue)\n }\n })\n\n useAnimationFrame(host, () => {\n const presenceValue = presence.get()\n return () => {\n emit('openChange', presenceValue)\n }\n })\n}\n\nfunction useAutocompleteExtension(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n regex: ReadonlySignal<RegExp | null>,\n reference: Signal<Element | null>,\n query: Signal<string>,\n onDismiss: Signal<VoidFunction | null>,\n onSubmit: Signal<VoidFunction | null>,\n) {\n useEffect(host, () => {\n const editorValue = editor.get()\n const regexValue = regex.get()\n\n if (!editorValue || !regexValue) {\n return\n }\n\n const rule = createAutocompleteRule(\n editorValue,\n regexValue,\n reference,\n query,\n onDismiss,\n onSubmit,\n )\n const extension = defineAutocomplete(rule)\n return editorValue.use(extension)\n })\n}\n\nfunction createAutocompleteRule(\n editor: Editor,\n regex: RegExp,\n reference: Signal<Element | null>,\n query: Signal<string>,\n onDismiss: Signal<VoidFunction | null>,\n onSubmit: Signal<VoidFunction | null>,\n) {\n const handleEnter: MatchHandler = (options) => {\n const view = getSafeEditorView(editor)\n const span = view?.dom.querySelector('.prosekit-autocomplete-match')\n\n if (span) {\n reference.set(span)\n }\n\n query.set(defaultQueryBuilder(options.match))\n onDismiss.set(options.ignoreMatch)\n onSubmit.set(options.deleteMatch)\n }\n\n const handleLeave = () => {\n reference.set(null)\n query.set('')\n }\n\n return new AutocompleteRule({\n regex,\n onEnter: handleEnter,\n onLeave: handleLeave,\n })\n}\n\nfunction createKeymapHandler(\n handler: ReadonlySignal<VoidFunction | null>,\n enabled: ReadonlySignal<boolean>,\n) {\n return (): boolean => {\n if (!enabled.get()) {\n return false\n }\n\n const fn = handler.peek()\n if (!fn) return false\n fn()\n return true\n }\n}\n\nfunction useEscapeKeydown(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n handler: () => boolean,\n): void {\n const keymap = { Escape: handler }\n const extension = withPriority(defineKeymap(keymap), 4 satisfies typeof Priority.highest)\n useEditorExtension(host, editor, extension)\n}\n","import type { EventDeclarations, PropDeclarations } from '@aria-ui/core'\nimport {\n overlayPositionerEvents,\n overlayPositionerProps,\n type OverlayPositionerEvents,\n type OverlayPositionerProps,\n} from '@aria-ui/overlay/elements'\nimport type { Editor } from '@prosekit/core'\n\nexport interface AutocompletePopoverProps extends OverlayPositionerProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The regular expression to match the query text to autocomplete.\n *\n * @default null\n */\n regex: RegExp | null\n\n /**\n * The placement of the popover, relative to the text cursor.\n *\n * @default \"bottom-start\"\n */\n placement: OverlayPositionerProps['placement']\n\n /**\n * The distance between the popover and the hovered block.\n *\n * @default 4\n */\n offset: OverlayPositionerProps['offset']\n\n /**\n * @default true\n */\n inline: OverlayPositionerProps['inline']\n\n /**\n * @default true\n */\n hoist: OverlayPositionerProps['hoist']\n\n /**\n * @default true\n */\n fitViewport: OverlayPositionerProps['fitViewport']\n\n /**\n * @default \"The body element\"\n */\n boundary: OverlayPositionerProps['boundary']\n\n /**\n * @default 8\n */\n overflowPadding: OverlayPositionerProps['overflowPadding']\n}\n\nconst body = typeof document !== 'undefined' && document.querySelector('body')\nconst defaultBoundary = body || 'clippingAncestors'\n\n/** @internal */\nexport const autocompletePopoverProps: PropDeclarations<AutocompletePopoverProps> = {\n ...overlayPositionerProps,\n editor: { default: null },\n regex: { default: null },\n placement: { default: 'bottom-start' },\n offset: { default: 4 },\n inline: { default: true },\n hoist: { default: true },\n fitViewport: { default: true },\n boundary: { default: defaultBoundary },\n overflowPadding: { default: 8 },\n}\n\nexport interface AutocompletePopoverEvents extends OverlayPositionerEvents {\n /**\n * Fired when the open state changes.\n */\n openChange: CustomEvent<boolean>\n\n /**\n * Fired when the query changes.\n */\n queryChange: CustomEvent<string>\n}\n\n/** @internal */\nexport const autocompletePopoverEvents: EventDeclarations<AutocompletePopoverEvents> = {\n ...overlayPositionerEvents,\n openChange: {},\n queryChange: {},\n}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useAutocompletePopover } from \"./setup.ts\"\nimport { autocompletePopoverEvents, autocompletePopoverProps, type AutocompletePopoverEvents, type AutocompletePopoverProps } from \"./types.ts\"\n\nconst AutocompletePopoverElementBase: BaseElementConstructor<AutocompletePopoverProps> = defineCustomElement<\n AutocompletePopoverProps,\n AutocompletePopoverEvents\n>({\n props: autocompletePopoverProps,\n events: autocompletePopoverEvents,\n setup: useAutocompletePopover,\n})\nclass AutocompletePopoverElement extends AutocompletePopoverElementBase {}\n\nregisterCustomElement('prosekit-autocomplete-popover', AutocompletePopoverElement)\n \nexport { AutocompletePopoverElement }\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prosekit-web-autocomplete.js","names":[],"sources":["../src/components/autocomplete/autocomplete-empty.ts","../src/utils/prevent-default.ts","../src/components/autocomplete/autocomplete-item.ts","../src/utils/lazy-signal.ts","../src/utils/use-no-focus.ts","../src/components/autocomplete/context.ts","../src/components/autocomplete/autocomplete-popup.ts","../src/components/autocomplete/autocomplete-positioner.ts","../src/utils/event.ts","../src/components/autocomplete/helpers.ts","../src/components/autocomplete/autocomplete-root.ts"],"sourcesContent":["import {\n defineCustomElement,\n defineProps,\n registerCustomElement,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { setupListboxEmpty, type ListboxEmptyProps } from '@aria-ui/elements/listbox'\n\n/**\n * @internal\n */\nexport interface AutocompleteEmptyProps extends ListboxEmptyProps {}\n\n/** @internal */\nexport const AutocompleteEmptyPropsDeclaration: PropsDeclaration<AutocompleteEmptyProps> = /* @__PURE__ */ defineProps<\n AutocompleteEmptyProps\n>({})\n\n/**\n * @internal\n */\nexport function setupAutocompleteEmpty(\n host: HostElement,\n props: State<AutocompleteEmptyProps>,\n): void {\n setupListboxEmpty(host, props)\n}\n\nconst AutocompleteEmptyElementBase: HostElementConstructor<AutocompleteEmptyProps> = defineCustomElement(\n setupAutocompleteEmpty,\n AutocompleteEmptyPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class AutocompleteEmptyElement extends AutocompleteEmptyElementBase {}\n\n/** @internal */\nexport function registerAutocompleteEmptyElement(): void {\n registerCustomElement('prosekit-autocomplete-empty', AutocompleteEmptyElement)\n}\n","export function preventDefault(event: Event): void {\n event.preventDefault()\n}\n","import {\n defineCustomElement,\n defineProps,\n registerCustomElement,\n useEventListener,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { SelectEvent, setupListboxItem, type ListboxItemEvents, type ListboxItemProps } from '@aria-ui/elements/listbox'\n\nimport { preventDefault } from '../../utils/prevent-default.ts'\n\nexport { SelectEvent }\n\nexport interface AutocompleteItemProps extends ListboxItemProps {\n /**\n * The value of the item, which will be matched against the query.\n *\n * If not provided, the value is the item's text content.\n *\n * @default \"\"\n */\n value: string\n}\n\n/** @internal */\nexport const AutocompleteItemPropsDeclaration: PropsDeclaration<AutocompleteItemProps> = /* @__PURE__ */ defineProps<AutocompleteItemProps>(\n {\n value: { default: '', attribute: 'value', type: 'string' },\n disabled: { default: false, attribute: 'disabled', type: 'boolean' },\n },\n)\n\nexport interface AutocompleteItemEvents extends ListboxItemEvents {}\n\n/**\n * @internal\n */\nexport function setupAutocompleteItem(\n host: HostElement,\n props: State<AutocompleteItemProps>,\n): void {\n setupListboxItem(host, props)\n\n // Prevent the editor from losing focus\n useEventListener(host, 'pointerdown', preventDefault)\n useEventListener(host, 'mousedown', preventDefault)\n}\n\nconst AutocompleteItemElementBase: HostElementConstructor<AutocompleteItemProps> = defineCustomElement(\n setupAutocompleteItem,\n AutocompleteItemPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class AutocompleteItemElement extends AutocompleteItemElementBase {}\n\n/** @internal */\nexport function registerAutocompleteItemElement(): void {\n registerCustomElement('prosekit-autocomplete-item', AutocompleteItemElement)\n}\n","import type { Signal } from '@aria-ui/core'\n\nexport function createLazySignal<T>(\n getRemote: () => Signal<T> | undefined,\n fallback: T,\n): Signal<T> {\n return {\n get: (): T => {\n const remote = getRemote()\n return remote ? remote.get() : fallback\n },\n set: (value: T): void => {\n const remote = getRemote()\n if (remote) remote.set(value)\n },\n }\n}\n","import { onMount, type HostElement } from '@aria-ui/core'\n\nexport function useNoFocus(host: HostElement): void {\n onMount(host, () => {\n host.tabIndex = -1\n })\n}\n","import { createContext, type Context, type Signal } from '@aria-ui/core'\nimport type { ItemFilter } from '@aria-ui/elements/listbox'\nimport type { OverlayStore } from '@aria-ui/elements/overlay'\n\n/**\n * @internal\n */\nexport interface AutocompleteStore {\n overlayStore: OverlayStore\n query: Signal<string>\n eventTarget: Signal<EventTarget | null>\n filter: Signal<ItemFilter | null>\n}\n\n/**\n * @internal\n */\nexport const autocompleteStoreContext: Context<AutocompleteStore> = createContext<AutocompleteStore>('prosekit-autocomplete-store')\n","import {\n createSignal,\n defineCustomElement,\n defineProps,\n registerCustomElement,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type Signal,\n type State,\n} from '@aria-ui/core'\nimport {\n defaultItemFilter,\n setupListboxRoot,\n type ItemFilter,\n type ListboxRootEvents,\n type ListboxRootProps,\n} from '@aria-ui/elements/listbox'\nimport { OverlayPopupPropsDeclaration, setupOverlayPopup, type OverlayPopupProps } from '@aria-ui/elements/overlay'\n\nimport { createLazySignal } from '../../utils/lazy-signal.ts'\nimport { useNoFocus } from '../../utils/use-no-focus.ts'\n\nimport { autocompleteStoreContext } from './context.ts'\n\n/**\n * @public\n */\nexport interface AutocompletePopupProps extends OverlayPopupProps {}\n\n/**\n * @public\n */\nexport interface AutocompletePopupEvents extends ListboxRootEvents {}\n\n/** @internal */\nexport const AutocompletePopupPropsDeclaration: PropsDeclaration<AutocompletePopupProps> = /* @__PURE__ */ defineProps<\n AutocompletePopupProps\n>(OverlayPopupPropsDeclaration)\n\n/** @internal */\nexport function setupAutocompletePopup(\n host: HostElement,\n _props: State<AutocompletePopupProps>,\n): void {\n const getStore = autocompleteStoreContext.consume(host)\n const getOverlayStore = () => getStore()?.overlayStore\n\n setupOverlayPopup(host, getOverlayStore)\n\n const query = createLazySignal<string>(() => getStore()?.query, ' ')\n const eventTarget = createLazySignal<EventTarget | null>(() => getStore()?.eventTarget, null)\n const filter = createLazySignal<ItemFilter | null>(() => getStore()?.filter, defaultItemFilter)\n const getDisabled = () => (!(getOverlayStore()?.getIsOpen?.()))\n const disabled: Signal<boolean> = { get: getDisabled, set: () => {} }\n const listboxProps = createPopupListboxProps(filter, query, eventTarget, disabled)\n\n setupListboxRoot(host, listboxProps)\n useNoFocus(host)\n}\n\nfunction createPopupListboxProps(\n filter: Signal<ItemFilter | null>,\n query: Signal<string>,\n eventTarget: Signal<EventTarget | null>,\n disabled: Signal<boolean>,\n): State<ListboxRootProps> {\n return {\n value: createSignal(''),\n values: createSignal<string[]>([]),\n multiple: createSignal(false),\n disabled,\n orientation: createSignal<'vertical' | 'horizontal'>('vertical'),\n loop: createSignal(false),\n autoHighlight: createSignal(true),\n query,\n eventTarget,\n filter,\n }\n}\n\nconst AutocompletePopupElementBase: HostElementConstructor<AutocompletePopupProps> = defineCustomElement(\n setupAutocompletePopup,\n AutocompletePopupPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class AutocompletePopupElement extends AutocompletePopupElementBase {}\n\n/** @internal */\nexport function registerAutocompletePopupElement(): void {\n registerCustomElement('prosekit-autocomplete-popup', AutocompletePopupElement)\n}\n","import {\n defineCustomElement,\n defineProps,\n registerCustomElement,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { OverlayPositionerPropsDeclaration, setupOverlayPositioner, type OverlayPositionerProps } from '@aria-ui/elements/overlay'\n\nimport { autocompleteStoreContext } from './context.ts'\n\nconst body = typeof document !== 'undefined' && document.querySelector('body')\nconst defaultBoundary = body || 'clippingAncestors'\n\n/**\n * @public\n */\nexport interface AutocompletePositionerProps extends OverlayPositionerProps {\n /**\n * The placement of the popover, relative to the text cursor.\n *\n * @default \"bottom-start\"\n */\n placement: OverlayPositionerProps['placement']\n\n /**\n * The distance between the popover and the hovered block.\n *\n * @default 4\n */\n offset: OverlayPositionerProps['offset']\n\n /**\n * @default true\n */\n inline: OverlayPositionerProps['inline']\n\n /**\n * @default true\n */\n hoist: OverlayPositionerProps['hoist']\n\n /**\n * @default true\n */\n fitViewport: OverlayPositionerProps['fitViewport']\n\n /**\n * @default \"The body element\"\n */\n boundary: OverlayPositionerProps['boundary']\n\n /**\n * @default 8\n */\n overflowPadding: OverlayPositionerProps['overflowPadding']\n}\n\n/** @internal */\nexport const AutocompletePositionerPropsDeclaration: PropsDeclaration<AutocompletePositionerProps> = /* @__PURE__ */ defineProps<\n AutocompletePositionerProps\n>({\n ...OverlayPositionerPropsDeclaration,\n placement: { default: 'bottom-start', attribute: 'placement', type: 'string' },\n offset: { default: 4, attribute: false, type: 'json' },\n inline: { default: true, attribute: 'inline', type: 'boolean' },\n hoist: { default: true, attribute: 'hoist', type: 'boolean' },\n fitViewport: { default: true, attribute: 'fit-viewport', type: 'boolean' },\n boundary: { default: defaultBoundary, attribute: false, type: 'json' },\n overflowPadding: { default: 8, attribute: 'overflow-padding', type: 'number' },\n})\n\n/** @internal */\nexport function setupAutocompletePositioner(\n host: HostElement,\n props: State<AutocompletePositionerProps>,\n): void {\n const getStore = autocompleteStoreContext.consume(host)\n const getOverlayStore = () => getStore()?.overlayStore\n setupOverlayPositioner(host, props as unknown as State<OverlayPositionerProps>, getOverlayStore)\n}\n\nconst AutocompletePositionerElementBase: HostElementConstructor<AutocompletePositionerProps> = defineCustomElement(\n setupAutocompletePositioner,\n AutocompletePositionerPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class AutocompletePositionerElement extends AutocompletePositionerElementBase {}\n\n/** @internal */\nexport function registerAutocompletePositionerElement(): void {\n registerCustomElement('prosekit-autocomplete-positioner', AutocompletePositionerElement)\n}\n","function cloneKeyboardEvent(source: KeyboardEvent): KeyboardEvent {\n return new KeyboardEvent(source.type, {\n code: source.code,\n key: source.key,\n location: source.location,\n repeat: source.repeat,\n altKey: source.altKey,\n ctrlKey: source.ctrlKey,\n metaKey: source.metaKey,\n shiftKey: source.shiftKey,\n\n view: source.view,\n // internal bridge target; events don't need to bubble\"\n bubbles: false,\n cancelable: true,\n })\n}\n\nexport class KeyboardEventTarget extends EventTarget {\n override dispatchEvent(event: KeyboardEvent): boolean {\n const newEvent = cloneKeyboardEvent(event)\n const result: boolean = super.dispatchEvent(newEvent)\n if (newEvent.defaultPrevented) {\n event.preventDefault()\n }\n return result\n }\n}\n","export function defaultQueryBuilder(match: RegExpExecArray): string {\n return match[0]\n .toLowerCase()\n .replaceAll(/[!\"#$%&'()*+,-./:;<=>?@[\\\\\\]^_`{|}~]/g, '')\n .replaceAll(/\\s\\s+/g, ' ')\n .trim()\n}\n","import {\n createSignal,\n defineCustomElement,\n defineProps,\n registerCustomElement,\n useEffect,\n useEventListener,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type Signal,\n type State,\n} from '@aria-ui/core'\nimport { defaultItemFilter, type ItemFilter, type ListboxRootEvents } from '@aria-ui/elements/listbox'\nimport { createOverlayStore, OpenChangeEvent, type OverlayStore } from '@aria-ui/elements/overlay'\nimport { defineDOMEventHandler, defineKeymap, withPriority, type Editor, type Extension, type Priority } from '@prosekit/core'\nimport { AutocompleteRule, defineAutocomplete, type MatchHandler } from '@prosekit/extensions/autocomplete'\n\nimport { useEditorExtension } from '../../hooks/use-editor-extension.ts'\nimport { KeyboardEventTarget } from '../../utils/event.ts'\nimport { getSafeEditorView } from '../../utils/get-safe-editor-view.ts'\n\nimport { autocompleteStoreContext, type AutocompleteStore } from './context.ts'\nimport { defaultQueryBuilder } from './helpers.ts'\n\nexport { OpenChangeEvent }\n\nexport interface AutocompleteRootProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The regular expression to match the query text to autocomplete.\n *\n * @default null\n */\n regex: RegExp | null\n\n /**\n * The filter function to determine if an item should be shown in the\n * listbox.\n *\n * @default defaultItemFilter\n */\n filter: ItemFilter | null\n}\n\n/** @internal */\nexport const AutocompleteRootPropsDeclaration: PropsDeclaration<AutocompleteRootProps> = /* @__PURE__ */ defineProps<\n AutocompleteRootProps\n>({\n editor: { default: null, attribute: false, type: 'json' },\n regex: { default: null, attribute: false, type: 'json' },\n filter: { default: defaultItemFilter, attribute: false, type: 'json' },\n})\n\n/**\n * @public\n */\nexport class QueryChangeEvent extends Event {\n /**\n * The current query string.\n */\n readonly detail: string\n\n constructor(query: string) {\n super('queryChange', { bubbles: true })\n this.detail = query\n }\n}\n\n/**\n * @public\n */\nexport interface AutocompleteRootEvents extends ListboxRootEvents {\n /**\n * Fired when the open state changes.\n */\n openChange: OpenChangeEvent\n\n /**\n * Fired when the query changes.\n */\n queryChange: QueryChangeEvent\n}\n\ninterface RuleHandlers {\n submit?: VoidFunction\n dismiss?: VoidFunction\n}\n\ninterface AutocompleteRuleDeps {\n reference: Signal<Element | undefined>\n handlers: RuleHandlers\n setQuery: (next: string) => void\n requestOpenChange: (open: boolean) => void\n}\n\n/**\n * @internal\n */\nexport function setupAutocompleteRoot(\n host: HostElement,\n props: State<AutocompleteRootProps>,\n): void {\n const getEditor = props.editor.get\n\n const reference = createSignal<Element | undefined>(undefined)\n const open = createSignal(false)\n const query = createSignal('')\n const keyboardTarget = new KeyboardEventTarget()\n const eventTarget = createSignal<EventTarget | null>(keyboardTarget)\n const handlers: RuleHandlers = {}\n\n // Create overlay store for positioning. The open state is managed by the\n // overlay store via requestOpenChange(), which dispatches OpenChangeEvent and\n // updates the open signal.\n const overlayStore: OverlayStore = createOverlayStore(\n open.get,\n open.set,\n () => false,\n () => false,\n (event) => host.dispatchEvent(event),\n )\n\n useEffect(host, () => {\n overlayStore.setAnchorElement(reference.get())\n })\n\n const autocompleteStore: AutocompleteStore = {\n overlayStore,\n query,\n eventTarget,\n filter: props.filter,\n }\n\n autocompleteStoreContext.provide(host, autocompleteStore)\n\n useEventListener(host, 'valueChange', () => {\n handlers.submit?.()\n })\n\n useKeyboardBridge(host, getEditor, open.get, keyboardTarget)\n\n useEscapeKeydown(host, getEditor, () => {\n if (!open.get() || !handlers.dismiss) return false\n handlers.dismiss()\n return true\n })\n\n const setQuery = (next: string): void => {\n if (query.get() === next) return\n query.set(next)\n host.dispatchEvent(new QueryChangeEvent(next))\n }\n\n useAutocompleteExtension(host, getEditor, props.regex.get, {\n reference,\n handlers,\n setQuery,\n requestOpenChange: (open) => overlayStore.requestOpenChange(open),\n })\n}\n\nconst EVENT_KEYS = [\n 'ArrowDown',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowLeft',\n 'Home',\n 'End',\n 'Enter',\n] as const\n\nfunction useKeyboardBridge(\n host: HostElement,\n getEditor: () => Editor | null,\n getOpen: () => boolean,\n target: EventTarget,\n): void {\n const extension: Extension = defineDOMEventHandler('keydown', (view, event): boolean => {\n if (\n view.composing\n || event.defaultPrevented\n || !getOpen()\n || !EVENT_KEYS.includes(event.key as (typeof EVENT_KEYS)[number])\n ) {\n return false\n }\n target.dispatchEvent(event)\n return event.defaultPrevented\n })\n useEditorExtension(host, getEditor, withPriority(extension, 4 satisfies typeof Priority.highest))\n}\n\nfunction useAutocompleteExtension(\n host: HostElement,\n getEditor: () => Editor | null,\n getRegex: () => RegExp | null,\n deps: AutocompleteRuleDeps,\n) {\n useEffect(host, () => {\n const editor = getEditor()\n const regex = getRegex()\n\n if (!editor || !regex) {\n return\n }\n\n const rule = createAutocompleteRule(editor, regex, deps)\n const extension = defineAutocomplete(rule)\n return editor.use(extension)\n })\n}\n\nfunction createAutocompleteRule(\n editor: Editor,\n regex: RegExp,\n deps: AutocompleteRuleDeps,\n) {\n const { reference, handlers, setQuery, requestOpenChange } = deps\n\n const handleEnter: MatchHandler = (options) => {\n const view = getSafeEditorView(editor)\n const span = view?.dom.querySelector('.prosekit-autocomplete-match')\n\n if (span) {\n reference.set(span)\n }\n\n handlers.submit = options.deleteMatch\n handlers.dismiss = options.ignoreMatch\n setQuery(defaultQueryBuilder(options.match))\n requestOpenChange(true)\n }\n\n const handleLeave = () => {\n reference.set(undefined)\n setQuery('')\n handlers.submit = undefined\n handlers.dismiss = undefined\n requestOpenChange(false)\n }\n\n return new AutocompleteRule({\n regex,\n onEnter: handleEnter,\n onLeave: handleLeave,\n })\n}\n\nfunction useEscapeKeydown(\n host: HostElement,\n getEditor: () => Editor | null,\n handler: () => boolean,\n): void {\n const keymap = { Escape: handler }\n const extension = withPriority(defineKeymap(keymap), 4 satisfies typeof Priority.highest)\n useEditorExtension(host, getEditor, extension)\n}\n\nconst AutocompleteRootElementBase: HostElementConstructor<AutocompleteRootProps> = defineCustomElement(\n setupAutocompleteRoot,\n AutocompleteRootPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class AutocompleteRootElement extends AutocompleteRootElementBase {}\n\n/** @internal */\nexport function registerAutocompleteRootElement(): void {\n registerCustomElement('prosekit-autocomplete-root', AutocompleteRootElement)\n}\n"],"mappings":";;;;;;;;;AAiBA,MAAa,oCAA8F,4BAEzG,EAAE,CAAC;;;;AAKL,SAAgB,uBACd,MACA,OACM;AACN,mBAAkB,MAAM,MAAM;;AAGhC,MAAM,+BAA+E,oBACnF,wBACA,kCACD;;;;AAKD,IAAa,2BAAb,cAA8C,6BAA6B;;AAG3E,SAAgB,mCAAyC;AACvD,uBAAsB,+BAA+B,yBAAyB;;;;AC3ChF,SAAgB,eAAe,OAAoB;AACjD,OAAM,gBAAgB;;;;;AC2BxB,MAAa,mCAA4F,4BACvG;CACE,OAAO;EAAE,SAAS;EAAI,WAAW;EAAS,MAAM;EAAU;CAC1D,UAAU;EAAE,SAAS;EAAO,WAAW;EAAY,MAAM;EAAW;CACrE,CACF;;;;AAOD,SAAgB,sBACd,MACA,OACM;AACN,kBAAiB,MAAM,MAAM;AAG7B,kBAAiB,MAAM,eAAe,eAAe;AACrD,kBAAiB,MAAM,aAAa,eAAe;;AAGrD,MAAM,8BAA6E,oBACjF,uBACA,iCACD;;;;AAKD,IAAa,0BAAb,cAA6C,4BAA4B;;AAGzE,SAAgB,kCAAwC;AACtD,uBAAsB,8BAA8B,wBAAwB;;;;AC7D9E,SAAgB,iBACd,WACA,UACW;AACX,QAAO;EACL,WAAc;GACZ,MAAM,SAAS,WAAW;AAC1B,UAAO,SAAS,OAAO,KAAK,GAAG;;EAEjC,MAAM,UAAmB;GACvB,MAAM,SAAS,WAAW;AAC1B,OAAI,OAAQ,QAAO,IAAI,MAAM;;EAEhC;;;;ACbH,SAAgB,WAAW,MAAyB;AAClD,SAAQ,YAAY;AAClB,OAAK,WAAW;GAChB;;;;;;;ACYJ,MAAa,2BAAuD,cAAiC,8BAA8B;;;;ACmBnI,MAAa,oCAA8F,4BAEzG,6BAA6B;;AAG/B,SAAgB,uBACd,MACA,QACM;CACN,MAAM,WAAW,yBAAyB,QAAQ,KAAK;CACvD,MAAM,wBAAwB,UAAU,EAAE;AAE1C,mBAAkB,MAAM,gBAAgB;CAExC,MAAM,QAAQ,uBAA+B,UAAU,EAAE,OAAO,IAAI;CACpE,MAAM,cAAc,uBAA2C,UAAU,EAAE,aAAa,KAAK;CAC7F,MAAM,SAAS,uBAA0C,UAAU,EAAE,QAAQ,kBAAkB;CAC/F,MAAM,oBAAqB,CAAE,iBAAiB,EAAE,aAAa;AAI7D,kBAAiB,MAFI,wBAAwB,QAAQ,OAAO,aAD1B;EAAE,KAAK;EAAa,WAAW;EAAI,CACa,CAE9C;AACpC,YAAW,KAAK;;AAGlB,SAAS,wBACP,QACA,OACA,aACA,UACyB;AACzB,QAAO;EACL,OAAO,aAAa,GAAG;EACvB,QAAQ,aAAuB,EAAE,CAAC;EAClC,UAAU,aAAa,MAAM;EAC7B;EACA,aAAa,aAAwC,WAAW;EAChE,MAAM,aAAa,MAAM;EACzB,eAAe,aAAa,KAAK;EACjC;EACA;EACA;EACD;;AAGH,MAAM,+BAA+E,oBACnF,wBACA,kCACD;;;;AAKD,IAAa,2BAAb,cAA8C,6BAA6B;;AAG3E,SAAgB,mCAAyC;AACvD,uBAAsB,+BAA+B,yBAAyB;;;;AC/EhF,MAAM,kBADO,OAAO,aAAa,eAAe,SAAS,cAAc,OAAO,IAC9C;;AA+ChC,MAAa,yCAAwG,4BAEnH;CACA,GAAG;CACH,WAAW;EAAE,SAAS;EAAgB,WAAW;EAAa,MAAM;EAAU;CAC9E,QAAQ;EAAE,SAAS;EAAG,WAAW;EAAO,MAAM;EAAQ;CACtD,QAAQ;EAAE,SAAS;EAAM,WAAW;EAAU,MAAM;EAAW;CAC/D,OAAO;EAAE,SAAS;EAAM,WAAW;EAAS,MAAM;EAAW;CAC7D,aAAa;EAAE,SAAS;EAAM,WAAW;EAAgB,MAAM;EAAW;CAC1E,UAAU;EAAE,SAAS;EAAiB,WAAW;EAAO,MAAM;EAAQ;CACtE,iBAAiB;EAAE,SAAS;EAAG,WAAW;EAAoB,MAAM;EAAU;CAC/E,CAAC;;AAGF,SAAgB,4BACd,MACA,OACM;CACN,MAAM,WAAW,yBAAyB,QAAQ,KAAK;CACvD,MAAM,wBAAwB,UAAU,EAAE;AAC1C,wBAAuB,MAAM,OAAmD,gBAAgB;;AAGlG,MAAM,oCAAyF,oBAC7F,6BACA,uCACD;;;;AAKD,IAAa,gCAAb,cAAmD,kCAAkC;;AAGrF,SAAgB,wCAA8C;AAC5D,uBAAsB,oCAAoC,8BAA8B;;;;AChG1F,SAAS,mBAAmB,QAAsC;AAChE,QAAO,IAAI,cAAc,OAAO,MAAM;EACpC,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,UAAU,OAAO;EACjB,QAAQ,OAAO;EACf,QAAQ,OAAO;EACf,SAAS,OAAO;EAChB,SAAS,OAAO;EAChB,UAAU,OAAO;EAEjB,MAAM,OAAO;EAEb,SAAS;EACT,YAAY;EACb,CAAC;;AAGJ,IAAa,sBAAb,cAAyC,YAAY;CACnD,cAAuB,OAA+B;EACpD,MAAM,WAAW,mBAAmB,MAAM;EAC1C,MAAM,SAAkB,MAAM,cAAc,SAAS;AACrD,MAAI,SAAS,iBACX,OAAM,gBAAgB;AAExB,SAAO;;;;;ACzBX,SAAgB,oBAAoB,OAAgC;AAClE,QAAO,MAAM,GACV,aAAa,CACb,WAAW,yCAAyC,GAAG,CACvD,WAAW,UAAU,IAAI,CACzB,MAAM;;;;;ACgDX,MAAa,mCAA4F,4BAEvG;CACA,QAAQ;EAAE,SAAS;EAAM,WAAW;EAAO,MAAM;EAAQ;CACzD,OAAO;EAAE,SAAS;EAAM,WAAW;EAAO,MAAM;EAAQ;CACxD,QAAQ;EAAE,SAAS;EAAmB,WAAW;EAAO,MAAM;EAAQ;CACvE,CAAC;;;;AAKF,IAAa,mBAAb,cAAsC,MAAM;CAM1C,YAAY,OAAe;AACzB,QAAM,eAAe,EAAE,SAAS,MAAM,CAAC;AACvC,OAAK,SAAS;;;;;;AAkClB,SAAgB,sBACd,MACA,OACM;CACN,MAAM,YAAY,MAAM,OAAO;CAE/B,MAAM,YAAY,aAAkC,KAAA,EAAU;CAC9D,MAAM,OAAO,aAAa,MAAM;CAChC,MAAM,QAAQ,aAAa,GAAG;CAC9B,MAAM,iBAAiB,IAAI,qBAAqB;CAChD,MAAM,cAAc,aAAiC,eAAe;CACpE,MAAM,WAAyB,EAAE;CAKjC,MAAM,eAA6B,mBACjC,KAAK,KACL,KAAK,WACC,aACA,QACL,UAAU,KAAK,cAAc,MAAM,CACrC;AAED,WAAU,YAAY;AACpB,eAAa,iBAAiB,UAAU,KAAK,CAAC;GAC9C;CAEF,MAAM,oBAAuC;EAC3C;EACA;EACA;EACA,QAAQ,MAAM;EACf;AAED,0BAAyB,QAAQ,MAAM,kBAAkB;AAEzD,kBAAiB,MAAM,qBAAqB;AAC1C,WAAS,UAAU;GACnB;AAEF,mBAAkB,MAAM,WAAW,KAAK,KAAK,eAAe;AAE5D,kBAAiB,MAAM,iBAAiB;AACtC,MAAI,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,QAAS,QAAO;AAC7C,WAAS,SAAS;AAClB,SAAO;GACP;CAEF,MAAM,YAAY,SAAuB;AACvC,MAAI,MAAM,KAAK,KAAK,KAAM;AAC1B,QAAM,IAAI,KAAK;AACf,OAAK,cAAc,IAAI,iBAAiB,KAAK,CAAC;;AAGhD,0BAAyB,MAAM,WAAW,MAAM,MAAM,KAAK;EACzD;EACA;EACA;EACA,oBAAoB,SAAS,aAAa,kBAAkB,KAAK;EAClE,CAAC;;AAGJ,MAAM,aAAa;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAS,kBACP,MACA,WACA,SACA,QACM;AAaN,oBAAmB,MAAM,WAAW,aAZP,sBAAsB,YAAY,MAAM,UAAmB;AACtF,MACE,KAAK,aACF,MAAM,oBACN,CAAC,SAAS,IACV,CAAC,WAAW,SAAS,MAAM,IAAmC,CAEjE,QAAO;AAET,SAAO,cAAc,MAAM;AAC3B,SAAO,MAAM;GACb,EAC0D,EAAoC,CAAC;;AAGnG,SAAS,yBACP,MACA,WACA,UACA,MACA;AACA,WAAU,YAAY;EACpB,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;AAExB,MAAI,CAAC,UAAU,CAAC,MACd;EAIF,MAAM,YAAY,mBADL,uBAAuB,QAAQ,OAAO,KAAK,CACd;AAC1C,SAAO,OAAO,IAAI,UAAU;GAC5B;;AAGJ,SAAS,uBACP,QACA,OACA,MACA;CACA,MAAM,EAAE,WAAW,UAAU,UAAU,sBAAsB;CAE7D,MAAM,eAA6B,YAAY;EAE7C,MAAM,OADO,kBAAkB,OAAO,EACnB,IAAI,cAAc,+BAA+B;AAEpE,MAAI,KACF,WAAU,IAAI,KAAK;AAGrB,WAAS,SAAS,QAAQ;AAC1B,WAAS,UAAU,QAAQ;AAC3B,WAAS,oBAAoB,QAAQ,MAAM,CAAC;AAC5C,oBAAkB,KAAK;;CAGzB,MAAM,oBAAoB;AACxB,YAAU,IAAI,KAAA,EAAU;AACxB,WAAS,GAAG;AACZ,WAAS,SAAS,KAAA;AAClB,WAAS,UAAU,KAAA;AACnB,oBAAkB,MAAM;;AAG1B,QAAO,IAAI,iBAAiB;EAC1B;EACA,SAAS;EACT,SAAS;EACV,CAAC;;AAGJ,SAAS,iBACP,MACA,WACA,SACM;AAGN,oBAAmB,MAAM,WADP,aAAa,aADhB,EAAE,QAAQ,SAAS,CACiB,EAAE,EAAoC,CAC3C;;AAGhD,MAAM,8BAA6E,oBACjF,uBACA,iCACD;;;;AAKD,IAAa,0BAAb,cAA6C,4BAA4B;;AAGzE,SAAgB,kCAAwC;AACtD,uBAAsB,8BAA8B,wBAAwB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HostElement, HostElementConstructor, PropsDeclaration, State } from "@aria-ui/core";
|
|
2
|
+
import { OverlayPopupProps, OverlayPositionerProps } from "@aria-ui/elements/overlay";
|
|
2
3
|
import { Editor } from "@prosekit/core";
|
|
3
|
-
import { OverlayPositionerEvents, OverlayPositionerProps } from "@aria-ui/overlay/elements";
|
|
4
4
|
import { ProseMirrorNode } from "@prosekit/pm/model";
|
|
5
5
|
import { Placement } from "@floating-ui/dom";
|
|
6
6
|
|
|
7
|
-
//#region src/components/block-handle/block-handle-add
|
|
7
|
+
//#region src/components/block-handle/block-handle-add.d.ts
|
|
8
8
|
interface BlockHandleAddProps {
|
|
9
9
|
/**
|
|
10
10
|
* The ProseKit editor instance.
|
|
@@ -15,27 +15,20 @@ interface BlockHandleAddProps {
|
|
|
15
15
|
editor: Editor | null;
|
|
16
16
|
}
|
|
17
17
|
/** @internal */
|
|
18
|
-
declare const
|
|
19
|
-
/** @internal */
|
|
20
|
-
interface BlockHandleAddEvents {}
|
|
21
|
-
/** @internal */
|
|
22
|
-
declare const blockHandleAddEvents: EventDeclarations<BlockHandleAddEvents>;
|
|
23
|
-
//#endregion
|
|
24
|
-
//#region src/components/block-handle/block-handle-add/element.gen.d.ts
|
|
25
|
-
declare const BlockHandleAddElementBase: BaseElementConstructor<BlockHandleAddProps>;
|
|
26
|
-
declare class BlockHandleAddElement extends BlockHandleAddElementBase {}
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region src/components/block-handle/block-handle-add/setup.d.ts
|
|
18
|
+
declare const BlockHandleAddPropsDeclaration: PropsDeclaration<BlockHandleAddProps>;
|
|
29
19
|
/**
|
|
30
20
|
* @internal
|
|
31
21
|
*/
|
|
32
|
-
declare function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
22
|
+
declare function setupBlockHandleAdd(host: HostElement, props: State<BlockHandleAddProps>): void;
|
|
23
|
+
declare const BlockHandleAddElementBase: HostElementConstructor<BlockHandleAddProps>;
|
|
24
|
+
/**
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
declare class BlockHandleAddElement extends BlockHandleAddElementBase {}
|
|
28
|
+
/** @internal */
|
|
29
|
+
declare function registerBlockHandleAddElement(): void;
|
|
37
30
|
//#endregion
|
|
38
|
-
//#region src/components/block-handle/block-handle-draggable
|
|
31
|
+
//#region src/components/block-handle/block-handle-draggable.d.ts
|
|
39
32
|
interface BlockHandleDraggableProps {
|
|
40
33
|
/**
|
|
41
34
|
* The ProseKit editor instance.
|
|
@@ -46,35 +39,41 @@ interface BlockHandleDraggableProps {
|
|
|
46
39
|
editor: Editor | null;
|
|
47
40
|
}
|
|
48
41
|
/** @internal */
|
|
49
|
-
declare const
|
|
50
|
-
/**
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
declare
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
42
|
+
declare const BlockHandleDraggablePropsDeclaration: PropsDeclaration<BlockHandleDraggableProps>;
|
|
43
|
+
/**
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
declare function setupBlockHandleDraggable(host: HostElement, props: State<BlockHandleDraggableProps>): void;
|
|
47
|
+
declare const BlockHandleDraggableElementBase: HostElementConstructor<BlockHandleDraggableProps>;
|
|
48
|
+
/**
|
|
49
|
+
* @public
|
|
50
|
+
*/
|
|
57
51
|
declare class BlockHandleDraggableElement extends BlockHandleDraggableElementBase {}
|
|
52
|
+
/** @internal */
|
|
53
|
+
declare function registerBlockHandleDraggableElement(): void;
|
|
58
54
|
//#endregion
|
|
59
|
-
//#region src/components/block-handle/block-handle-
|
|
55
|
+
//#region src/components/block-handle/block-handle-popup.d.ts
|
|
60
56
|
/**
|
|
61
|
-
* @
|
|
57
|
+
* @public
|
|
58
|
+
*/
|
|
59
|
+
interface BlockHandlePopupProps extends OverlayPopupProps {}
|
|
60
|
+
/** @internal */
|
|
61
|
+
declare const BlockHandlePopupPropsDeclaration: PropsDeclaration<BlockHandlePopupProps>;
|
|
62
|
+
/** @internal */
|
|
63
|
+
declare function setupBlockHandlePopup(host: HostElement, _props: State<BlockHandlePopupProps>): void;
|
|
64
|
+
declare const BlockHandlePopupElementBase: HostElementConstructor<BlockHandlePopupProps>;
|
|
65
|
+
/**
|
|
66
|
+
* @public
|
|
62
67
|
*/
|
|
63
|
-
declare
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
state: SignalState<BlockHandleDraggableProps>;
|
|
67
|
-
}): void;
|
|
68
|
+
declare class BlockHandlePopupElement extends BlockHandlePopupElementBase {}
|
|
69
|
+
/** @internal */
|
|
70
|
+
declare function registerBlockHandlePopupElement(): void;
|
|
68
71
|
//#endregion
|
|
69
|
-
//#region src/components/block-handle/block-handle-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
* @default null
|
|
75
|
-
* @hidden
|
|
76
|
-
*/
|
|
77
|
-
editor: Editor | null;
|
|
72
|
+
//#region src/components/block-handle/block-handle-positioner.d.ts
|
|
73
|
+
/**
|
|
74
|
+
* @public
|
|
75
|
+
*/
|
|
76
|
+
interface BlockHandlePositionerProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {
|
|
78
77
|
/**
|
|
79
78
|
* The placement of the popover, relative to the hovered block.
|
|
80
79
|
*
|
|
@@ -105,31 +104,65 @@ interface BlockHandlePopoverProps extends Omit<OverlayPositionerProps, 'placemen
|
|
|
105
104
|
hide: boolean;
|
|
106
105
|
}
|
|
107
106
|
/** @internal */
|
|
108
|
-
declare const
|
|
109
|
-
|
|
107
|
+
declare const BlockHandlePositionerPropsDeclaration: PropsDeclaration<BlockHandlePositionerProps>;
|
|
108
|
+
/** @internal */
|
|
109
|
+
declare function setupBlockHandlePositioner(host: HostElement, props: State<BlockHandlePositionerProps>): void;
|
|
110
|
+
declare const BlockHandlePositionerElementBase: HostElementConstructor<BlockHandlePositionerProps>;
|
|
111
|
+
/**
|
|
112
|
+
* @public
|
|
113
|
+
*/
|
|
114
|
+
declare class BlockHandlePositionerElement extends BlockHandlePositionerElementBase {}
|
|
115
|
+
/** @internal */
|
|
116
|
+
declare function registerBlockHandlePositionerElement(): void;
|
|
117
|
+
//#endregion
|
|
118
|
+
//#region src/components/block-handle/block-handle-root.d.ts
|
|
119
|
+
interface BlockHandleRootProps {
|
|
110
120
|
/**
|
|
111
|
-
*
|
|
121
|
+
* The ProseKit editor instance.
|
|
122
|
+
*
|
|
123
|
+
* @default null
|
|
124
|
+
* @hidden
|
|
125
|
+
*/
|
|
126
|
+
editor: Editor | null;
|
|
127
|
+
}
|
|
128
|
+
/** @internal */
|
|
129
|
+
declare const BlockHandleRootPropsDeclaration: PropsDeclaration<BlockHandleRootProps>;
|
|
130
|
+
/**
|
|
131
|
+
* @public
|
|
132
|
+
*/
|
|
133
|
+
declare class BlockHandleStateChangeEvent extends Event {
|
|
134
|
+
/**
|
|
135
|
+
* The currently hovered block's node and position, or `null` if no block is hovered.
|
|
112
136
|
*/
|
|
113
|
-
|
|
137
|
+
detail: {
|
|
138
|
+
node: ProseMirrorNode;
|
|
139
|
+
pos: number;
|
|
140
|
+
} | null;
|
|
141
|
+
constructor(state: {
|
|
114
142
|
node: ProseMirrorNode;
|
|
115
143
|
pos: number;
|
|
116
|
-
} | null
|
|
144
|
+
} | null);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* @public
|
|
148
|
+
*/
|
|
149
|
+
interface BlockHandleRootEvents {
|
|
150
|
+
/**
|
|
151
|
+
* Fired when the hovered block changes.
|
|
152
|
+
*/
|
|
153
|
+
stateChange: BlockHandleStateChangeEvent;
|
|
117
154
|
}
|
|
118
|
-
/** @internal */
|
|
119
|
-
declare const blockHandlePopoverEvents: EventDeclarations<BlockHandlePopoverEvents>;
|
|
120
|
-
//#endregion
|
|
121
|
-
//#region src/components/block-handle/block-handle-popover/element.gen.d.ts
|
|
122
|
-
declare const BlockHandlePopoverElementBase: BaseElementConstructor<BlockHandlePopoverProps>;
|
|
123
|
-
declare class BlockHandlePopoverElement extends BlockHandlePopoverElementBase {}
|
|
124
|
-
//#endregion
|
|
125
|
-
//#region src/components/block-handle/block-handle-popover/setup.d.ts
|
|
126
155
|
/**
|
|
127
156
|
* @internal
|
|
128
157
|
*/
|
|
129
|
-
declare function
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
158
|
+
declare function setupBlockHandleRoot(host: HostElement, props: State<BlockHandleRootProps>): void;
|
|
159
|
+
declare const BlockHandleRootElementBase: HostElementConstructor<BlockHandleRootProps>;
|
|
160
|
+
/**
|
|
161
|
+
* @public
|
|
162
|
+
*/
|
|
163
|
+
declare class BlockHandleRootElement extends BlockHandleRootElementBase {}
|
|
164
|
+
/** @internal */
|
|
165
|
+
declare function registerBlockHandleRootElement(): void;
|
|
133
166
|
//#endregion
|
|
134
|
-
export { BlockHandleAddElement, type
|
|
167
|
+
export { BlockHandleAddElement, type BlockHandleAddProps, BlockHandleAddPropsDeclaration, BlockHandleDraggableElement, type BlockHandleDraggableProps, BlockHandleDraggablePropsDeclaration, BlockHandlePopupElement, type BlockHandlePopupProps, BlockHandlePopupPropsDeclaration, BlockHandlePositionerElement, type BlockHandlePositionerProps, BlockHandlePositionerPropsDeclaration, BlockHandleRootElement, type BlockHandleRootEvents, type BlockHandleRootProps, BlockHandleRootPropsDeclaration, BlockHandleStateChangeEvent, registerBlockHandleAddElement, registerBlockHandleDraggableElement, registerBlockHandlePopupElement, registerBlockHandlePositionerElement, registerBlockHandleRootElement, setupBlockHandleAdd, setupBlockHandleDraggable, setupBlockHandlePopup, setupBlockHandlePositioner, setupBlockHandleRoot };
|
|
135
168
|
//# sourceMappingURL=prosekit-web-block-handle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosekit-web-block-handle.d.ts","names":[],"sources":["../src/components/block-handle/block-handle-add
|
|
1
|
+
{"version":3,"file":"prosekit-web-block-handle.d.ts","names":[],"sources":["../src/components/block-handle/block-handle-add.ts","../src/components/block-handle/block-handle-draggable.ts","../src/components/block-handle/block-handle-popup.ts","../src/components/block-handle/block-handle-positioner.ts","../src/components/block-handle/block-handle-root.ts"],"mappings":";;;;;;;UAciB,mBAAA;;;;;AAAjB;;EAOE,MAAA,EAAQ,MAAA;AAAA;;cAIG,8BAAA,EAAgC,gBAAA,CAAiB,mBAAA;;;;iBAO9C,mBAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,mBAAA;AAAA,cAuBT,yBAAA,EAA2B,sBAAA,CAAuB,mBAAA;;;;cAQ3C,qBAAA,SAA8B,yBAAA;;iBAG3B,6BAAA,CAAA;;;UC1CC,yBAAA;;;;;ADZjB;;ECmBE,MAAA,EAAQ,MAAA;AAAA;;cAIG,oCAAA,EAAsC,gBAAA,CAAiB,yBAAA;;;;iBASpD,yBAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,yBAAA;AAAA,cAgGT,+BAAA,EAAiC,sBAAA,CAAuB,yBAAA;;;;cAQjD,2BAAA,SAAoC,+BAAA;;iBAGjC,mCAAA,CAAA;;;;;;UC5IC,qBAAA,SAA8B,iBAAA;AFD/C;AAAA,cEIa,gCAAA,EAAkC,gBAAA,CAAiB,qBAAA;;iBAGhD,qBAAA,CACd,IAAA,EAAM,WAAA,EACN,MAAA,EAAQ,KAAA,CAAM,qBAAA;AAAA,cAMV,2BAAA,EAA6B,sBAAA,CAAuB,qBAAA;AFJ1D;;;AAAA,cEYa,uBAAA,SAAgC,2BAAA;AFL7C;AAAA,iBEQgB,+BAAA,CAAA;;;;;;UCvBC,0BAAA,SAAmC,IAAA,CAAK,sBAAA;EHHxC;;;;;EGSf,SAAA,EAAW,SAAA;EHIX;;;;AAKF;;EGDE,KAAA;EHEM;;;;EGIN,IAAA;EHJM;;;;EGUN,KAAA;EHTiC;;AAqBlC;;EGNC,IAAA;AAAA;;cAIW,qCAAA,EAAuC,gBAAA,CAAiB,0BAAA;;iBAcrD,0BAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,0BAAA;AAAA,cAMT,gCAAA,EAAkC,sBAAA,CAAuB,0BAAA;;AHP/D;;cGea,4BAAA,SAAqC,gCAAA;;iBAGlC,oCAAA,CAAA;;;UChEC,oBAAA;;;;AJRjB;;;EIeE,MAAA,EAAQ,MAAA;AAAA;AJJV;AAAA,cIQa,+BAAA,EAAiC,gBAAA,CAAiB,oBAAA;;;;cASlD,2BAAA,SAAoC,KAAA;EJVd;;;EIcjC,MAAA;IAAU,IAAA,EAAM,eAAA;IAAiB,GAAA;EAAA;cACrB,KAAA;IAAS,IAAA,EAAM,eAAA;IAAiB,GAAA;EAAA;AAAA;;;AJQ7C;UICgB,qBAAA;;;;EAIf,WAAA,EAAa,2BAAA;AAAA;;;;iBAMC,oBAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,oBAAA;AAAA,cAkCT,0BAAA,EAA4B,sBAAA,CAAuB,oBAAA;;;;cAQ5C,sBAAA,SAA+B,0BAAA;;iBAG5B,8BAAA,CAAA"}
|