@prosekit/web 0.7.6 → 0.7.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-web-autocomplete.d.ts","names":[],"sources":["../src/components/autocomplete/autocomplete-empty/types.ts","../src/components/autocomplete/autocomplete-empty/element.gen.ts","../src/components/autocomplete/autocomplete-empty/setup.ts","../src/components/autocomplete/autocomplete-item/types.ts","../src/components/autocomplete/autocomplete-item/element.gen.ts","../src/components/autocomplete/autocomplete-item/setup.ts","../src/components/autocomplete/autocomplete-list/types.ts","../src/components/autocomplete/autocomplete-list/element.gen.ts","../src/components/autocomplete/autocomplete-list/setup.ts","../src/components/autocomplete/autocomplete-popover/types.ts","../src/components/autocomplete/autocomplete-popover/element.gen.ts","../src/components/autocomplete/autocomplete-popover/setup.ts"],"sourcesContent":[],"mappings":";;;;;;;;UAMiB,sBAAA;;cAGJ,wBAAwB,iBAAiB;;AAHrC,UAMA,uBAAA,CANsB,CAGvC;AAGA;AAGa,cAAA,uBAA2C,EAAlB,iBAAkB,CAAA,uBAAD,CAAA;;;cCVjD,8BAA8B,uBAAuB;cAQrD,wBAAA,SAAiC,4BAAA;;;;;;cCR1B,6BAA6B;;;UCIzB,qBAAA;;;;;AHHjB;AAGA;AAGA;EAGa,KAAA,EAAA,MAAA;;;cGMA,uBAAuB,iBAAiB;AFhB/C,UEsBW,sBAAA,SAA+B,iBFtBW,CAAA,CAAD;;cEyB7C,wBAAwB,kBAAkB;;;cCzBjD,6BAA6B,uBAAuB;cAQpD,uBAAA,SAAgC,2BAAA;;;;;;iBCKtB,mBAAA,UACL;;;GACQ,aAAa,uBAAuB;;;UCRtC,qBAAA,SAA8B,KAAK;;;;ANNpD;AAGA;AAGA;EAGa,MAAA,EMIH,MNJG,GAAA,IAAA;;cMOA,uBAAuB,iBAAiB;UAKpC,sBAAA,SAA+B,eLxBoF;AAU9H,cKgBO,sBLhBkB,EKgBM,iBLhBE,CKgBgB,sBLhBY,CAAA;;;cMR7D,6BAA6B,uBAAuB;cAQpD,uBAAA,SAAgC,2BAAA;;;;;;iBCsBtB,mBAAA,UACL;;;GACQ,aAAa,uBAAuB;;;UCzBtC,wBAAA,SAAiC;;;;ATNlD;AAGA;AAGA;EAGa,MAAA,ESIH,MTJG,GAAA,IAAA;;;;ACZuH;AAE1E;SQqBjD;;;APrBT;;;aO4Ba;ENxBI;AAYjB;AAMA;AAGA;;UMUU;;ALrCsH;AAEvE;UKwC/C;;;AJ3BV;EACW,KAAA,EI+BF,sBJ/BE,CAAA,OAAA,CAAA;EACP;;;EAAmD,WAAA,EImCxC,sBJnCwC,CAAA,aAAA,CAAA;EAApC;;;YIwCP;;AHhDZ;;EAOU,eAAA,EG8CS,sBH9CT,CAAA,iBAAA,CAAA;;;AAGG,cGkDA,wBHlDwC,EGkDd,gBHlDc,CGkDG,wBHlDJ,CAAA;AAKnC,UG0DA,yBAAA,SAAkC,uBH1DU,CAAA;EAEhD;;;cG4DC;EFpFR;AAAmD;;eEyF1C;;AD3Df;AACW,cC8DE,yBD9DF,EC8D6B,iBD9D7B,CC8D+C,yBD9D/C,CAAA;;;cE/BL,gCAAgC,uBAAuB;cAQvD,0BAAA,SAAmC,8BAAA;;;;;;iBC8BzB,sBAAA,OACR;;;GAIH,aAAa,0BAA0B"}
1
+ {"version":3,"file":"prosekit-web-autocomplete.d.ts","names":[],"sources":["../src/components/autocomplete/autocomplete-empty/types.ts","../src/components/autocomplete/autocomplete-empty/element.gen.ts","../src/components/autocomplete/autocomplete-empty/setup.ts","../src/components/autocomplete/autocomplete-item/types.ts","../src/components/autocomplete/autocomplete-item/element.gen.ts","../src/components/autocomplete/autocomplete-item/setup.ts","../src/components/autocomplete/autocomplete-list/types.ts","../src/components/autocomplete/autocomplete-list/element.gen.ts","../src/components/autocomplete/autocomplete-list/setup.ts","../src/components/autocomplete/autocomplete-popover/types.ts","../src/components/autocomplete/autocomplete-popover/element.gen.ts","../src/components/autocomplete/autocomplete-popover/setup.ts"],"sourcesContent":[],"mappings":";;;;;;;;UAMiB,sBAAA;;cAGJ,wBAAwB,iBAAiB;;AAHrC,UAMA,uBAAA,CANsB,CAGvC;AAGA;AAGa,cAAA,uBAA2C,EAAlB,iBAAkB,CAAA,uBAAD,CAAA;;;cCVjD,8BAA8B,uBAAuB;cAQrD,wBAAA,SAAiC,4BAAA;;;;;;cCR1B,6BAA6B;;;UCIzB,qBAAA;;;;;AHHjB;AAGA;AAGA;EAGa,KAAA,EAAA,MAAA;;;cGMA,uBAAuB,iBAAiB;AFhB/C,UEsBW,sBAAA,SAA+B,iBFtBW,CAAA,CAAD;;cEyB7C,wBAAwB,kBAAkB;;;cCzBjD,6BAA6B,uBAAuB;cAQpD,uBAAA,SAAgC,2BAAA;;;;;;iBCKtB,mBAAA,UACL;;;GACQ,aAAa,uBAAuB;;;UCRtC,qBAAA,SAA8B,KAAK;;;;ANNpD;AAGA;AAGA;EAGa,MAAA,EMIH,MNJG,GAAA,IAAA;;cMOA,uBAAuB,iBAAiB;UAKpC,sBAAA,SAA+B,eLxBoF;AAU9H,cKgBO,sBLhB0B,EKgBF,iBLhBE,CKgBgB,sBLhBY,CAAA;;;cMR7D,6BAA6B,uBAAuB;cAQpD,uBAAA,SAAgC,2BAAA;;;;;;iBCsBtB,mBAAA,UACL;;;GACQ,aAAa,uBAAuB;;;UCzBtC,wBAAA,SAAiC;;;;ATNlD;AAGA;AAGA;EAGa,MAAA,ESIH,MTJG,GAAA,IAAA;;;;ACZuH;AAE1E;SQqBjD;;;APrBT;;;aO4Ba;ENxBI;AAYjB;AAMA;AAGA;;UMUU;;ALrCsH;AAEvE;UKwC/C;;;AJ3BV;EACW,KAAA,EI+BF,sBJ/BE,CAAA,OAAA,CAAA;EACP;;;EAAmD,WAAA,EImCxC,sBJnCwC,CAAA,aAAA,CAAA;EAApC;;;YIwCP;;AHhDZ;;EAOU,eAAA,EG8CS,sBH9CT,CAAA,iBAAA,CAAA;;;AAGG,cGkDA,wBHlDwC,EGkDd,gBHlDH,CGkDoB,wBHlDJ,CAAA;AAKnC,UG0DA,yBAAA,SAAkC,uBH1DU,CAAA;EAEhD;;;cG4DC;EFpFR;AAAmD;;eEyF1C;;AD3Df;AACW,cC8DE,yBD9DF,EC8D6B,iBD9D7B,CC8D+C,yBD9D/C,CAAA;;;cE/BL,gCAAgC,uBAAuB;cAQvD,0BAAA,SAAmC,8BAAA;;;;;;iBC8BzB,sBAAA,OACR;;;GAIH,aAAa,0BAA0B"}
@@ -190,7 +190,7 @@ function defaultQueryBuilder(match) {
190
190
  * @internal
191
191
  */
192
192
  function useAutocompletePopover(host, { state, emit }) {
193
- const { editor, regex,...overlayState } = state;
193
+ const { editor, regex, ...overlayState } = state;
194
194
  const reference = createSignal(null);
195
195
  const query = createSignal("");
196
196
  const onDismiss = createSignal(null);
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-web-autocomplete.js","names":["useAutocompleteEmpty: typeof useListboxEmpty","autocompleteEmptyProps: PropDeclarations<AutocompleteEmptyProps>","autocompleteEmptyEvents: EventDeclarations<AutocompleteEmptyEvents>","AutocompleteEmptyElementBase: BaseElementConstructor<AutocompleteEmptyProps>","queryContext: Context<string>","onSubmitContext: Context<VoidFunction | null>","openContext: Context<boolean>","autocompleteItemProps: PropDeclarations<AutocompleteItemProps>","autocompleteItemEvents: EventDeclarations<AutocompleteItemEvents>","AutocompleteItemElementBase: BaseElementConstructor<AutocompleteItemProps>","keydownHandlers: ((event: KeyboardEvent) => void)[]","autocompleteListProps: PropDeclarations<AutocompleteListProps>","listboxProps","autocompleteListEvents: EventDeclarations<AutocompleteListEvents>","AutocompleteListElementBase: BaseElementConstructor<AutocompleteListProps>","handleEnter: MatchHandler","autocompletePopoverProps: PropDeclarations<AutocompletePopoverProps>","autocompletePopoverEvents: EventDeclarations<AutocompletePopoverEvents>","AutocompletePopoverElementBase: BaseElementConstructor<AutocompletePopoverProps>"],"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 {\n EventDeclarations,\n PropDeclarations,\n} 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\"\nimport { autocompleteEmptyEvents, autocompleteEmptyProps, type AutocompleteEmptyEvents, type AutocompleteEmptyProps } from \"./types\"\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 {\n createContext,\n type Context,\n} 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 {\n useEffect,\n useEventListener,\n type ConnectableElement,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useListboxItem } from '@aria-ui/listbox/elements'\n\nimport { openContext } from '../context'\n\nimport type {\n AutocompleteItemEvents,\n AutocompleteItemProps,\n} from './types'\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 {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n listboxItemEvents,\n type ListboxItemEvents,\n} 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\"\nimport { autocompleteItemEvents, autocompleteItemProps, type AutocompleteItemEvents, type AutocompleteItemProps } from \"./types\"\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 {\n listboxProps,\n useListbox,\n type ListboxProps,\n} from '@aria-ui/listbox/elements'\nimport {\n defineDOMEventHandler,\n Priority,\n withPriority,\n type Editor,\n} from '@prosekit/core'\n\nimport { getStateWithDefaults } from '../../../utils/get-default-state'\nimport {\n onSubmitContext,\n openContext,\n queryContext,\n} from '../context'\n\nimport type {\n AutocompleteListEvents,\n AutocompleteListProps,\n} from './types'\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, 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 {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n listboxEvents,\n listboxProps,\n type ListboxEvents,\n type ListboxProps,\n} 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\"\nimport { autocompleteListEvents, autocompleteListProps, type AutocompleteListEvents, type AutocompleteListProps } from \"./types\"\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 {\n createSignal,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n} 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 .replace(/[!\"#$%&'()*+,-./:;<=>?@[\\\\\\]^_`{|}~]/g, '')\n .replace(/\\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 {\n defineKeymap,\n Priority,\n withPriority,\n type Editor,\n} from '@prosekit/core'\nimport {\n AutocompleteRule,\n defineAutocomplete,\n type MatchHandler,\n} from '@prosekit/extensions/autocomplete'\n\nimport { useEditorExtension } from '../../../hooks/use-editor-extension'\nimport { useFirstRendering } from '../../../hooks/use-first-rendering'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport {\n onSubmitContext,\n openContext,\n queryContext,\n} from '../context'\n\nimport { defaultQueryBuilder } from './helpers'\nimport type {\n AutocompletePopoverEvents,\n AutocompletePopoverProps,\n} from './types'\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('.prosemirror-prediction-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), Priority.highest)\n useEditorExtension(host, editor, extension)\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} 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\"\nimport { autocompletePopoverEvents, autocompletePopoverProps, type AutocompletePopoverEvents, type AutocompletePopoverProps } from \"./types\"\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":["useAutocompleteEmpty: typeof useListboxEmpty","autocompleteEmptyProps: PropDeclarations<AutocompleteEmptyProps>","autocompleteEmptyEvents: EventDeclarations<AutocompleteEmptyEvents>","AutocompleteEmptyElementBase: BaseElementConstructor<AutocompleteEmptyProps>","queryContext: Context<string>","onSubmitContext: Context<VoidFunction | null>","openContext: Context<boolean>","autocompleteItemProps: PropDeclarations<AutocompleteItemProps>","autocompleteItemEvents: EventDeclarations<AutocompleteItemEvents>","AutocompleteItemElementBase: BaseElementConstructor<AutocompleteItemProps>","keydownHandlers: ((event: KeyboardEvent) => void)[]","autocompleteListProps: PropDeclarations<AutocompleteListProps>","listboxProps","autocompleteListEvents: EventDeclarations<AutocompleteListEvents>","AutocompleteListElementBase: BaseElementConstructor<AutocompleteListProps>","handleEnter: MatchHandler","autocompletePopoverProps: PropDeclarations<AutocompletePopoverProps>","autocompletePopoverEvents: EventDeclarations<AutocompletePopoverEvents>","AutocompletePopoverElementBase: BaseElementConstructor<AutocompletePopoverProps>"],"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 {\n EventDeclarations,\n PropDeclarations,\n} 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\"\nimport { autocompleteEmptyEvents, autocompleteEmptyProps, type AutocompleteEmptyEvents, type AutocompleteEmptyProps } from \"./types\"\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 {\n createContext,\n type Context,\n} 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 {\n useEffect,\n useEventListener,\n type ConnectableElement,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useListboxItem } from '@aria-ui/listbox/elements'\n\nimport { openContext } from '../context'\n\nimport type {\n AutocompleteItemEvents,\n AutocompleteItemProps,\n} from './types'\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 {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n listboxItemEvents,\n type ListboxItemEvents,\n} 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\"\nimport { autocompleteItemEvents, autocompleteItemProps, type AutocompleteItemEvents, type AutocompleteItemProps } from \"./types\"\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 {\n listboxProps,\n useListbox,\n type ListboxProps,\n} from '@aria-ui/listbox/elements'\nimport {\n defineDOMEventHandler,\n Priority,\n withPriority,\n type Editor,\n} from '@prosekit/core'\n\nimport { getStateWithDefaults } from '../../../utils/get-default-state'\nimport {\n onSubmitContext,\n openContext,\n queryContext,\n} from '../context'\n\nimport type {\n AutocompleteListEvents,\n AutocompleteListProps,\n} from './types'\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, 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 {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n listboxEvents,\n listboxProps,\n type ListboxEvents,\n type ListboxProps,\n} 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\"\nimport { autocompleteListEvents, autocompleteListProps, type AutocompleteListEvents, type AutocompleteListProps } from \"./types\"\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 {\n createSignal,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n} 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 .replace(/[!\"#$%&'()*+,-./:;<=>?@[\\\\\\]^_`{|}~]/g, '')\n .replace(/\\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 {\n defineKeymap,\n Priority,\n withPriority,\n type Editor,\n} from '@prosekit/core'\nimport {\n AutocompleteRule,\n defineAutocomplete,\n type MatchHandler,\n} from '@prosekit/extensions/autocomplete'\n\nimport { useEditorExtension } from '../../../hooks/use-editor-extension'\nimport { useFirstRendering } from '../../../hooks/use-first-rendering'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport {\n onSubmitContext,\n openContext,\n queryContext,\n} from '../context'\n\nimport { defaultQueryBuilder } from './helpers'\nimport type {\n AutocompletePopoverEvents,\n AutocompletePopoverProps,\n} from './types'\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('.prosemirror-prediction-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), Priority.highest)\n useEditorExtension(host, editor, extension)\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} 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\"\nimport { autocompletePopoverEvents, autocompletePopoverProps, type AutocompletePopoverEvents, type AutocompletePopoverProps } from \"./types\"\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":";;;;;;;;;;;;;;;AAKA,MAAaA,uBAA+C;;;;;ACI5D,MAAaC,yBAAmE,EAAE;;AAMlF,MAAaC,0BAAsE,EAAE;;;;ACVrF,MAAMC,+BAA+E,oBAGnF;CACA,OAAO;CACP,QAAQ;CACR,OAAO;CACR,CAAC;AACF,IAAM,2BAAN,cAAuC,6BAA6B;AAEpE,sBAAsB,+BAA+B,yBAAyB;;;;ACV9E,MAAaC,eAAgC,cAC3C,uCACA,GACD;AAED,MAAaC,kBAAgD,cAC3D,0CACA,KACD;AAED,MAAaC,cAAgC,cAC3C,sCACA,MACD;;;;;;;ACAD,SAAgB,oBACd,SACA,EAAE,OAAO,QACH;AACN,gBAAe,SAAS;EAAE;EAAO;EAAM,CAAC;CAExC,MAAM,OAAO,YAAY,QAAQ,QAAQ;AAEzC,WAAU,eAAe;AAEvB,MAAI,CAAC,MAAM,MAAM,MAAM,IAAI,KAAK,KAAK,CACnC,OAAM,MAAM,IAAI,QAAQ,eAAe,GAAG;GAE5C;AAEF,kBAAiB,SAAS,gBAAgB,UAAU;AAElD,QAAM,gBAAgB;GACtB;;;;;;ACfJ,MAAaC,wBAAiE,EAC5E,OAAO,EACL,SAAS,IACV,EACF;;AAKD,MAAaC,yBAAoE;;;;ACzBjF,MAAMC,8BAA6E,oBAGjF;CACA,OAAO;CACP,QAAQ;CACR,OAAO;CACR,CAAC;AACF,IAAM,0BAAN,cAAsC,4BAA4B;AAElE,sBAAsB,8BAA8B,wBAAwB;;;;;;;ACoB5E,SAAgB,oBACd,SACA,EAAE,OAAO,QACH;CACN,MAAM,OAAO,YAAY,QAAQ,QAAQ;CACzC,MAAM,QAAQ,aAAa,QAAQ,QAAQ;CAC3C,MAAM,WAAW,gBAAgB,QAAQ,QAAQ;CAEjD,MAAM,gBAAgB,iBAAiB,SAAS,MAAM,MAAM,OAAO;CAEnE,MAAM,eAAe,qBACnB;EAAE,QAAQ,MAAM;EAAQ,aAAa,aAAa,cAAc;EAAE,EAClE,aACD;AAED,WAAU,eAAe;AACvB,UAAQ,iBAAiB,qBAAqB;AAC5C,OAAI,SACF,UAAS,KAAK,IAAI;IAEpB;GACF;AAEF,YAAW,SAAS;EAAE,OAAO;EAAc;EAAM,CAAC;AAElD,WAAU,eAAe;AACvB,eAAa,MAAM,IAAI,MAAM,KAAK,CAAC;GACnC;AAEF,WAAU,eAAe;AACvB,MAAI,CAAC,KAAK,KAAK,EAAE;AACf,gBAAa,MAAM,IAAI,GAAG;AAC1B,SAAM,IAAI,GAAG;;GAEf;AAGF,WAAU,eAAe;AACvB,MAAI,CAAC,KAAK,KAAK,CACb,cAAa,UAAU,IAAI,MAAM;OAC5B;GACL,IAAI,WAAW;AAEf,+BAA4B;AAC1B,QAAI,SAAU;AACd,iBAAa,UAAU,IAAI,KAAK;KAChC;AAEF,gBAAa;AACX,eAAW;;;GAGf;AAIF,WAAU,eAAe;AACvB,UAAQ,WAAW;GACnB;;AAGJ,SAAS,iBACP,SACA,MACA,QAC6B;CAC7B,MAAMC,kBAAsD,EAAE;AAE9D,WAAU,eAAe;EACvB,MAAM,cAAc,OAAO,KAAK;AAEhC,MAAI,CAAC,YACH;EAGF,MAAM,YAAY,sBAChB,YACC,MAAM,UAAmB;AACxB,OAAI,KAAK,aAAa,MAAM,oBAAoB,CAAC,KAAK,KAAK,CACzD,QAAO;AAET,mBAAgB,SAAS,YAAY,QAAQ,MAAM,CAAC;AACpD,UAAO,MAAM;IAEhB;AAED,SAAO,YAAY,IAAI,aAAa,WAAW,SAAS,QAAQ,CAAC;GACjE;AAEF,QAAO;EACL,mBAAmB,MAAM,aAAa;AACpC,OAAI,SAAS,UACX,iBAAgB,KAAK,SAAS;;EAGlC,sBAAsB,MAAM,aAAa;AACvC,OAAI,SAAS,WAAW;IACtB,MAAM,QAAQ,gBAAgB,QAAQ,SAAS;AAC/C,QAAI,UAAU,GACZ,iBAAgB,OAAO,OAAO,EAAE;;;EAIvC;;;;;ACpHH,MAAaC,wBAAiE;CAC5E,QAAQC,eAAa;CACrB,QAAQ,EAAE,SAAS,MAAM;CAC1B;AAID,MAAaC,yBAAoE,EAAE,GAAG,eAAe;;;;ACxBrG,MAAMC,8BAA6E,oBAGjF;CACA,OAAO;CACP,QAAQ;CACR,OAAO;CACR,CAAC;AACF,IAAM,0BAAN,cAAsC,4BAA4B;AAElE,sBAAsB,8BAA8B,wBAAwB;;;;ACR5E,SAAgB,kBACd,MACyB;CACzB,MAAM,iBAAiB,aAAa,KAAK;AAEzC,WAAU,YAAY;AACpB,8BAA4B;AAC1B,kBAAe,IAAI,MAAM;IACzB;GACF;AAEF,QAAO;;;;;AClBT,SAAgB,oBAAoB,OAAgC;AAClE,QAAO,MAAM,GACV,aAAa,CACb,QAAQ,yCAAyC,GAAG,CACpD,QAAQ,UAAU,IAAI,CACtB,MAAM;;;;;;;;ACsCX,SAAgB,uBACd,MACA,EACE,OACA,QAEI;CACN,MAAM,EAAE,QAAQ,OAAO,GAAG,iBAAiB;CAE3C,MAAM,YAAY,aAA6B,KAAK;CACpD,MAAM,QAAQ,aAAqB,GAAG;CACtC,MAAM,YAAY,aAAkC,KAAK;CACzD,MAAM,WAAW,aAAkC,KAAK;CACxD,MAAM,WAAW,qBAAqB,CAAC,CAAC,UAAU,KAAK,CAAC;AAExD,cAAa,QAAQ,MAAM,MAAM;AACjC,iBAAgB,QAAQ,MAAM,SAAS;AACvC,aAAY,QAAQ,MAAM,SAAS;AAEnC,kBAAiB,MAAM,QAAQ,oBAAoB,WAAW,SAAS,CAAC;AAExE,0BACE,MACA,QACA,OACA,WACA,OACA,WACA,SACD;AAED,2BAA0B,MAAM,cAAc,EAAE,WAAW,CAAC;AAE5D,cAAa,MAAM,oBAAqB,SAAS,KAAK,GAAG,SAAS,SAAU;AAC5E,aAAY,MAAM,SAAS;CAE3B,MAAM,iBAAiB,kBAAkB,KAAK;AAE9C,WAAU,YAAY;EACpB,MAAM,aAAa,MAAM,KAAK;AAE9B,MAAI,CAAC,eAAe,MAAM,CACxB,MAAK,eAAe,WAAW;GAEjC;AAEF,mBAAkB,YAAY;EAC5B,MAAM,gBAAgB,SAAS,KAAK;AACpC,eAAa;AACX,QAAK,cAAc,cAAc;;GAEnC;;AAGJ,SAAS,yBACP,MACA,QACA,OACA,WACA,OACA,WACA,UACA;AACA,WAAU,YAAY;EACpB,MAAM,cAAc,OAAO,KAAK;EAChC,MAAM,aAAa,MAAM,KAAK;AAE9B,MAAI,CAAC,eAAe,CAAC,WACnB;EAWF,MAAM,YAAY,mBARL,uBACX,aACA,YACA,WACA,OACA,WACA,SACD,CACyC;AAC1C,SAAO,YAAY,IAAI,UAAU;GACjC;;AAGJ,SAAS,uBACP,QACA,OACA,WACA,OACA,WACA,UACA;CACA,MAAMC,eAA6B,YAAY;EAE7C,MAAM,OADO,kBAAkB,OAAO,EACnB,IAAI,cAAc,gCAAgC;AAErE,MAAI,KACF,WAAU,IAAI,KAAK;AAGrB,QAAM,IAAI,oBAAoB,QAAQ,MAAM,CAAC;AAC7C,YAAU,IAAI,QAAQ,YAAY;AAClC,WAAS,IAAI,QAAQ,YAAY;;CAGnC,MAAM,oBAAoB;AACxB,YAAU,IAAI,KAAK;AACnB,QAAM,IAAI,GAAG;;AAGf,QAAO,IAAI,iBAAiB;EAC1B;EACA,SAAS;EACT,SAAS;EACV,CAAC;;AAGJ,SAAS,oBACP,SACA,SACA;AACA,cAAsB;AACpB,MAAI,CAAC,QAAQ,KAAK,CAChB,QAAO;EAGT,MAAM,KAAK,QAAQ,MAAM;AACzB,MAAI,CAAC,GAAI,QAAO;AAChB,MAAI;AACJ,SAAO;;;AAIX,SAAS,iBACP,MACA,QACA,SACM;AAGN,oBAAmB,MAAM,QADP,aAAa,aADhB,EAAE,QAAQ,SAAS,CACiB,EAAE,SAAS,QAAQ,CAC3B;;;;;AClH7C,MAAM,kBADO,OAAO,aAAa,eAAe,SAAS,cAAc,OAAO,IAC9C;;AAGhC,MAAaC,2BAAuE;CAClF,GAAG;CACH,QAAQ,EAAE,SAAS,MAAM;CACzB,OAAO,EAAE,SAAS,MAAM;CACxB,WAAW,EAAE,SAAS,gBAAgB;CACtC,QAAQ,EAAE,SAAS,GAAG;CACtB,QAAQ,EAAE,SAAS,MAAM;CACzB,OAAO,EAAE,SAAS,MAAM;CACxB,aAAa,EAAE,SAAS,MAAM;CAC9B,UAAU,EAAE,SAAS,iBAAiB;CACtC,iBAAiB,EAAE,SAAS,GAAG;CAChC;;AAeD,MAAaC,4BAA0E;CACrF,GAAG;CACH,YAAY,EAAE;CACd,aAAa,EAAE;CAChB;;;;ACjGD,MAAMC,iCAAmF,oBAGvF;CACA,OAAO;CACP,QAAQ;CACR,OAAO;CACR,CAAC;AACF,IAAM,6BAAN,cAAyC,+BAA+B;AAExE,sBAAsB,iCAAiC,2BAA2B"}
@@ -433,7 +433,7 @@ const fallbackRect = Object.freeze({
433
433
  * @internal
434
434
  */
435
435
  function useBlockHandlePopover(host, { state, emit }) {
436
- const { editor,...overlayState } = state;
436
+ const { editor, ...overlayState } = state;
437
437
  const reference = createSignal(null);
438
438
  useOverlayPositionerState(host, overlayState, { reference });
439
439
  const context = createSignal(null);
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-web-block-handle.js","names":["blockPopoverContext: Context<BlockPopoverContext>","draggingContext: Context<boolean>","blockHandleAddProps: PropDeclarations<BlockHandleAddProps>","blockHandleAddEvents: EventDeclarations<BlockHandleAddEvents>","BlockHandleAddElementBase: BaseElementConstructor<BlockHandleAddProps>","blockHandleDraggableProps: PropDeclarations<BlockHandleDraggableProps>","blockHandleDraggableEvents: EventDeclarations<BlockHandleDraggableEvents>","BlockHandleDraggableElementBase: BaseElementConstructor<BlockHandleDraggableProps>","parent: ProseMirrorNode | undefined","children: ProseMirrorNode[]","positions: number[]","prevHoverState: HoverState | null","blockHandlePopoverProps: PropDeclarations<BlockHandlePopoverProps>","blockHandlePopoverEvents: EventDeclarations<BlockHandlePopoverEvents>","BlockHandlePopoverElementBase: BaseElementConstructor<BlockHandlePopoverProps>"],"sources":["../src/components/block-handle/context.ts","../src/components/block-handle/block-handle-add/setup.ts","../src/components/block-handle/block-handle-add/types.ts","../src/components/block-handle/block-handle-add/element.gen.ts","../src/utils/get-box-element.ts","../src/utils/get-client-rect.ts","../src/utils/max-z-index.ts","../src/components/block-handle/block-handle-draggable/set-drag-preview.ts","../src/components/block-handle/block-handle-draggable/setup.ts","../src/components/block-handle/block-handle-draggable/types.ts","../src/components/block-handle/block-handle-draggable/element.gen.ts","../src/utils/throttle.ts","../src/components/block-handle/block-handle-popover/pointer-move.ts","../src/components/block-handle/block-handle-popover/setup.ts","../src/components/block-handle/block-handle-popover/types.ts","../src/components/block-handle/block-handle-popover/element.gen.ts"],"sourcesContent":["import {\n createContext,\n type Context,\n} from '@aria-ui/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\n\n/**\n * @internal\n */\nexport interface HoverState {\n node: ProseMirrorNode\n pos: number\n}\n\n/**\n * @internal\n */\nexport type BlockPopoverContext = HoverState | null\n\n/**\n * @internal\n */\nexport const blockPopoverContext: Context<BlockPopoverContext> = createContext(\n 'prosekit-block-popover-context',\n null,\n)\n\n/**\n * @internal\n */\nexport const draggingContext: Context<boolean> = createContext(\n 'prosekit-block-handle-dragging-context',\n false,\n)\n","import {\n useEventListener,\n type ConnectableElement,\n type SignalState,\n} from '@aria-ui/core'\nimport { insertDefaultBlock } from '@prosekit/core'\n\nimport { blockPopoverContext } from '../context'\n\nimport type { BlockHandleAddProps } from './types'\n\n/**\n * @internal\n */\nexport function useBlockHandleAdd(\n host: ConnectableElement,\n { state }: { state: SignalState<BlockHandleAddProps> },\n): void {\n const context = blockPopoverContext.consume(host)\n\n useEventListener(host, 'pointerdown', (event) => {\n event.preventDefault()\n\n const editor = state.editor.get()\n const hoverState = context.get()\n if (!editor || !hoverState) {\n return\n }\n\n const { node, pos } = hoverState\n editor.exec(insertDefaultBlock({ pos: pos + node.nodeSize }))\n editor.focus()\n\n // Hide the drag handle\n context.set(null)\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nexport interface BlockHandleAddProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n}\n\n/** @internal */\nexport const blockHandleAddProps: PropDeclarations<BlockHandleAddProps> = {\n editor: { default: null },\n}\n\n/** @internal */\nexport interface BlockHandleAddEvents {}\n\n/** @internal */\nexport const blockHandleAddEvents: EventDeclarations<BlockHandleAddEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useBlockHandleAdd } from \"./setup\"\nimport { blockHandleAddEvents, blockHandleAddProps, type BlockHandleAddEvents, type BlockHandleAddProps } from \"./types\"\n\nconst BlockHandleAddElementBase: BaseElementConstructor<BlockHandleAddProps> = defineCustomElement<\n BlockHandleAddProps,\n BlockHandleAddEvents\n>({\n props: blockHandleAddProps,\n events: blockHandleAddEvents,\n setup: useBlockHandleAdd,\n})\nclass BlockHandleAddElement extends BlockHandleAddElementBase {}\n\nregisterCustomElement('prosekit-block-handle-add', BlockHandleAddElement)\n \nexport { BlockHandleAddElement }\n","/**\n * Returns the element that has a box.\n */\nexport function getBoxElement(element: Element): Element | null | undefined {\n const window = element.ownerDocument.defaultView\n if (!window) {\n return\n }\n\n const style = window.getComputedStyle(element)\n const display = style.display\n\n if (display === 'contents' && element.childElementCount === 1) {\n return element.firstElementChild\n } else if (display === 'none') {\n return\n }\n\n return element\n}\n","/**\n * Similar to `element.getBoundingClientRect`, but handles `display: contents` elements.\n */\nexport function getClientRect(element: Element): {\n top: number\n right: number\n bottom: number\n left: number\n} {\n const rect = element.getBoundingClientRect()\n if (rect.width === 0 && rect.height === 0 && rect.x === 0 && rect.y === 0) {\n // Suspiciously rect, probably an element with `display: contents`, in\n // which case `element.getClientRects()` will return an empty array.\n if (element.getClientRects().length === 0) {\n const children = Array.from(element.children)\n const rects = children.map(child => getClientRect(child))\n if (rects.length === 0) {\n return rect\n }\n if (rects.length === 1) {\n return rects[0]\n }\n let { top, bottom, left, right } = rects[0]\n for (let i = 1; i < rects.length; i++) {\n const r = rects[i]\n if (r.top < top) top = r.top\n if (r.bottom > bottom) bottom = r.bottom\n if (r.left < left) left = r.left\n if (r.right > right) right = r.right\n }\n return { top, bottom, left, right }\n }\n }\n return rect\n}\n","// Maximum possible z-index\n// https://stackoverflow.com/questions/491052/minimum-and-maximum-value-of-z-index\nexport const maxZIndex = '2147483647'\n","import { assignStyles } from '../../../utils/assign-styles'\nimport { deepCloneElement } from '../../../utils/clone-element'\nimport { getClientRect } from '../../../utils/get-client-rect'\nimport { injectStyle } from '../../../utils/inject-style'\nimport { maxZIndex } from '../../../utils/max-z-index'\n\n/**\n * Sets a drag preview image for the given element and ensures the preview position\n * relative to the pointer is correct.\n *\n * This function does the following:\n *\n * - Creates a temporary container element.\n * - Puts the container at the end of the document body.\n * - Sets event's drag image.\n * - Removes the container from the document body after the next frame.\n */\nexport function setDragPreview(event: DragEvent, element: HTMLElement): void {\n const { top, bottom, left, right } = getClientRect(element)\n const width = right - left\n const height = bottom - top\n const elementX = left\n const elementY = top\n\n const { clientX, clientY } = event\n\n const document = element.ownerDocument\n\n const container = document.createElement('div')\n\n // If outsideX is positive, the point is at the left side of the element.\n const outsideX = Math.round(elementX - clientX)\n // If outsideY is positive, the point is above the element.\n const outsideY = Math.round(elementY - clientY)\n\n const borderX = Math.max(outsideX, 0)\n const borderY = Math.max(outsideY, 0)\n assignStyles(container, {\n // Ensuring we don't cause reflow when adding the element to the page using\n // `position:fixed` rather than `position:absolute` so we are positioned on\n // the current viewport. `position:fixed` also creates a new stacking\n // context, so we don't need to do that here.\n // https://github.com/atlassian/pragmatic-drag-and-drop/blob/56276552/packages/core/src/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.ts#L60\n position: 'fixed',\n\n // The element is positioned off-screen to avoid capturing the content of\n // the page on Safari when the dragging element has a transparent background\n // on Safari. See https://github.com/prosekit/prosekit/issues/1153 for more\n // details.\n top: '-1000vh',\n left: '-1000vw',\n\n // The element should not be interactive.\n pointerEvents: 'none',\n\n zIndex: maxZIndex,\n\n // Only reliable cross browser technique found to push a drag preview away\n // from the cursor is to use transparent borders on the container.\n // https://github.com/atlassian/pragmatic-drag-and-drop/blob/56276552/packages/core/src/public-utils/element/custom-native-drag-preview/pointer-outside-of-preview.ts#L13-L18\n borderLeft: `${borderX}px solid transparent`,\n borderTop: `${borderY}px solid transparent`,\n\n boxSizing: 'border-box',\n width: `${width + borderX}px`,\n height: `${height + borderY}px`,\n })\n\n const [clonedElement, styleText] = deepCloneElement(element, true)\n\n // A hardcoded opacity.\n clonedElement.style.setProperty('opacity', '0.5', 'important')\n // The bounding client rect doesn't include the margin, so we need to remove\n // the margin too from the cloned element so that it can fit the container.\n clonedElement.style.setProperty('margin', '0', 'important')\n // Hide the outline of the cloned element.\n clonedElement.style.setProperty('outline-color', 'transparent', 'important')\n\n document.body.appendChild(container)\n container.appendChild(clonedElement)\n injectStyle(container, styleText)\n\n event.dataTransfer?.setDragImage(container, Math.max(-outsideX, 0), Math.max(-outsideY, 0))\n\n requestAnimationFrame(() => {\n container.remove()\n })\n}\n","import {\n useAttribute,\n useEffect,\n useEventListener,\n type ConnectableElement,\n type ReadonlySignal,\n type SignalState,\n} from '@aria-ui/core'\nimport { isHTMLElement } from '@ocavue/utils'\nimport type { Editor } from '@prosekit/core'\nimport type { ViewDragging } from '@prosekit/extensions/drop-indicator'\nimport {\n Fragment,\n Slice,\n} from '@prosekit/pm/model'\nimport { NodeSelection } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { getBoxElement } from '../../../utils/get-box-element'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport {\n blockPopoverContext,\n draggingContext,\n type BlockPopoverContext,\n type HoverState,\n} from '../context'\n\nimport { setDragPreview } from './set-drag-preview'\nimport type { BlockHandleDraggableProps } from './types'\n\n/**\n * @internal\n */\nexport function useBlockHandleDraggable(\n host: ConnectableElement,\n { state }: { state: SignalState<BlockHandleDraggableProps> },\n): void {\n const context = blockPopoverContext.consume(host)\n const dragging = draggingContext.consume(host)\n\n useEffect(host, () => {\n host.draggable = true\n })\n\n usePointerDownHandler(host, context, state.editor)\n\n useEventListener(host, 'dragstart', (event) => {\n dragging.set(true)\n\n const view = getSafeEditorView(state.editor.get())\n const hoverState = context.get()\n\n if (view && hoverState) {\n view.dom.classList.add('prosekit-dragging')\n createDraggingPreview(view, hoverState, event)\n setViewDragging(view, hoverState)\n }\n })\n\n useEventListener(host, 'dragend', () => {\n dragging.set(false)\n\n const view = getSafeEditorView(state.editor.get())\n if (view) {\n view.dom.classList.remove('prosekit-dragging')\n }\n })\n\n useAttribute(host, 'data-dragging', () => (dragging.get() ? '' : undefined))\n}\n\nfunction usePointerDownHandler(\n host: ConnectableElement,\n context: ReadonlySignal<BlockPopoverContext>,\n editor: ReadonlySignal<Editor | null>,\n) {\n useEventListener(host, 'pointerdown', () => {\n const { pos } = context.get() ?? {}\n const { view } = editor.get() ?? {}\n\n if (pos == null || view == null) {\n return\n }\n\n view.dispatch(\n view.state.tr.setSelection(NodeSelection.create(view.state.doc, pos)),\n )\n\n // Clicking the handle will blur the editor, so we need to focus it again.\n // We cannot call `event.preventDefault()` here to prevent the blur\n // because it will prevent the drag event from firing.\n requestAnimationFrame(() => {\n view.focus()\n })\n })\n}\n\nfunction createDraggingPreview(view: EditorView, hoverState: HoverState, event: DragEvent): void {\n if (!event.dataTransfer) {\n return\n }\n\n const { pos } = hoverState\n\n const element = view.nodeDOM(pos)\n if (!element || !isHTMLElement(element)) {\n return\n }\n\n const boxElement = getBoxElement(element)\n if (!boxElement || !isHTMLElement(boxElement)) {\n return\n }\n\n event.dataTransfer.clearData()\n event.dataTransfer.setData('text/html', boxElement.outerHTML)\n event.dataTransfer.effectAllowed = 'copyMove'\n setDragPreview(event, boxElement)\n\n return\n}\n\nfunction setViewDragging(view: EditorView, hoverState: HoverState): void {\n const { node, pos } = hoverState\n\n const dragging: ViewDragging = {\n slice: new Slice(Fragment.from(node), 0, 0),\n move: true,\n node: NodeSelection.create(view.state.doc, pos),\n }\n\n view.dragging = dragging\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nexport interface BlockHandleDraggableProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n}\n\n/** @internal */\nexport const blockHandleDraggableProps: PropDeclarations<BlockHandleDraggableProps> = {\n editor: { default: null },\n}\n\n/** @internal */\nexport interface BlockHandleDraggableEvents {}\n\n/** @internal */\nexport const blockHandleDraggableEvents: EventDeclarations<BlockHandleDraggableEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useBlockHandleDraggable } from \"./setup\"\nimport { blockHandleDraggableEvents, blockHandleDraggableProps, type BlockHandleDraggableEvents, type BlockHandleDraggableProps } from \"./types\"\n\nconst BlockHandleDraggableElementBase: BaseElementConstructor<BlockHandleDraggableProps> = defineCustomElement<\n BlockHandleDraggableProps,\n BlockHandleDraggableEvents\n>({\n props: blockHandleDraggableProps,\n events: blockHandleDraggableEvents,\n setup: useBlockHandleDraggable,\n})\nclass BlockHandleDraggableElement extends BlockHandleDraggableElementBase {}\n\nregisterCustomElement('prosekit-block-handle-draggable', BlockHandleDraggableElement)\n \nexport { BlockHandleDraggableElement }\n","/**\n * @internal\n */\nexport function throttle<Args extends any[]>(\n callback: (...args: Args) => void,\n wait: number,\n): (...args: Args) => void {\n let lastTime = 0\n\n return (...args: Args) => {\n const now = Date.now()\n if (now - lastTime >= wait) {\n callback(...args)\n lastTime = now\n }\n }\n}\n","import type { VirtualElement } from '@floating-ui/dom'\nimport {\n isElement,\n isHTMLElement,\n isTextNode,\n} from '@ocavue/utils'\nimport {\n defineDOMEventHandler,\n union,\n type PlainExtension,\n} from '@prosekit/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { getClientRect } from '../../../utils/get-client-rect'\nimport { throttle } from '../../../utils/throttle'\nimport type { HoverState } from '../context'\n\nexport type ElementHoverHandler = (\n reference: VirtualElement | null,\n hoverState: HoverState | null,\n) => void\n\nexport function defineElementHoverHandler(handler: ElementHoverHandler): PlainExtension {\n const handleElement = (\n node: ProseMirrorNode,\n pos: number,\n element: HTMLElement,\n parentElement?: Node | null,\n ) => {\n const reference: VirtualElement = {\n contextElement: element,\n\n getBoundingClientRect: () => {\n const rect = findFirstLineRect(parentElement, element)\n return rect ? fulfillRect(rect) : fallbackRect\n },\n }\n\n handler(reference, { node, pos })\n }\n\n let lastX = -1\n let lastY = -1\n let lastTime = -1\n\n const handlePointerEvent = (view: EditorView, event: PointerEvent) => {\n const { x, y } = event\n\n // Simple performance optimization. If the pointer is not moving, we don't\n // want to recalculate the block handle position within a short period of\n // time window.\n if (lastX === x && lastY === y) {\n const now = Date.now()\n if (now - lastTime < 100) {\n return\n }\n lastTime = now\n }\n lastX = x\n lastY = y\n\n const block = findBlockByCoords(view, x, y)\n if (!block) {\n handler(null, null)\n return\n }\n\n const { node, pos } = block\n const element = view.nodeDOM(pos)\n if (!element || !isHTMLElement(element)) {\n handler(null, null)\n return\n }\n\n // If `node` is the first child of another non-doc block node, for example a\n // list node or a blockquote node, we want to put the block handle agains\n // the parent node.\n const $pos = view.state.doc.resolve(pos)\n if ($pos.depth > 0 && $pos.index($pos.depth) === 0) {\n const parentPos = $pos.before($pos.depth)\n const parentNode = $pos.parent\n const parentElement = view.nodeDOM(parentPos)\n handleElement(parentNode, parentPos, element, parentElement)\n } else {\n handleElement(node, pos, element)\n }\n }\n\n return union(\n defineDOMEventHandler('pointermove', throttle(handlePointerEvent, 200)),\n defineDOMEventHandler('pointerenter', handlePointerEvent),\n defineDOMEventHandler('pointerout', handlePointerEvent),\n defineDOMEventHandler('keypress', () => handler(null, null)),\n )\n}\n\nfunction findBlockByCoords(view: EditorView, x: number, y: number): { node: ProseMirrorNode; pos: number } | undefined {\n const rect = getClientRect(view.dom)\n if (!isWithinRect(rect, x, y)) {\n return\n }\n\n let parent: ProseMirrorNode | undefined = view.state.doc\n let pos = -1\n\n while (parent) {\n if (parent.isBlock && (parent.isTextblock || parent.isAtom || parent.type.spec.isolating)) {\n return { node: parent, pos }\n }\n\n // Collect all children and their positions\n const children: ProseMirrorNode[] = []\n const positions: number[] = []\n parent.forEach((child, offset) => {\n children.push(child)\n positions.push(offset + pos + 1)\n })\n\n let lo = 0\n let hi = children.length - 1\n\n while (lo <= hi) {\n const i = hi - ((hi - lo) >> 1)\n const childDOM = view.nodeDOM(positions[i])\n const childRect = getNodeRect(childDOM)\n if (!childRect) {\n console.warn(`[prosekit] Unable to get rect at position: ${positions[i]}`)\n return\n }\n if (childRect.top > y) {\n hi = i - 1\n } else if (childRect.bottom < y) {\n lo = i + 1\n } else {\n lo = i\n break\n }\n }\n\n if (lo > hi) {\n return\n }\n\n parent = children[lo]\n pos = positions[lo]\n }\n}\n\nfunction getNodeRect(node: Node | null | undefined): Rect | undefined {\n if (node && isElement(node) && node.isConnected) {\n return getClientRect(node)\n }\n}\n\nfunction isWithinRect(rect: Rect, x: number, y: number) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom\n}\n\ninterface Rect {\n top: number\n right: number\n bottom: number\n left: number\n}\n\nfunction findFirstLineRect(outer?: Node | null, inner?: Node | null): Rect | undefined {\n if (outer && !outer.isConnected) {\n return\n }\n if (inner && !inner.isConnected) {\n return\n }\n\n if (outer && inner) {\n const outerRect = findOuterRect(outer)\n const innerRect = findFirstLineRectInNode(inner)\n if (outerRect && innerRect) {\n const { top, bottom } = innerRect\n const { left, right } = outerRect\n return { top, bottom, left, right }\n } else {\n return outerRect || innerRect\n }\n } else if (outer) {\n return findFirstLineRectInNode(outer)\n } else if (inner) {\n return findFirstLineRectInNode(inner)\n }\n}\n\nfunction findOuterRect(node: Node): Rect | undefined {\n if (!isElement(node)) {\n return\n }\n\n const rect = getClientRect(node)\n const style = node.ownerDocument.defaultView?.getComputedStyle(node)\n const marginLeft = style && Number.parseInt(style.marginLeft, 10) || 0\n const marginRight = style && Number.parseInt(style.marginRight, 10) || 0\n const left = rect.left - marginLeft\n const right = rect.right + marginRight\n\n return { top: rect.top, bottom: rect.bottom, left, right }\n}\n\nfunction findFirstLineRectInNode(node: Node): Rect | undefined {\n if (isElement(node)) {\n return findFirstLineRectInElement(node)\n } else if (isTextNode(node)) {\n return findFirstLineRectInTextNode(node)\n }\n}\n\nfunction findFirstLineRectInTextNode(node: Text): Rect | undefined {\n const ownerDocument = node.ownerDocument\n if (!ownerDocument) {\n return\n }\n const range = ownerDocument.createRange()\n range.setStart(node, 0)\n range.setEnd(node, 0)\n const rects = range.getClientRects()\n return rects[0]\n}\n\nfunction findFirstLineRectInElement(element: Element): Rect | undefined {\n if (element.nodeName === 'BR') {\n return element.getBoundingClientRect()\n }\n\n const rect = getClientRect(element)\n const style = element.ownerDocument.defaultView?.getComputedStyle(element)\n const marginLeft = style && Number.parseInt(style.marginLeft, 10) || 0\n const marginRight = style && Number.parseInt(style.marginRight, 10) || 0\n const left = rect.left - marginLeft\n const right = rect.right + marginRight\n\n const lineHeight = style && Number.parseInt(style.lineHeight, 10) || 24\n const paddingTop = style && Number.parseInt(style.paddingTop, 10) || 0\n const borderTop = style && Number.parseInt(style.borderTopWidth, 10) || 0\n const top = rect.top + paddingTop + borderTop\n const bottom = top + lineHeight\n\n return { top, bottom, left, right }\n}\n\nfunction fulfillRect({ top, right, bottom, left }: Rect) {\n return { top, right, bottom, left, width: right - left, height: bottom - top, x: left, y: top }\n}\n\n// A fallback rect that is far away from the screen. It should not be used through.\nconst fallbackRect = Object.freeze({\n top: -9999,\n right: -9999,\n bottom: -9999,\n left: -9999,\n width: 0,\n height: 0,\n x: -9999,\n y: -9999,\n})\n","import {\n createComputed,\n createSignal,\n useAttribute,\n type ConnectableElement,\n type ReadonlySignal,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useOverlayPositionerState } from '@aria-ui/overlay/elements'\nimport { usePresence } from '@aria-ui/presence'\nimport type { VirtualElement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nimport { useEditorExtension } from '../../../hooks/use-editor-extension'\nimport { useScrolling } from '../../../hooks/use-scrolling'\nimport {\n blockPopoverContext,\n draggingContext,\n type BlockPopoverContext,\n type HoverState,\n} from '../context'\n\nimport {\n defineElementHoverHandler,\n type ElementHoverHandler,\n} from './pointer-move'\nimport type {\n BlockHandlePopoverEvents,\n BlockHandlePopoverProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useBlockHandlePopover(\n host: ConnectableElement,\n { state, emit }: SetupOptions<BlockHandlePopoverProps, BlockHandlePopoverEvents>,\n): void {\n const { editor, ...overlayState } = state\n const reference = createSignal<VirtualElement | null>(null)\n useOverlayPositionerState(host, overlayState, { reference })\n\n const context = createSignal<BlockPopoverContext>(null)\n blockPopoverContext.provide(host, context)\n\n const dragging = createSignal(false)\n draggingContext.provide(host, dragging)\n\n const scrolling = useScrolling(host)\n const open = createComputed(() => {\n return !!context.get() && !scrolling.get()\n })\n\n useHoverExtension(host, editor, (referenceValue, hoverState) => {\n reference.set(referenceValue)\n context.set(hoverState)\n const stateChangeDetails = hoverState ? { node: hoverState.node, pos: hoverState.pos } : null\n emit('stateChange', stateChangeDetails)\n })\n\n useAttribute(host, 'data-state', () => (open.get() ? 'open' : 'closed'))\n usePresence(host, open)\n}\n\nfunction useHoverExtension(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n handler: ElementHoverHandler,\n) {\n let prevHoverState: HoverState | null = null\n\n const extension = defineElementHoverHandler((reference, hoverState) => {\n if (isHoverStateEqual(prevHoverState, hoverState)) {\n return\n }\n\n prevHoverState = hoverState\n handler(reference, hoverState)\n })\n\n useEditorExtension(host, editor, extension)\n}\n\nfunction isHoverStateEqual(a: HoverState | null, b: HoverState | null) {\n if (!a && !b) return true\n if (!a || !b) return false\n return a.pos === b.pos && a.node.eq(b.node)\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n overlayPositionerEvents,\n overlayPositionerProps,\n type OverlayPositionerEvents,\n type OverlayPositionerProps,\n} from '@aria-ui/overlay/elements'\nimport type { Placement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\n\nexport interface BlockHandlePopoverProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The placement of the popover, relative to the hovered block.\n *\n * @default \"left\"\n */\n placement: Placement\n\n /**\n * Whether to use the browser [Popover API](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API)\n * to place the floating element on top of other page content.\n *\n * @default false\n */\n hoist: boolean\n\n /**\n * @default false\n * @hidden\n */\n flip: boolean\n\n /**\n * @default false\n * @hidden\n */\n shift: boolean\n\n /**\n * @default true\n * @hidden\n */\n hide: boolean\n}\n\n/** @internal */\nexport const blockHandlePopoverProps: PropDeclarations<BlockHandlePopoverProps> = {\n ...overlayPositionerProps,\n editor: { default: null },\n placement: { default: 'left' },\n\n // Enabling `hoist` will cause the popover to have a small delay when\n // scrolling the page.\n hoist: { default: false },\n\n flip: { default: false },\n shift: { default: false },\n hide: { default: true },\n}\n\nexport interface BlockHandlePopoverEvents extends OverlayPositionerEvents {\n /**\n * Fired when the hovered block changes.\n */\n stateChange: CustomEvent<{ node: ProseMirrorNode; pos: number } | null>\n}\n\n/** @internal */\nexport const blockHandlePopoverEvents: EventDeclarations<BlockHandlePopoverEvents> = {\n ...overlayPositionerEvents,\n stateChange: {},\n}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useBlockHandlePopover } from \"./setup\"\nimport { blockHandlePopoverEvents, blockHandlePopoverProps, type BlockHandlePopoverEvents, type BlockHandlePopoverProps } from \"./types\"\n\nconst BlockHandlePopoverElementBase: BaseElementConstructor<BlockHandlePopoverProps> = defineCustomElement<\n BlockHandlePopoverProps,\n BlockHandlePopoverEvents\n>({\n props: blockHandlePopoverProps,\n events: blockHandlePopoverEvents,\n setup: useBlockHandlePopover,\n})\nclass BlockHandlePopoverElement extends BlockHandlePopoverElementBase {}\n\nregisterCustomElement('prosekit-block-handle-popover', BlockHandlePopoverElement)\n \nexport { BlockHandlePopoverElement }\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,MAAaA,sBAAoD,cAC/D,kCACA,KACD;;;;AAKD,MAAaC,kBAAoC,cAC/C,0CACA,MACD;;;;;;;ACnBD,SAAgB,kBACd,MACA,EAAE,SACI;CACN,MAAM,UAAU,oBAAoB,QAAQ,KAAK;AAEjD,kBAAiB,MAAM,gBAAgB,UAAU;AAC/C,QAAM,gBAAgB;EAEtB,MAAM,SAAS,MAAM,OAAO,KAAK;EACjC,MAAM,aAAa,QAAQ,KAAK;AAChC,MAAI,CAAC,UAAU,CAAC,WACd;EAGF,MAAM,EAAE,MAAM,QAAQ;AACtB,SAAO,KAAK,mBAAmB,EAAE,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC;AAC7D,SAAO,OAAO;AAGd,UAAQ,IAAI,KAAK;GACjB;;;;;;AClBJ,MAAaC,sBAA6D,EACxE,QAAQ,EAAE,SAAS,MAAM,EAC1B;;AAMD,MAAaC,uBAAgE,EAAE;;;;ACpB/E,MAAMC,4BAAyE,oBAG7E;CACA,OAAO;CACP,QAAQ;CACR,OAAO;CACR,CAAC;AACF,IAAM,wBAAN,cAAoC,0BAA0B;AAE9D,sBAAsB,6BAA6B,sBAAsB;;;;;;;ACZzE,SAAgB,cAAc,SAA8C;CAC1E,MAAM,SAAS,QAAQ,cAAc;AACrC,KAAI,CAAC,OACH;CAIF,MAAM,UADQ,OAAO,iBAAiB,QAAQ,CACxB;AAEtB,KAAI,YAAY,cAAc,QAAQ,sBAAsB,EAC1D,QAAO,QAAQ;UACN,YAAY,OACrB;AAGF,QAAO;;;;;;;;ACfT,SAAgB,cAAc,SAK5B;CACA,MAAM,OAAO,QAAQ,uBAAuB;AAC5C,KAAI,KAAK,UAAU,KAAK,KAAK,WAAW,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,GAGtE;MAAI,QAAQ,gBAAgB,CAAC,WAAW,GAAG;GAEzC,MAAM,QADW,MAAM,KAAK,QAAQ,SAAS,CACtB,KAAI,UAAS,cAAc,MAAM,CAAC;AACzD,OAAI,MAAM,WAAW,EACnB,QAAO;AAET,OAAI,MAAM,WAAW,EACnB,QAAO,MAAM;GAEf,IAAI,EAAE,KAAK,QAAQ,MAAM,UAAU,MAAM;AACzC,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;IACrC,MAAM,IAAI,MAAM;AAChB,QAAI,EAAE,MAAM,IAAK,OAAM,EAAE;AACzB,QAAI,EAAE,SAAS,OAAQ,UAAS,EAAE;AAClC,QAAI,EAAE,OAAO,KAAM,QAAO,EAAE;AAC5B,QAAI,EAAE,QAAQ,MAAO,SAAQ,EAAE;;AAEjC,UAAO;IAAE;IAAK;IAAQ;IAAM;IAAO;;;AAGvC,QAAO;;;;;AC/BT,MAAa,YAAY;;;;;;;;;;;;;;;ACezB,SAAgB,eAAe,OAAkB,SAA4B;CAC3E,MAAM,EAAE,KAAK,QAAQ,MAAM,UAAU,cAAc,QAAQ;CAC3D,MAAM,QAAQ,QAAQ;CACtB,MAAM,SAAS,SAAS;CACxB,MAAM,WAAW;CACjB,MAAM,WAAW;CAEjB,MAAM,EAAE,SAAS,YAAY;CAE7B,MAAM,WAAW,QAAQ;CAEzB,MAAM,YAAY,SAAS,cAAc,MAAM;CAG/C,MAAM,WAAW,KAAK,MAAM,WAAW,QAAQ;CAE/C,MAAM,WAAW,KAAK,MAAM,WAAW,QAAQ;CAE/C,MAAM,UAAU,KAAK,IAAI,UAAU,EAAE;CACrC,MAAM,UAAU,KAAK,IAAI,UAAU,EAAE;AACrC,cAAa,WAAW;EAMtB,UAAU;EAMV,KAAK;EACL,MAAM;EAGN,eAAe;EAEf,QAAQ;EAKR,YAAY,GAAG,QAAQ;EACvB,WAAW,GAAG,QAAQ;EAEtB,WAAW;EACX,OAAO,GAAG,QAAQ,QAAQ;EAC1B,QAAQ,GAAG,SAAS,QAAQ;EAC7B,CAAC;CAEF,MAAM,CAAC,eAAe,aAAa,iBAAiB,SAAS,KAAK;AAGlE,eAAc,MAAM,YAAY,WAAW,OAAO,YAAY;AAG9D,eAAc,MAAM,YAAY,UAAU,KAAK,YAAY;AAE3D,eAAc,MAAM,YAAY,iBAAiB,eAAe,YAAY;AAE5E,UAAS,KAAK,YAAY,UAAU;AACpC,WAAU,YAAY,cAAc;AACpC,aAAY,WAAW,UAAU;AAEjC,OAAM,cAAc,aAAa,WAAW,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;AAE3F,6BAA4B;AAC1B,YAAU,QAAQ;GAClB;;;;;;;;ACrDJ,SAAgB,wBACd,MACA,EAAE,SACI;CACN,MAAM,UAAU,oBAAoB,QAAQ,KAAK;CACjD,MAAM,WAAW,gBAAgB,QAAQ,KAAK;AAE9C,WAAU,YAAY;AACpB,OAAK,YAAY;GACjB;AAEF,uBAAsB,MAAM,SAAS,MAAM,OAAO;AAElD,kBAAiB,MAAM,cAAc,UAAU;AAC7C,WAAS,IAAI,KAAK;EAElB,MAAM,OAAO,kBAAkB,MAAM,OAAO,KAAK,CAAC;EAClD,MAAM,aAAa,QAAQ,KAAK;AAEhC,MAAI,QAAQ,YAAY;AACtB,QAAK,IAAI,UAAU,IAAI,oBAAoB;AAC3C,yBAAsB,MAAM,YAAY,MAAM;AAC9C,mBAAgB,MAAM,WAAW;;GAEnC;AAEF,kBAAiB,MAAM,iBAAiB;AACtC,WAAS,IAAI,MAAM;EAEnB,MAAM,OAAO,kBAAkB,MAAM,OAAO,KAAK,CAAC;AAClD,MAAI,KACF,MAAK,IAAI,UAAU,OAAO,oBAAoB;GAEhD;AAEF,cAAa,MAAM,uBAAwB,SAAS,KAAK,GAAG,KAAK,OAAW;;AAG9E,SAAS,sBACP,MACA,SACA,QACA;AACA,kBAAiB,MAAM,qBAAqB;EAC1C,MAAM,EAAE,QAAQ,QAAQ,KAAK,IAAI,EAAE;EACnC,MAAM,EAAE,SAAS,OAAO,KAAK,IAAI,EAAE;AAEnC,MAAI,OAAO,QAAQ,QAAQ,KACzB;AAGF,OAAK,SACH,KAAK,MAAM,GAAG,aAAa,cAAc,OAAO,KAAK,MAAM,KAAK,IAAI,CAAC,CACtE;AAKD,8BAA4B;AAC1B,QAAK,OAAO;IACZ;GACF;;AAGJ,SAAS,sBAAsB,MAAkB,YAAwB,OAAwB;AAC/F,KAAI,CAAC,MAAM,aACT;CAGF,MAAM,EAAE,QAAQ;CAEhB,MAAM,UAAU,KAAK,QAAQ,IAAI;AACjC,KAAI,CAAC,WAAW,CAAC,cAAc,QAAQ,CACrC;CAGF,MAAM,aAAa,cAAc,QAAQ;AACzC,KAAI,CAAC,cAAc,CAAC,cAAc,WAAW,CAC3C;AAGF,OAAM,aAAa,WAAW;AAC9B,OAAM,aAAa,QAAQ,aAAa,WAAW,UAAU;AAC7D,OAAM,aAAa,gBAAgB;AACnC,gBAAe,OAAO,WAAW;;AAKnC,SAAS,gBAAgB,MAAkB,YAA8B;CACvE,MAAM,EAAE,MAAM,QAAQ;AAQtB,MAAK,WAN0B;EAC7B,OAAO,IAAI,MAAM,SAAS,KAAK,KAAK,EAAE,GAAG,EAAE;EAC3C,MAAM;EACN,MAAM,cAAc,OAAO,KAAK,MAAM,KAAK,IAAI;EAChD;;;;;;AChHH,MAAaC,4BAAyE,EACpF,QAAQ,EAAE,SAAS,MAAM,EAC1B;;AAMD,MAAaC,6BAA4E,EAAE;;;;ACpB3F,MAAMC,kCAAqF,oBAGzF;CACA,OAAO;CACP,QAAQ;CACR,OAAO;CACR,CAAC;AACF,IAAM,8BAAN,cAA0C,gCAAgC;AAE1E,sBAAsB,mCAAmC,4BAA4B;;;;;;;ACZrF,SAAgB,SACd,UACA,MACyB;CACzB,IAAI,WAAW;AAEf,SAAQ,GAAG,SAAe;EACxB,MAAM,MAAM,KAAK,KAAK;AACtB,MAAI,MAAM,YAAY,MAAM;AAC1B,YAAS,GAAG,KAAK;AACjB,cAAW;;;;;;;ACUjB,SAAgB,0BAA0B,SAA8C;CACtF,MAAM,iBACJ,MACA,KACA,SACA,kBACG;AAUH,UATkC;GAChC,gBAAgB;GAEhB,6BAA6B;IAC3B,MAAM,OAAO,kBAAkB,eAAe,QAAQ;AACtD,WAAO,OAAO,YAAY,KAAK,GAAG;;GAErC,EAEkB;GAAE;GAAM;GAAK,CAAC;;CAGnC,IAAI,QAAQ;CACZ,IAAI,QAAQ;CACZ,IAAI,WAAW;CAEf,MAAM,sBAAsB,MAAkB,UAAwB;EACpE,MAAM,EAAE,GAAG,MAAM;AAKjB,MAAI,UAAU,KAAK,UAAU,GAAG;GAC9B,MAAM,MAAM,KAAK,KAAK;AACtB,OAAI,MAAM,WAAW,IACnB;AAEF,cAAW;;AAEb,UAAQ;AACR,UAAQ;EAER,MAAM,QAAQ,kBAAkB,MAAM,GAAG,EAAE;AAC3C,MAAI,CAAC,OAAO;AACV,WAAQ,MAAM,KAAK;AACnB;;EAGF,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,UAAU,KAAK,QAAQ,IAAI;AACjC,MAAI,CAAC,WAAW,CAAC,cAAc,QAAQ,EAAE;AACvC,WAAQ,MAAM,KAAK;AACnB;;EAMF,MAAM,OAAO,KAAK,MAAM,IAAI,QAAQ,IAAI;AACxC,MAAI,KAAK,QAAQ,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,GAAG;GAClD,MAAM,YAAY,KAAK,OAAO,KAAK,MAAM;GACzC,MAAM,aAAa,KAAK;AAExB,iBAAc,YAAY,WAAW,SADf,KAAK,QAAQ,UAAU,CACe;QAE5D,eAAc,MAAM,KAAK,QAAQ;;AAIrC,QAAO,MACL,sBAAsB,eAAe,SAAS,oBAAoB,IAAI,CAAC,EACvE,sBAAsB,gBAAgB,mBAAmB,EACzD,sBAAsB,cAAc,mBAAmB,EACvD,sBAAsB,kBAAkB,QAAQ,MAAM,KAAK,CAAC,CAC7D;;AAGH,SAAS,kBAAkB,MAAkB,GAAW,GAA+D;AAErH,KAAI,CAAC,aADQ,cAAc,KAAK,IAAI,EACZ,GAAG,EAAE,CAC3B;CAGF,IAAIC,SAAsC,KAAK,MAAM;CACrD,IAAI,MAAM;AAEV,QAAO,QAAQ;AACb,MAAI,OAAO,YAAY,OAAO,eAAe,OAAO,UAAU,OAAO,KAAK,KAAK,WAC7E,QAAO;GAAE,MAAM;GAAQ;GAAK;EAI9B,MAAMC,WAA8B,EAAE;EACtC,MAAMC,YAAsB,EAAE;AAC9B,SAAO,SAAS,OAAO,WAAW;AAChC,YAAS,KAAK,MAAM;AACpB,aAAU,KAAK,SAAS,MAAM,EAAE;IAChC;EAEF,IAAI,KAAK;EACT,IAAI,KAAK,SAAS,SAAS;AAE3B,SAAO,MAAM,IAAI;GACf,MAAM,IAAI,MAAO,KAAK,MAAO;GAE7B,MAAM,YAAY,YADD,KAAK,QAAQ,UAAU,GAAG,CACJ;AACvC,OAAI,CAAC,WAAW;AACd,YAAQ,KAAK,8CAA8C,UAAU,KAAK;AAC1E;;AAEF,OAAI,UAAU,MAAM,EAClB,MAAK,IAAI;YACA,UAAU,SAAS,EAC5B,MAAK,IAAI;QACJ;AACL,SAAK;AACL;;;AAIJ,MAAI,KAAK,GACP;AAGF,WAAS,SAAS;AAClB,QAAM,UAAU;;;AAIpB,SAAS,YAAY,MAAiD;AACpE,KAAI,QAAQ,UAAU,KAAK,IAAI,KAAK,YAClC,QAAO,cAAc,KAAK;;AAI9B,SAAS,aAAa,MAAY,GAAW,GAAW;AACtD,QAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,SAAS,KAAK,KAAK,OAAO,KAAK,KAAK;;AAUzE,SAAS,kBAAkB,OAAqB,OAAuC;AACrF,KAAI,SAAS,CAAC,MAAM,YAClB;AAEF,KAAI,SAAS,CAAC,MAAM,YAClB;AAGF,KAAI,SAAS,OAAO;EAClB,MAAM,YAAY,cAAc,MAAM;EACtC,MAAM,YAAY,wBAAwB,MAAM;AAChD,MAAI,aAAa,WAAW;GAC1B,MAAM,EAAE,KAAK,WAAW;GACxB,MAAM,EAAE,MAAM,UAAU;AACxB,UAAO;IAAE;IAAK;IAAQ;IAAM;IAAO;QAEnC,QAAO,aAAa;YAEb,MACT,QAAO,wBAAwB,MAAM;UAC5B,MACT,QAAO,wBAAwB,MAAM;;AAIzC,SAAS,cAAc,MAA8B;AACnD,KAAI,CAAC,UAAU,KAAK,CAClB;CAGF,MAAM,OAAO,cAAc,KAAK;CAChC,MAAM,QAAQ,KAAK,cAAc,aAAa,iBAAiB,KAAK;CACpE,MAAM,aAAa,SAAS,OAAO,SAAS,MAAM,YAAY,GAAG,IAAI;CACrE,MAAM,cAAc,SAAS,OAAO,SAAS,MAAM,aAAa,GAAG,IAAI;CACvE,MAAM,OAAO,KAAK,OAAO;CACzB,MAAM,QAAQ,KAAK,QAAQ;AAE3B,QAAO;EAAE,KAAK,KAAK;EAAK,QAAQ,KAAK;EAAQ;EAAM;EAAO;;AAG5D,SAAS,wBAAwB,MAA8B;AAC7D,KAAI,UAAU,KAAK,CACjB,QAAO,2BAA2B,KAAK;UAC9B,WAAW,KAAK,CACzB,QAAO,4BAA4B,KAAK;;AAI5C,SAAS,4BAA4B,MAA8B;CACjE,MAAM,gBAAgB,KAAK;AAC3B,KAAI,CAAC,cACH;CAEF,MAAM,QAAQ,cAAc,aAAa;AACzC,OAAM,SAAS,MAAM,EAAE;AACvB,OAAM,OAAO,MAAM,EAAE;AAErB,QADc,MAAM,gBAAgB,CACvB;;AAGf,SAAS,2BAA2B,SAAoC;AACtE,KAAI,QAAQ,aAAa,KACvB,QAAO,QAAQ,uBAAuB;CAGxC,MAAM,OAAO,cAAc,QAAQ;CACnC,MAAM,QAAQ,QAAQ,cAAc,aAAa,iBAAiB,QAAQ;CAC1E,MAAM,aAAa,SAAS,OAAO,SAAS,MAAM,YAAY,GAAG,IAAI;CACrE,MAAM,cAAc,SAAS,OAAO,SAAS,MAAM,aAAa,GAAG,IAAI;CACvE,MAAM,OAAO,KAAK,OAAO;CACzB,MAAM,QAAQ,KAAK,QAAQ;CAE3B,MAAM,aAAa,SAAS,OAAO,SAAS,MAAM,YAAY,GAAG,IAAI;CACrE,MAAM,aAAa,SAAS,OAAO,SAAS,MAAM,YAAY,GAAG,IAAI;CACrE,MAAM,YAAY,SAAS,OAAO,SAAS,MAAM,gBAAgB,GAAG,IAAI;CACxE,MAAM,MAAM,KAAK,MAAM,aAAa;AAGpC,QAAO;EAAE;EAAK,QAFC,MAAM;EAEC;EAAM;EAAO;;AAGrC,SAAS,YAAY,EAAE,KAAK,OAAO,QAAQ,QAAc;AACvD,QAAO;EAAE;EAAK;EAAO;EAAQ;EAAM,OAAO,QAAQ;EAAM,QAAQ,SAAS;EAAK,GAAG;EAAM,GAAG;EAAK;;AAIjG,MAAM,eAAe,OAAO,OAAO;CACjC,KAAK;CACL,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;CACR,GAAG;CACH,GAAG;CACJ,CAAC;;;;;;;ACnOF,SAAgB,sBACd,MACA,EAAE,OAAO,QACH;CACN,MAAM,EAAE,OAAQ,GAAG,iBAAiB;CACpC,MAAM,YAAY,aAAoC,KAAK;AAC3D,2BAA0B,MAAM,cAAc,EAAE,WAAW,CAAC;CAE5D,MAAM,UAAU,aAAkC,KAAK;AACvD,qBAAoB,QAAQ,MAAM,QAAQ;CAE1C,MAAM,WAAW,aAAa,MAAM;AACpC,iBAAgB,QAAQ,MAAM,SAAS;CAEvC,MAAM,YAAY,aAAa,KAAK;CACpC,MAAM,OAAO,qBAAqB;AAChC,SAAO,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,UAAU,KAAK;GAC1C;AAEF,mBAAkB,MAAM,SAAS,gBAAgB,eAAe;AAC9D,YAAU,IAAI,eAAe;AAC7B,UAAQ,IAAI,WAAW;AAEvB,OAAK,eADsB,aAAa;GAAE,MAAM,WAAW;GAAM,KAAK,WAAW;GAAK,GAAG,KAClD;GACvC;AAEF,cAAa,MAAM,oBAAqB,KAAK,KAAK,GAAG,SAAS,SAAU;AACxE,aAAY,MAAM,KAAK;;AAGzB,SAAS,kBACP,MACA,QACA,SACA;CACA,IAAIC,iBAAoC;AAWxC,oBAAmB,MAAM,QATP,2BAA2B,WAAW,eAAe;AACrE,MAAI,kBAAkB,gBAAgB,WAAW,CAC/C;AAGF,mBAAiB;AACjB,UAAQ,WAAW,WAAW;GAC9B,CAEyC;;AAG7C,SAAS,kBAAkB,GAAsB,GAAsB;AACrE,KAAI,CAAC,KAAK,CAAC,EAAG,QAAO;AACrB,KAAI,CAAC,KAAK,CAAC,EAAG,QAAO;AACrB,QAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK;;;;;;AC5B7C,MAAaC,0BAAqE;CAChF,GAAG;CACH,QAAQ,EAAE,SAAS,MAAM;CACzB,WAAW,EAAE,SAAS,QAAQ;CAI9B,OAAO,EAAE,SAAS,OAAO;CAEzB,MAAM,EAAE,SAAS,OAAO;CACxB,OAAO,EAAE,SAAS,OAAO;CACzB,MAAM,EAAE,SAAS,MAAM;CACxB;;AAUD,MAAaC,2BAAwE;CACnF,GAAG;CACH,aAAa,EAAE;CAChB;;;;AC9ED,MAAMC,gCAAiF,oBAGrF;CACA,OAAO;CACP,QAAQ;CACR,OAAO;CACR,CAAC;AACF,IAAM,4BAAN,cAAwC,8BAA8B;AAEtE,sBAAsB,iCAAiC,0BAA0B"}
1
+ {"version":3,"file":"prosekit-web-block-handle.js","names":["blockPopoverContext: Context<BlockPopoverContext>","draggingContext: Context<boolean>","blockHandleAddProps: PropDeclarations<BlockHandleAddProps>","blockHandleAddEvents: EventDeclarations<BlockHandleAddEvents>","BlockHandleAddElementBase: BaseElementConstructor<BlockHandleAddProps>","blockHandleDraggableProps: PropDeclarations<BlockHandleDraggableProps>","blockHandleDraggableEvents: EventDeclarations<BlockHandleDraggableEvents>","BlockHandleDraggableElementBase: BaseElementConstructor<BlockHandleDraggableProps>","parent: ProseMirrorNode | undefined","children: ProseMirrorNode[]","positions: number[]","prevHoverState: HoverState | null","blockHandlePopoverProps: PropDeclarations<BlockHandlePopoverProps>","blockHandlePopoverEvents: EventDeclarations<BlockHandlePopoverEvents>","BlockHandlePopoverElementBase: BaseElementConstructor<BlockHandlePopoverProps>"],"sources":["../src/components/block-handle/context.ts","../src/components/block-handle/block-handle-add/setup.ts","../src/components/block-handle/block-handle-add/types.ts","../src/components/block-handle/block-handle-add/element.gen.ts","../src/utils/get-box-element.ts","../src/utils/get-client-rect.ts","../src/utils/max-z-index.ts","../src/components/block-handle/block-handle-draggable/set-drag-preview.ts","../src/components/block-handle/block-handle-draggable/setup.ts","../src/components/block-handle/block-handle-draggable/types.ts","../src/components/block-handle/block-handle-draggable/element.gen.ts","../src/utils/throttle.ts","../src/components/block-handle/block-handle-popover/pointer-move.ts","../src/components/block-handle/block-handle-popover/setup.ts","../src/components/block-handle/block-handle-popover/types.ts","../src/components/block-handle/block-handle-popover/element.gen.ts"],"sourcesContent":["import {\n createContext,\n type Context,\n} from '@aria-ui/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\n\n/**\n * @internal\n */\nexport interface HoverState {\n node: ProseMirrorNode\n pos: number\n}\n\n/**\n * @internal\n */\nexport type BlockPopoverContext = HoverState | null\n\n/**\n * @internal\n */\nexport const blockPopoverContext: Context<BlockPopoverContext> = createContext(\n 'prosekit-block-popover-context',\n null,\n)\n\n/**\n * @internal\n */\nexport const draggingContext: Context<boolean> = createContext(\n 'prosekit-block-handle-dragging-context',\n false,\n)\n","import {\n useEventListener,\n type ConnectableElement,\n type SignalState,\n} from '@aria-ui/core'\nimport { insertDefaultBlock } from '@prosekit/core'\n\nimport { blockPopoverContext } from '../context'\n\nimport type { BlockHandleAddProps } from './types'\n\n/**\n * @internal\n */\nexport function useBlockHandleAdd(\n host: ConnectableElement,\n { state }: { state: SignalState<BlockHandleAddProps> },\n): void {\n const context = blockPopoverContext.consume(host)\n\n useEventListener(host, 'pointerdown', (event) => {\n event.preventDefault()\n\n const editor = state.editor.get()\n const hoverState = context.get()\n if (!editor || !hoverState) {\n return\n }\n\n const { node, pos } = hoverState\n editor.exec(insertDefaultBlock({ pos: pos + node.nodeSize }))\n editor.focus()\n\n // Hide the drag handle\n context.set(null)\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nexport interface BlockHandleAddProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n}\n\n/** @internal */\nexport const blockHandleAddProps: PropDeclarations<BlockHandleAddProps> = {\n editor: { default: null },\n}\n\n/** @internal */\nexport interface BlockHandleAddEvents {}\n\n/** @internal */\nexport const blockHandleAddEvents: EventDeclarations<BlockHandleAddEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useBlockHandleAdd } from \"./setup\"\nimport { blockHandleAddEvents, blockHandleAddProps, type BlockHandleAddEvents, type BlockHandleAddProps } from \"./types\"\n\nconst BlockHandleAddElementBase: BaseElementConstructor<BlockHandleAddProps> = defineCustomElement<\n BlockHandleAddProps,\n BlockHandleAddEvents\n>({\n props: blockHandleAddProps,\n events: blockHandleAddEvents,\n setup: useBlockHandleAdd,\n})\nclass BlockHandleAddElement extends BlockHandleAddElementBase {}\n\nregisterCustomElement('prosekit-block-handle-add', BlockHandleAddElement)\n \nexport { BlockHandleAddElement }\n","/**\n * Returns the element that has a box.\n */\nexport function getBoxElement(element: Element): Element | null | undefined {\n const window = element.ownerDocument.defaultView\n if (!window) {\n return\n }\n\n const style = window.getComputedStyle(element)\n const display = style.display\n\n if (display === 'contents' && element.childElementCount === 1) {\n return element.firstElementChild\n } else if (display === 'none') {\n return\n }\n\n return element\n}\n","/**\n * Similar to `element.getBoundingClientRect`, but handles `display: contents` elements.\n */\nexport function getClientRect(element: Element): {\n top: number\n right: number\n bottom: number\n left: number\n} {\n const rect = element.getBoundingClientRect()\n if (rect.width === 0 && rect.height === 0 && rect.x === 0 && rect.y === 0) {\n // Suspiciously rect, probably an element with `display: contents`, in\n // which case `element.getClientRects()` will return an empty array.\n if (element.getClientRects().length === 0) {\n const children = Array.from(element.children)\n const rects = children.map(child => getClientRect(child))\n if (rects.length === 0) {\n return rect\n }\n if (rects.length === 1) {\n return rects[0]\n }\n let { top, bottom, left, right } = rects[0]\n for (let i = 1; i < rects.length; i++) {\n const r = rects[i]\n if (r.top < top) top = r.top\n if (r.bottom > bottom) bottom = r.bottom\n if (r.left < left) left = r.left\n if (r.right > right) right = r.right\n }\n return { top, bottom, left, right }\n }\n }\n return rect\n}\n","// Maximum possible z-index\n// https://stackoverflow.com/questions/491052/minimum-and-maximum-value-of-z-index\nexport const maxZIndex = '2147483647'\n","import { assignStyles } from '../../../utils/assign-styles'\nimport { deepCloneElement } from '../../../utils/clone-element'\nimport { getClientRect } from '../../../utils/get-client-rect'\nimport { injectStyle } from '../../../utils/inject-style'\nimport { maxZIndex } from '../../../utils/max-z-index'\n\n/**\n * Sets a drag preview image for the given element and ensures the preview position\n * relative to the pointer is correct.\n *\n * This function does the following:\n *\n * - Creates a temporary container element.\n * - Puts the container at the end of the document body.\n * - Sets event's drag image.\n * - Removes the container from the document body after the next frame.\n */\nexport function setDragPreview(event: DragEvent, element: HTMLElement): void {\n const { top, bottom, left, right } = getClientRect(element)\n const width = right - left\n const height = bottom - top\n const elementX = left\n const elementY = top\n\n const { clientX, clientY } = event\n\n const document = element.ownerDocument\n\n const container = document.createElement('div')\n\n // If outsideX is positive, the point is at the left side of the element.\n const outsideX = Math.round(elementX - clientX)\n // If outsideY is positive, the point is above the element.\n const outsideY = Math.round(elementY - clientY)\n\n const borderX = Math.max(outsideX, 0)\n const borderY = Math.max(outsideY, 0)\n assignStyles(container, {\n // Ensuring we don't cause reflow when adding the element to the page using\n // `position:fixed` rather than `position:absolute` so we are positioned on\n // the current viewport. `position:fixed` also creates a new stacking\n // context, so we don't need to do that here.\n // https://github.com/atlassian/pragmatic-drag-and-drop/blob/56276552/packages/core/src/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.ts#L60\n position: 'fixed',\n\n // The element is positioned off-screen to avoid capturing the content of\n // the page on Safari when the dragging element has a transparent background\n // on Safari. See https://github.com/prosekit/prosekit/issues/1153 for more\n // details.\n top: '-1000vh',\n left: '-1000vw',\n\n // The element should not be interactive.\n pointerEvents: 'none',\n\n zIndex: maxZIndex,\n\n // Only reliable cross browser technique found to push a drag preview away\n // from the cursor is to use transparent borders on the container.\n // https://github.com/atlassian/pragmatic-drag-and-drop/blob/56276552/packages/core/src/public-utils/element/custom-native-drag-preview/pointer-outside-of-preview.ts#L13-L18\n borderLeft: `${borderX}px solid transparent`,\n borderTop: `${borderY}px solid transparent`,\n\n boxSizing: 'border-box',\n width: `${width + borderX}px`,\n height: `${height + borderY}px`,\n })\n\n const [clonedElement, styleText] = deepCloneElement(element, true)\n\n // A hardcoded opacity.\n clonedElement.style.setProperty('opacity', '0.5', 'important')\n // The bounding client rect doesn't include the margin, so we need to remove\n // the margin too from the cloned element so that it can fit the container.\n clonedElement.style.setProperty('margin', '0', 'important')\n // Hide the outline of the cloned element.\n clonedElement.style.setProperty('outline-color', 'transparent', 'important')\n\n document.body.appendChild(container)\n container.appendChild(clonedElement)\n injectStyle(container, styleText)\n\n event.dataTransfer?.setDragImage(container, Math.max(-outsideX, 0), Math.max(-outsideY, 0))\n\n requestAnimationFrame(() => {\n container.remove()\n })\n}\n","import {\n useAttribute,\n useEffect,\n useEventListener,\n type ConnectableElement,\n type ReadonlySignal,\n type SignalState,\n} from '@aria-ui/core'\nimport { isHTMLElement } from '@ocavue/utils'\nimport type { Editor } from '@prosekit/core'\nimport type { ViewDragging } from '@prosekit/extensions/drop-indicator'\nimport {\n Fragment,\n Slice,\n} from '@prosekit/pm/model'\nimport { NodeSelection } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { getBoxElement } from '../../../utils/get-box-element'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport {\n blockPopoverContext,\n draggingContext,\n type BlockPopoverContext,\n type HoverState,\n} from '../context'\n\nimport { setDragPreview } from './set-drag-preview'\nimport type { BlockHandleDraggableProps } from './types'\n\n/**\n * @internal\n */\nexport function useBlockHandleDraggable(\n host: ConnectableElement,\n { state }: { state: SignalState<BlockHandleDraggableProps> },\n): void {\n const context = blockPopoverContext.consume(host)\n const dragging = draggingContext.consume(host)\n\n useEffect(host, () => {\n host.draggable = true\n })\n\n usePointerDownHandler(host, context, state.editor)\n\n useEventListener(host, 'dragstart', (event) => {\n dragging.set(true)\n\n const view = getSafeEditorView(state.editor.get())\n const hoverState = context.get()\n\n if (view && hoverState) {\n view.dom.classList.add('prosekit-dragging')\n createDraggingPreview(view, hoverState, event)\n setViewDragging(view, hoverState)\n }\n })\n\n useEventListener(host, 'dragend', () => {\n dragging.set(false)\n\n const view = getSafeEditorView(state.editor.get())\n if (view) {\n view.dom.classList.remove('prosekit-dragging')\n }\n })\n\n useAttribute(host, 'data-dragging', () => (dragging.get() ? '' : undefined))\n}\n\nfunction usePointerDownHandler(\n host: ConnectableElement,\n context: ReadonlySignal<BlockPopoverContext>,\n editor: ReadonlySignal<Editor | null>,\n) {\n useEventListener(host, 'pointerdown', () => {\n const { pos } = context.get() ?? {}\n const { view } = editor.get() ?? {}\n\n if (pos == null || view == null) {\n return\n }\n\n view.dispatch(\n view.state.tr.setSelection(NodeSelection.create(view.state.doc, pos)),\n )\n\n // Clicking the handle will blur the editor, so we need to focus it again.\n // We cannot call `event.preventDefault()` here to prevent the blur\n // because it will prevent the drag event from firing.\n requestAnimationFrame(() => {\n view.focus()\n })\n })\n}\n\nfunction createDraggingPreview(view: EditorView, hoverState: HoverState, event: DragEvent): void {\n if (!event.dataTransfer) {\n return\n }\n\n const { pos } = hoverState\n\n const element = view.nodeDOM(pos)\n if (!element || !isHTMLElement(element)) {\n return\n }\n\n const boxElement = getBoxElement(element)\n if (!boxElement || !isHTMLElement(boxElement)) {\n return\n }\n\n event.dataTransfer.clearData()\n event.dataTransfer.setData('text/html', boxElement.outerHTML)\n event.dataTransfer.effectAllowed = 'copyMove'\n setDragPreview(event, boxElement)\n\n return\n}\n\nfunction setViewDragging(view: EditorView, hoverState: HoverState): void {\n const { node, pos } = hoverState\n\n const dragging: ViewDragging = {\n slice: new Slice(Fragment.from(node), 0, 0),\n move: true,\n node: NodeSelection.create(view.state.doc, pos),\n }\n\n view.dragging = dragging\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nexport interface BlockHandleDraggableProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n}\n\n/** @internal */\nexport const blockHandleDraggableProps: PropDeclarations<BlockHandleDraggableProps> = {\n editor: { default: null },\n}\n\n/** @internal */\nexport interface BlockHandleDraggableEvents {}\n\n/** @internal */\nexport const blockHandleDraggableEvents: EventDeclarations<BlockHandleDraggableEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useBlockHandleDraggable } from \"./setup\"\nimport { blockHandleDraggableEvents, blockHandleDraggableProps, type BlockHandleDraggableEvents, type BlockHandleDraggableProps } from \"./types\"\n\nconst BlockHandleDraggableElementBase: BaseElementConstructor<BlockHandleDraggableProps> = defineCustomElement<\n BlockHandleDraggableProps,\n BlockHandleDraggableEvents\n>({\n props: blockHandleDraggableProps,\n events: blockHandleDraggableEvents,\n setup: useBlockHandleDraggable,\n})\nclass BlockHandleDraggableElement extends BlockHandleDraggableElementBase {}\n\nregisterCustomElement('prosekit-block-handle-draggable', BlockHandleDraggableElement)\n \nexport { BlockHandleDraggableElement }\n","/**\n * @internal\n */\nexport function throttle<Args extends any[]>(\n callback: (...args: Args) => void,\n wait: number,\n): (...args: Args) => void {\n let lastTime = 0\n\n return (...args: Args) => {\n const now = Date.now()\n if (now - lastTime >= wait) {\n callback(...args)\n lastTime = now\n }\n }\n}\n","import type { VirtualElement } from '@floating-ui/dom'\nimport {\n isElement,\n isHTMLElement,\n isTextNode,\n} from '@ocavue/utils'\nimport {\n defineDOMEventHandler,\n union,\n type PlainExtension,\n} from '@prosekit/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { getClientRect } from '../../../utils/get-client-rect'\nimport { throttle } from '../../../utils/throttle'\nimport type { HoverState } from '../context'\n\nexport type ElementHoverHandler = (\n reference: VirtualElement | null,\n hoverState: HoverState | null,\n) => void\n\nexport function defineElementHoverHandler(handler: ElementHoverHandler): PlainExtension {\n const handleElement = (\n node: ProseMirrorNode,\n pos: number,\n element: HTMLElement,\n parentElement?: Node | null,\n ) => {\n const reference: VirtualElement = {\n contextElement: element,\n\n getBoundingClientRect: () => {\n const rect = findFirstLineRect(parentElement, element)\n return rect ? fulfillRect(rect) : fallbackRect\n },\n }\n\n handler(reference, { node, pos })\n }\n\n let lastX = -1\n let lastY = -1\n let lastTime = -1\n\n const handlePointerEvent = (view: EditorView, event: PointerEvent) => {\n const { x, y } = event\n\n // Simple performance optimization. If the pointer is not moving, we don't\n // want to recalculate the block handle position within a short period of\n // time window.\n if (lastX === x && lastY === y) {\n const now = Date.now()\n if (now - lastTime < 100) {\n return\n }\n lastTime = now\n }\n lastX = x\n lastY = y\n\n const block = findBlockByCoords(view, x, y)\n if (!block) {\n handler(null, null)\n return\n }\n\n const { node, pos } = block\n const element = view.nodeDOM(pos)\n if (!element || !isHTMLElement(element)) {\n handler(null, null)\n return\n }\n\n // If `node` is the first child of another non-doc block node, for example a\n // list node or a blockquote node, we want to put the block handle agains\n // the parent node.\n const $pos = view.state.doc.resolve(pos)\n if ($pos.depth > 0 && $pos.index($pos.depth) === 0) {\n const parentPos = $pos.before($pos.depth)\n const parentNode = $pos.parent\n const parentElement = view.nodeDOM(parentPos)\n handleElement(parentNode, parentPos, element, parentElement)\n } else {\n handleElement(node, pos, element)\n }\n }\n\n return union(\n defineDOMEventHandler('pointermove', throttle(handlePointerEvent, 200)),\n defineDOMEventHandler('pointerenter', handlePointerEvent),\n defineDOMEventHandler('pointerout', handlePointerEvent),\n defineDOMEventHandler('keypress', () => handler(null, null)),\n )\n}\n\nfunction findBlockByCoords(view: EditorView, x: number, y: number): { node: ProseMirrorNode; pos: number } | undefined {\n const rect = getClientRect(view.dom)\n if (!isWithinRect(rect, x, y)) {\n return\n }\n\n let parent: ProseMirrorNode | undefined = view.state.doc\n let pos = -1\n\n while (parent) {\n if (parent.isBlock && (parent.isTextblock || parent.isAtom || parent.type.spec.isolating)) {\n return { node: parent, pos }\n }\n\n // Collect all children and their positions\n const children: ProseMirrorNode[] = []\n const positions: number[] = []\n parent.forEach((child, offset) => {\n children.push(child)\n positions.push(offset + pos + 1)\n })\n\n let lo = 0\n let hi = children.length - 1\n\n while (lo <= hi) {\n const i = hi - ((hi - lo) >> 1)\n const childDOM = view.nodeDOM(positions[i])\n const childRect = getNodeRect(childDOM)\n if (!childRect) {\n console.warn(`[prosekit] Unable to get rect at position: ${positions[i]}`)\n return\n }\n if (childRect.top > y) {\n hi = i - 1\n } else if (childRect.bottom < y) {\n lo = i + 1\n } else {\n lo = i\n break\n }\n }\n\n if (lo > hi) {\n return\n }\n\n parent = children[lo]\n pos = positions[lo]\n }\n}\n\nfunction getNodeRect(node: Node | null | undefined): Rect | undefined {\n if (node && isElement(node) && node.isConnected) {\n return getClientRect(node)\n }\n}\n\nfunction isWithinRect(rect: Rect, x: number, y: number) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom\n}\n\ninterface Rect {\n top: number\n right: number\n bottom: number\n left: number\n}\n\nfunction findFirstLineRect(outer?: Node | null, inner?: Node | null): Rect | undefined {\n if (outer && !outer.isConnected) {\n return\n }\n if (inner && !inner.isConnected) {\n return\n }\n\n if (outer && inner) {\n const outerRect = findOuterRect(outer)\n const innerRect = findFirstLineRectInNode(inner)\n if (outerRect && innerRect) {\n const { top, bottom } = innerRect\n const { left, right } = outerRect\n return { top, bottom, left, right }\n } else {\n return outerRect || innerRect\n }\n } else if (outer) {\n return findFirstLineRectInNode(outer)\n } else if (inner) {\n return findFirstLineRectInNode(inner)\n }\n}\n\nfunction findOuterRect(node: Node): Rect | undefined {\n if (!isElement(node)) {\n return\n }\n\n const rect = getClientRect(node)\n const style = node.ownerDocument.defaultView?.getComputedStyle(node)\n const marginLeft = style && Number.parseInt(style.marginLeft, 10) || 0\n const marginRight = style && Number.parseInt(style.marginRight, 10) || 0\n const left = rect.left - marginLeft\n const right = rect.right + marginRight\n\n return { top: rect.top, bottom: rect.bottom, left, right }\n}\n\nfunction findFirstLineRectInNode(node: Node): Rect | undefined {\n if (isElement(node)) {\n return findFirstLineRectInElement(node)\n } else if (isTextNode(node)) {\n return findFirstLineRectInTextNode(node)\n }\n}\n\nfunction findFirstLineRectInTextNode(node: Text): Rect | undefined {\n const ownerDocument = node.ownerDocument\n if (!ownerDocument) {\n return\n }\n const range = ownerDocument.createRange()\n range.setStart(node, 0)\n range.setEnd(node, 0)\n const rects = range.getClientRects()\n return rects[0]\n}\n\nfunction findFirstLineRectInElement(element: Element): Rect | undefined {\n if (element.nodeName === 'BR') {\n return element.getBoundingClientRect()\n }\n\n const rect = getClientRect(element)\n const style = element.ownerDocument.defaultView?.getComputedStyle(element)\n const marginLeft = style && Number.parseInt(style.marginLeft, 10) || 0\n const marginRight = style && Number.parseInt(style.marginRight, 10) || 0\n const left = rect.left - marginLeft\n const right = rect.right + marginRight\n\n const lineHeight = style && Number.parseInt(style.lineHeight, 10) || 24\n const paddingTop = style && Number.parseInt(style.paddingTop, 10) || 0\n const borderTop = style && Number.parseInt(style.borderTopWidth, 10) || 0\n const top = rect.top + paddingTop + borderTop\n const bottom = top + lineHeight\n\n return { top, bottom, left, right }\n}\n\nfunction fulfillRect({ top, right, bottom, left }: Rect) {\n return { top, right, bottom, left, width: right - left, height: bottom - top, x: left, y: top }\n}\n\n// A fallback rect that is far away from the screen. It should not be used through.\nconst fallbackRect = Object.freeze({\n top: -9999,\n right: -9999,\n bottom: -9999,\n left: -9999,\n width: 0,\n height: 0,\n x: -9999,\n y: -9999,\n})\n","import {\n createComputed,\n createSignal,\n useAttribute,\n type ConnectableElement,\n type ReadonlySignal,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useOverlayPositionerState } from '@aria-ui/overlay/elements'\nimport { usePresence } from '@aria-ui/presence'\nimport type { VirtualElement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nimport { useEditorExtension } from '../../../hooks/use-editor-extension'\nimport { useScrolling } from '../../../hooks/use-scrolling'\nimport {\n blockPopoverContext,\n draggingContext,\n type BlockPopoverContext,\n type HoverState,\n} from '../context'\n\nimport {\n defineElementHoverHandler,\n type ElementHoverHandler,\n} from './pointer-move'\nimport type {\n BlockHandlePopoverEvents,\n BlockHandlePopoverProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useBlockHandlePopover(\n host: ConnectableElement,\n { state, emit }: SetupOptions<BlockHandlePopoverProps, BlockHandlePopoverEvents>,\n): void {\n const { editor, ...overlayState } = state\n const reference = createSignal<VirtualElement | null>(null)\n useOverlayPositionerState(host, overlayState, { reference })\n\n const context = createSignal<BlockPopoverContext>(null)\n blockPopoverContext.provide(host, context)\n\n const dragging = createSignal(false)\n draggingContext.provide(host, dragging)\n\n const scrolling = useScrolling(host)\n const open = createComputed(() => {\n return !!context.get() && !scrolling.get()\n })\n\n useHoverExtension(host, editor, (referenceValue, hoverState) => {\n reference.set(referenceValue)\n context.set(hoverState)\n const stateChangeDetails = hoverState ? { node: hoverState.node, pos: hoverState.pos } : null\n emit('stateChange', stateChangeDetails)\n })\n\n useAttribute(host, 'data-state', () => (open.get() ? 'open' : 'closed'))\n usePresence(host, open)\n}\n\nfunction useHoverExtension(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n handler: ElementHoverHandler,\n) {\n let prevHoverState: HoverState | null = null\n\n const extension = defineElementHoverHandler((reference, hoverState) => {\n if (isHoverStateEqual(prevHoverState, hoverState)) {\n return\n }\n\n prevHoverState = hoverState\n handler(reference, hoverState)\n })\n\n useEditorExtension(host, editor, extension)\n}\n\nfunction isHoverStateEqual(a: HoverState | null, b: HoverState | null) {\n if (!a && !b) return true\n if (!a || !b) return false\n return a.pos === b.pos && a.node.eq(b.node)\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n overlayPositionerEvents,\n overlayPositionerProps,\n type OverlayPositionerEvents,\n type OverlayPositionerProps,\n} from '@aria-ui/overlay/elements'\nimport type { Placement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\n\nexport interface BlockHandlePopoverProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The placement of the popover, relative to the hovered block.\n *\n * @default \"left\"\n */\n placement: Placement\n\n /**\n * Whether to use the browser [Popover API](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API)\n * to place the floating element on top of other page content.\n *\n * @default false\n */\n hoist: boolean\n\n /**\n * @default false\n * @hidden\n */\n flip: boolean\n\n /**\n * @default false\n * @hidden\n */\n shift: boolean\n\n /**\n * @default true\n * @hidden\n */\n hide: boolean\n}\n\n/** @internal */\nexport const blockHandlePopoverProps: PropDeclarations<BlockHandlePopoverProps> = {\n ...overlayPositionerProps,\n editor: { default: null },\n placement: { default: 'left' },\n\n // Enabling `hoist` will cause the popover to have a small delay when\n // scrolling the page.\n hoist: { default: false },\n\n flip: { default: false },\n shift: { default: false },\n hide: { default: true },\n}\n\nexport interface BlockHandlePopoverEvents extends OverlayPositionerEvents {\n /**\n * Fired when the hovered block changes.\n */\n stateChange: CustomEvent<{ node: ProseMirrorNode; pos: number } | null>\n}\n\n/** @internal */\nexport const blockHandlePopoverEvents: EventDeclarations<BlockHandlePopoverEvents> = {\n ...overlayPositionerEvents,\n stateChange: {},\n}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useBlockHandlePopover } from \"./setup\"\nimport { blockHandlePopoverEvents, blockHandlePopoverProps, type BlockHandlePopoverEvents, type BlockHandlePopoverProps } from \"./types\"\n\nconst BlockHandlePopoverElementBase: BaseElementConstructor<BlockHandlePopoverProps> = defineCustomElement<\n BlockHandlePopoverProps,\n BlockHandlePopoverEvents\n>({\n props: blockHandlePopoverProps,\n events: blockHandlePopoverEvents,\n setup: useBlockHandlePopover,\n})\nclass BlockHandlePopoverElement extends BlockHandlePopoverElementBase {}\n\nregisterCustomElement('prosekit-block-handle-popover', BlockHandlePopoverElement)\n \nexport { BlockHandlePopoverElement }\n"],"mappings":"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"}
@@ -68,7 +68,7 @@ function getInlineDecoration(view) {
68
68
  * @internal
69
69
  */
70
70
  function useInlinePopover(host, { state, emit }) {
71
- const { editor, defaultOpen, open,...overlayState } = state;
71
+ const { editor, defaultOpen, open, ...overlayState } = state;
72
72
  const reference = useInlinePopoverReference(host, editor);
73
73
  const hasReference = createComputed(() => !!reference.get());
74
74
  useEffect(host, () => {
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-web-inline-popover.js","names":["inlinePopoverProps: PropDeclarations<InlinePopoverProps>","overlayPositionerProps","inlinePopoverEvents: EventDeclarations<InlinePopoverEvents>","overlayPositionerEvents","InlinePopoverElementBase: BaseElementConstructor<InlinePopoverProps>"],"sources":["../src/hooks/use-editor-focus-event.ts","../src/hooks/use-editor-update-event.ts","../src/hooks/use-keymap.ts","../src/components/inline-popover/inline-popover/virtual-selection-element.ts","../src/components/inline-popover/inline-popover/setup.ts","../src/components/inline-popover/inline-popover/types.ts","../src/components/inline-popover/inline-popover/element.gen.ts"],"sourcesContent":["import type {\n ConnectableElement,\n ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n defineFocusChangeHandler,\n type Editor,\n type FocusChangeHandler,\n} from '@prosekit/core'\n\nimport { useEditorExtension } from './use-editor-extension'\n\n/**\n * @internal\n */\nexport function useEditorFocusChangeEvent(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n handler: FocusChangeHandler,\n): void {\n const extension = defineFocusChangeHandler(handler)\n useEditorExtension(host, editor, extension)\n}\n","import type {\n ConnectableElement,\n ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n defineUpdateHandler,\n type Editor,\n type UpdateHandler,\n} from '@prosekit/core'\n\nimport { useEditorExtension } from './use-editor-extension'\n\n/**\n * @internal\n */\nexport function useEditorUpdateEvent(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n handler: UpdateHandler,\n): void {\n const extension = defineUpdateHandler(handler)\n useEditorExtension(host, editor, extension)\n}\n","import type {\n ConnectableElement,\n ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n defineKeymap,\n type Editor,\n type Keymap,\n} from '@prosekit/core'\n\nimport { useEditorExtension } from './use-editor-extension'\n\nexport function useKeymap(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n keymap: Keymap,\n): void {\n const extension = defineKeymap(keymap)\n useEditorExtension(host, editor, extension)\n}\n","import type { ReferenceElement } from '@floating-ui/dom'\nimport {\n containsInlineNode,\n isInCodeBlock,\n isTextSelection,\n} from '@prosekit/core'\nimport type { EditorView } from '@prosekit/pm/view'\n\nexport function getVirtualSelectionElement(\n view: EditorView,\n): ReferenceElement | undefined {\n if (typeof window === 'undefined' || view.isDestroyed) {\n return\n }\n\n const selection = view.state.selection\n\n if (\n !selection.empty\n && !isInCodeBlock(selection)\n && isTextSelection(selection)\n && containsInlineNode(view.state.doc, selection.from, selection.to)\n ) {\n return getDomDecoration(view) || getInlineDecoration(view)\n }\n}\n\nfunction getDomDecoration(view: EditorView): ReferenceElement | undefined {\n const range = getDomRange(view)\n if (range) {\n // To get it work properly in Safari, we cannot return the range directly.\n // We have to return a contextElement.\n return {\n contextElement: view.dom,\n getBoundingClientRect: () => range.getBoundingClientRect(),\n getClientRects: () => range.getClientRects(),\n }\n }\n}\n\nfunction getDomRange(view: EditorView): Range | undefined {\n const win = view.dom.ownerDocument.defaultView\n const selection = win?.getSelection()\n if (!selection || selection.isCollapsed) {\n return\n }\n\n const range = typeof selection.rangeCount === 'number'\n && selection.rangeCount > 0\n && selection.getRangeAt(0)\n\n if (!range) {\n return\n }\n\n return range\n}\n\nfunction getInlineDecoration(view: EditorView): ReferenceElement | undefined {\n const match = view.dom.querySelectorAll('.prosekit-virtual-selection')\n\n if (match.length === 0) {\n return\n }\n if (match.length === 1) {\n return match[0]\n }\n\n const items = Array.from(match)\n return {\n contextElement: items[0],\n getBoundingClientRect: () => items[0].getBoundingClientRect(),\n getClientRects: () => items.map((item) => item.getBoundingClientRect()),\n }\n}\n","import {\n createComputed,\n createSignal,\n useAttribute,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useOverlayPositionerState } from '@aria-ui/overlay/elements'\nimport { usePresence } from '@aria-ui/presence'\nimport type { ReferenceElement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nimport { useEditorFocusChangeEvent } from '../../../hooks/use-editor-focus-event'\nimport { useEditorUpdateEvent } from '../../../hooks/use-editor-update-event'\nimport { useKeymap } from '../../../hooks/use-keymap'\n\nimport type {\n InlinePopoverEvents,\n InlinePopoverProps,\n} from './types'\nimport { getVirtualSelectionElement } from './virtual-selection-element'\n\n/**\n * @internal\n */\nexport function useInlinePopover(\n host: ConnectableElement,\n { state, emit }: SetupOptions<InlinePopoverProps, InlinePopoverEvents>,\n): void {\n const { editor, defaultOpen, open, ...overlayState } = state\n\n const reference = useInlinePopoverReference(host, editor)\n const hasReference = createComputed(() => !!reference.get())\n\n useEffect(host, () => {\n const hasReferenceValue = hasReference.get()\n const defaultOpenValue = defaultOpen.peek()\n const openValue = open.peek()\n\n if (defaultOpenValue || openValue) {\n emit('openChange', hasReferenceValue)\n }\n })\n\n useEffect(host, () => {\n const hasReferenceValue = hasReference.get()\n const defaultOpenValue = defaultOpen.peek()\n\n if (hasReferenceValue && defaultOpenValue) {\n open.set(true)\n } else if (!hasReferenceValue) {\n open.set(false)\n }\n })\n\n useKeymap(host, editor, {\n Escape: () => {\n if (!state.dismissOnEscape.peek() || !open.peek()) {\n return false\n }\n open.set(false)\n emit('openChange', false)\n return true\n },\n })\n\n useOverlayPositionerState(host, overlayState, { reference })\n\n useAttribute(host, 'data-state', () => (open.get() ? 'open' : 'closed'))\n usePresence(host, open)\n}\n\nfunction useInlinePopoverReference(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n) {\n const reference = createSignal<ReferenceElement | null>(null)\n let editorFocused = false\n\n useEditorFocusChangeEvent(host, editor, (focus) => {\n editorFocused = focus\n })\n\n useEditorUpdateEvent(host, editor, (view) => {\n const isPopoverFocused = !editorFocused && host.contains(host.ownerDocument.activeElement)\n\n if (isPopoverFocused) {\n return\n }\n\n reference.set(getVirtualSelectionElement(view) || null)\n })\n\n return reference\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n overlayPositionerEvents,\n overlayPositionerProps,\n type OverlayPositionerEvents,\n type OverlayPositionerProps,\n} from '@aria-ui/overlay'\nimport type { Editor } from '@prosekit/core'\n\nexport interface InlinePopoverProps extends\n Omit<\n OverlayPositionerProps,\n 'placement' | 'offset' | 'hide' | 'overlap' | 'inline' | 'overflowPadding'\n >\n{\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * Whether the popover is open by default when some inline content is\n * selected.\n *\n * When `defaultOpen` is true, the popover will open or close based on the\n * inline selection. When `defaultOpen` is false, the popover will never be\n * opened unless the `open` prop is true.\n *\n * @default true\n */\n defaultOpen: boolean\n\n /**\n * Whether the popover is open.\n *\n * Notice that the popover will be always hidden if the inline selection is\n * empty.\n *\n * @default false\n */\n open: boolean\n\n /**\n * Whether the inline popover should be dismissed when the editor receives an\n * Escape key press.\n *\n * @default true\n */\n dismissOnEscape: boolean\n\n /**\n * @default \"top\"\n */\n placement: OverlayPositionerProps['placement']\n\n /**\n * @default 12\n */\n offset: OverlayPositionerProps['offset']\n\n /**\n * @default true\n */\n hide: OverlayPositionerProps['hide']\n\n /**\n * @default true\n */\n overlap: OverlayPositionerProps['overlap']\n\n /**\n * @default true\n */\n inline: OverlayPositionerProps['inline']\n\n /**\n * @default 8\n */\n overflowPadding: OverlayPositionerProps['overflowPadding']\n}\n\n/** @internal */\nexport const inlinePopoverProps: PropDeclarations<InlinePopoverProps> = Object.freeze({\n ...overlayPositionerProps,\n editor: { default: null },\n defaultOpen: { default: true },\n open: { default: false },\n dismissOnEscape: { default: true },\n\n placement: { default: 'top' },\n offset: { default: 12 },\n hide: { default: true },\n overlap: { default: true },\n inline: { default: true },\n overflowPadding: { default: 8 },\n})\n\nexport interface InlinePopoverEvents extends OverlayPositionerEvents {\n /**\n * Fired when the open state changes.\n */\n openChange: CustomEvent<boolean>\n}\n\n/** @internal */\nexport const inlinePopoverEvents: EventDeclarations<InlinePopoverEvents> = {\n ...overlayPositionerEvents,\n openChange: {},\n}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useInlinePopover } from \"./setup\"\nimport { inlinePopoverEvents, inlinePopoverProps, type InlinePopoverEvents, type InlinePopoverProps } from \"./types\"\n\nconst InlinePopoverElementBase: BaseElementConstructor<InlinePopoverProps> = defineCustomElement<\n InlinePopoverProps,\n InlinePopoverEvents\n>({\n props: inlinePopoverProps,\n events: inlinePopoverEvents,\n setup: useInlinePopover,\n})\nclass InlinePopoverElement extends InlinePopoverElementBase {}\n\nregisterCustomElement('prosekit-inline-popover', InlinePopoverElement)\n \nexport { InlinePopoverElement }\n"],"mappings":"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"}
1
+ {"version":3,"file":"prosekit-web-inline-popover.js","names":["inlinePopoverProps: PropDeclarations<InlinePopoverProps>","overlayPositionerProps","inlinePopoverEvents: EventDeclarations<InlinePopoverEvents>","overlayPositionerEvents","InlinePopoverElementBase: BaseElementConstructor<InlinePopoverProps>"],"sources":["../src/hooks/use-editor-focus-event.ts","../src/hooks/use-editor-update-event.ts","../src/hooks/use-keymap.ts","../src/components/inline-popover/inline-popover/virtual-selection-element.ts","../src/components/inline-popover/inline-popover/setup.ts","../src/components/inline-popover/inline-popover/types.ts","../src/components/inline-popover/inline-popover/element.gen.ts"],"sourcesContent":["import type {\n ConnectableElement,\n ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n defineFocusChangeHandler,\n type Editor,\n type FocusChangeHandler,\n} from '@prosekit/core'\n\nimport { useEditorExtension } from './use-editor-extension'\n\n/**\n * @internal\n */\nexport function useEditorFocusChangeEvent(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n handler: FocusChangeHandler,\n): void {\n const extension = defineFocusChangeHandler(handler)\n useEditorExtension(host, editor, extension)\n}\n","import type {\n ConnectableElement,\n ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n defineUpdateHandler,\n type Editor,\n type UpdateHandler,\n} from '@prosekit/core'\n\nimport { useEditorExtension } from './use-editor-extension'\n\n/**\n * @internal\n */\nexport function useEditorUpdateEvent(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n handler: UpdateHandler,\n): void {\n const extension = defineUpdateHandler(handler)\n useEditorExtension(host, editor, extension)\n}\n","import type {\n ConnectableElement,\n ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n defineKeymap,\n type Editor,\n type Keymap,\n} from '@prosekit/core'\n\nimport { useEditorExtension } from './use-editor-extension'\n\nexport function useKeymap(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n keymap: Keymap,\n): void {\n const extension = defineKeymap(keymap)\n useEditorExtension(host, editor, extension)\n}\n","import type { ReferenceElement } from '@floating-ui/dom'\nimport {\n containsInlineNode,\n isInCodeBlock,\n isTextSelection,\n} from '@prosekit/core'\nimport type { EditorView } from '@prosekit/pm/view'\n\nexport function getVirtualSelectionElement(\n view: EditorView,\n): ReferenceElement | undefined {\n if (typeof window === 'undefined' || view.isDestroyed) {\n return\n }\n\n const selection = view.state.selection\n\n if (\n !selection.empty\n && !isInCodeBlock(selection)\n && isTextSelection(selection)\n && containsInlineNode(view.state.doc, selection.from, selection.to)\n ) {\n return getDomDecoration(view) || getInlineDecoration(view)\n }\n}\n\nfunction getDomDecoration(view: EditorView): ReferenceElement | undefined {\n const range = getDomRange(view)\n if (range) {\n // To get it work properly in Safari, we cannot return the range directly.\n // We have to return a contextElement.\n return {\n contextElement: view.dom,\n getBoundingClientRect: () => range.getBoundingClientRect(),\n getClientRects: () => range.getClientRects(),\n }\n }\n}\n\nfunction getDomRange(view: EditorView): Range | undefined {\n const win = view.dom.ownerDocument.defaultView\n const selection = win?.getSelection()\n if (!selection || selection.isCollapsed) {\n return\n }\n\n const range = typeof selection.rangeCount === 'number'\n && selection.rangeCount > 0\n && selection.getRangeAt(0)\n\n if (!range) {\n return\n }\n\n return range\n}\n\nfunction getInlineDecoration(view: EditorView): ReferenceElement | undefined {\n const match = view.dom.querySelectorAll('.prosekit-virtual-selection')\n\n if (match.length === 0) {\n return\n }\n if (match.length === 1) {\n return match[0]\n }\n\n const items = Array.from(match)\n return {\n contextElement: items[0],\n getBoundingClientRect: () => items[0].getBoundingClientRect(),\n getClientRects: () => items.map((item) => item.getBoundingClientRect()),\n }\n}\n","import {\n createComputed,\n createSignal,\n useAttribute,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useOverlayPositionerState } from '@aria-ui/overlay/elements'\nimport { usePresence } from '@aria-ui/presence'\nimport type { ReferenceElement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nimport { useEditorFocusChangeEvent } from '../../../hooks/use-editor-focus-event'\nimport { useEditorUpdateEvent } from '../../../hooks/use-editor-update-event'\nimport { useKeymap } from '../../../hooks/use-keymap'\n\nimport type {\n InlinePopoverEvents,\n InlinePopoverProps,\n} from './types'\nimport { getVirtualSelectionElement } from './virtual-selection-element'\n\n/**\n * @internal\n */\nexport function useInlinePopover(\n host: ConnectableElement,\n { state, emit }: SetupOptions<InlinePopoverProps, InlinePopoverEvents>,\n): void {\n const { editor, defaultOpen, open, ...overlayState } = state\n\n const reference = useInlinePopoverReference(host, editor)\n const hasReference = createComputed(() => !!reference.get())\n\n useEffect(host, () => {\n const hasReferenceValue = hasReference.get()\n const defaultOpenValue = defaultOpen.peek()\n const openValue = open.peek()\n\n if (defaultOpenValue || openValue) {\n emit('openChange', hasReferenceValue)\n }\n })\n\n useEffect(host, () => {\n const hasReferenceValue = hasReference.get()\n const defaultOpenValue = defaultOpen.peek()\n\n if (hasReferenceValue && defaultOpenValue) {\n open.set(true)\n } else if (!hasReferenceValue) {\n open.set(false)\n }\n })\n\n useKeymap(host, editor, {\n Escape: () => {\n if (!state.dismissOnEscape.peek() || !open.peek()) {\n return false\n }\n open.set(false)\n emit('openChange', false)\n return true\n },\n })\n\n useOverlayPositionerState(host, overlayState, { reference })\n\n useAttribute(host, 'data-state', () => (open.get() ? 'open' : 'closed'))\n usePresence(host, open)\n}\n\nfunction useInlinePopoverReference(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n) {\n const reference = createSignal<ReferenceElement | null>(null)\n let editorFocused = false\n\n useEditorFocusChangeEvent(host, editor, (focus) => {\n editorFocused = focus\n })\n\n useEditorUpdateEvent(host, editor, (view) => {\n const isPopoverFocused = !editorFocused && host.contains(host.ownerDocument.activeElement)\n\n if (isPopoverFocused) {\n return\n }\n\n reference.set(getVirtualSelectionElement(view) || null)\n })\n\n return reference\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n overlayPositionerEvents,\n overlayPositionerProps,\n type OverlayPositionerEvents,\n type OverlayPositionerProps,\n} from '@aria-ui/overlay'\nimport type { Editor } from '@prosekit/core'\n\nexport interface InlinePopoverProps extends\n Omit<\n OverlayPositionerProps,\n 'placement' | 'offset' | 'hide' | 'overlap' | 'inline' | 'overflowPadding'\n >\n{\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * Whether the popover is open by default when some inline content is\n * selected.\n *\n * When `defaultOpen` is true, the popover will open or close based on the\n * inline selection. When `defaultOpen` is false, the popover will never be\n * opened unless the `open` prop is true.\n *\n * @default true\n */\n defaultOpen: boolean\n\n /**\n * Whether the popover is open.\n *\n * Notice that the popover will be always hidden if the inline selection is\n * empty.\n *\n * @default false\n */\n open: boolean\n\n /**\n * Whether the inline popover should be dismissed when the editor receives an\n * Escape key press.\n *\n * @default true\n */\n dismissOnEscape: boolean\n\n /**\n * @default \"top\"\n */\n placement: OverlayPositionerProps['placement']\n\n /**\n * @default 12\n */\n offset: OverlayPositionerProps['offset']\n\n /**\n * @default true\n */\n hide: OverlayPositionerProps['hide']\n\n /**\n * @default true\n */\n overlap: OverlayPositionerProps['overlap']\n\n /**\n * @default true\n */\n inline: OverlayPositionerProps['inline']\n\n /**\n * @default 8\n */\n overflowPadding: OverlayPositionerProps['overflowPadding']\n}\n\n/** @internal */\nexport const inlinePopoverProps: PropDeclarations<InlinePopoverProps> = Object.freeze({\n ...overlayPositionerProps,\n editor: { default: null },\n defaultOpen: { default: true },\n open: { default: false },\n dismissOnEscape: { default: true },\n\n placement: { default: 'top' },\n offset: { default: 12 },\n hide: { default: true },\n overlap: { default: true },\n inline: { default: true },\n overflowPadding: { default: 8 },\n})\n\nexport interface InlinePopoverEvents extends OverlayPositionerEvents {\n /**\n * Fired when the open state changes.\n */\n openChange: CustomEvent<boolean>\n}\n\n/** @internal */\nexport const inlinePopoverEvents: EventDeclarations<InlinePopoverEvents> = {\n ...overlayPositionerEvents,\n openChange: {},\n}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useInlinePopover } from \"./setup\"\nimport { inlinePopoverEvents, inlinePopoverProps, type InlinePopoverEvents, type InlinePopoverProps } from \"./types\"\n\nconst InlinePopoverElementBase: BaseElementConstructor<InlinePopoverProps> = defineCustomElement<\n InlinePopoverProps,\n InlinePopoverEvents\n>({\n props: inlinePopoverProps,\n events: inlinePopoverEvents,\n setup: useInlinePopover,\n})\nclass InlinePopoverElement extends InlinePopoverElementBase {}\n\nregisterCustomElement('prosekit-inline-popover', InlinePopoverElement)\n \nexport { InlinePopoverElement }\n"],"mappings":";;;;;;;;;;;AAeA,SAAgB,0BACd,MACA,QACA,SACM;AAEN,oBAAmB,MAAM,QADP,yBAAyB,QAAQ,CACR;;;;;;;;ACN7C,SAAgB,qBACd,MACA,QACA,SACM;AAEN,oBAAmB,MAAM,QADP,oBAAoB,QAAQ,CACH;;;;;ACT7C,SAAgB,UACd,MACA,QACA,QACM;AAEN,oBAAmB,MAAM,QADP,aAAa,OAAO,CACK;;;;;ACV7C,SAAgB,2BACd,MAC8B;AAC9B,KAAI,OAAO,WAAW,eAAe,KAAK,YACxC;CAGF,MAAM,YAAY,KAAK,MAAM;AAE7B,KACE,CAAC,UAAU,SACR,CAAC,cAAc,UAAU,IACzB,gBAAgB,UAAU,IAC1B,mBAAmB,KAAK,MAAM,KAAK,UAAU,MAAM,UAAU,GAAG,CAEnE,QAAO,iBAAiB,KAAK,IAAI,oBAAoB,KAAK;;AAI9D,SAAS,iBAAiB,MAAgD;CACxE,MAAM,QAAQ,YAAY,KAAK;AAC/B,KAAI,MAGF,QAAO;EACL,gBAAgB,KAAK;EACrB,6BAA6B,MAAM,uBAAuB;EAC1D,sBAAsB,MAAM,gBAAgB;EAC7C;;AAIL,SAAS,YAAY,MAAqC;CAExD,MAAM,YADM,KAAK,IAAI,cAAc,aACZ,cAAc;AACrC,KAAI,CAAC,aAAa,UAAU,YAC1B;CAGF,MAAM,QAAQ,OAAO,UAAU,eAAe,YACzC,UAAU,aAAa,KACvB,UAAU,WAAW,EAAE;AAE5B,KAAI,CAAC,MACH;AAGF,QAAO;;AAGT,SAAS,oBAAoB,MAAgD;CAC3E,MAAM,QAAQ,KAAK,IAAI,iBAAiB,8BAA8B;AAEtE,KAAI,MAAM,WAAW,EACnB;AAEF,KAAI,MAAM,WAAW,EACnB,QAAO,MAAM;CAGf,MAAM,QAAQ,MAAM,KAAK,MAAM;AAC/B,QAAO;EACL,gBAAgB,MAAM;EACtB,6BAA6B,MAAM,GAAG,uBAAuB;EAC7D,sBAAsB,MAAM,KAAK,SAAS,KAAK,uBAAuB,CAAC;EACxE;;;;;;;;AC9CH,SAAgB,iBACd,MACA,EAAE,OAAO,QACH;CACN,MAAM,EAAE,QAAQ,aAAa,MAAM,GAAG,iBAAiB;CAEvD,MAAM,YAAY,0BAA0B,MAAM,OAAO;CACzD,MAAM,eAAe,qBAAqB,CAAC,CAAC,UAAU,KAAK,CAAC;AAE5D,WAAU,YAAY;EACpB,MAAM,oBAAoB,aAAa,KAAK;EAC5C,MAAM,mBAAmB,YAAY,MAAM;EAC3C,MAAM,YAAY,KAAK,MAAM;AAE7B,MAAI,oBAAoB,UACtB,MAAK,cAAc,kBAAkB;GAEvC;AAEF,WAAU,YAAY;EACpB,MAAM,oBAAoB,aAAa,KAAK;EAC5C,MAAM,mBAAmB,YAAY,MAAM;AAE3C,MAAI,qBAAqB,iBACvB,MAAK,IAAI,KAAK;WACL,CAAC,kBACV,MAAK,IAAI,MAAM;GAEjB;AAEF,WAAU,MAAM,QAAQ,EACtB,cAAc;AACZ,MAAI,CAAC,MAAM,gBAAgB,MAAM,IAAI,CAAC,KAAK,MAAM,CAC/C,QAAO;AAET,OAAK,IAAI,MAAM;AACf,OAAK,cAAc,MAAM;AACzB,SAAO;IAEV,CAAC;AAEF,2BAA0B,MAAM,cAAc,EAAE,WAAW,CAAC;AAE5D,cAAa,MAAM,oBAAqB,KAAK,KAAK,GAAG,SAAS,SAAU;AACxE,aAAY,MAAM,KAAK;;AAGzB,SAAS,0BACP,MACA,QACA;CACA,MAAM,YAAY,aAAsC,KAAK;CAC7D,IAAI,gBAAgB;AAEpB,2BAA0B,MAAM,SAAS,UAAU;AACjD,kBAAgB;GAChB;AAEF,sBAAqB,MAAM,SAAS,SAAS;AAG3C,MAFyB,CAAC,iBAAiB,KAAK,SAAS,KAAK,cAAc,cAAc,CAGxF;AAGF,YAAU,IAAI,2BAA2B,KAAK,IAAI,KAAK;GACvD;AAEF,QAAO;;;;;;ACPT,MAAaA,qBAA2D,OAAO,OAAO;CACpF,GAAGC;CACH,QAAQ,EAAE,SAAS,MAAM;CACzB,aAAa,EAAE,SAAS,MAAM;CAC9B,MAAM,EAAE,SAAS,OAAO;CACxB,iBAAiB,EAAE,SAAS,MAAM;CAElC,WAAW,EAAE,SAAS,OAAO;CAC7B,QAAQ,EAAE,SAAS,IAAI;CACvB,MAAM,EAAE,SAAS,MAAM;CACvB,SAAS,EAAE,SAAS,MAAM;CAC1B,QAAQ,EAAE,SAAS,MAAM;CACzB,iBAAiB,EAAE,SAAS,GAAG;CAChC,CAAC;;AAUF,MAAaC,sBAA8D;CACzE,GAAGC;CACH,YAAY,EAAE;CACf;;;;AC7GD,MAAMC,2BAAuE,oBAG3E;CACA,OAAO;CACP,QAAQ;CACR,OAAO;CACR,CAAC;AACF,IAAM,uBAAN,cAAmC,yBAAyB;AAE5D,sBAAsB,2BAA2B,qBAAqB"}
@@ -44,7 +44,7 @@ const tableHandleDndContext = createContext("prosekit-table-handle-dnd-context",
44
44
  * @internal
45
45
  */
46
46
  function useTableHandleColumnRoot(host, { state }) {
47
- const { editor,...overlayState } = state;
47
+ const { editor, ...overlayState } = state;
48
48
  const rootContext = tableHandleRootContext.consume(host);
49
49
  const colFirstCellPos = createComputed(() => {
50
50
  return rootContext.get()?.colFirstCellPos;
@@ -920,7 +920,7 @@ registerCustomElement("prosekit-table-handle-root", TableHandleRootElement);
920
920
  * @internal
921
921
  */
922
922
  function useTableHandleRowRoot(host, { state }) {
923
- const { editor,...overlayState } = state;
923
+ const { editor, ...overlayState } = state;
924
924
  const rootContext = tableHandleRootContext.consume(host);
925
925
  const rowFirstCellPos = createComputed(() => {
926
926
  return rootContext.get()?.rowFirstCellPos;
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-web-table-handle.js","names":["tableHandleRootContext: Context<TableHandleRootContext>","defaultTableHandleDndContext: TableHandleDndContext","tableHandleDndContext: Context<TableHandleDndContext>","tableHandleColumnRootProps: PropDeclarations<TableHandleColumnRootProps>","overlayPositionerProps","tableHandleColumnRootEvents: EventDeclarations<TableHandleColumnRootEvents>","overlayPositionerEvents","TableHandleColumnRootElementBase: BaseElementConstructor<TableHandleColumnRootProps>","image: HTMLImageElement | undefined","tableHandleColumnTriggerProps: PropDeclarations<TableHandleColumnTriggerProps>","tableHandleColumnTriggerEvents: EventDeclarations<TableHandleColumnTriggerEvents>","TableHandleColumnTriggerElementBase: BaseElementConstructor<TableHandleColumnTriggerProps>","isColorMixSupported: () => boolean","current: HTMLElement | null","y","x","tableHandleDragPreviewProps: PropDeclarations<TableHandleDragPreviewProps>","tableHandleDragPreviewEvents: EventDeclarations<TableHandleDragPreviewEvents>","TableHandleDragPreviewElementBase: BaseElementConstructor<TableHandleDragPreviewProps>","index","direction","x","y","tableHandleDropIndicatorProps: PropDeclarations<TableHandleDropIndicatorProps>","tableHandleDropIndicatorEvents: EventDeclarations<TableHandleDropIndicatorEvents>","TableHandleDropIndicatorElementBase: BaseElementConstructor<TableHandleDropIndicatorProps>","keydownHandlers: Array<(event: KeyboardEvent) => void>","tableHandlePopoverContentProps: PropDeclarations<TableHandlePopoverContentProps>","tableHandlePopoverContentEvents: EventDeclarations<TableHandlePopoverContentEvents>","TableHandlePopoverContentElementBase: BaseElementConstructor<TableHandlePopoverContentProps>","tableHandlePopoverItemProps: PropDeclarations<TableHandlePopoverItemProps>","tableHandlePopoverItemEvents: EventDeclarations<TableHandlePopoverItemEvents>","TableHandlePopoverItemElementBase: BaseElementConstructor<TableHandlePopoverItemProps>","tableHandleRootProps: PropDeclarations<TableHandleRootProps>","tableHandleRootEvents: EventDeclarations<TableHandleRootEvents>","TableHandleRootElementBase: BaseElementConstructor<TableHandleRootProps>","tableHandleRowRootProps: PropDeclarations<TableHandleRowRootProps>","overlayPositionerProps","tableHandleRowRootEvents: EventDeclarations<TableHandleRowRootEvents>","TableHandleRowRootElementBase: BaseElementConstructor<TableHandleRowRootProps>","tableHandleRowTriggerProps: PropDeclarations<TableHandleRowTriggerProps>","tableHandleRowTriggerEvents: EventDeclarations<TableHandleRowTriggerEvents>","TableHandleRowTriggerElementBase: BaseElementConstructor<TableHandleRowTriggerProps>"],"sources":["../src/components/table-handle/context.ts","../src/components/table-handle/table-handle-column-root/setup.ts","../src/components/table-handle/table-handle-column-root/types.ts","../src/components/table-handle/table-handle-column-root/element.gen.ts","../src/components/table-handle/hooks/use-empty-image.ts","../src/components/table-handle/table-handle-column-trigger/setup.ts","../src/components/table-handle/table-handle-column-trigger/types.ts","../src/components/table-handle/table-handle-column-trigger/element.gen.ts","../src/components/table-handle/dnd.ts","../src/utils/css-feature-detection.ts","../src/utils/fade-color.ts","../src/utils/get-effective-background-color.ts","../src/components/table-handle/table-handle-drag-preview/render-preview.ts","../src/components/table-handle/table-handle-drag-preview/updater.ts","../src/components/table-handle/table-handle-drag-preview/setup.ts","../src/components/table-handle/table-handle-drag-preview/types.ts","../src/components/table-handle/table-handle-drag-preview/element.gen.ts","../src/components/table-handle/table-handle-drop-indicator/calc-drag-over.ts","../src/components/table-handle/table-handle-drop-indicator/updater.ts","../src/components/table-handle/table-handle-drop-indicator/setup.ts","../src/components/table-handle/table-handle-drop-indicator/types.ts","../src/components/table-handle/table-handle-drop-indicator/element.gen.ts","../src/components/table-handle/table-handle-popover-content/setup.ts","../src/components/table-handle/table-handle-popover-content/types.ts","../src/components/table-handle/table-handle-popover-content/element.gen.ts","../src/components/table-handle/table-handle-popover-item/setup.ts","../src/components/table-handle/table-handle-popover-item/types.ts","../src/components/table-handle/table-handle-popover-item/element.gen.ts","../src/hooks/use-editor-typing.ts","../src/hooks/use-selecting.ts","../src/components/table-handle/hooks/use-drop.ts","../src/components/table-handle/utils.ts","../src/components/table-handle/table-handle-root/setup.ts","../src/components/table-handle/table-handle-root/types.ts","../src/components/table-handle/table-handle-root/element.gen.ts","../src/components/table-handle/table-handle-row-root/setup.ts","../src/components/table-handle/table-handle-row-root/types.ts","../src/components/table-handle/table-handle-row-root/element.gen.ts","../src/components/table-handle/table-handle-row-trigger/setup.ts","../src/components/table-handle/table-handle-row-trigger/types.ts","../src/components/table-handle/table-handle-row-trigger/element.gen.ts"],"sourcesContent":["import {\n createContext,\n type Context,\n} from '@aria-ui/core'\n\nimport type {\n DndInfo,\n HoveringCellInfo,\n} from './utils'\n\n/**\n * @internal\n */\nexport type TableHandleRootContext = HoveringCellInfo | null\n\n/**\n * @internal\n */\nexport const tableHandleRootContext: Context<TableHandleRootContext> = createContext(\n 'prosekit-table-handle-root-context',\n null,\n)\n\n/**\n * @internal\n */\nexport type TableHandleDndContext = DndInfo\n\n/**\n * @internal\n */\nexport const defaultTableHandleDndContext: TableHandleDndContext = {\n dragging: false,\n direction: 'row',\n draggingIndex: -1,\n droppingIndex: -1,\n x: -1,\n y: -1,\n startX: -1,\n startY: -1,\n}\n\n/**\n * @internal\n */\nexport const tableHandleDndContext: Context<TableHandleDndContext> = createContext(\n 'prosekit-table-handle-dnd-context',\n defaultTableHandleDndContext,\n)\n","import {\n createComputed,\n createSignal,\n useAttribute,\n useEffect,\n type ConnectableElement,\n type SignalState,\n} from '@aria-ui/core'\nimport {\n menuRootProps,\n useMenuRoot,\n type MenuRootProps,\n} from '@aria-ui/menu/elements'\nimport { useOverlayPositionerState } from '@aria-ui/overlay/elements'\nimport { usePresence } from '@aria-ui/presence'\n\nimport { getStateWithDefaults } from '../../../utils/get-default-state'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport { tableHandleRootContext } from '../context'\n\nimport type { TableHandleColumnRootProps } from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleColumnRoot(\n host: ConnectableElement,\n { state }: { state: SignalState<TableHandleColumnRootProps> },\n): void {\n const { editor, ...overlayState } = state\n\n const rootContext = tableHandleRootContext.consume(host)\n\n const colFirstCellPos = createComputed<number | undefined>(() => {\n return rootContext.get()?.colFirstCellPos\n })\n\n const referenceCell = createComputed<HTMLElement | null>(() => {\n const pos = colFirstCellPos.get()\n const view = getSafeEditorView(editor.get())\n if (!pos || !view) return null\n return view.nodeDOM(pos) as HTMLElement | null\n })\n\n const contentOpen = createSignal(false)\n\n // Close the menu when the hovering element is changed\n // TODO: add a delay\n useEffect(host, () => {\n colFirstCellPos.get()\n contentOpen.set(false)\n })\n\n useOverlayPositionerState(host, overlayState, {\n reference: referenceCell,\n })\n\n const presence = createComputed(() => !!referenceCell.get())\n useAttribute(host, 'data-state', () => (presence.get() ? 'open' : 'closed'))\n usePresence(host, presence)\n\n const menuRootState: SignalState<MenuRootProps> = getStateWithDefaults(\n { open: contentOpen },\n menuRootProps,\n )\n\n useMenuRoot(host, {\n state: menuRootState,\n emit: () => void 0,\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n overlayPositionerEvents,\n overlayPositionerProps,\n type OverlayPositionerEvents,\n type OverlayPositionerProps,\n} from '@aria-ui/overlay'\nimport type { Placement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandleColumnRootProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The placement of the popover, relative to the hovered table cell.\n *\n * @default \"top\"\n */\n placement: Placement\n\n /**\n * Whether to use the browser [Popover API](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API)\n * to place the floating element on top of other page content.\n *\n * @default false\n */\n hoist: boolean\n\n /**\n * @default false\n * @hidden\n */\n flip: boolean\n\n /**\n * @default false\n * @hidden\n */\n shift: boolean\n\n /**\n * @default true\n * @hidden\n */\n hide: boolean\n}\n\n/** @internal */\nexport const tableHandleColumnRootProps: PropDeclarations<TableHandleColumnRootProps> = Object.freeze({\n ...overlayPositionerProps,\n editor: { default: null },\n placement: { default: 'top' },\n\n // Enabling `hoist` will cause the popover to have a small delay when\n // scrolling the page.\n hoist: { default: false },\n\n flip: { default: false },\n shift: { default: false },\n hide: { default: true },\n})\n\n/** @internal */\nexport interface TableHandleColumnRootEvents extends OverlayPositionerEvents {}\n\n/** @internal */\nexport const tableHandleColumnRootEvents: EventDeclarations<TableHandleColumnRootEvents> = overlayPositionerEvents\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleColumnRoot } from \"./setup\"\nimport { tableHandleColumnRootEvents, tableHandleColumnRootProps, type TableHandleColumnRootEvents, type TableHandleColumnRootProps } from \"./types\"\n\nconst TableHandleColumnRootElementBase: BaseElementConstructor<TableHandleColumnRootProps> = defineCustomElement<\n TableHandleColumnRootProps,\n TableHandleColumnRootEvents\n>({\n props: tableHandleColumnRootProps,\n events: tableHandleColumnRootEvents,\n setup: useTableHandleColumnRoot,\n})\nclass TableHandleColumnRootElement extends TableHandleColumnRootElementBase {}\n\nregisterCustomElement('prosekit-table-handle-column-root', TableHandleColumnRootElement)\n \nexport { TableHandleColumnRootElement }\n","import type { ConnectableElement } from '@aria-ui/core'\nimport { useEffect } from '@aria-ui/core'\n\n/**\n * Returns a function that returns a 1x1 transparent image. This is used to\n * prevent the browser from showing the default drag image. An earth icon in\n * chrome is used as the default drag image. This image must be loaded before\n * the dragStart event triggers.\n *\n * See https://stackoverflow.com/a/40923520\n *\n * @internal\n */\nexport function useEmptyImage(\n host: ConnectableElement,\n): () => HTMLImageElement | undefined {\n let image: HTMLImageElement | undefined\n\n useEffect(host, () => {\n image = new Image(1, 1)\n image.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n\n return () => {\n image?.remove()\n image = undefined\n }\n })\n\n return () => image\n}\n","import {\n useEffect,\n useEventListener,\n type ConnectableElement,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useMenuTrigger } from '@aria-ui/menu/elements'\nimport { selectTableColumn } from '@prosekit/extensions/table'\n\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from '../context'\nimport { useEmptyImage } from '../hooks/use-empty-image'\n\nimport type {\n TableHandleColumnTriggerEvents,\n TableHandleColumnTriggerProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleColumnTrigger(\n host: ConnectableElement,\n { state }: SetupOptions<TableHandleColumnTriggerProps, TableHandleColumnTriggerEvents>,\n): void {\n useMenuTrigger(host)\n\n const context = tableHandleRootContext.consume(host)\n\n const dndContext = tableHandleDndContext.consume(host)\n\n useEventListener(host, 'pointerdown', () => {\n const editor = state.editor.peek()\n const cellPos = context.peek()?.cellPos\n if (!editor || !cellPos) return\n editor.exec(selectTableColumn({ head: cellPos }))\n })\n\n useEffect(host, () => {\n host.draggable = true\n })\n\n const getEmptyImage = useEmptyImage(host)\n\n useEventListener(host, 'dragstart', (event: DragEvent) => {\n const dataTransfer = event.dataTransfer\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move'\n const emptyImage = getEmptyImage()\n if (emptyImage) {\n dataTransfer.setDragImage(emptyImage, 0, 0)\n }\n dataTransfer.setData('application/x-prosekit-table-handle-drag', '')\n }\n const prev = dndContext.peek()\n const index = context.peek()?.colIndex\n\n if (index == null || index < 0) {\n console.warn('[prosekit] Invalid column index for drag operation:', index)\n event.preventDefault()\n return\n }\n\n dndContext.set({\n ...prev,\n direction: 'col',\n dragging: true,\n draggingIndex: index,\n startX: event.clientX,\n startY: event.clientY,\n })\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\nimport type { defineTableCommands } from '@prosekit/extensions/table'\n\ntype TableCommandsExtension = ReturnType<typeof defineTableCommands>\n\nexport interface TableHandleColumnTriggerProps {\n editor: Editor<TableCommandsExtension> | null\n}\n\n/** @internal */\nexport const tableHandleColumnTriggerProps: PropDeclarations<TableHandleColumnTriggerProps> = {\n editor: { default: null },\n}\n\n/** @internal */\nexport interface TableHandleColumnTriggerEvents {}\n\n/** @internal */\nexport const tableHandleColumnTriggerEvents: EventDeclarations<TableHandleColumnTriggerEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleColumnTrigger } from \"./setup\"\nimport { tableHandleColumnTriggerEvents, tableHandleColumnTriggerProps, type TableHandleColumnTriggerEvents, type TableHandleColumnTriggerProps } from \"./types\"\n\nconst TableHandleColumnTriggerElementBase: BaseElementConstructor<TableHandleColumnTriggerProps> = defineCustomElement<\n TableHandleColumnTriggerProps,\n TableHandleColumnTriggerEvents\n>({\n props: tableHandleColumnTriggerProps,\n events: tableHandleColumnTriggerEvents,\n setup: useTableHandleColumnTrigger,\n})\nclass TableHandleColumnTriggerElement extends TableHandleColumnTriggerElementBase {}\n\nregisterCustomElement('prosekit-table-handle-column-trigger', TableHandleColumnTriggerElement)\n \nexport { TableHandleColumnTriggerElement }\n","import {\n createComputed,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n computePosition,\n offset,\n} from '@floating-ui/dom'\nimport { isHTMLElement } from '@ocavue/utils'\nimport type { Editor } from '@prosekit/core'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { assignStyles } from '../../utils/assign-styles'\nimport { getSafeEditorView } from '../../utils/get-safe-editor-view'\n\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from './context'\n\nexport type OnInitParams = {\n host: ConnectableElement\n direction: 'row' | 'col'\n dragging: boolean\n draggingIndex: number\n table: HTMLTableElement\n cell: HTMLTableCellElement\n}\n\nexport function useInitDndPosition(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n onInit: (params: OnInitParams) => void,\n): void {\n const dndContext = tableHandleDndContext.consume(host)\n const rootContext = tableHandleRootContext.consume(host)\n\n const draggingSignal = createComputed(() => {\n const context = dndContext.get()\n return context.dragging\n })\n\n const directionSignal = createComputed(() => {\n const context = dndContext.get()\n return context.direction\n })\n\n const draggingIndexSignal = createComputed(() => {\n const context = dndContext.get()\n return context.draggingIndex\n })\n\n useEffect(host, () => {\n const view = getSafeEditorView(editor.get())\n if (!view) return\n\n const dragging = draggingSignal.get()\n const direction = directionSignal.get()\n\n host.dataset.direction = direction\n host.dataset.dragging = dragging.toString()\n\n const draggingIndex = draggingIndexSignal.get()\n\n const relatedDOMs = getDndRelatedDOMs(view, rootContext.peek()?.cellPos, draggingIndex, direction)\n if (!relatedDOMs) return\n const { table, cell } = relatedDOMs\n\n onInit({\n host,\n direction,\n dragging,\n draggingIndex,\n table,\n cell,\n })\n\n if (!dragging) return\n\n let cancelled = false\n\n void computePosition(cell, host, {\n placement: direction === 'row' ? 'right' : 'bottom',\n middleware: [\n offset(({ rects }) => {\n if (direction === 'col') {\n return -rects.reference.height\n }\n return -rects.reference.width\n }),\n ],\n }).then(({ x, y }) => {\n if (cancelled) return\n assignStyles(host, {\n left: `${x}px`,\n top: `${y}px`,\n })\n })\n\n return () => {\n cancelled = true\n }\n })\n}\n\nfunction getTableDOMByPos(view: EditorView, pos: number): HTMLTableElement | undefined {\n const dom = view.domAtPos(pos).node\n if (!dom) return\n const element = isHTMLElement(dom) ? dom : dom.parentElement\n const table = element?.closest('table')\n return table ?? undefined\n}\n\nfunction getTargetFirstCellDOM(table: HTMLTableElement, index: number, direction: 'row' | 'col'): HTMLTableCellElement | undefined {\n if (direction === 'row') {\n const row = table.querySelectorAll('tr')[index]\n const cell = row?.querySelector('td')\n return cell ?? undefined\n } else {\n const row = table.querySelector('tr')\n const cell = row?.querySelectorAll('td')[index]\n return cell ?? undefined\n }\n}\n\nexport function getDndRelatedDOMs(view: EditorView, cellPos: number | undefined, draggingIndex: number, direction: 'row' | 'col'): { table: HTMLTableElement; cell: HTMLTableCellElement } | undefined {\n if (cellPos == null) return\n const table = getTableDOMByPos(view, cellPos)\n if (!table) return\n const cell = getTargetFirstCellDOM(table, draggingIndex, direction)\n if (!cell) return\n return { table, cell }\n}\n","import { once } from '@ocavue/utils'\n\nexport const isColorMixSupported: () => boolean = once(() => {\n try {\n return CSS.supports('background-color', 'color-mix(in srgb, red, blue)')\n } catch {\n return false\n }\n})\n","import { isColorMixSupported } from './css-feature-detection'\n\n/**\n * Convert a color to a color with opacity\n * @param color - The color to convert\n * @param opacity - The opacity to apply\n * @returns The converted color if color-mix is supported, otherwise undefined\n */\nexport function fadeColor(color: CSSStyleValue, opacity: number): string | undefined {\n if (isColorMixSupported()) {\n const transparentWeight = (1 - opacity) * 100\n const colorWeight = opacity * 100\n return `color-mix(in srgb, ${color} ${colorWeight}%, transparent ${transparentWeight}%)`\n }\n}\n","export function getEffectiveBackgroundColor(element: HTMLElement): string | undefined {\n let current: HTMLElement | null = element\n\n while (current) {\n const style = current.ownerDocument.defaultView?.getComputedStyle(current)\n const backgroundColor = style?.backgroundColor\n\n if (\n backgroundColor\n && backgroundColor !== 'transparent'\n // Chrome returns `rgba(0, 0, 0, 0)` for transparent colors.\n && backgroundColor !== 'rgba(0, 0, 0, 0)'\n ) {\n return backgroundColor\n }\n\n current = current.parentElement\n }\n\n return undefined\n}\n","import { assignStyles } from '../../../utils/assign-styles'\nimport {\n cloneElement,\n deepCloneElement,\n} from '../../../utils/clone-element'\nimport { fadeColor } from '../../../utils/fade-color'\nimport { getEffectiveBackgroundColor } from '../../../utils/get-effective-background-color'\nimport { injectStyle } from '../../../utils/inject-style'\n\nexport function clearPreviewDOM(previewRoot: HTMLElement): void {\n while (previewRoot.firstChild) {\n previewRoot.removeChild(previewRoot.firstChild)\n }\n}\n\nexport function createPreviewDOM(\n table: HTMLTableElement,\n previewRoot: HTMLElement,\n index: number,\n direction: 'row' | 'col',\n): void {\n clearPreviewDOM(previewRoot)\n\n const [previewTable, previewTableStyle] = cloneElement(table)\n injectStyle(previewRoot, previewTableStyle)\n unsetSize(previewTable)\n\n const tableBody = table.querySelector('tbody')\n const [previewTableBody, previewTableBodyStyle] = tableBody\n ? cloneElement(tableBody)\n : [table.ownerDocument.createElement('tbody'), '']\n injectStyle(previewRoot, previewTableBodyStyle)\n unsetSize(previewTableBody)\n\n // Get effective background color and apply it with some opacity\n const backgroundColor = getEffectiveBackgroundColor(table)\n if (backgroundColor) {\n const backgroundColorWithOpacity = fadeColor(backgroundColor, 0.8)\n if (backgroundColorWithOpacity) {\n assignStyles(previewTable, { backgroundColor: backgroundColorWithOpacity })\n }\n }\n\n previewTable.appendChild(previewTableBody)\n previewRoot.appendChild(previewTable)\n\n const rows = table.querySelectorAll('tr')\n\n if (direction === 'row') {\n const row = rows[index]\n const [previewRow, previewRowStyle] = deepCloneElement(row)\n injectStyle(previewRoot, previewRowStyle)\n previewTableBody.appendChild(previewRow)\n } else {\n rows.forEach((row) => {\n const [previewRow, previewRowStyle] = cloneElement(row)\n injectStyle(previewRoot, previewRowStyle)\n unsetSize(previewRow)\n const cells = row.querySelectorAll('td')\n const cell = cells[index]\n if (cell) {\n const [previewCell, previewCellStyle] = deepCloneElement(cell)\n injectStyle(previewRoot, previewCellStyle)\n previewRow.appendChild(previewCell)\n previewTableBody.appendChild(previewRow)\n }\n })\n }\n}\n\nfunction unsetSize(element: HTMLElement) {\n assignStyles(element, {\n width: 'unset',\n height: 'unset',\n minWidth: 'unset',\n minHeight: 'unset',\n maxWidth: 'unset',\n maxHeight: 'unset',\n })\n}\n","import {\n createComputed,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n computePosition,\n type ReferenceElement,\n} from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nimport { assignStyles } from '../../../utils/assign-styles'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from '../context'\nimport { getDndRelatedDOMs } from '../dnd'\n\nexport function useUpdatePreviewPosition(host: ConnectableElement, editor: ReadonlySignal<Editor | null>): void {\n const dndContext = tableHandleDndContext.consume(host)\n const rootContext = tableHandleRootContext.consume(host)\n\n const draggingSignal = createComputed(() => {\n const context = dndContext.get()\n return context.dragging\n })\n\n const clientXSignal = createComputed(() => {\n const context = dndContext.get()\n return context.x\n })\n\n const clientYSignal = createComputed(() => {\n const context = dndContext.get()\n return context.y\n })\n\n useEffect(host, () => {\n const view = getSafeEditorView(editor.get())\n if (!view) return\n\n if (!draggingSignal.get()) return\n\n const { draggingIndex, direction } = dndContext.peek()\n const x = clientXSignal.get()\n const y = clientYSignal.get()\n\n const relatedDOMs = getDndRelatedDOMs(view, rootContext.peek()?.cellPos, draggingIndex, direction)\n if (!relatedDOMs) return\n const { cell } = relatedDOMs\n\n let cancelled = false\n\n void computePosition(\n getVirtualElement(cell, x, y),\n host,\n { placement: direction === 'row' ? 'right' : 'bottom' },\n ).then(({ x, y }) => {\n if (cancelled) return\n\n if (direction === 'row') {\n assignStyles(host, {\n top: `${y}px`,\n })\n return\n }\n\n if (direction === 'col') {\n assignStyles(host, {\n left: `${x}px`,\n })\n return\n }\n })\n\n return () => {\n cancelled = true\n }\n })\n}\n\nfunction getVirtualElement(cell: HTMLTableCellElement, x: number, y: number): ReferenceElement {\n return {\n contextElement: cell,\n getBoundingClientRect: () => {\n const rect = cell.getBoundingClientRect()\n return {\n width: rect.width,\n height: rect.height,\n right: x + rect.width / 2,\n bottom: y + rect.height / 2,\n top: y - rect.height / 2,\n left: x - rect.width / 2,\n x: x - rect.width / 2,\n y: y - rect.height / 2,\n }\n },\n }\n}\n","import {\n useEffect,\n type ConnectableElement,\n type SignalState,\n} from '@aria-ui/core'\n\nimport { assignStyles } from '../../../utils/assign-styles'\nimport {\n useInitDndPosition,\n type OnInitParams,\n} from '../dnd'\n\nimport {\n clearPreviewDOM,\n createPreviewDOM,\n} from './render-preview'\nimport type { TableHandleDragPreviewProps } from './types'\nimport { useUpdatePreviewPosition } from './updater'\n\n/**\n * @internal\n */\nexport function useTableHandleDragPreview(host: ConnectableElement, { state }: { state: SignalState<TableHandleDragPreviewProps> }): void {\n const { editor } = state\n\n useEffect(host, () => {\n assignStyles(host, {\n position: 'absolute',\n // Make sure drop on preview will trigger drop event on the host\n pointerEvents: 'none',\n })\n })\n\n useInitDndPosition(host, editor, onInitPreviewPosition)\n\n useUpdatePreviewPosition(host, editor)\n}\n\nfunction onInitPreviewPosition({ host, direction, dragging, table, cell, draggingIndex }: OnInitParams): void {\n assignStyles(host, {\n display: dragging ? 'block' : 'none',\n })\n\n if (!dragging) {\n clearPreviewDOM(host)\n return\n }\n\n createPreviewDOM(table, host, draggingIndex, direction)\n\n const tableRect = table.getBoundingClientRect()\n const cellRect = cell.getBoundingClientRect()\n\n if (direction === 'col') {\n assignStyles(host, {\n width: `${cellRect.width}px`,\n height: `${tableRect.height}px`,\n })\n }\n\n if (direction === 'row') {\n assignStyles(host, {\n width: `${tableRect.width}px`,\n height: `${cellRect.height}px`,\n })\n }\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandleDragPreviewProps {\n editor: Editor | null\n}\n\nexport const tableHandleDragPreviewProps: PropDeclarations<TableHandleDragPreviewProps> = {\n editor: { default: null },\n}\n\nexport interface TableHandleDragPreviewEvents {}\n\nexport const tableHandleDragPreviewEvents: EventDeclarations<TableHandleDragPreviewEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleDragPreview } from \"./setup\"\nimport { tableHandleDragPreviewEvents, tableHandleDragPreviewProps, type TableHandleDragPreviewEvents, type TableHandleDragPreviewProps } from \"./types\"\n\nconst TableHandleDragPreviewElementBase: BaseElementConstructor<TableHandleDragPreviewProps> = defineCustomElement<\n TableHandleDragPreviewProps,\n TableHandleDragPreviewEvents\n>({\n props: tableHandleDragPreviewProps,\n events: tableHandleDragPreviewEvents,\n setup: useTableHandleDragPreview,\n})\nclass TableHandleDragPreviewElement extends TableHandleDragPreviewElementBase {}\n\nregisterCustomElement('prosekit-table-handle-drag-preview', TableHandleDragPreviewElement)\n \nexport { TableHandleDragPreviewElement }\n","function findDragOverElement(\n elements: Element[],\n pointer: number,\n axis: 'x' | 'y',\n): [Element, number] | undefined {\n const startProp = axis === 'x' ? 'left' : 'top'\n const endProp = axis === 'x' ? 'right' : 'bottom'\n const lastIndex = elements.length - 1\n\n const index = elements.findIndex((el, index) => {\n const rect = el.getBoundingClientRect()\n const boundaryStart = rect[startProp]\n const boundaryEnd = rect[endProp]\n\n // The pointer is within the boundary of the current element.\n if (boundaryStart <= pointer && pointer <= boundaryEnd) return true\n // The pointer is beyond the last element.\n if (index === lastIndex && pointer > boundaryEnd) return true\n // The pointer is before the first element.\n if (index === 0 && pointer < boundaryStart) return true\n\n return false\n })\n\n return index >= 0 ? [elements[index], index] : undefined\n}\n\nexport function getDragOverColumn(\n table: HTMLTableElement,\n pointerX: number,\n): [element: Element, index: number] | undefined {\n const firstRow = table.querySelector('tr')\n if (!firstRow) return\n const cells = Array.from(firstRow.children)\n return findDragOverElement(cells, pointerX, 'x')\n}\n\nexport function getDragOverRow(\n table: HTMLTableElement,\n pointerY: number,\n): [element: Element, index: number] | undefined {\n const rows = Array.from(table.querySelectorAll('tr'))\n return findDragOverElement(rows, pointerY, 'y')\n}\n","import {\n createComputed,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n computePosition,\n offset,\n} from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nimport { assignStyles } from '../../../utils/assign-styles'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from '../context'\nimport { getDndRelatedDOMs } from '../dnd'\n\nimport {\n getDragOverColumn,\n getDragOverRow,\n} from './calc-drag-over'\n\nexport function useUpdateIndicatorPosition(host: ConnectableElement, editor: ReadonlySignal<Editor | null>, handleWidth: number): void {\n const dndContext = tableHandleDndContext.consume(host)\n const rootContext = tableHandleRootContext.consume(host)\n\n const draggingSignal = createComputed(() => {\n const context = dndContext.get()\n return context.dragging\n })\n\n const clientXSignal = createComputed(() => {\n const context = dndContext.get()\n return context.x\n })\n\n const clientYSignal = createComputed(() => {\n const context = dndContext.get()\n return context.y\n })\n\n const startXSignal = createComputed(() => {\n return dndContext.get().startX\n })\n\n const startYSignal = createComputed(() => {\n return dndContext.get().startY\n })\n\n useEffect(host, () => {\n const view = getSafeEditorView(editor.get())\n if (!view) return\n\n if (!draggingSignal.get()) return\n\n const { draggingIndex, direction } = dndContext.peek()\n const x = clientXSignal.get()\n const y = clientYSignal.get()\n\n const relatedDOMs = getDndRelatedDOMs(view, rootContext.peek()?.cellPos, draggingIndex, direction)\n if (!relatedDOMs) return\n const { table } = relatedDOMs\n\n let cancelled = false\n let cleanup = () => {\n cancelled = true\n }\n\n if (direction === 'col') {\n const direction = startXSignal.get() > x ? 'left' : 'right'\n const dragOverColumn = getDragOverColumn(table, x)\n\n if (dragOverColumn) {\n const [col, index] = dragOverColumn\n dndContext.set({ ...dndContext.peek(), droppingIndex: index })\n void computePosition(col, host, {\n placement: direction === 'left' ? 'left' : 'right',\n middleware: [offset(direction === 'left' ? -1 * handleWidth : 0)],\n }).then(({ x }) => {\n if (cancelled) return\n assignStyles(host, { left: `${x}px` })\n })\n }\n\n return cleanup\n }\n\n if (direction === 'row') {\n const direction = startYSignal.get() > y ? 'up' : 'down'\n const dragOverRow = getDragOverRow(table, y)\n\n if (dragOverRow) {\n const [row, index] = dragOverRow\n dndContext.set({ ...dndContext.peek(), droppingIndex: index })\n void computePosition(row, host, {\n placement: direction === 'up' ? 'top' : 'bottom',\n middleware: [offset(direction === 'up' ? -1 * handleWidth : 0)],\n }).then(({ y }) => {\n if (cancelled) return\n assignStyles(host, { top: `${y}px` })\n })\n }\n\n return cleanup\n }\n })\n}\n","import {\n useEffect,\n type ConnectableElement,\n type SignalState,\n} from '@aria-ui/core'\n\nimport { assignStyles } from '../../../utils/assign-styles'\nimport {\n useInitDndPosition,\n type OnInitParams,\n} from '../dnd'\n\nimport type { TableHandleDropIndicatorProps } from './types'\nimport { useUpdateIndicatorPosition } from './updater'\n\nconst HANDLE_WIDTH = 2\n\n/**\n * @internal\n */\nexport function useTableHandleDropIndicator(host: ConnectableElement, { state }: { state: SignalState<TableHandleDropIndicatorProps> }): void {\n const { editor } = state\n\n useEffect(host, () => {\n assignStyles(host, {\n pointerEvents: 'none',\n position: 'absolute',\n })\n })\n\n useInitDndPosition(host, editor, onInitIndicatorPosition)\n\n useUpdateIndicatorPosition(host, editor, HANDLE_WIDTH)\n}\n\nfunction onInitIndicatorPosition({ host, direction, dragging, table }: OnInitParams): void {\n assignStyles(host, {\n display: dragging ? 'block' : 'none',\n })\n\n const tableRect = table.getBoundingClientRect()\n\n if (direction === 'col') {\n assignStyles(host, {\n width: `${HANDLE_WIDTH}px`,\n height: `${tableRect.height}px`,\n })\n }\n\n if (direction === 'row') {\n assignStyles(host, {\n width: `${tableRect.width}px`,\n height: `${HANDLE_WIDTH}px`,\n })\n }\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\nimport type { TableCommandsExtension } from '@prosekit/extensions/table'\n\nexport interface TableHandleDropIndicatorProps {\n editor: Editor<TableCommandsExtension> | null\n}\n\nexport const tableHandleDropIndicatorProps: PropDeclarations<TableHandleDropIndicatorProps> = {\n editor: { default: null },\n}\n\nexport interface TableHandleDropIndicatorEvents {}\n\nexport const tableHandleDropIndicatorEvents: EventDeclarations<TableHandleDropIndicatorEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleDropIndicator } from \"./setup\"\nimport { tableHandleDropIndicatorEvents, tableHandleDropIndicatorProps, type TableHandleDropIndicatorEvents, type TableHandleDropIndicatorProps } from \"./types\"\n\nconst TableHandleDropIndicatorElementBase: BaseElementConstructor<TableHandleDropIndicatorProps> = defineCustomElement<\n TableHandleDropIndicatorProps,\n TableHandleDropIndicatorEvents\n>({\n props: tableHandleDropIndicatorProps,\n events: tableHandleDropIndicatorEvents,\n setup: useTableHandleDropIndicator,\n})\nclass TableHandleDropIndicatorElement extends TableHandleDropIndicatorElementBase {}\n\nregisterCustomElement('prosekit-table-handle-drop-indicator', TableHandleDropIndicatorElement)\n \nexport { TableHandleDropIndicatorElement }\n","import {\n createComputed,\n createSignal,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type SetupOptions,\n type SignalState,\n type TypedEventTarget,\n} from '@aria-ui/core'\nimport {\n menuContentProps,\n useMenuContent,\n type MenuContentProps,\n} from '@aria-ui/menu/elements'\n\nimport { getStateWithDefaults } from '../../../utils/get-default-state'\nimport { tableHandleRootContext } from '../context'\n\nimport type {\n TableHandlePopoverContentEvents,\n TableHandlePopoverContentProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandlePopoverContent(\n host: ConnectableElement,\n {\n state,\n emit,\n }: SetupOptions<\n TableHandlePopoverContentProps,\n TableHandlePopoverContentEvents\n >,\n): void {\n const rootContext = tableHandleRootContext.consume(host)\n const open = createComputed(() => !!rootContext.get())\n const keyDownTarget = useKeyDownTarget(host, open)\n\n const menuContentState: SignalState<MenuContentProps> = getStateWithDefaults(\n {\n placement: state.placement,\n offset: state.offset,\n eventTarget: createSignal(keyDownTarget),\n },\n menuContentProps,\n )\n\n useMenuContent(host, { state: menuContentState, emit })\n}\n\nfunction useKeyDownTarget(\n element: ConnectableElement,\n open: ReadonlySignal<boolean>,\n): TypedEventTarget<'keydown'> {\n const keydownHandlers: Array<(event: KeyboardEvent) => void> = []\n\n useEffect(element, () => {\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.isComposing || event.defaultPrevented || !open.get()) {\n return false\n }\n keydownHandlers.forEach((handler) => handler(event))\n }\n\n document.addEventListener('keydown', handleKeydown)\n\n return () => {\n document.removeEventListener('keydown', handleKeydown)\n }\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 {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n menuContentEvents,\n menuContentProps,\n type MenuContentEvents,\n type MenuContentProps,\n} from '@aria-ui/menu/elements'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandlePopoverContentProps extends Omit<MenuContentProps, 'placement' | 'offset'> {\n /**\n * @default 'bottom-start'\n */\n placement: MenuContentProps['placement']\n\n /**\n * @default {mainAxis: -4, crossAxis: 4}\n */\n offset: MenuContentProps['offset']\n\n editor: Editor | null\n}\n\n/** @internal */\nexport const tableHandlePopoverContentProps: PropDeclarations<TableHandlePopoverContentProps> = Object.freeze({\n ...menuContentProps,\n placement: { default: 'right-start' },\n offset: { default: { mainAxis: -4, crossAxis: 4 } },\n editor: { default: null },\n})\n\nexport interface TableHandlePopoverContentEvents extends MenuContentEvents {}\n\n/** @internal */\nexport const tableHandlePopoverContentEvents: EventDeclarations<TableHandlePopoverContentEvents> = Object.freeze({\n ...menuContentEvents,\n})\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandlePopoverContent } from \"./setup\"\nimport { tableHandlePopoverContentEvents, tableHandlePopoverContentProps, type TableHandlePopoverContentEvents, type TableHandlePopoverContentProps } from \"./types\"\n\nconst TableHandlePopoverContentElementBase: BaseElementConstructor<TableHandlePopoverContentProps> = defineCustomElement<\n TableHandlePopoverContentProps,\n TableHandlePopoverContentEvents\n>({\n props: tableHandlePopoverContentProps,\n events: tableHandlePopoverContentEvents,\n setup: useTableHandlePopoverContent,\n})\nclass TableHandlePopoverContentElement extends TableHandlePopoverContentElementBase {}\n\nregisterCustomElement('prosekit-table-handle-popover-content', TableHandlePopoverContentElement)\n \nexport { TableHandlePopoverContentElement }\n","import type {\n ConnectableElement,\n SetupOptions,\n} from '@aria-ui/core'\nimport { useMenuItem } from '@aria-ui/menu/elements'\n\nimport type {\n TableHandlePopoverItemEvents,\n TableHandlePopoverItemProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandlePopoverItem(\n element: ConnectableElement,\n {\n state,\n emit,\n }: SetupOptions<TableHandlePopoverItemProps, TableHandlePopoverItemEvents>,\n): void {\n useMenuItem(element, { state, emit })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n menuItemEvents,\n menuItemProps,\n type MenuItemEvents,\n type MenuItemProps,\n} from '@aria-ui/menu'\n\nexport interface TableHandlePopoverItemProps extends MenuItemProps {}\n\n/** @internal */\nexport const tableHandlePopoverItemProps: PropDeclarations<TableHandlePopoverItemProps> = {\n ...menuItemProps,\n}\n\nexport interface TableHandlePopoverItemEvents extends MenuItemEvents {}\n\n/** @internal */\nexport const tableHandlePopoverItemEvents: EventDeclarations<TableHandlePopoverItemEvents> = {\n ...menuItemEvents,\n}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandlePopoverItem } from \"./setup\"\nimport { tableHandlePopoverItemEvents, tableHandlePopoverItemProps, type TableHandlePopoverItemEvents, type TableHandlePopoverItemProps } from \"./types\"\n\nconst TableHandlePopoverItemElementBase: BaseElementConstructor<TableHandlePopoverItemProps> = defineCustomElement<\n TableHandlePopoverItemProps,\n TableHandlePopoverItemEvents\n>({\n props: tableHandlePopoverItemProps,\n events: tableHandlePopoverItemEvents,\n setup: useTableHandlePopoverItem,\n})\nclass TableHandlePopoverItemElement extends TableHandlePopoverItemElementBase {}\n\nregisterCustomElement('prosekit-table-handle-popover-item', TableHandlePopoverItemElement)\n \nexport { TableHandlePopoverItemElement }\n","import {\n createSignal,\n type ConnectableElement,\n type ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n defineDOMEventHandler,\n union,\n type Editor,\n} from '@prosekit/core'\n\nimport { useEditorExtension } from './use-editor-extension'\n\nexport function useEditorTyping(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n): ReadonlySignal<boolean> {\n const typing = createSignal(false)\n\n const handleKeypress = () => {\n typing.set(true)\n }\n\n const handlePointerMove = () => {\n typing.set(false)\n }\n\n const extension = union(\n defineDOMEventHandler('keypress', handleKeypress),\n defineDOMEventHandler('pointermove', handlePointerMove),\n )\n\n useEditorExtension(host, editor, extension)\n\n return typing\n}\n","import type { ReadonlySignal } from '@aria-ui/core'\nimport {\n createSignal,\n useEffect,\n type ConnectableElement,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nimport { getSafeEditorView } from '../utils/get-safe-editor-view'\n\n/**\n * Detect if the user is selecting text inside the editor, in which case some\n * components should be disabled or hidden.\n */\nexport function useSelecting(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n enabled: ReadonlySignal<boolean>,\n): ReadonlySignal<boolean> {\n const selecting = createSignal(false)\n const isPointerDown = createSignal(false)\n\n useEffect(host, () => {\n if (!enabled.get()) {\n return\n }\n\n const view = getSafeEditorView(editor.peek())\n if (!view) return\n\n const { dom, root } = view\n if (!root) return\n\n // When the user starts selecting text, we set the selecting signal to true.\n const handlePointerDown = () => {\n selecting.set(true)\n isPointerDown.set(true)\n }\n const handlePointerUp = () => {\n isPointerDown.set(false)\n }\n // When the user moves the pointer and the pointer is not down, we set the\n // selecting signal to false again.\n const handleMouseMove = () => {\n if (!isPointerDown.get()) {\n selecting.set(false)\n }\n }\n\n // Only listen to pointer down events on the editor\n dom.addEventListener('pointerdown', handlePointerDown)\n root.addEventListener('pointerup', handlePointerUp)\n root.addEventListener('pointermove', handleMouseMove)\n\n return () => {\n dom.removeEventListener('pointerdown', handlePointerDown)\n root.removeEventListener('pointerup', handlePointerUp)\n root.removeEventListener('pointermove', handleMouseMove)\n }\n })\n\n return selecting\n}\n","import {\n createComputed,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type Signal,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\nimport {\n moveTableColumn,\n moveTableRow,\n} from '@prosekit/extensions/table'\n\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport type { TableHandleDndContext } from '../context'\n\nexport function useDrop(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n dndContext: Signal<TableHandleDndContext>,\n): void {\n const dragging = createComputed(() => dndContext.get().dragging)\n\n useEffect(host, () => {\n const view = getSafeEditorView(editor.get())\n if (!view || !view.editable) return\n\n const ownerDocument = view.dom?.ownerDocument\n if (!ownerDocument) return\n\n const handleDrop = () => {\n if (!dragging.peek()) return\n const editorValue = editor.peek()\n if (!editorValue) return\n const { droppingIndex, draggingIndex, direction } = dndContext.peek()\n\n // Validate indices\n if (draggingIndex < 0 || droppingIndex < 0) {\n console.warn('[prosekit] Invalid drag indices:', { draggingIndex, droppingIndex })\n return\n }\n\n if (direction === 'row') {\n editorValue.exec(moveTableRow({\n from: draggingIndex,\n to: droppingIndex,\n }))\n return\n }\n if (direction === 'col') {\n editorValue.exec(moveTableColumn({\n from: draggingIndex,\n to: droppingIndex,\n }))\n return\n }\n }\n\n // To make `drop` event work, we need to prevent the default behavior of the\n // `dragover` event for drop zone. Here we set the whole document as the\n // drop zone so that even the mouse moves outside the editor, the `drop`\n // event will still be triggered.\n const handleDragOver = (event: DragEvent) => {\n if (!dragging.peek()) return\n event.preventDefault()\n const prev = dndContext.peek()\n\n dndContext.set({\n ...prev,\n dragging: true,\n x: event.clientX,\n y: event.clientY,\n })\n }\n\n const handleDragEnd = () => {\n if (!dragging.peek()) return\n const prev = dndContext.peek()\n dndContext.set({\n ...prev,\n dragging: false,\n })\n }\n\n ownerDocument.addEventListener('dragover', handleDragOver)\n ownerDocument.addEventListener('drop', handleDrop)\n ownerDocument.addEventListener('dragend', handleDragEnd)\n return () => {\n ownerDocument.removeEventListener('dragover', handleDragOver)\n ownerDocument.removeEventListener('drop', handleDrop)\n ownerDocument.removeEventListener('dragend', handleDragEnd)\n }\n })\n}\n","import type { EditorView } from '@prosekit/pm/view'\nimport {\n cellAround,\n TableMap,\n} from 'prosemirror-tables'\n\nexport interface HoveringCellInfo {\n rowIndex: number\n colIndex: number\n cellPos: number\n rowFirstCellPos: number\n colFirstCellPos: number\n}\n\nexport interface DndInfo {\n dragging: boolean\n direction: 'row' | 'col'\n draggingIndex: number\n droppingIndex: number\n x: number\n y: number\n startX: number\n startY: number\n}\n\nexport function isHoveringCellInfoEqual(\n a?: HoveringCellInfo | null,\n b?: HoveringCellInfo | null,\n): boolean {\n if (!a && !b) return true\n if (!a || !b) return false\n return (\n a.rowIndex === b.rowIndex\n && a.colIndex === b.colIndex\n && a.cellPos === b.cellPos\n && a.rowFirstCellPos === b.rowFirstCellPos\n && a.colFirstCellPos === b.colFirstCellPos\n )\n}\n\n/**\n * Copied from https://github.com/ProseMirror/prosemirror-tables/blob/v1.5.0/src/columnresizing.ts#L256\n *\n * @internal\n */\nfunction domCellAround(target: HTMLElement | null): HTMLElement | null {\n while (target && target.nodeName != 'TD' && target.nodeName != 'TH') {\n target = target.classList?.contains('ProseMirror')\n ? null\n : (target.parentNode as HTMLElement | null)\n }\n return target\n}\n\nexport function getHoveringCell(\n view: EditorView,\n event: MouseEvent,\n): HoveringCellInfo | undefined {\n const domCell = domCellAround(event.target as HTMLElement | null)\n if (!domCell) return\n\n const { left, top, width, height } = domCell.getBoundingClientRect()\n const eventPos = view.posAtCoords({\n // Use the center coordinates of the cell to ensure we're within the\n // selected cell. This prevents potential issues when the mouse is on the\n // border of two cells.\n left: left + width / 2,\n top: top + height / 2,\n })\n if (!eventPos) return\n\n const $cellPos = cellAround(view.state.doc.resolve(eventPos.pos))\n if (!$cellPos) return\n\n const map = TableMap.get($cellPos.node(-1))\n const tableStart = $cellPos.start(-1)\n const cellRect = map.findCell($cellPos.pos - tableStart)\n const rowIndex = cellRect.top\n const colIndex = cellRect.left\n\n return {\n rowIndex,\n colIndex,\n cellPos: $cellPos.pos,\n rowFirstCellPos: getCellPos(map, tableStart, rowIndex, 0),\n colFirstCellPos: getCellPos(map, tableStart, 0, colIndex),\n }\n}\n\nfunction getCellPos(\n map: TableMap,\n tableStart: number,\n rowIndex: number,\n colIndex: number,\n) {\n const cellIndex = getCellIndex(map, rowIndex, colIndex)\n const posInTable = map.map[cellIndex]\n return tableStart + posInTable\n}\n\nfunction getCellIndex(\n map: TableMap,\n rowIndex: number,\n colIndex: number,\n): number {\n return map.width * rowIndex + colIndex\n}\n","import {\n createComputed,\n createSignal,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type Signal,\n type SignalState,\n} from '@aria-ui/core'\nimport {\n defineDOMEventHandler,\n type Editor,\n} from '@prosekit/core'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { useEditorExtension } from '../../../hooks/use-editor-extension'\nimport { useEditorTyping } from '../../../hooks/use-editor-typing'\nimport { useScrolling } from '../../../hooks/use-scrolling'\nimport { useSelecting } from '../../../hooks/use-selecting'\nimport {\n defaultTableHandleDndContext,\n tableHandleDndContext,\n tableHandleRootContext,\n type TableHandleDndContext,\n type TableHandleRootContext,\n} from '../context'\nimport { useDrop } from '../hooks/use-drop'\nimport {\n getHoveringCell,\n isHoveringCellInfoEqual,\n type HoveringCellInfo,\n} from '../utils'\n\nimport type { TableHandleRootProps } from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleRoot(\n host: ConnectableElement,\n { state }: { state: SignalState<TableHandleRootProps> },\n): void {\n const { editor } = state\n\n const context = createSignal<TableHandleRootContext>(null)\n const dndContext = createSignal<TableHandleDndContext>(defaultTableHandleDndContext)\n\n const hoveringCell = useHoveringCell(host, editor)\n const typing = useEditorTyping(host, editor)\n const isInTable = createComputed(() => !!hoveringCell.get())\n const selecting = useSelecting(host, editor, isInTable)\n const scrolling = useScrolling(host)\n const canShow = createComputed(() => {\n return !typing.get() && !selecting.get() && !scrolling.get()\n })\n\n useEffect(host, () => {\n context.set(canShow.get() ? hoveringCell.get() : null)\n })\n\n tableHandleRootContext.provide(host, context)\n tableHandleDndContext.provide(host, dndContext)\n\n useDrop(host, editor, dndContext)\n}\n\nfunction useHoveringCell(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n): Signal<HoveringCellInfo | null> {\n const hoveringCell = createSignal<HoveringCellInfo | null>(null)\n\n const extension = defineCellHoverHandler((curr: HoveringCellInfo | null) => {\n const prev = hoveringCell.peek()\n if (!isHoveringCellInfoEqual(prev, curr)) {\n hoveringCell.set(curr)\n }\n })\n\n useEditorExtension(host, editor, extension)\n\n return hoveringCell\n}\n\nfunction defineCellHoverHandler(\n handler: (hoveringCell: HoveringCellInfo | null) => void,\n) {\n const pointerHandler = (view: EditorView, event: PointerEvent) => {\n const hoveringCell = getHoveringCell(view, event)\n return handler(hoveringCell ?? null)\n }\n return defineDOMEventHandler('pointerover', pointerHandler)\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandleRootProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n}\n\n/** @internal */\nexport const tableHandleRootProps: PropDeclarations<TableHandleRootProps> = {\n editor: { default: null },\n}\n\n/** @internal */\nexport interface TableHandleRootEvents {}\n\n/** @internal */\nexport const tableHandleRootEvents: EventDeclarations<TableHandleRootEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleRoot } from \"./setup\"\nimport { tableHandleRootEvents, tableHandleRootProps, type TableHandleRootEvents, type TableHandleRootProps } from \"./types\"\n\nconst TableHandleRootElementBase: BaseElementConstructor<TableHandleRootProps> = defineCustomElement<\n TableHandleRootProps,\n TableHandleRootEvents\n>({\n props: tableHandleRootProps,\n events: tableHandleRootEvents,\n setup: useTableHandleRoot,\n})\nclass TableHandleRootElement extends TableHandleRootElementBase {}\n\nregisterCustomElement('prosekit-table-handle-root', TableHandleRootElement)\n \nexport { TableHandleRootElement }\n","import {\n createComputed,\n createSignal,\n defineEmit,\n useAttribute,\n useEffect,\n type ConnectableElement,\n type SetupOptions,\n} from '@aria-ui/core'\nimport {\n menuRootEvents,\n menuRootProps,\n useMenuRoot,\n} from '@aria-ui/menu/elements'\nimport { useOverlayPositionerState } from '@aria-ui/overlay/elements'\nimport { usePresence } from '@aria-ui/presence'\n\nimport { getStateWithDefaults } from '../../../utils/get-default-state'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport { tableHandleRootContext } from '../context'\n\nimport type {\n TableHandleRowRootEvents,\n TableHandleRowRootProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleRowRoot(\n host: ConnectableElement,\n { state }: SetupOptions<TableHandleRowRootProps, TableHandleRowRootEvents>,\n): void {\n const { editor, ...overlayState } = state\n\n const rootContext = tableHandleRootContext.consume(host)\n\n const rowFirstCellPos = createComputed<number | undefined>(() => {\n return rootContext.get()?.rowFirstCellPos\n })\n\n const referenceCell = createComputed<HTMLElement | null>(() => {\n const pos = rowFirstCellPos.get()\n const view = getSafeEditorView(editor.get())\n if (!pos || !view) return null\n return view.nodeDOM(pos) as HTMLElement | null\n })\n\n const contentOpen = createSignal(false)\n\n // Close the menu when the hovering element is changed\n // TODO: add a delay\n useEffect(host, () => {\n rowFirstCellPos.get()\n contentOpen.set(false)\n })\n\n useOverlayPositionerState(host, overlayState, {\n reference: referenceCell,\n })\n\n const presence = createComputed(() => !!referenceCell.get())\n useAttribute(host, 'data-state', () => (presence.get() ? 'open' : 'closed'))\n usePresence(host, presence)\n\n const menuRootState = getStateWithDefaults(\n {\n open: contentOpen,\n },\n menuRootProps,\n )\n\n useMenuRoot(host, {\n state: menuRootState,\n emit: defineEmit(host, menuRootEvents),\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n overlayPositionerProps,\n type OverlayPositionerEvents,\n type OverlayPositionerProps,\n} from '@aria-ui/overlay'\nimport type { Placement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandleRowRootProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The placement of the popover, relative to the hovered table cell.\n *\n * @default \"left\"\n */\n placement: Placement\n\n /**\n * Whether to use the browser [Popover API](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API)\n * to place the floating element on top of other page content.\n *\n * @default false\n */\n hoist: boolean\n\n /**\n * @default false\n * @hidden\n */\n flip: boolean\n\n /**\n * @default false\n * @hidden\n */\n shift: boolean\n\n /**\n * @default true\n * @hidden\n */\n hide: boolean\n}\n\n/** @internal */\nexport const tableHandleRowRootProps: PropDeclarations<TableHandleRowRootProps> = {\n ...overlayPositionerProps,\n editor: { default: null },\n placement: { default: 'left' },\n\n // Enabling `hoist` will cause the popover to have a small delay when\n // scrolling the page.\n hoist: { default: false },\n\n flip: { default: false },\n shift: { default: false },\n hide: { default: true },\n}\n\n/** @internal */\nexport interface TableHandleRowRootEvents extends OverlayPositionerEvents {}\n\n/** @internal */\nexport const tableHandleRowRootEvents: EventDeclarations<TableHandleRowRootEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleRowRoot } from \"./setup\"\nimport { tableHandleRowRootEvents, tableHandleRowRootProps, type TableHandleRowRootEvents, type TableHandleRowRootProps } from \"./types\"\n\nconst TableHandleRowRootElementBase: BaseElementConstructor<TableHandleRowRootProps> = defineCustomElement<\n TableHandleRowRootProps,\n TableHandleRowRootEvents\n>({\n props: tableHandleRowRootProps,\n events: tableHandleRowRootEvents,\n setup: useTableHandleRowRoot,\n})\nclass TableHandleRowRootElement extends TableHandleRowRootElementBase {}\n\nregisterCustomElement('prosekit-table-handle-row-root', TableHandleRowRootElement)\n \nexport { TableHandleRowRootElement }\n","import {\n useEffect,\n useEventListener,\n type ConnectableElement,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useMenuTrigger } from '@aria-ui/menu/elements'\nimport { selectTableRow } from '@prosekit/extensions/table'\n\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from '../context'\nimport { useEmptyImage } from '../hooks/use-empty-image'\n\nimport type {\n TableHandleRowTriggerEvents,\n TableHandleRowTriggerProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleRowTrigger(\n host: ConnectableElement,\n { state }: SetupOptions<TableHandleRowTriggerProps, TableHandleRowTriggerEvents>,\n): void {\n useMenuTrigger(host)\n\n const context = tableHandleRootContext.consume(host)\n\n const dndContext = tableHandleDndContext.consume(host)\n\n useEventListener(host, 'pointerdown', () => {\n const editor = state.editor.peek()\n const cellPos = context.peek()?.cellPos\n if (!editor || !cellPos) return\n editor.exec(selectTableRow({ head: cellPos }))\n })\n\n useEffect(host, () => {\n host.draggable = true\n })\n\n const getEmptyImage = useEmptyImage(host)\n\n useEventListener(host, 'dragstart', (event: DragEvent) => {\n const dataTransfer = event.dataTransfer\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move'\n const emptyImage = getEmptyImage()\n if (emptyImage) {\n dataTransfer.setDragImage(emptyImage, 0, 0)\n }\n }\n const prev = dndContext.peek()\n const index = context.peek()?.rowIndex\n\n if (index == null || index < 0) {\n console.warn('[prosekit] Invalid row index for drag operation:', index)\n event.preventDefault()\n return\n }\n\n dndContext.set({\n ...prev,\n direction: 'row',\n dragging: true,\n draggingIndex: index,\n startX: event.clientX,\n startY: event.clientY,\n })\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\nimport type { defineTableCommands } from '@prosekit/extensions/table'\n\ntype TableCommandsExtension = ReturnType<typeof defineTableCommands>\n\nexport interface TableHandleRowTriggerProps {\n editor: Editor<TableCommandsExtension> | null\n}\n\n/** @internal */\nexport const tableHandleRowTriggerProps: PropDeclarations<TableHandleRowTriggerProps> = {\n editor: { default: null },\n}\n\nexport interface TableHandleRowTriggerEvents {\n select: CustomEvent<void>\n}\n\n/** @internal */\nexport const tableHandleRowTriggerEvents: EventDeclarations<TableHandleRowTriggerEvents> = {\n select: {},\n}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleRowTrigger } from \"./setup\"\nimport { tableHandleRowTriggerEvents, tableHandleRowTriggerProps, type TableHandleRowTriggerEvents, type TableHandleRowTriggerProps } from \"./types\"\n\nconst TableHandleRowTriggerElementBase: BaseElementConstructor<TableHandleRowTriggerProps> = defineCustomElement<\n TableHandleRowTriggerProps,\n TableHandleRowTriggerEvents\n>({\n props: tableHandleRowTriggerProps,\n events: tableHandleRowTriggerEvents,\n setup: useTableHandleRowTrigger,\n})\nclass TableHandleRowTriggerElement extends TableHandleRowTriggerElementBase {}\n\nregisterCustomElement('prosekit-table-handle-row-trigger', TableHandleRowTriggerElement)\n \nexport { TableHandleRowTriggerElement }\n"],"mappings":"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"}
1
+ {"version":3,"file":"prosekit-web-table-handle.js","names":["tableHandleRootContext: Context<TableHandleRootContext>","defaultTableHandleDndContext: TableHandleDndContext","tableHandleDndContext: Context<TableHandleDndContext>","tableHandleColumnRootProps: PropDeclarations<TableHandleColumnRootProps>","overlayPositionerProps","tableHandleColumnRootEvents: EventDeclarations<TableHandleColumnRootEvents>","overlayPositionerEvents","TableHandleColumnRootElementBase: BaseElementConstructor<TableHandleColumnRootProps>","image: HTMLImageElement | undefined","tableHandleColumnTriggerProps: PropDeclarations<TableHandleColumnTriggerProps>","tableHandleColumnTriggerEvents: EventDeclarations<TableHandleColumnTriggerEvents>","TableHandleColumnTriggerElementBase: BaseElementConstructor<TableHandleColumnTriggerProps>","isColorMixSupported: () => boolean","current: HTMLElement | null","y","x","tableHandleDragPreviewProps: PropDeclarations<TableHandleDragPreviewProps>","tableHandleDragPreviewEvents: EventDeclarations<TableHandleDragPreviewEvents>","TableHandleDragPreviewElementBase: BaseElementConstructor<TableHandleDragPreviewProps>","index","direction","x","y","tableHandleDropIndicatorProps: PropDeclarations<TableHandleDropIndicatorProps>","tableHandleDropIndicatorEvents: EventDeclarations<TableHandleDropIndicatorEvents>","TableHandleDropIndicatorElementBase: BaseElementConstructor<TableHandleDropIndicatorProps>","keydownHandlers: Array<(event: KeyboardEvent) => void>","tableHandlePopoverContentProps: PropDeclarations<TableHandlePopoverContentProps>","tableHandlePopoverContentEvents: EventDeclarations<TableHandlePopoverContentEvents>","TableHandlePopoverContentElementBase: BaseElementConstructor<TableHandlePopoverContentProps>","tableHandlePopoverItemProps: PropDeclarations<TableHandlePopoverItemProps>","tableHandlePopoverItemEvents: EventDeclarations<TableHandlePopoverItemEvents>","TableHandlePopoverItemElementBase: BaseElementConstructor<TableHandlePopoverItemProps>","tableHandleRootProps: PropDeclarations<TableHandleRootProps>","tableHandleRootEvents: EventDeclarations<TableHandleRootEvents>","TableHandleRootElementBase: BaseElementConstructor<TableHandleRootProps>","tableHandleRowRootProps: PropDeclarations<TableHandleRowRootProps>","overlayPositionerProps","tableHandleRowRootEvents: EventDeclarations<TableHandleRowRootEvents>","TableHandleRowRootElementBase: BaseElementConstructor<TableHandleRowRootProps>","tableHandleRowTriggerProps: PropDeclarations<TableHandleRowTriggerProps>","tableHandleRowTriggerEvents: EventDeclarations<TableHandleRowTriggerEvents>","TableHandleRowTriggerElementBase: BaseElementConstructor<TableHandleRowTriggerProps>"],"sources":["../src/components/table-handle/context.ts","../src/components/table-handle/table-handle-column-root/setup.ts","../src/components/table-handle/table-handle-column-root/types.ts","../src/components/table-handle/table-handle-column-root/element.gen.ts","../src/components/table-handle/hooks/use-empty-image.ts","../src/components/table-handle/table-handle-column-trigger/setup.ts","../src/components/table-handle/table-handle-column-trigger/types.ts","../src/components/table-handle/table-handle-column-trigger/element.gen.ts","../src/components/table-handle/dnd.ts","../src/utils/css-feature-detection.ts","../src/utils/fade-color.ts","../src/utils/get-effective-background-color.ts","../src/components/table-handle/table-handle-drag-preview/render-preview.ts","../src/components/table-handle/table-handle-drag-preview/updater.ts","../src/components/table-handle/table-handle-drag-preview/setup.ts","../src/components/table-handle/table-handle-drag-preview/types.ts","../src/components/table-handle/table-handle-drag-preview/element.gen.ts","../src/components/table-handle/table-handle-drop-indicator/calc-drag-over.ts","../src/components/table-handle/table-handle-drop-indicator/updater.ts","../src/components/table-handle/table-handle-drop-indicator/setup.ts","../src/components/table-handle/table-handle-drop-indicator/types.ts","../src/components/table-handle/table-handle-drop-indicator/element.gen.ts","../src/components/table-handle/table-handle-popover-content/setup.ts","../src/components/table-handle/table-handle-popover-content/types.ts","../src/components/table-handle/table-handle-popover-content/element.gen.ts","../src/components/table-handle/table-handle-popover-item/setup.ts","../src/components/table-handle/table-handle-popover-item/types.ts","../src/components/table-handle/table-handle-popover-item/element.gen.ts","../src/hooks/use-editor-typing.ts","../src/hooks/use-selecting.ts","../src/components/table-handle/hooks/use-drop.ts","../src/components/table-handle/utils.ts","../src/components/table-handle/table-handle-root/setup.ts","../src/components/table-handle/table-handle-root/types.ts","../src/components/table-handle/table-handle-root/element.gen.ts","../src/components/table-handle/table-handle-row-root/setup.ts","../src/components/table-handle/table-handle-row-root/types.ts","../src/components/table-handle/table-handle-row-root/element.gen.ts","../src/components/table-handle/table-handle-row-trigger/setup.ts","../src/components/table-handle/table-handle-row-trigger/types.ts","../src/components/table-handle/table-handle-row-trigger/element.gen.ts"],"sourcesContent":["import {\n createContext,\n type Context,\n} from '@aria-ui/core'\n\nimport type {\n DndInfo,\n HoveringCellInfo,\n} from './utils'\n\n/**\n * @internal\n */\nexport type TableHandleRootContext = HoveringCellInfo | null\n\n/**\n * @internal\n */\nexport const tableHandleRootContext: Context<TableHandleRootContext> = createContext(\n 'prosekit-table-handle-root-context',\n null,\n)\n\n/**\n * @internal\n */\nexport type TableHandleDndContext = DndInfo\n\n/**\n * @internal\n */\nexport const defaultTableHandleDndContext: TableHandleDndContext = {\n dragging: false,\n direction: 'row',\n draggingIndex: -1,\n droppingIndex: -1,\n x: -1,\n y: -1,\n startX: -1,\n startY: -1,\n}\n\n/**\n * @internal\n */\nexport const tableHandleDndContext: Context<TableHandleDndContext> = createContext(\n 'prosekit-table-handle-dnd-context',\n defaultTableHandleDndContext,\n)\n","import {\n createComputed,\n createSignal,\n useAttribute,\n useEffect,\n type ConnectableElement,\n type SignalState,\n} from '@aria-ui/core'\nimport {\n menuRootProps,\n useMenuRoot,\n type MenuRootProps,\n} from '@aria-ui/menu/elements'\nimport { useOverlayPositionerState } from '@aria-ui/overlay/elements'\nimport { usePresence } from '@aria-ui/presence'\n\nimport { getStateWithDefaults } from '../../../utils/get-default-state'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport { tableHandleRootContext } from '../context'\n\nimport type { TableHandleColumnRootProps } from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleColumnRoot(\n host: ConnectableElement,\n { state }: { state: SignalState<TableHandleColumnRootProps> },\n): void {\n const { editor, ...overlayState } = state\n\n const rootContext = tableHandleRootContext.consume(host)\n\n const colFirstCellPos = createComputed<number | undefined>(() => {\n return rootContext.get()?.colFirstCellPos\n })\n\n const referenceCell = createComputed<HTMLElement | null>(() => {\n const pos = colFirstCellPos.get()\n const view = getSafeEditorView(editor.get())\n if (!pos || !view) return null\n return view.nodeDOM(pos) as HTMLElement | null\n })\n\n const contentOpen = createSignal(false)\n\n // Close the menu when the hovering element is changed\n // TODO: add a delay\n useEffect(host, () => {\n colFirstCellPos.get()\n contentOpen.set(false)\n })\n\n useOverlayPositionerState(host, overlayState, {\n reference: referenceCell,\n })\n\n const presence = createComputed(() => !!referenceCell.get())\n useAttribute(host, 'data-state', () => (presence.get() ? 'open' : 'closed'))\n usePresence(host, presence)\n\n const menuRootState: SignalState<MenuRootProps> = getStateWithDefaults(\n { open: contentOpen },\n menuRootProps,\n )\n\n useMenuRoot(host, {\n state: menuRootState,\n emit: () => void 0,\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n overlayPositionerEvents,\n overlayPositionerProps,\n type OverlayPositionerEvents,\n type OverlayPositionerProps,\n} from '@aria-ui/overlay'\nimport type { Placement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandleColumnRootProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The placement of the popover, relative to the hovered table cell.\n *\n * @default \"top\"\n */\n placement: Placement\n\n /**\n * Whether to use the browser [Popover API](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API)\n * to place the floating element on top of other page content.\n *\n * @default false\n */\n hoist: boolean\n\n /**\n * @default false\n * @hidden\n */\n flip: boolean\n\n /**\n * @default false\n * @hidden\n */\n shift: boolean\n\n /**\n * @default true\n * @hidden\n */\n hide: boolean\n}\n\n/** @internal */\nexport const tableHandleColumnRootProps: PropDeclarations<TableHandleColumnRootProps> = Object.freeze({\n ...overlayPositionerProps,\n editor: { default: null },\n placement: { default: 'top' },\n\n // Enabling `hoist` will cause the popover to have a small delay when\n // scrolling the page.\n hoist: { default: false },\n\n flip: { default: false },\n shift: { default: false },\n hide: { default: true },\n})\n\n/** @internal */\nexport interface TableHandleColumnRootEvents extends OverlayPositionerEvents {}\n\n/** @internal */\nexport const tableHandleColumnRootEvents: EventDeclarations<TableHandleColumnRootEvents> = overlayPositionerEvents\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleColumnRoot } from \"./setup\"\nimport { tableHandleColumnRootEvents, tableHandleColumnRootProps, type TableHandleColumnRootEvents, type TableHandleColumnRootProps } from \"./types\"\n\nconst TableHandleColumnRootElementBase: BaseElementConstructor<TableHandleColumnRootProps> = defineCustomElement<\n TableHandleColumnRootProps,\n TableHandleColumnRootEvents\n>({\n props: tableHandleColumnRootProps,\n events: tableHandleColumnRootEvents,\n setup: useTableHandleColumnRoot,\n})\nclass TableHandleColumnRootElement extends TableHandleColumnRootElementBase {}\n\nregisterCustomElement('prosekit-table-handle-column-root', TableHandleColumnRootElement)\n \nexport { TableHandleColumnRootElement }\n","import type { ConnectableElement } from '@aria-ui/core'\nimport { useEffect } from '@aria-ui/core'\n\n/**\n * Returns a function that returns a 1x1 transparent image. This is used to\n * prevent the browser from showing the default drag image. An earth icon in\n * chrome is used as the default drag image. This image must be loaded before\n * the dragStart event triggers.\n *\n * See https://stackoverflow.com/a/40923520\n *\n * @internal\n */\nexport function useEmptyImage(\n host: ConnectableElement,\n): () => HTMLImageElement | undefined {\n let image: HTMLImageElement | undefined\n\n useEffect(host, () => {\n image = new Image(1, 1)\n image.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'\n\n return () => {\n image?.remove()\n image = undefined\n }\n })\n\n return () => image\n}\n","import {\n useEffect,\n useEventListener,\n type ConnectableElement,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useMenuTrigger } from '@aria-ui/menu/elements'\nimport { selectTableColumn } from '@prosekit/extensions/table'\n\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from '../context'\nimport { useEmptyImage } from '../hooks/use-empty-image'\n\nimport type {\n TableHandleColumnTriggerEvents,\n TableHandleColumnTriggerProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleColumnTrigger(\n host: ConnectableElement,\n { state }: SetupOptions<TableHandleColumnTriggerProps, TableHandleColumnTriggerEvents>,\n): void {\n useMenuTrigger(host)\n\n const context = tableHandleRootContext.consume(host)\n\n const dndContext = tableHandleDndContext.consume(host)\n\n useEventListener(host, 'pointerdown', () => {\n const editor = state.editor.peek()\n const cellPos = context.peek()?.cellPos\n if (!editor || !cellPos) return\n editor.exec(selectTableColumn({ head: cellPos }))\n })\n\n useEffect(host, () => {\n host.draggable = true\n })\n\n const getEmptyImage = useEmptyImage(host)\n\n useEventListener(host, 'dragstart', (event: DragEvent) => {\n const dataTransfer = event.dataTransfer\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move'\n const emptyImage = getEmptyImage()\n if (emptyImage) {\n dataTransfer.setDragImage(emptyImage, 0, 0)\n }\n dataTransfer.setData('application/x-prosekit-table-handle-drag', '')\n }\n const prev = dndContext.peek()\n const index = context.peek()?.colIndex\n\n if (index == null || index < 0) {\n console.warn('[prosekit] Invalid column index for drag operation:', index)\n event.preventDefault()\n return\n }\n\n dndContext.set({\n ...prev,\n direction: 'col',\n dragging: true,\n draggingIndex: index,\n startX: event.clientX,\n startY: event.clientY,\n })\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\nimport type { defineTableCommands } from '@prosekit/extensions/table'\n\ntype TableCommandsExtension = ReturnType<typeof defineTableCommands>\n\nexport interface TableHandleColumnTriggerProps {\n editor: Editor<TableCommandsExtension> | null\n}\n\n/** @internal */\nexport const tableHandleColumnTriggerProps: PropDeclarations<TableHandleColumnTriggerProps> = {\n editor: { default: null },\n}\n\n/** @internal */\nexport interface TableHandleColumnTriggerEvents {}\n\n/** @internal */\nexport const tableHandleColumnTriggerEvents: EventDeclarations<TableHandleColumnTriggerEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleColumnTrigger } from \"./setup\"\nimport { tableHandleColumnTriggerEvents, tableHandleColumnTriggerProps, type TableHandleColumnTriggerEvents, type TableHandleColumnTriggerProps } from \"./types\"\n\nconst TableHandleColumnTriggerElementBase: BaseElementConstructor<TableHandleColumnTriggerProps> = defineCustomElement<\n TableHandleColumnTriggerProps,\n TableHandleColumnTriggerEvents\n>({\n props: tableHandleColumnTriggerProps,\n events: tableHandleColumnTriggerEvents,\n setup: useTableHandleColumnTrigger,\n})\nclass TableHandleColumnTriggerElement extends TableHandleColumnTriggerElementBase {}\n\nregisterCustomElement('prosekit-table-handle-column-trigger', TableHandleColumnTriggerElement)\n \nexport { TableHandleColumnTriggerElement }\n","import {\n createComputed,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n computePosition,\n offset,\n} from '@floating-ui/dom'\nimport { isHTMLElement } from '@ocavue/utils'\nimport type { Editor } from '@prosekit/core'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { assignStyles } from '../../utils/assign-styles'\nimport { getSafeEditorView } from '../../utils/get-safe-editor-view'\n\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from './context'\n\nexport type OnInitParams = {\n host: ConnectableElement\n direction: 'row' | 'col'\n dragging: boolean\n draggingIndex: number\n table: HTMLTableElement\n cell: HTMLTableCellElement\n}\n\nexport function useInitDndPosition(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n onInit: (params: OnInitParams) => void,\n): void {\n const dndContext = tableHandleDndContext.consume(host)\n const rootContext = tableHandleRootContext.consume(host)\n\n const draggingSignal = createComputed(() => {\n const context = dndContext.get()\n return context.dragging\n })\n\n const directionSignal = createComputed(() => {\n const context = dndContext.get()\n return context.direction\n })\n\n const draggingIndexSignal = createComputed(() => {\n const context = dndContext.get()\n return context.draggingIndex\n })\n\n useEffect(host, () => {\n const view = getSafeEditorView(editor.get())\n if (!view) return\n\n const dragging = draggingSignal.get()\n const direction = directionSignal.get()\n\n host.dataset.direction = direction\n host.dataset.dragging = dragging.toString()\n\n const draggingIndex = draggingIndexSignal.get()\n\n const relatedDOMs = getDndRelatedDOMs(view, rootContext.peek()?.cellPos, draggingIndex, direction)\n if (!relatedDOMs) return\n const { table, cell } = relatedDOMs\n\n onInit({\n host,\n direction,\n dragging,\n draggingIndex,\n table,\n cell,\n })\n\n if (!dragging) return\n\n let cancelled = false\n\n void computePosition(cell, host, {\n placement: direction === 'row' ? 'right' : 'bottom',\n middleware: [\n offset(({ rects }) => {\n if (direction === 'col') {\n return -rects.reference.height\n }\n return -rects.reference.width\n }),\n ],\n }).then(({ x, y }) => {\n if (cancelled) return\n assignStyles(host, {\n left: `${x}px`,\n top: `${y}px`,\n })\n })\n\n return () => {\n cancelled = true\n }\n })\n}\n\nfunction getTableDOMByPos(view: EditorView, pos: number): HTMLTableElement | undefined {\n const dom = view.domAtPos(pos).node\n if (!dom) return\n const element = isHTMLElement(dom) ? dom : dom.parentElement\n const table = element?.closest('table')\n return table ?? undefined\n}\n\nfunction getTargetFirstCellDOM(table: HTMLTableElement, index: number, direction: 'row' | 'col'): HTMLTableCellElement | undefined {\n if (direction === 'row') {\n const row = table.querySelectorAll('tr')[index]\n const cell = row?.querySelector('td')\n return cell ?? undefined\n } else {\n const row = table.querySelector('tr')\n const cell = row?.querySelectorAll('td')[index]\n return cell ?? undefined\n }\n}\n\nexport function getDndRelatedDOMs(view: EditorView, cellPos: number | undefined, draggingIndex: number, direction: 'row' | 'col'): { table: HTMLTableElement; cell: HTMLTableCellElement } | undefined {\n if (cellPos == null) return\n const table = getTableDOMByPos(view, cellPos)\n if (!table) return\n const cell = getTargetFirstCellDOM(table, draggingIndex, direction)\n if (!cell) return\n return { table, cell }\n}\n","import { once } from '@ocavue/utils'\n\nexport const isColorMixSupported: () => boolean = once(() => {\n try {\n return CSS.supports('background-color', 'color-mix(in srgb, red, blue)')\n } catch {\n return false\n }\n})\n","import { isColorMixSupported } from './css-feature-detection'\n\n/**\n * Convert a color to a color with opacity\n * @param color - The color to convert\n * @param opacity - The opacity to apply\n * @returns The converted color if color-mix is supported, otherwise undefined\n */\nexport function fadeColor(color: CSSStyleValue, opacity: number): string | undefined {\n if (isColorMixSupported()) {\n const transparentWeight = (1 - opacity) * 100\n const colorWeight = opacity * 100\n return `color-mix(in srgb, ${color} ${colorWeight}%, transparent ${transparentWeight}%)`\n }\n}\n","export function getEffectiveBackgroundColor(element: HTMLElement): string | undefined {\n let current: HTMLElement | null = element\n\n while (current) {\n const style = current.ownerDocument.defaultView?.getComputedStyle(current)\n const backgroundColor = style?.backgroundColor\n\n if (\n backgroundColor\n && backgroundColor !== 'transparent'\n // Chrome returns `rgba(0, 0, 0, 0)` for transparent colors.\n && backgroundColor !== 'rgba(0, 0, 0, 0)'\n ) {\n return backgroundColor\n }\n\n current = current.parentElement\n }\n\n return undefined\n}\n","import { assignStyles } from '../../../utils/assign-styles'\nimport {\n cloneElement,\n deepCloneElement,\n} from '../../../utils/clone-element'\nimport { fadeColor } from '../../../utils/fade-color'\nimport { getEffectiveBackgroundColor } from '../../../utils/get-effective-background-color'\nimport { injectStyle } from '../../../utils/inject-style'\n\nexport function clearPreviewDOM(previewRoot: HTMLElement): void {\n while (previewRoot.firstChild) {\n previewRoot.removeChild(previewRoot.firstChild)\n }\n}\n\nexport function createPreviewDOM(\n table: HTMLTableElement,\n previewRoot: HTMLElement,\n index: number,\n direction: 'row' | 'col',\n): void {\n clearPreviewDOM(previewRoot)\n\n const [previewTable, previewTableStyle] = cloneElement(table)\n injectStyle(previewRoot, previewTableStyle)\n unsetSize(previewTable)\n\n const tableBody = table.querySelector('tbody')\n const [previewTableBody, previewTableBodyStyle] = tableBody\n ? cloneElement(tableBody)\n : [table.ownerDocument.createElement('tbody'), '']\n injectStyle(previewRoot, previewTableBodyStyle)\n unsetSize(previewTableBody)\n\n // Get effective background color and apply it with some opacity\n const backgroundColor = getEffectiveBackgroundColor(table)\n if (backgroundColor) {\n const backgroundColorWithOpacity = fadeColor(backgroundColor, 0.8)\n if (backgroundColorWithOpacity) {\n assignStyles(previewTable, { backgroundColor: backgroundColorWithOpacity })\n }\n }\n\n previewTable.appendChild(previewTableBody)\n previewRoot.appendChild(previewTable)\n\n const rows = table.querySelectorAll('tr')\n\n if (direction === 'row') {\n const row = rows[index]\n const [previewRow, previewRowStyle] = deepCloneElement(row)\n injectStyle(previewRoot, previewRowStyle)\n previewTableBody.appendChild(previewRow)\n } else {\n rows.forEach((row) => {\n const [previewRow, previewRowStyle] = cloneElement(row)\n injectStyle(previewRoot, previewRowStyle)\n unsetSize(previewRow)\n const cells = row.querySelectorAll('td')\n const cell = cells[index]\n if (cell) {\n const [previewCell, previewCellStyle] = deepCloneElement(cell)\n injectStyle(previewRoot, previewCellStyle)\n previewRow.appendChild(previewCell)\n previewTableBody.appendChild(previewRow)\n }\n })\n }\n}\n\nfunction unsetSize(element: HTMLElement) {\n assignStyles(element, {\n width: 'unset',\n height: 'unset',\n minWidth: 'unset',\n minHeight: 'unset',\n maxWidth: 'unset',\n maxHeight: 'unset',\n })\n}\n","import {\n createComputed,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n computePosition,\n type ReferenceElement,\n} from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nimport { assignStyles } from '../../../utils/assign-styles'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from '../context'\nimport { getDndRelatedDOMs } from '../dnd'\n\nexport function useUpdatePreviewPosition(host: ConnectableElement, editor: ReadonlySignal<Editor | null>): void {\n const dndContext = tableHandleDndContext.consume(host)\n const rootContext = tableHandleRootContext.consume(host)\n\n const draggingSignal = createComputed(() => {\n const context = dndContext.get()\n return context.dragging\n })\n\n const clientXSignal = createComputed(() => {\n const context = dndContext.get()\n return context.x\n })\n\n const clientYSignal = createComputed(() => {\n const context = dndContext.get()\n return context.y\n })\n\n useEffect(host, () => {\n const view = getSafeEditorView(editor.get())\n if (!view) return\n\n if (!draggingSignal.get()) return\n\n const { draggingIndex, direction } = dndContext.peek()\n const x = clientXSignal.get()\n const y = clientYSignal.get()\n\n const relatedDOMs = getDndRelatedDOMs(view, rootContext.peek()?.cellPos, draggingIndex, direction)\n if (!relatedDOMs) return\n const { cell } = relatedDOMs\n\n let cancelled = false\n\n void computePosition(\n getVirtualElement(cell, x, y),\n host,\n { placement: direction === 'row' ? 'right' : 'bottom' },\n ).then(({ x, y }) => {\n if (cancelled) return\n\n if (direction === 'row') {\n assignStyles(host, {\n top: `${y}px`,\n })\n return\n }\n\n if (direction === 'col') {\n assignStyles(host, {\n left: `${x}px`,\n })\n return\n }\n })\n\n return () => {\n cancelled = true\n }\n })\n}\n\nfunction getVirtualElement(cell: HTMLTableCellElement, x: number, y: number): ReferenceElement {\n return {\n contextElement: cell,\n getBoundingClientRect: () => {\n const rect = cell.getBoundingClientRect()\n return {\n width: rect.width,\n height: rect.height,\n right: x + rect.width / 2,\n bottom: y + rect.height / 2,\n top: y - rect.height / 2,\n left: x - rect.width / 2,\n x: x - rect.width / 2,\n y: y - rect.height / 2,\n }\n },\n }\n}\n","import {\n useEffect,\n type ConnectableElement,\n type SignalState,\n} from '@aria-ui/core'\n\nimport { assignStyles } from '../../../utils/assign-styles'\nimport {\n useInitDndPosition,\n type OnInitParams,\n} from '../dnd'\n\nimport {\n clearPreviewDOM,\n createPreviewDOM,\n} from './render-preview'\nimport type { TableHandleDragPreviewProps } from './types'\nimport { useUpdatePreviewPosition } from './updater'\n\n/**\n * @internal\n */\nexport function useTableHandleDragPreview(host: ConnectableElement, { state }: { state: SignalState<TableHandleDragPreviewProps> }): void {\n const { editor } = state\n\n useEffect(host, () => {\n assignStyles(host, {\n position: 'absolute',\n // Make sure drop on preview will trigger drop event on the host\n pointerEvents: 'none',\n })\n })\n\n useInitDndPosition(host, editor, onInitPreviewPosition)\n\n useUpdatePreviewPosition(host, editor)\n}\n\nfunction onInitPreviewPosition({ host, direction, dragging, table, cell, draggingIndex }: OnInitParams): void {\n assignStyles(host, {\n display: dragging ? 'block' : 'none',\n })\n\n if (!dragging) {\n clearPreviewDOM(host)\n return\n }\n\n createPreviewDOM(table, host, draggingIndex, direction)\n\n const tableRect = table.getBoundingClientRect()\n const cellRect = cell.getBoundingClientRect()\n\n if (direction === 'col') {\n assignStyles(host, {\n width: `${cellRect.width}px`,\n height: `${tableRect.height}px`,\n })\n }\n\n if (direction === 'row') {\n assignStyles(host, {\n width: `${tableRect.width}px`,\n height: `${cellRect.height}px`,\n })\n }\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandleDragPreviewProps {\n editor: Editor | null\n}\n\nexport const tableHandleDragPreviewProps: PropDeclarations<TableHandleDragPreviewProps> = {\n editor: { default: null },\n}\n\nexport interface TableHandleDragPreviewEvents {}\n\nexport const tableHandleDragPreviewEvents: EventDeclarations<TableHandleDragPreviewEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleDragPreview } from \"./setup\"\nimport { tableHandleDragPreviewEvents, tableHandleDragPreviewProps, type TableHandleDragPreviewEvents, type TableHandleDragPreviewProps } from \"./types\"\n\nconst TableHandleDragPreviewElementBase: BaseElementConstructor<TableHandleDragPreviewProps> = defineCustomElement<\n TableHandleDragPreviewProps,\n TableHandleDragPreviewEvents\n>({\n props: tableHandleDragPreviewProps,\n events: tableHandleDragPreviewEvents,\n setup: useTableHandleDragPreview,\n})\nclass TableHandleDragPreviewElement extends TableHandleDragPreviewElementBase {}\n\nregisterCustomElement('prosekit-table-handle-drag-preview', TableHandleDragPreviewElement)\n \nexport { TableHandleDragPreviewElement }\n","function findDragOverElement(\n elements: Element[],\n pointer: number,\n axis: 'x' | 'y',\n): [Element, number] | undefined {\n const startProp = axis === 'x' ? 'left' : 'top'\n const endProp = axis === 'x' ? 'right' : 'bottom'\n const lastIndex = elements.length - 1\n\n const index = elements.findIndex((el, index) => {\n const rect = el.getBoundingClientRect()\n const boundaryStart = rect[startProp]\n const boundaryEnd = rect[endProp]\n\n // The pointer is within the boundary of the current element.\n if (boundaryStart <= pointer && pointer <= boundaryEnd) return true\n // The pointer is beyond the last element.\n if (index === lastIndex && pointer > boundaryEnd) return true\n // The pointer is before the first element.\n if (index === 0 && pointer < boundaryStart) return true\n\n return false\n })\n\n return index >= 0 ? [elements[index], index] : undefined\n}\n\nexport function getDragOverColumn(\n table: HTMLTableElement,\n pointerX: number,\n): [element: Element, index: number] | undefined {\n const firstRow = table.querySelector('tr')\n if (!firstRow) return\n const cells = Array.from(firstRow.children)\n return findDragOverElement(cells, pointerX, 'x')\n}\n\nexport function getDragOverRow(\n table: HTMLTableElement,\n pointerY: number,\n): [element: Element, index: number] | undefined {\n const rows = Array.from(table.querySelectorAll('tr'))\n return findDragOverElement(rows, pointerY, 'y')\n}\n","import {\n createComputed,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n computePosition,\n offset,\n} from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nimport { assignStyles } from '../../../utils/assign-styles'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from '../context'\nimport { getDndRelatedDOMs } from '../dnd'\n\nimport {\n getDragOverColumn,\n getDragOverRow,\n} from './calc-drag-over'\n\nexport function useUpdateIndicatorPosition(host: ConnectableElement, editor: ReadonlySignal<Editor | null>, handleWidth: number): void {\n const dndContext = tableHandleDndContext.consume(host)\n const rootContext = tableHandleRootContext.consume(host)\n\n const draggingSignal = createComputed(() => {\n const context = dndContext.get()\n return context.dragging\n })\n\n const clientXSignal = createComputed(() => {\n const context = dndContext.get()\n return context.x\n })\n\n const clientYSignal = createComputed(() => {\n const context = dndContext.get()\n return context.y\n })\n\n const startXSignal = createComputed(() => {\n return dndContext.get().startX\n })\n\n const startYSignal = createComputed(() => {\n return dndContext.get().startY\n })\n\n useEffect(host, () => {\n const view = getSafeEditorView(editor.get())\n if (!view) return\n\n if (!draggingSignal.get()) return\n\n const { draggingIndex, direction } = dndContext.peek()\n const x = clientXSignal.get()\n const y = clientYSignal.get()\n\n const relatedDOMs = getDndRelatedDOMs(view, rootContext.peek()?.cellPos, draggingIndex, direction)\n if (!relatedDOMs) return\n const { table } = relatedDOMs\n\n let cancelled = false\n let cleanup = () => {\n cancelled = true\n }\n\n if (direction === 'col') {\n const direction = startXSignal.get() > x ? 'left' : 'right'\n const dragOverColumn = getDragOverColumn(table, x)\n\n if (dragOverColumn) {\n const [col, index] = dragOverColumn\n dndContext.set({ ...dndContext.peek(), droppingIndex: index })\n void computePosition(col, host, {\n placement: direction === 'left' ? 'left' : 'right',\n middleware: [offset(direction === 'left' ? -1 * handleWidth : 0)],\n }).then(({ x }) => {\n if (cancelled) return\n assignStyles(host, { left: `${x}px` })\n })\n }\n\n return cleanup\n }\n\n if (direction === 'row') {\n const direction = startYSignal.get() > y ? 'up' : 'down'\n const dragOverRow = getDragOverRow(table, y)\n\n if (dragOverRow) {\n const [row, index] = dragOverRow\n dndContext.set({ ...dndContext.peek(), droppingIndex: index })\n void computePosition(row, host, {\n placement: direction === 'up' ? 'top' : 'bottom',\n middleware: [offset(direction === 'up' ? -1 * handleWidth : 0)],\n }).then(({ y }) => {\n if (cancelled) return\n assignStyles(host, { top: `${y}px` })\n })\n }\n\n return cleanup\n }\n })\n}\n","import {\n useEffect,\n type ConnectableElement,\n type SignalState,\n} from '@aria-ui/core'\n\nimport { assignStyles } from '../../../utils/assign-styles'\nimport {\n useInitDndPosition,\n type OnInitParams,\n} from '../dnd'\n\nimport type { TableHandleDropIndicatorProps } from './types'\nimport { useUpdateIndicatorPosition } from './updater'\n\nconst HANDLE_WIDTH = 2\n\n/**\n * @internal\n */\nexport function useTableHandleDropIndicator(host: ConnectableElement, { state }: { state: SignalState<TableHandleDropIndicatorProps> }): void {\n const { editor } = state\n\n useEffect(host, () => {\n assignStyles(host, {\n pointerEvents: 'none',\n position: 'absolute',\n })\n })\n\n useInitDndPosition(host, editor, onInitIndicatorPosition)\n\n useUpdateIndicatorPosition(host, editor, HANDLE_WIDTH)\n}\n\nfunction onInitIndicatorPosition({ host, direction, dragging, table }: OnInitParams): void {\n assignStyles(host, {\n display: dragging ? 'block' : 'none',\n })\n\n const tableRect = table.getBoundingClientRect()\n\n if (direction === 'col') {\n assignStyles(host, {\n width: `${HANDLE_WIDTH}px`,\n height: `${tableRect.height}px`,\n })\n }\n\n if (direction === 'row') {\n assignStyles(host, {\n width: `${tableRect.width}px`,\n height: `${HANDLE_WIDTH}px`,\n })\n }\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\nimport type { TableCommandsExtension } from '@prosekit/extensions/table'\n\nexport interface TableHandleDropIndicatorProps {\n editor: Editor<TableCommandsExtension> | null\n}\n\nexport const tableHandleDropIndicatorProps: PropDeclarations<TableHandleDropIndicatorProps> = {\n editor: { default: null },\n}\n\nexport interface TableHandleDropIndicatorEvents {}\n\nexport const tableHandleDropIndicatorEvents: EventDeclarations<TableHandleDropIndicatorEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleDropIndicator } from \"./setup\"\nimport { tableHandleDropIndicatorEvents, tableHandleDropIndicatorProps, type TableHandleDropIndicatorEvents, type TableHandleDropIndicatorProps } from \"./types\"\n\nconst TableHandleDropIndicatorElementBase: BaseElementConstructor<TableHandleDropIndicatorProps> = defineCustomElement<\n TableHandleDropIndicatorProps,\n TableHandleDropIndicatorEvents\n>({\n props: tableHandleDropIndicatorProps,\n events: tableHandleDropIndicatorEvents,\n setup: useTableHandleDropIndicator,\n})\nclass TableHandleDropIndicatorElement extends TableHandleDropIndicatorElementBase {}\n\nregisterCustomElement('prosekit-table-handle-drop-indicator', TableHandleDropIndicatorElement)\n \nexport { TableHandleDropIndicatorElement }\n","import {\n createComputed,\n createSignal,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type SetupOptions,\n type SignalState,\n type TypedEventTarget,\n} from '@aria-ui/core'\nimport {\n menuContentProps,\n useMenuContent,\n type MenuContentProps,\n} from '@aria-ui/menu/elements'\n\nimport { getStateWithDefaults } from '../../../utils/get-default-state'\nimport { tableHandleRootContext } from '../context'\n\nimport type {\n TableHandlePopoverContentEvents,\n TableHandlePopoverContentProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandlePopoverContent(\n host: ConnectableElement,\n {\n state,\n emit,\n }: SetupOptions<\n TableHandlePopoverContentProps,\n TableHandlePopoverContentEvents\n >,\n): void {\n const rootContext = tableHandleRootContext.consume(host)\n const open = createComputed(() => !!rootContext.get())\n const keyDownTarget = useKeyDownTarget(host, open)\n\n const menuContentState: SignalState<MenuContentProps> = getStateWithDefaults(\n {\n placement: state.placement,\n offset: state.offset,\n eventTarget: createSignal(keyDownTarget),\n },\n menuContentProps,\n )\n\n useMenuContent(host, { state: menuContentState, emit })\n}\n\nfunction useKeyDownTarget(\n element: ConnectableElement,\n open: ReadonlySignal<boolean>,\n): TypedEventTarget<'keydown'> {\n const keydownHandlers: Array<(event: KeyboardEvent) => void> = []\n\n useEffect(element, () => {\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.isComposing || event.defaultPrevented || !open.get()) {\n return false\n }\n keydownHandlers.forEach((handler) => handler(event))\n }\n\n document.addEventListener('keydown', handleKeydown)\n\n return () => {\n document.removeEventListener('keydown', handleKeydown)\n }\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 {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n menuContentEvents,\n menuContentProps,\n type MenuContentEvents,\n type MenuContentProps,\n} from '@aria-ui/menu/elements'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandlePopoverContentProps extends Omit<MenuContentProps, 'placement' | 'offset'> {\n /**\n * @default 'bottom-start'\n */\n placement: MenuContentProps['placement']\n\n /**\n * @default {mainAxis: -4, crossAxis: 4}\n */\n offset: MenuContentProps['offset']\n\n editor: Editor | null\n}\n\n/** @internal */\nexport const tableHandlePopoverContentProps: PropDeclarations<TableHandlePopoverContentProps> = Object.freeze({\n ...menuContentProps,\n placement: { default: 'right-start' },\n offset: { default: { mainAxis: -4, crossAxis: 4 } },\n editor: { default: null },\n})\n\nexport interface TableHandlePopoverContentEvents extends MenuContentEvents {}\n\n/** @internal */\nexport const tableHandlePopoverContentEvents: EventDeclarations<TableHandlePopoverContentEvents> = Object.freeze({\n ...menuContentEvents,\n})\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandlePopoverContent } from \"./setup\"\nimport { tableHandlePopoverContentEvents, tableHandlePopoverContentProps, type TableHandlePopoverContentEvents, type TableHandlePopoverContentProps } from \"./types\"\n\nconst TableHandlePopoverContentElementBase: BaseElementConstructor<TableHandlePopoverContentProps> = defineCustomElement<\n TableHandlePopoverContentProps,\n TableHandlePopoverContentEvents\n>({\n props: tableHandlePopoverContentProps,\n events: tableHandlePopoverContentEvents,\n setup: useTableHandlePopoverContent,\n})\nclass TableHandlePopoverContentElement extends TableHandlePopoverContentElementBase {}\n\nregisterCustomElement('prosekit-table-handle-popover-content', TableHandlePopoverContentElement)\n \nexport { TableHandlePopoverContentElement }\n","import type {\n ConnectableElement,\n SetupOptions,\n} from '@aria-ui/core'\nimport { useMenuItem } from '@aria-ui/menu/elements'\n\nimport type {\n TableHandlePopoverItemEvents,\n TableHandlePopoverItemProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandlePopoverItem(\n element: ConnectableElement,\n {\n state,\n emit,\n }: SetupOptions<TableHandlePopoverItemProps, TableHandlePopoverItemEvents>,\n): void {\n useMenuItem(element, { state, emit })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n menuItemEvents,\n menuItemProps,\n type MenuItemEvents,\n type MenuItemProps,\n} from '@aria-ui/menu'\n\nexport interface TableHandlePopoverItemProps extends MenuItemProps {}\n\n/** @internal */\nexport const tableHandlePopoverItemProps: PropDeclarations<TableHandlePopoverItemProps> = {\n ...menuItemProps,\n}\n\nexport interface TableHandlePopoverItemEvents extends MenuItemEvents {}\n\n/** @internal */\nexport const tableHandlePopoverItemEvents: EventDeclarations<TableHandlePopoverItemEvents> = {\n ...menuItemEvents,\n}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandlePopoverItem } from \"./setup\"\nimport { tableHandlePopoverItemEvents, tableHandlePopoverItemProps, type TableHandlePopoverItemEvents, type TableHandlePopoverItemProps } from \"./types\"\n\nconst TableHandlePopoverItemElementBase: BaseElementConstructor<TableHandlePopoverItemProps> = defineCustomElement<\n TableHandlePopoverItemProps,\n TableHandlePopoverItemEvents\n>({\n props: tableHandlePopoverItemProps,\n events: tableHandlePopoverItemEvents,\n setup: useTableHandlePopoverItem,\n})\nclass TableHandlePopoverItemElement extends TableHandlePopoverItemElementBase {}\n\nregisterCustomElement('prosekit-table-handle-popover-item', TableHandlePopoverItemElement)\n \nexport { TableHandlePopoverItemElement }\n","import {\n createSignal,\n type ConnectableElement,\n type ReadonlySignal,\n} from '@aria-ui/core'\nimport {\n defineDOMEventHandler,\n union,\n type Editor,\n} from '@prosekit/core'\n\nimport { useEditorExtension } from './use-editor-extension'\n\nexport function useEditorTyping(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n): ReadonlySignal<boolean> {\n const typing = createSignal(false)\n\n const handleKeypress = () => {\n typing.set(true)\n }\n\n const handlePointerMove = () => {\n typing.set(false)\n }\n\n const extension = union(\n defineDOMEventHandler('keypress', handleKeypress),\n defineDOMEventHandler('pointermove', handlePointerMove),\n )\n\n useEditorExtension(host, editor, extension)\n\n return typing\n}\n","import type { ReadonlySignal } from '@aria-ui/core'\nimport {\n createSignal,\n useEffect,\n type ConnectableElement,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nimport { getSafeEditorView } from '../utils/get-safe-editor-view'\n\n/**\n * Detect if the user is selecting text inside the editor, in which case some\n * components should be disabled or hidden.\n */\nexport function useSelecting(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n enabled: ReadonlySignal<boolean>,\n): ReadonlySignal<boolean> {\n const selecting = createSignal(false)\n const isPointerDown = createSignal(false)\n\n useEffect(host, () => {\n if (!enabled.get()) {\n return\n }\n\n const view = getSafeEditorView(editor.peek())\n if (!view) return\n\n const { dom, root } = view\n if (!root) return\n\n // When the user starts selecting text, we set the selecting signal to true.\n const handlePointerDown = () => {\n selecting.set(true)\n isPointerDown.set(true)\n }\n const handlePointerUp = () => {\n isPointerDown.set(false)\n }\n // When the user moves the pointer and the pointer is not down, we set the\n // selecting signal to false again.\n const handleMouseMove = () => {\n if (!isPointerDown.get()) {\n selecting.set(false)\n }\n }\n\n // Only listen to pointer down events on the editor\n dom.addEventListener('pointerdown', handlePointerDown)\n root.addEventListener('pointerup', handlePointerUp)\n root.addEventListener('pointermove', handleMouseMove)\n\n return () => {\n dom.removeEventListener('pointerdown', handlePointerDown)\n root.removeEventListener('pointerup', handlePointerUp)\n root.removeEventListener('pointermove', handleMouseMove)\n }\n })\n\n return selecting\n}\n","import {\n createComputed,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type Signal,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\nimport {\n moveTableColumn,\n moveTableRow,\n} from '@prosekit/extensions/table'\n\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport type { TableHandleDndContext } from '../context'\n\nexport function useDrop(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n dndContext: Signal<TableHandleDndContext>,\n): void {\n const dragging = createComputed(() => dndContext.get().dragging)\n\n useEffect(host, () => {\n const view = getSafeEditorView(editor.get())\n if (!view || !view.editable) return\n\n const ownerDocument = view.dom?.ownerDocument\n if (!ownerDocument) return\n\n const handleDrop = () => {\n if (!dragging.peek()) return\n const editorValue = editor.peek()\n if (!editorValue) return\n const { droppingIndex, draggingIndex, direction } = dndContext.peek()\n\n // Validate indices\n if (draggingIndex < 0 || droppingIndex < 0) {\n console.warn('[prosekit] Invalid drag indices:', { draggingIndex, droppingIndex })\n return\n }\n\n if (direction === 'row') {\n editorValue.exec(moveTableRow({\n from: draggingIndex,\n to: droppingIndex,\n }))\n return\n }\n if (direction === 'col') {\n editorValue.exec(moveTableColumn({\n from: draggingIndex,\n to: droppingIndex,\n }))\n return\n }\n }\n\n // To make `drop` event work, we need to prevent the default behavior of the\n // `dragover` event for drop zone. Here we set the whole document as the\n // drop zone so that even the mouse moves outside the editor, the `drop`\n // event will still be triggered.\n const handleDragOver = (event: DragEvent) => {\n if (!dragging.peek()) return\n event.preventDefault()\n const prev = dndContext.peek()\n\n dndContext.set({\n ...prev,\n dragging: true,\n x: event.clientX,\n y: event.clientY,\n })\n }\n\n const handleDragEnd = () => {\n if (!dragging.peek()) return\n const prev = dndContext.peek()\n dndContext.set({\n ...prev,\n dragging: false,\n })\n }\n\n ownerDocument.addEventListener('dragover', handleDragOver)\n ownerDocument.addEventListener('drop', handleDrop)\n ownerDocument.addEventListener('dragend', handleDragEnd)\n return () => {\n ownerDocument.removeEventListener('dragover', handleDragOver)\n ownerDocument.removeEventListener('drop', handleDrop)\n ownerDocument.removeEventListener('dragend', handleDragEnd)\n }\n })\n}\n","import type { EditorView } from '@prosekit/pm/view'\nimport {\n cellAround,\n TableMap,\n} from 'prosemirror-tables'\n\nexport interface HoveringCellInfo {\n rowIndex: number\n colIndex: number\n cellPos: number\n rowFirstCellPos: number\n colFirstCellPos: number\n}\n\nexport interface DndInfo {\n dragging: boolean\n direction: 'row' | 'col'\n draggingIndex: number\n droppingIndex: number\n x: number\n y: number\n startX: number\n startY: number\n}\n\nexport function isHoveringCellInfoEqual(\n a?: HoveringCellInfo | null,\n b?: HoveringCellInfo | null,\n): boolean {\n if (!a && !b) return true\n if (!a || !b) return false\n return (\n a.rowIndex === b.rowIndex\n && a.colIndex === b.colIndex\n && a.cellPos === b.cellPos\n && a.rowFirstCellPos === b.rowFirstCellPos\n && a.colFirstCellPos === b.colFirstCellPos\n )\n}\n\n/**\n * Copied from https://github.com/ProseMirror/prosemirror-tables/blob/v1.5.0/src/columnresizing.ts#L256\n *\n * @internal\n */\nfunction domCellAround(target: HTMLElement | null): HTMLElement | null {\n while (target && target.nodeName != 'TD' && target.nodeName != 'TH') {\n target = target.classList?.contains('ProseMirror')\n ? null\n : (target.parentNode as HTMLElement | null)\n }\n return target\n}\n\nexport function getHoveringCell(\n view: EditorView,\n event: MouseEvent,\n): HoveringCellInfo | undefined {\n const domCell = domCellAround(event.target as HTMLElement | null)\n if (!domCell) return\n\n const { left, top, width, height } = domCell.getBoundingClientRect()\n const eventPos = view.posAtCoords({\n // Use the center coordinates of the cell to ensure we're within the\n // selected cell. This prevents potential issues when the mouse is on the\n // border of two cells.\n left: left + width / 2,\n top: top + height / 2,\n })\n if (!eventPos) return\n\n const $cellPos = cellAround(view.state.doc.resolve(eventPos.pos))\n if (!$cellPos) return\n\n const map = TableMap.get($cellPos.node(-1))\n const tableStart = $cellPos.start(-1)\n const cellRect = map.findCell($cellPos.pos - tableStart)\n const rowIndex = cellRect.top\n const colIndex = cellRect.left\n\n return {\n rowIndex,\n colIndex,\n cellPos: $cellPos.pos,\n rowFirstCellPos: getCellPos(map, tableStart, rowIndex, 0),\n colFirstCellPos: getCellPos(map, tableStart, 0, colIndex),\n }\n}\n\nfunction getCellPos(\n map: TableMap,\n tableStart: number,\n rowIndex: number,\n colIndex: number,\n) {\n const cellIndex = getCellIndex(map, rowIndex, colIndex)\n const posInTable = map.map[cellIndex]\n return tableStart + posInTable\n}\n\nfunction getCellIndex(\n map: TableMap,\n rowIndex: number,\n colIndex: number,\n): number {\n return map.width * rowIndex + colIndex\n}\n","import {\n createComputed,\n createSignal,\n useEffect,\n type ConnectableElement,\n type ReadonlySignal,\n type Signal,\n type SignalState,\n} from '@aria-ui/core'\nimport {\n defineDOMEventHandler,\n type Editor,\n} from '@prosekit/core'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { useEditorExtension } from '../../../hooks/use-editor-extension'\nimport { useEditorTyping } from '../../../hooks/use-editor-typing'\nimport { useScrolling } from '../../../hooks/use-scrolling'\nimport { useSelecting } from '../../../hooks/use-selecting'\nimport {\n defaultTableHandleDndContext,\n tableHandleDndContext,\n tableHandleRootContext,\n type TableHandleDndContext,\n type TableHandleRootContext,\n} from '../context'\nimport { useDrop } from '../hooks/use-drop'\nimport {\n getHoveringCell,\n isHoveringCellInfoEqual,\n type HoveringCellInfo,\n} from '../utils'\n\nimport type { TableHandleRootProps } from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleRoot(\n host: ConnectableElement,\n { state }: { state: SignalState<TableHandleRootProps> },\n): void {\n const { editor } = state\n\n const context = createSignal<TableHandleRootContext>(null)\n const dndContext = createSignal<TableHandleDndContext>(defaultTableHandleDndContext)\n\n const hoveringCell = useHoveringCell(host, editor)\n const typing = useEditorTyping(host, editor)\n const isInTable = createComputed(() => !!hoveringCell.get())\n const selecting = useSelecting(host, editor, isInTable)\n const scrolling = useScrolling(host)\n const canShow = createComputed(() => {\n return !typing.get() && !selecting.get() && !scrolling.get()\n })\n\n useEffect(host, () => {\n context.set(canShow.get() ? hoveringCell.get() : null)\n })\n\n tableHandleRootContext.provide(host, context)\n tableHandleDndContext.provide(host, dndContext)\n\n useDrop(host, editor, dndContext)\n}\n\nfunction useHoveringCell(\n host: ConnectableElement,\n editor: ReadonlySignal<Editor | null>,\n): Signal<HoveringCellInfo | null> {\n const hoveringCell = createSignal<HoveringCellInfo | null>(null)\n\n const extension = defineCellHoverHandler((curr: HoveringCellInfo | null) => {\n const prev = hoveringCell.peek()\n if (!isHoveringCellInfoEqual(prev, curr)) {\n hoveringCell.set(curr)\n }\n })\n\n useEditorExtension(host, editor, extension)\n\n return hoveringCell\n}\n\nfunction defineCellHoverHandler(\n handler: (hoveringCell: HoveringCellInfo | null) => void,\n) {\n const pointerHandler = (view: EditorView, event: PointerEvent) => {\n const hoveringCell = getHoveringCell(view, event)\n return handler(hoveringCell ?? null)\n }\n return defineDOMEventHandler('pointerover', pointerHandler)\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandleRootProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n}\n\n/** @internal */\nexport const tableHandleRootProps: PropDeclarations<TableHandleRootProps> = {\n editor: { default: null },\n}\n\n/** @internal */\nexport interface TableHandleRootEvents {}\n\n/** @internal */\nexport const tableHandleRootEvents: EventDeclarations<TableHandleRootEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleRoot } from \"./setup\"\nimport { tableHandleRootEvents, tableHandleRootProps, type TableHandleRootEvents, type TableHandleRootProps } from \"./types\"\n\nconst TableHandleRootElementBase: BaseElementConstructor<TableHandleRootProps> = defineCustomElement<\n TableHandleRootProps,\n TableHandleRootEvents\n>({\n props: tableHandleRootProps,\n events: tableHandleRootEvents,\n setup: useTableHandleRoot,\n})\nclass TableHandleRootElement extends TableHandleRootElementBase {}\n\nregisterCustomElement('prosekit-table-handle-root', TableHandleRootElement)\n \nexport { TableHandleRootElement }\n","import {\n createComputed,\n createSignal,\n defineEmit,\n useAttribute,\n useEffect,\n type ConnectableElement,\n type SetupOptions,\n} from '@aria-ui/core'\nimport {\n menuRootEvents,\n menuRootProps,\n useMenuRoot,\n} from '@aria-ui/menu/elements'\nimport { useOverlayPositionerState } from '@aria-ui/overlay/elements'\nimport { usePresence } from '@aria-ui/presence'\n\nimport { getStateWithDefaults } from '../../../utils/get-default-state'\nimport { getSafeEditorView } from '../../../utils/get-safe-editor-view'\nimport { tableHandleRootContext } from '../context'\n\nimport type {\n TableHandleRowRootEvents,\n TableHandleRowRootProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleRowRoot(\n host: ConnectableElement,\n { state }: SetupOptions<TableHandleRowRootProps, TableHandleRowRootEvents>,\n): void {\n const { editor, ...overlayState } = state\n\n const rootContext = tableHandleRootContext.consume(host)\n\n const rowFirstCellPos = createComputed<number | undefined>(() => {\n return rootContext.get()?.rowFirstCellPos\n })\n\n const referenceCell = createComputed<HTMLElement | null>(() => {\n const pos = rowFirstCellPos.get()\n const view = getSafeEditorView(editor.get())\n if (!pos || !view) return null\n return view.nodeDOM(pos) as HTMLElement | null\n })\n\n const contentOpen = createSignal(false)\n\n // Close the menu when the hovering element is changed\n // TODO: add a delay\n useEffect(host, () => {\n rowFirstCellPos.get()\n contentOpen.set(false)\n })\n\n useOverlayPositionerState(host, overlayState, {\n reference: referenceCell,\n })\n\n const presence = createComputed(() => !!referenceCell.get())\n useAttribute(host, 'data-state', () => (presence.get() ? 'open' : 'closed'))\n usePresence(host, presence)\n\n const menuRootState = getStateWithDefaults(\n {\n open: contentOpen,\n },\n menuRootProps,\n )\n\n useMenuRoot(host, {\n state: menuRootState,\n emit: defineEmit(host, menuRootEvents),\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport {\n overlayPositionerProps,\n type OverlayPositionerEvents,\n type OverlayPositionerProps,\n} from '@aria-ui/overlay'\nimport type { Placement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\n\nexport interface TableHandleRowRootProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The placement of the popover, relative to the hovered table cell.\n *\n * @default \"left\"\n */\n placement: Placement\n\n /**\n * Whether to use the browser [Popover API](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API)\n * to place the floating element on top of other page content.\n *\n * @default false\n */\n hoist: boolean\n\n /**\n * @default false\n * @hidden\n */\n flip: boolean\n\n /**\n * @default false\n * @hidden\n */\n shift: boolean\n\n /**\n * @default true\n * @hidden\n */\n hide: boolean\n}\n\n/** @internal */\nexport const tableHandleRowRootProps: PropDeclarations<TableHandleRowRootProps> = {\n ...overlayPositionerProps,\n editor: { default: null },\n placement: { default: 'left' },\n\n // Enabling `hoist` will cause the popover to have a small delay when\n // scrolling the page.\n hoist: { default: false },\n\n flip: { default: false },\n shift: { default: false },\n hide: { default: true },\n}\n\n/** @internal */\nexport interface TableHandleRowRootEvents extends OverlayPositionerEvents {}\n\n/** @internal */\nexport const tableHandleRowRootEvents: EventDeclarations<TableHandleRowRootEvents> = {}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleRowRoot } from \"./setup\"\nimport { tableHandleRowRootEvents, tableHandleRowRootProps, type TableHandleRowRootEvents, type TableHandleRowRootProps } from \"./types\"\n\nconst TableHandleRowRootElementBase: BaseElementConstructor<TableHandleRowRootProps> = defineCustomElement<\n TableHandleRowRootProps,\n TableHandleRowRootEvents\n>({\n props: tableHandleRowRootProps,\n events: tableHandleRowRootEvents,\n setup: useTableHandleRowRoot,\n})\nclass TableHandleRowRootElement extends TableHandleRowRootElementBase {}\n\nregisterCustomElement('prosekit-table-handle-row-root', TableHandleRowRootElement)\n \nexport { TableHandleRowRootElement }\n","import {\n useEffect,\n useEventListener,\n type ConnectableElement,\n type SetupOptions,\n} from '@aria-ui/core'\nimport { useMenuTrigger } from '@aria-ui/menu/elements'\nimport { selectTableRow } from '@prosekit/extensions/table'\n\nimport {\n tableHandleDndContext,\n tableHandleRootContext,\n} from '../context'\nimport { useEmptyImage } from '../hooks/use-empty-image'\n\nimport type {\n TableHandleRowTriggerEvents,\n TableHandleRowTriggerProps,\n} from './types'\n\n/**\n * @internal\n */\nexport function useTableHandleRowTrigger(\n host: ConnectableElement,\n { state }: SetupOptions<TableHandleRowTriggerProps, TableHandleRowTriggerEvents>,\n): void {\n useMenuTrigger(host)\n\n const context = tableHandleRootContext.consume(host)\n\n const dndContext = tableHandleDndContext.consume(host)\n\n useEventListener(host, 'pointerdown', () => {\n const editor = state.editor.peek()\n const cellPos = context.peek()?.cellPos\n if (!editor || !cellPos) return\n editor.exec(selectTableRow({ head: cellPos }))\n })\n\n useEffect(host, () => {\n host.draggable = true\n })\n\n const getEmptyImage = useEmptyImage(host)\n\n useEventListener(host, 'dragstart', (event: DragEvent) => {\n const dataTransfer = event.dataTransfer\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move'\n const emptyImage = getEmptyImage()\n if (emptyImage) {\n dataTransfer.setDragImage(emptyImage, 0, 0)\n }\n }\n const prev = dndContext.peek()\n const index = context.peek()?.rowIndex\n\n if (index == null || index < 0) {\n console.warn('[prosekit] Invalid row index for drag operation:', index)\n event.preventDefault()\n return\n }\n\n dndContext.set({\n ...prev,\n direction: 'row',\n dragging: true,\n draggingIndex: index,\n startX: event.clientX,\n startY: event.clientY,\n })\n })\n}\n","import type {\n EventDeclarations,\n PropDeclarations,\n} from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\nimport type { defineTableCommands } from '@prosekit/extensions/table'\n\ntype TableCommandsExtension = ReturnType<typeof defineTableCommands>\n\nexport interface TableHandleRowTriggerProps {\n editor: Editor<TableCommandsExtension> | null\n}\n\n/** @internal */\nexport const tableHandleRowTriggerProps: PropDeclarations<TableHandleRowTriggerProps> = {\n editor: { default: null },\n}\n\nexport interface TableHandleRowTriggerEvents {\n select: CustomEvent<void>\n}\n\n/** @internal */\nexport const tableHandleRowTriggerEvents: EventDeclarations<TableHandleRowTriggerEvents> = {\n select: {},\n}\n","import { defineCustomElement, registerCustomElement, type BaseElementConstructor } from \"@aria-ui/core\"\n\nimport { useTableHandleRowTrigger } from \"./setup\"\nimport { tableHandleRowTriggerEvents, tableHandleRowTriggerProps, type TableHandleRowTriggerEvents, type TableHandleRowTriggerProps } from \"./types\"\n\nconst TableHandleRowTriggerElementBase: BaseElementConstructor<TableHandleRowTriggerProps> = defineCustomElement<\n TableHandleRowTriggerProps,\n TableHandleRowTriggerEvents\n>({\n props: tableHandleRowTriggerProps,\n events: tableHandleRowTriggerEvents,\n setup: useTableHandleRowTrigger,\n})\nclass TableHandleRowTriggerElement extends TableHandleRowTriggerElementBase {}\n\nregisterCustomElement('prosekit-table-handle-row-trigger', TableHandleRowTriggerElement)\n \nexport { TableHandleRowTriggerElement }\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prosekit/web",
3
3
  "type": "module",
4
- "version": "0.7.6",
4
+ "version": "0.7.7",
5
5
  "private": false,
6
6
  "description": "A collection of web components for ProseKit",
7
7
  "author": {
@@ -77,17 +77,17 @@
77
77
  "@aria-ui/tooltip": "^0.0.30",
78
78
  "@floating-ui/dom": "^1.7.4",
79
79
  "@ocavue/utils": "^0.8.1",
80
- "@zag-js/dom-query": "^1.27.1",
80
+ "@zag-js/dom-query": "^1.28.0",
81
81
  "prosemirror-tables": "^1.8.1",
82
- "@prosekit/core": "^0.8.6",
83
- "@prosekit/extensions": "^0.12.1",
82
+ "@prosekit/core": "^0.8.7",
83
+ "@prosekit/extensions": "^0.12.2",
84
84
  "@prosekit/pm": "^0.1.14"
85
85
  },
86
86
  "devDependencies": {
87
- "tsdown": "^0.16.2",
87
+ "tsdown": "^0.16.5",
88
88
  "type-fest": "^5.2.0",
89
89
  "typescript": "~5.9.3",
90
- "vitest": "^4.0.8",
90
+ "vitest": "^4.0.10",
91
91
  "@prosekit/config-tsdown": "0.0.0",
92
92
  "@prosekit/config-vitest": "0.0.0"
93
93
  },