@prosekit/web 0.8.0-beta.2 → 0.8.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/get-safe-editor-view.js +0 -2
  2. package/dist/get-safe-editor-view.js.map +1 -1
  3. package/dist/prosekit-web-autocomplete.d.ts +47 -19
  4. package/dist/prosekit-web-autocomplete.d.ts.map +1 -1
  5. package/dist/prosekit-web-autocomplete.js +47 -27
  6. package/dist/prosekit-web-autocomplete.js.map +1 -1
  7. package/dist/prosekit-web-block-handle.d.ts +43 -16
  8. package/dist/prosekit-web-block-handle.d.ts.map +1 -1
  9. package/dist/prosekit-web-block-handle.js +43 -33
  10. package/dist/prosekit-web-block-handle.js.map +1 -1
  11. package/dist/prosekit-web-drop-indicator.d.ts +3 -4
  12. package/dist/prosekit-web-drop-indicator.d.ts.map +1 -1
  13. package/dist/prosekit-web-drop-indicator.js +3 -3
  14. package/dist/prosekit-web-drop-indicator.js.map +1 -1
  15. package/dist/prosekit-web-inline-popover.d.ts +34 -10
  16. package/dist/prosekit-web-inline-popover.d.ts.map +1 -1
  17. package/dist/prosekit-web-inline-popover.js +31 -19
  18. package/dist/prosekit-web-inline-popover.js.map +1 -1
  19. package/dist/prosekit-web-menu.d.ts +121 -5
  20. package/dist/prosekit-web-menu.d.ts.map +1 -1
  21. package/dist/prosekit-web-menu.js +115 -10
  22. package/dist/prosekit-web-menu.js.map +1 -1
  23. package/dist/prosekit-web-popover.d.ts +64 -5
  24. package/dist/prosekit-web-popover.d.ts.map +1 -1
  25. package/dist/prosekit-web-popover.js +60 -7
  26. package/dist/prosekit-web-popover.js.map +1 -1
  27. package/dist/prosekit-web-resizable.d.ts +14 -7
  28. package/dist/prosekit-web-resizable.d.ts.map +1 -1
  29. package/dist/prosekit-web-resizable.js +14 -12
  30. package/dist/prosekit-web-resizable.js.map +1 -1
  31. package/dist/prosekit-web-table-handle.d.ts +73 -36
  32. package/dist/prosekit-web-table-handle.d.ts.map +1 -1
  33. package/dist/prosekit-web-table-handle.js +73 -65
  34. package/dist/prosekit-web-table-handle.js.map +1 -1
  35. package/dist/prosekit-web-tooltip.d.ts +61 -5
  36. package/dist/prosekit-web-tooltip.d.ts.map +1 -1
  37. package/dist/prosekit-web-tooltip.js +58 -7
  38. package/dist/prosekit-web-tooltip.js.map +1 -1
  39. package/dist/prosekit-web.d.ts +0 -3
  40. package/dist/prosekit-web.d.ts.map +1 -1
  41. package/dist/prosekit-web.js +0 -2
  42. package/dist/prosekit-web.js.map +1 -1
  43. package/dist/use-editor-extension.js +0 -2
  44. package/dist/use-editor-extension.js.map +1 -1
  45. package/dist/use-scrolling.js +0 -4
  46. package/dist/use-scrolling.js.map +1 -1
  47. package/package.json +8 -8
  48. package/src/components/autocomplete/autocomplete-empty.ts +3 -4
  49. package/src/components/autocomplete/autocomplete-item.ts +11 -1
  50. package/src/components/autocomplete/autocomplete-popup.ts +11 -1
  51. package/src/components/autocomplete/autocomplete-positioner.ts +17 -1
  52. package/src/components/autocomplete/autocomplete-root.ts +5 -1
  53. package/src/components/block-handle/block-handle-add.ts +3 -1
  54. package/src/components/block-handle/block-handle-draggable.ts +9 -1
  55. package/src/components/block-handle/block-handle-popup.ts +9 -1
  56. package/src/components/block-handle/block-handle-positioner.ts +17 -1
  57. package/src/components/block-handle/block-handle-root.ts +5 -1
  58. package/src/components/drop-indicator/drop-indicator.ts +3 -1
  59. package/src/components/inline-popover/inline-popover-popup.ts +9 -1
  60. package/src/components/inline-popover/inline-popover-positioner.ts +17 -1
  61. package/src/components/inline-popover/inline-popover-root.ts +8 -1
  62. package/src/components/menu/index.ts +140 -43
  63. package/src/components/popover/index.ts +76 -23
  64. package/src/components/resizable/resizable-handle.ts +3 -1
  65. package/src/components/resizable/resizable-root.ts +11 -1
  66. package/src/components/table-handle/table-handle-column-menu-root.ts +3 -1
  67. package/src/components/table-handle/table-handle-column-menu-trigger.ts +3 -1
  68. package/src/components/table-handle/table-handle-column-popup.ts +9 -1
  69. package/src/components/table-handle/table-handle-column-positioner.ts +17 -1
  70. package/src/components/table-handle/table-handle-drag-preview.ts +3 -1
  71. package/src/components/table-handle/table-handle-drop-indicator.ts +3 -1
  72. package/src/components/table-handle/table-handle-root.ts +3 -1
  73. package/src/components/table-handle/table-handle-row-menu-root.ts +3 -1
  74. package/src/components/table-handle/table-handle-row-menu-trigger.ts +3 -1
  75. package/src/components/table-handle/table-handle-row-popup.ts +9 -1
  76. package/src/components/table-handle/table-handle-row-positioner.ts +17 -1
  77. package/src/components/tooltip/index.ts +73 -22
@@ -8,7 +8,6 @@ import { useAttribute } from "@aria-ui/utils";
8
8
  import { isElement, isHTMLElement, isTextNode, throttle } from "@ocavue/utils";
9
9
  import { Fragment, Slice } from "@prosekit/pm/model";
10
10
  import { NodeSelection } from "@prosekit/pm/state";
11
- //#region src/components/block-handle/context.ts
12
11
  /**
13
12
  * @internal
14
13
  */
@@ -26,8 +25,6 @@ const blockHandleStoreContext = createContext("prosekit-block-handle-store");
26
25
  * @internal
27
26
  */
28
27
  const blockHandleOverlayStoreContext = createContext("prosekit-block-handle-overlay-store");
29
- //#endregion
30
- //#region src/components/block-handle/block-handle-add.ts
31
28
  /** @internal */
32
29
  const BlockHandleAddPropsDeclaration = /* @__PURE__ */ defineProps({ editor: {
33
30
  default: null,
@@ -53,18 +50,16 @@ function setupBlockHandleAdd(host, props) {
53
50
  }
54
51
  const BlockHandleAddElementBase = defineCustomElement(setupBlockHandleAdd, BlockHandleAddPropsDeclaration);
55
52
  /**
56
- * @public
53
+ * `<prosekit-block-handle-add>` custom element.
54
+ *
55
+ * Properties: {@link BlockHandleAddProps}
57
56
  */
58
57
  var BlockHandleAddElement = class extends BlockHandleAddElementBase {};
59
58
  /** @internal */
60
59
  function registerBlockHandleAddElement() {
61
60
  registerCustomElement("prosekit-block-handle-add", BlockHandleAddElement);
62
61
  }
63
- //#endregion
64
- //#region src/constants.ts
65
62
  const DRAGGING_CLASS_NAME = "prosekit-dragging";
66
- //#endregion
67
- //#region src/utils/get-client-rect.ts
68
63
  /**
69
64
  * Similar to `element.getBoundingClientRect`, but handles `display: contents` CSS
70
65
  * property and optionally includes margins and outlines.
@@ -116,11 +111,7 @@ function addExtra(element, rect, options) {
116
111
  left: rect.left - Math.max(marginLeft, outlineLeft)
117
112
  };
118
113
  }
119
- //#endregion
120
- //#region src/utils/max-z-index.ts
121
114
  const maxZIndex = "2147483647";
122
- //#endregion
123
- //#region src/components/block-handle/set-drag-preview.ts
124
115
  /**
125
116
  * Sets a drag preview image for the given element and ensures the preview position
126
117
  * relative to the pointer is correct.
@@ -173,8 +164,6 @@ function setDragPreview(event, element) {
173
164
  container.remove();
174
165
  });
175
166
  }
176
- //#endregion
177
- //#region src/components/block-handle/block-handle-draggable.ts
178
167
  /** @internal */
179
168
  const BlockHandleDraggablePropsDeclaration = /* @__PURE__ */ defineProps({ editor: {
180
169
  default: null,
@@ -240,15 +229,21 @@ function setViewDragging(view, hoverState) {
240
229
  }
241
230
  const BlockHandleDraggableElementBase = defineCustomElement(setupBlockHandleDraggable, BlockHandleDraggablePropsDeclaration);
242
231
  /**
243
- * @public
232
+ * `<prosekit-block-handle-draggable>` custom element.
233
+ *
234
+ * Properties: {@link BlockHandleDraggableProps}
235
+ *
236
+ * Data attributes:
237
+ *
238
+ * | Attribute | Description |
239
+ * | --- | --- |
240
+ * | `data-dragging` | Present when the element is being dragged |
244
241
  */
245
242
  var BlockHandleDraggableElement = class extends BlockHandleDraggableElementBase {};
246
243
  /** @internal */
247
244
  function registerBlockHandleDraggableElement() {
248
245
  registerCustomElement("prosekit-block-handle-draggable", BlockHandleDraggableElement);
249
246
  }
250
- //#endregion
251
- //#region src/components/block-handle/block-handle-popup.ts
252
247
  /** @internal */
253
248
  const BlockHandlePopupPropsDeclaration = OverlayPopupPropsDeclaration;
254
249
  /** @internal */
@@ -257,15 +252,21 @@ function setupBlockHandlePopup(host, _props) {
257
252
  }
258
253
  const BlockHandlePopupElementBase = defineCustomElement(setupBlockHandlePopup, BlockHandlePopupPropsDeclaration);
259
254
  /**
260
- * @public
255
+ * `<prosekit-block-handle-popup>` custom element.
256
+ *
257
+ * Properties: {@link BlockHandlePopupProps}
258
+ *
259
+ * Data attributes:
260
+ *
261
+ * | Attribute | Description |
262
+ * | --- | --- |
263
+ * | `data-state` | `"open"` when the block handle is visible, `"closed"` otherwise |
261
264
  */
262
265
  var BlockHandlePopupElement = class extends BlockHandlePopupElementBase {};
263
266
  /** @internal */
264
267
  function registerBlockHandlePopupElement() {
265
268
  registerCustomElement("prosekit-block-handle-popup", BlockHandlePopupElement);
266
269
  }
267
- //#endregion
268
- //#region src/components/block-handle/block-handle-positioner.ts
269
270
  /** @internal */
270
271
  const BlockHandlePositionerPropsDeclaration = /* @__PURE__ */ defineProps({
271
272
  ...OverlayPositionerPropsDeclaration,
@@ -301,29 +302,39 @@ function setupBlockHandlePositioner(host, props) {
301
302
  }
302
303
  const BlockHandlePositionerElementBase = defineCustomElement(setupBlockHandlePositioner, BlockHandlePositionerPropsDeclaration);
303
304
  /**
304
- * @public
305
+ * `<prosekit-block-handle-positioner>` custom element.
306
+ *
307
+ * Properties: {@link BlockHandlePositionerProps}
308
+ *
309
+ * Data attributes:
310
+ *
311
+ * | Attribute | Description |
312
+ * | --- | --- |
313
+ * | `data-state` | `"open"` when the block handle is visible, `"closed"` otherwise |
314
+ * | `data-side` | The side of the anchor element the positioner is on |
315
+ * | `data-align` | The alignment of the positioner relative to the anchor element |
316
+ *
317
+ * CSS variables:
318
+ *
319
+ * | Variable | Description |
320
+ * | --- | --- |
321
+ * | `--transform-origin` | The coordinates that this element is anchored to. Useful for scale animations. |
305
322
  */
306
323
  var BlockHandlePositionerElement = class extends BlockHandlePositionerElementBase {};
307
324
  /** @internal */
308
325
  function registerBlockHandlePositionerElement() {
309
326
  registerCustomElement("prosekit-block-handle-positioner", BlockHandlePositionerElement);
310
327
  }
311
- //#endregion
312
- //#region src/utils/prefers-reduced-motion.ts
313
328
  function prefersReducedMotion() {
314
329
  if (typeof window === "undefined") return false;
315
330
  return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
316
331
  }
317
- //#endregion
318
- //#region src/components/block-handle/hover-state.ts
319
332
  /**
320
333
  * @internal
321
334
  */
322
335
  function isHoverStateEqual(a, b) {
323
336
  return a.pos === b.pos && a.node.eq(b.node);
324
337
  }
325
- //#endregion
326
- //#region src/components/block-handle/pointer-move.ts
327
338
  function defineElementHoverHandler(handler) {
328
339
  const handleElement = (node, pos, element, parentElement) => {
329
340
  handler({
@@ -490,8 +501,6 @@ const fallbackRect = Object.freeze({
490
501
  x: -9999,
491
502
  y: -9999
492
503
  });
493
- //#endregion
494
- //#region src/components/block-handle/use-hover-extension.ts
495
504
  function useHoverExtension(host, getEditor, handler) {
496
505
  const invalidTimeoutMs = prefersReducedMotion() ? 0 : 180;
497
506
  let invalidTimeoutId;
@@ -524,8 +533,6 @@ function useHoverExtension(host, getEditor, handler) {
524
533
  }
525
534
  }));
526
535
  }
527
- //#endregion
528
- //#region src/components/block-handle/block-handle-root.ts
529
536
  /** @internal */
530
537
  const BlockHandleRootPropsDeclaration = /* @__PURE__ */ defineProps({ editor: {
531
538
  default: null,
@@ -567,14 +574,17 @@ function setupBlockHandleRoot(host, props) {
567
574
  }
568
575
  const BlockHandleRootElementBase = defineCustomElement(setupBlockHandleRoot, BlockHandleRootPropsDeclaration);
569
576
  /**
570
- * @public
577
+ * `<prosekit-block-handle-root>` custom element.
578
+ *
579
+ * Properties: {@link BlockHandleRootProps}
580
+ *
581
+ * Events: {@link BlockHandleRootEvents}
571
582
  */
572
583
  var BlockHandleRootElement = class extends BlockHandleRootElementBase {};
573
584
  /** @internal */
574
585
  function registerBlockHandleRootElement() {
575
586
  registerCustomElement("prosekit-block-handle-root", BlockHandleRootElement);
576
587
  }
577
- //#endregion
578
588
  export { BlockHandleAddElement, BlockHandleAddPropsDeclaration, BlockHandleDraggableElement, BlockHandleDraggablePropsDeclaration, BlockHandlePopupElement, BlockHandlePopupPropsDeclaration, BlockHandlePositionerElement, BlockHandlePositionerPropsDeclaration, BlockHandleRootElement, BlockHandleRootPropsDeclaration, BlockHandleStateChangeEvent, registerBlockHandleAddElement, registerBlockHandleDraggableElement, registerBlockHandlePopupElement, registerBlockHandlePositionerElement, registerBlockHandleRootElement, setupBlockHandleAdd, setupBlockHandleDraggable, setupBlockHandlePopup, setupBlockHandlePositioner, setupBlockHandleRoot };
579
589
 
580
590
  //# sourceMappingURL=prosekit-web-block-handle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-web-block-handle.js","names":[],"sources":["../src/components/block-handle/context.ts","../src/components/block-handle/block-handle-add.ts","../src/constants.ts","../src/utils/get-client-rect.ts","../src/utils/max-z-index.ts","../src/components/block-handle/set-drag-preview.ts","../src/components/block-handle/block-handle-draggable.ts","../src/components/block-handle/block-handle-popup.ts","../src/components/block-handle/block-handle-positioner.ts","../src/utils/prefers-reduced-motion.ts","../src/components/block-handle/hover-state.ts","../src/components/block-handle/pointer-move.ts","../src/components/block-handle/use-hover-extension.ts","../src/components/block-handle/block-handle-root.ts"],"sourcesContent":["import { createContext, createSignal, type Context, type Signal } from '@aria-ui/core'\nimport type { OverlayStore } from '@aria-ui/elements/overlay'\n\nimport type { HoverState } from './hover-state.ts'\n\n/**\n * @internal\n */\nexport class BlockHandleStore {\n readonly hoverState: Signal<HoverState | undefined> = createSignal<HoverState | undefined>(undefined)\n readonly dragging: Signal<boolean> = createSignal(false)\n}\n\n/**\n * @internal\n */\nexport const blockHandleStoreContext: Context<BlockHandleStore> = createContext<BlockHandleStore>('prosekit-block-handle-store')\n\n/**\n * @internal\n */\nexport const blockHandleOverlayStoreContext: Context<OverlayStore> = createContext<OverlayStore>('prosekit-block-handle-overlay-store')\n","import {\n defineCustomElement,\n defineProps,\n registerCustomElement,\n useEventListener,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { insertDefaultBlock, type Editor } from '@prosekit/core'\n\nimport { blockHandleStoreContext } from './context.ts'\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 BlockHandleAddPropsDeclaration: PropsDeclaration<BlockHandleAddProps> = /* @__PURE__ */ defineProps<BlockHandleAddProps>({\n editor: { default: null, attribute: false, type: 'json' },\n})\n\n/**\n * @internal\n */\nexport function setupBlockHandleAdd(\n host: HostElement,\n props: State<BlockHandleAddProps>,\n): void {\n const getStore = blockHandleStoreContext.consume(host)\n\n useEventListener(host, 'pointerdown', (event) => {\n event.preventDefault()\n\n const store = getStore()\n const editor = props.editor.get()\n const hoverState = store?.hoverState.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 store?.hoverState.set(undefined)\n })\n}\n\nconst BlockHandleAddElementBase: HostElementConstructor<BlockHandleAddProps> = defineCustomElement(\n setupBlockHandleAdd,\n BlockHandleAddPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class BlockHandleAddElement extends BlockHandleAddElementBase {}\n\n/** @internal */\nexport function registerBlockHandleAddElement(): void {\n registerCustomElement('prosekit-block-handle-add', BlockHandleAddElement)\n}\n","export const DRAGGING_CLASS_NAME = 'prosekit-dragging'\n","interface Rect {\n top: number\n bottom: number\n right: number\n left: number\n}\n\ninterface IncludeExtraOptions {\n top?: boolean\n bottom?: boolean\n right?: boolean\n left?: boolean\n}\n\n/**\n * Similar to `element.getBoundingClientRect`, but handles `display: contents` CSS\n * property and optionally includes margins and outlines.\n */\nexport function getClientRect(element: Element, includeExtra?: IncludeExtraOptions | false): Rect {\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 = [...element.children]\n const rects = children.map(child => getClientRect(child, includeExtra))\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 includeExtra ? addExtra(element, rect, includeExtra) : rect\n}\n\nfunction addExtra(element: Element, rect: Rect, options: IncludeExtraOptions): Rect {\n const view = element.ownerDocument?.defaultView\n if (!view) {\n return rect\n }\n\n const style = view.getComputedStyle(element)\n const marginTop = options.top ? Number.parseFloat(style.marginTop) || 0 : 0\n const marginBottom = options.bottom ? Number.parseFloat(style.marginBottom) || 0 : 0\n const marginRight = options.right ? Number.parseFloat(style.marginRight) || 0 : 0\n const marginLeft = options.left ? Number.parseFloat(style.marginLeft) || 0 : 0\n\n const outlineWidth = Number.parseFloat(style.outlineWidth) || 0\n const outlineOffset = Number.parseFloat(style.outlineOffset) || 0\n const outline = Math.max(outlineWidth + outlineOffset, 0)\n const outlineTop = options.top ? outline : 0\n const outlineBottom = options.bottom ? outline : 0\n const outlineRight = options.right ? outline : 0\n const outlineLeft = options.left ? outline : 0\n\n return {\n top: rect.top - Math.max(marginTop, outlineTop),\n bottom: rect.bottom + Math.max(marginBottom, outlineBottom),\n right: rect.right + Math.max(marginRight, outlineRight),\n left: rect.left - Math.max(marginLeft, outlineLeft),\n }\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 { DRAGGING_CLASS_NAME } from '../../constants.ts'\nimport { assignStyles } from '../../utils/assign-styles.ts'\nimport { getClientRect } from '../../utils/get-client-rect.ts'\nimport { maxZIndex } from '../../utils/max-z-index.ts'\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, { left: true, right: true, top: true, bottom: true })\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 // Add some class names so that all styles applied to\n // given class names can also be applied to the drag preview.\n container.classList.add('ProseMirror', DRAGGING_CLASS_NAME)\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 = element.cloneNode(true) as HTMLElement\n\n // A hardcoded opacity.\n clonedElement.style.setProperty('opacity', '0.8', 'important')\n // Hide the outline of the cloned element.\n clonedElement.style.setProperty('outline-color', 'transparent', 'important')\n\n container.appendChild(clonedElement)\n document.body.appendChild(container)\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 defineCustomElement,\n defineProps,\n onMount,\n registerCustomElement,\n useEventListener,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { useAttribute } from '@aria-ui/utils'\nimport { isHTMLElement } from '@ocavue/utils'\nimport type { Editor } from '@prosekit/core'\nimport type { ViewDragging } from '@prosekit/extensions/drop-indicator'\nimport { Fragment, Slice } from '@prosekit/pm/model'\nimport { NodeSelection } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { DRAGGING_CLASS_NAME } from '../../constants.ts'\nimport { getSafeEditorView } from '../../utils/get-safe-editor-view.ts'\n\nimport { blockHandleStoreContext } from './context.ts'\nimport type { HoverState } from './hover-state.ts'\nimport { setDragPreview } from './set-drag-preview.ts'\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 BlockHandleDraggablePropsDeclaration: PropsDeclaration<BlockHandleDraggableProps> = /* @__PURE__ */ defineProps<\n BlockHandleDraggableProps\n>({\n editor: { default: null, attribute: false, type: 'json' },\n})\n\n/**\n * @internal\n */\nexport function setupBlockHandleDraggable(\n host: HostElement,\n props: State<BlockHandleDraggableProps>,\n): void {\n const getStore = blockHandleStoreContext.consume(host)\n\n onMount(host, () => {\n host.draggable = true\n })\n\n usePointerDownHandler(host, () => getStore()?.hoverState.get() ?? null, props.editor.get)\n\n useEventListener(host, 'dragstart', (event) => {\n const store = getStore()\n store?.dragging.set(true)\n\n const view = getSafeEditorView(props.editor.get())\n const hoverState = store?.hoverState.get()\n\n if (view && hoverState) {\n view.dom.classList.add(DRAGGING_CLASS_NAME)\n createDraggingPreview(view, hoverState, event)\n setViewDragging(view, hoverState)\n }\n })\n\n useEventListener(host, 'dragend', () => {\n const store = getStore()\n store?.dragging.set(false)\n\n const view = getSafeEditorView(props.editor.get())\n if (view) {\n view.dom.classList.remove(DRAGGING_CLASS_NAME)\n }\n })\n\n useAttribute(host, 'data-dragging', () => (getStore()?.dragging.get() ? '' : undefined))\n}\n\nfunction usePointerDownHandler(\n host: HostElement,\n getHoverState: () => HoverState | null,\n getEditor: () => Editor | null,\n) {\n useEventListener(host, 'pointerdown', () => {\n const hoverState = getHoverState()\n const editor = getEditor()\n\n if (hoverState?.pos == null || !editor?.view) {\n return\n }\n\n const { view } = editor\n view.dispatch(\n view.state.tr.setSelection(NodeSelection.create(view.state.doc, hoverState.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 event.dataTransfer.clearData()\n event.dataTransfer.setData('text/html', element.outerHTML)\n event.dataTransfer.effectAllowed = 'copyMove'\n setDragPreview(event, element)\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\nconst BlockHandleDraggableElementBase: HostElementConstructor<BlockHandleDraggableProps> = defineCustomElement(\n setupBlockHandleDraggable,\n BlockHandleDraggablePropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class BlockHandleDraggableElement extends BlockHandleDraggableElementBase {}\n\n/** @internal */\nexport function registerBlockHandleDraggableElement(): void {\n registerCustomElement('prosekit-block-handle-draggable', BlockHandleDraggableElement)\n}\n","import {\n defineCustomElement,\n registerCustomElement,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { OverlayPopupPropsDeclaration, setupOverlayPopup, type OverlayPopupProps } from '@aria-ui/elements/overlay'\n\nimport { blockHandleOverlayStoreContext } from './context.ts'\n\n/**\n * @public\n */\nexport interface BlockHandlePopupProps extends OverlayPopupProps {}\n\n/** @internal */\nexport const BlockHandlePopupPropsDeclaration: PropsDeclaration<BlockHandlePopupProps> = OverlayPopupPropsDeclaration\n\n/** @internal */\nexport function setupBlockHandlePopup(\n host: HostElement,\n _props: State<BlockHandlePopupProps>,\n): void {\n const getOverlayStore = blockHandleOverlayStoreContext.consume(host)\n setupOverlayPopup(host, getOverlayStore)\n}\n\nconst BlockHandlePopupElementBase: HostElementConstructor<BlockHandlePopupProps> = defineCustomElement(\n setupBlockHandlePopup,\n BlockHandlePopupPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class BlockHandlePopupElement extends BlockHandlePopupElementBase {}\n\n/** @internal */\nexport function registerBlockHandlePopupElement(): void {\n registerCustomElement('prosekit-block-handle-popup', BlockHandlePopupElement)\n}\n","import {\n defineCustomElement,\n defineProps,\n registerCustomElement,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { OverlayPositionerPropsDeclaration, setupOverlayPositioner, type OverlayPositionerProps } from '@aria-ui/elements/overlay'\nimport type { Placement } from '@floating-ui/dom'\n\nimport { blockHandleOverlayStoreContext } from './context.ts'\n\n/**\n * @public\n */\nexport interface BlockHandlePositionerProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {\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 BlockHandlePositionerPropsDeclaration: PropsDeclaration<BlockHandlePositionerProps> = /* @__PURE__ */ defineProps<\n BlockHandlePositionerProps\n>({\n ...OverlayPositionerPropsDeclaration,\n placement: { default: 'left', attribute: 'placement', type: 'string' },\n // Enabling `hoist` will cause the popover to have a small delay when\n // scrolling the page.\n hoist: { default: false, attribute: 'hoist', type: 'boolean' },\n flip: { default: false, attribute: false, type: 'json' },\n shift: { default: false, attribute: 'shift', type: 'boolean' },\n hide: { default: true, attribute: 'hide', type: 'boolean' },\n})\n\n/** @internal */\nexport function setupBlockHandlePositioner(\n host: HostElement,\n props: State<BlockHandlePositionerProps>,\n): void {\n const getOverlayStore = blockHandleOverlayStoreContext.consume(host)\n setupOverlayPositioner(host, props as unknown as State<OverlayPositionerProps>, getOverlayStore)\n}\n\nconst BlockHandlePositionerElementBase: HostElementConstructor<BlockHandlePositionerProps> = defineCustomElement(\n setupBlockHandlePositioner,\n BlockHandlePositionerPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class BlockHandlePositionerElement extends BlockHandlePositionerElementBase {}\n\n/** @internal */\nexport function registerBlockHandlePositionerElement(): void {\n registerCustomElement('prosekit-block-handle-positioner', BlockHandlePositionerElement)\n}\n","export function prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') {\n return false\n }\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches\n}\n","import 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 function isHoverStateEqual(a: HoverState, b: HoverState): boolean {\n return a.pos === b.pos && a.node.eq(b.node)\n}\n","import type { VirtualElement } from '@floating-ui/dom'\nimport { isElement, isHTMLElement, isTextNode, throttle } from '@ocavue/utils'\nimport { defineDOMEventHandler, union, type PlainExtension } 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.ts'\n\nimport type { HoverState } from './hover-state.ts'\n\nexport type ElementHoverHandler = (\n reference?: VirtualElement,\n hoverState?: HoverState,\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()\n return\n }\n\n const { node, pos } = block\n const element = view.nodeDOM(pos)\n if (!element || !isHTMLElement(element)) {\n handler()\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()),\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 return getClientRect(node, { left: true, right: true })\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 type { HostElement } from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nimport { useEditorExtension } from '../../hooks/use-editor-extension.ts'\nimport { prefersReducedMotion } from '../../utils/prefers-reduced-motion.ts'\n\nimport { isHoverStateEqual, type HoverState } from './hover-state.ts'\nimport { defineElementHoverHandler, type ElementHoverHandler } from './pointer-move.ts'\n\nexport function useHoverExtension(\n host: HostElement,\n getEditor: () => Editor | null,\n handler: ElementHoverHandler,\n): void {\n const invalidTimeoutMs = prefersReducedMotion() ? 0 : 180\n\n let invalidTimeoutId: ReturnType<typeof setTimeout> | undefined\n\n let prevHoverState: HoverState | undefined\n\n const callHandler: ElementHoverHandler = (reference, hoverState) => {\n prevHoverState = hoverState\n handler(reference, hoverState)\n }\n\n const extension = defineElementHoverHandler((reference, hoverState) => {\n if (hoverState && invalidTimeoutId != null) {\n clearTimeout(invalidTimeoutId)\n invalidTimeoutId = undefined\n }\n\n if (prevHoverState && hoverState) {\n if (isHoverStateEqual(prevHoverState, hoverState)) {\n return\n }\n callHandler(reference, hoverState)\n return\n }\n\n if (!prevHoverState && !hoverState) {\n return\n }\n\n if (!prevHoverState && hoverState) {\n callHandler(reference, hoverState)\n return\n }\n\n if (prevHoverState && !hoverState) {\n if (invalidTimeoutId != null) {\n return\n }\n\n // Wait for a short period of time before invalidating the hover state.\n // This ensures smoother animation when the pointer moves between two\n // blocks with a small gap.\n invalidTimeoutId = setTimeout(() => {\n callHandler(reference, undefined)\n invalidTimeoutId = undefined\n }, invalidTimeoutMs)\n }\n })\n\n useEditorExtension(host, getEditor, extension)\n}\n","import {\n computed,\n createSignal,\n defineCustomElement,\n defineProps,\n registerCustomElement,\n useEffect,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { createOverlayStore } from '@aria-ui/elements/overlay'\nimport type { VirtualElement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\n\nimport { useScrolling } from '../../hooks/use-scrolling.ts'\n\nimport { blockHandleOverlayStoreContext, BlockHandleStore, blockHandleStoreContext } from './context.ts'\nimport { useHoverExtension } from './use-hover-extension.ts'\n\nexport interface BlockHandleRootProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n}\n\n/** @internal */\nexport const BlockHandleRootPropsDeclaration: PropsDeclaration<BlockHandleRootProps> = /* @__PURE__ */ defineProps<\n BlockHandleRootProps\n>({\n editor: { default: null, attribute: false, type: 'json' },\n})\n\n/**\n * @public\n */\nexport class BlockHandleStateChangeEvent extends Event {\n /**\n * The currently hovered block's node and position, or `null` if no block is hovered.\n */\n detail: { node: ProseMirrorNode; pos: number } | null\n constructor(state: { node: ProseMirrorNode; pos: number } | null) {\n super('stateChange', { bubbles: true })\n this.detail = state\n }\n}\n\n/**\n * @public\n */\nexport interface BlockHandleRootEvents {\n /**\n * Fired when the hovered block changes.\n */\n stateChange: BlockHandleStateChangeEvent\n}\n\n/**\n * @internal\n */\nexport function setupBlockHandleRoot(\n host: HostElement,\n props: State<BlockHandleRootProps>,\n): void {\n const getEditor = props.editor.get\n\n const store = new BlockHandleStore()\n blockHandleStoreContext.provide(host, store)\n\n const reference = createSignal<VirtualElement | undefined>(undefined)\n const getScrolling = useScrolling(host)\n\n const getOpen = computed(() => !!store.hoverState.get() && !getScrolling())\n\n const overlayStore = createOverlayStore(\n getOpen,\n () => {},\n () => true,\n () => false,\n (event) => host.dispatchEvent(event),\n )\n\n useHoverExtension(host, getEditor, (ref, hoverState) => {\n reference.set(ref ?? undefined)\n store.hoverState.set(hoverState)\n const state = hoverState ? { node: hoverState.node, pos: hoverState.pos } : null\n host.dispatchEvent(new BlockHandleStateChangeEvent(state))\n })\n\n useEffect(host, () => {\n overlayStore.setAnchorElement(reference.get())\n })\n\n blockHandleOverlayStoreContext.provide(host, overlayStore)\n}\n\nconst BlockHandleRootElementBase: HostElementConstructor<BlockHandleRootProps> = defineCustomElement(\n setupBlockHandleRoot,\n BlockHandleRootPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class BlockHandleRootElement extends BlockHandleRootElementBase {}\n\n/** @internal */\nexport function registerBlockHandleRootElement(): void {\n registerCustomElement('prosekit-block-handle-root', BlockHandleRootElement)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"prosekit-web-block-handle.js","names":[],"sources":["../src/components/block-handle/context.ts","../src/components/block-handle/block-handle-add.ts","../src/constants.ts","../src/utils/get-client-rect.ts","../src/utils/max-z-index.ts","../src/components/block-handle/set-drag-preview.ts","../src/components/block-handle/block-handle-draggable.ts","../src/components/block-handle/block-handle-popup.ts","../src/components/block-handle/block-handle-positioner.ts","../src/utils/prefers-reduced-motion.ts","../src/components/block-handle/hover-state.ts","../src/components/block-handle/pointer-move.ts","../src/components/block-handle/use-hover-extension.ts","../src/components/block-handle/block-handle-root.ts"],"sourcesContent":["import { createContext, createSignal, type Context, type Signal } from '@aria-ui/core'\nimport type { OverlayStore } from '@aria-ui/elements/overlay'\n\nimport type { HoverState } from './hover-state.ts'\n\n/**\n * @internal\n */\nexport class BlockHandleStore {\n readonly hoverState: Signal<HoverState | undefined> = createSignal<HoverState | undefined>(undefined)\n readonly dragging: Signal<boolean> = createSignal(false)\n}\n\n/**\n * @internal\n */\nexport const blockHandleStoreContext: Context<BlockHandleStore> = createContext<BlockHandleStore>('prosekit-block-handle-store')\n\n/**\n * @internal\n */\nexport const blockHandleOverlayStoreContext: Context<OverlayStore> = createContext<OverlayStore>('prosekit-block-handle-overlay-store')\n","import {\n defineCustomElement,\n defineProps,\n registerCustomElement,\n useEventListener,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { insertDefaultBlock, type Editor } from '@prosekit/core'\n\nimport { blockHandleStoreContext } from './context.ts'\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 BlockHandleAddPropsDeclaration: PropsDeclaration<BlockHandleAddProps> = /* @__PURE__ */ defineProps<BlockHandleAddProps>({\n editor: { default: null, attribute: false, type: 'json' },\n})\n\n/**\n * @internal\n */\nexport function setupBlockHandleAdd(\n host: HostElement,\n props: State<BlockHandleAddProps>,\n): void {\n const getStore = blockHandleStoreContext.consume(host)\n\n useEventListener(host, 'pointerdown', (event) => {\n event.preventDefault()\n\n const store = getStore()\n const editor = props.editor.get()\n const hoverState = store?.hoverState.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 store?.hoverState.set(undefined)\n })\n}\n\nconst BlockHandleAddElementBase: HostElementConstructor<BlockHandleAddProps> = defineCustomElement(\n setupBlockHandleAdd,\n BlockHandleAddPropsDeclaration,\n)\n\n/**\n * `<prosekit-block-handle-add>` custom element.\n *\n * Properties: {@link BlockHandleAddProps}\n */\nexport class BlockHandleAddElement extends BlockHandleAddElementBase {}\n\n/** @internal */\nexport function registerBlockHandleAddElement(): void {\n registerCustomElement('prosekit-block-handle-add', BlockHandleAddElement)\n}\n","export const DRAGGING_CLASS_NAME = 'prosekit-dragging'\n","interface Rect {\n top: number\n bottom: number\n right: number\n left: number\n}\n\ninterface IncludeExtraOptions {\n top?: boolean\n bottom?: boolean\n right?: boolean\n left?: boolean\n}\n\n/**\n * Similar to `element.getBoundingClientRect`, but handles `display: contents` CSS\n * property and optionally includes margins and outlines.\n */\nexport function getClientRect(element: Element, includeExtra?: IncludeExtraOptions | false): Rect {\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 = [...element.children]\n const rects = children.map(child => getClientRect(child, includeExtra))\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 includeExtra ? addExtra(element, rect, includeExtra) : rect\n}\n\nfunction addExtra(element: Element, rect: Rect, options: IncludeExtraOptions): Rect {\n const view = element.ownerDocument?.defaultView\n if (!view) {\n return rect\n }\n\n const style = view.getComputedStyle(element)\n const marginTop = options.top ? Number.parseFloat(style.marginTop) || 0 : 0\n const marginBottom = options.bottom ? Number.parseFloat(style.marginBottom) || 0 : 0\n const marginRight = options.right ? Number.parseFloat(style.marginRight) || 0 : 0\n const marginLeft = options.left ? Number.parseFloat(style.marginLeft) || 0 : 0\n\n const outlineWidth = Number.parseFloat(style.outlineWidth) || 0\n const outlineOffset = Number.parseFloat(style.outlineOffset) || 0\n const outline = Math.max(outlineWidth + outlineOffset, 0)\n const outlineTop = options.top ? outline : 0\n const outlineBottom = options.bottom ? outline : 0\n const outlineRight = options.right ? outline : 0\n const outlineLeft = options.left ? outline : 0\n\n return {\n top: rect.top - Math.max(marginTop, outlineTop),\n bottom: rect.bottom + Math.max(marginBottom, outlineBottom),\n right: rect.right + Math.max(marginRight, outlineRight),\n left: rect.left - Math.max(marginLeft, outlineLeft),\n }\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 { DRAGGING_CLASS_NAME } from '../../constants.ts'\nimport { assignStyles } from '../../utils/assign-styles.ts'\nimport { getClientRect } from '../../utils/get-client-rect.ts'\nimport { maxZIndex } from '../../utils/max-z-index.ts'\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, { left: true, right: true, top: true, bottom: true })\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 // Add some class names so that all styles applied to\n // given class names can also be applied to the drag preview.\n container.classList.add('ProseMirror', DRAGGING_CLASS_NAME)\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 = element.cloneNode(true) as HTMLElement\n\n // A hardcoded opacity.\n clonedElement.style.setProperty('opacity', '0.8', 'important')\n // Hide the outline of the cloned element.\n clonedElement.style.setProperty('outline-color', 'transparent', 'important')\n\n container.appendChild(clonedElement)\n document.body.appendChild(container)\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 defineCustomElement,\n defineProps,\n onMount,\n registerCustomElement,\n useEventListener,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { useAttribute } from '@aria-ui/utils'\nimport { isHTMLElement } from '@ocavue/utils'\nimport type { Editor } from '@prosekit/core'\nimport type { ViewDragging } from '@prosekit/extensions/drop-indicator'\nimport { Fragment, Slice } from '@prosekit/pm/model'\nimport { NodeSelection } from '@prosekit/pm/state'\nimport type { EditorView } from '@prosekit/pm/view'\n\nimport { DRAGGING_CLASS_NAME } from '../../constants.ts'\nimport { getSafeEditorView } from '../../utils/get-safe-editor-view.ts'\n\nimport { blockHandleStoreContext } from './context.ts'\nimport type { HoverState } from './hover-state.ts'\nimport { setDragPreview } from './set-drag-preview.ts'\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 BlockHandleDraggablePropsDeclaration: PropsDeclaration<BlockHandleDraggableProps> = /* @__PURE__ */ defineProps<\n BlockHandleDraggableProps\n>({\n editor: { default: null, attribute: false, type: 'json' },\n})\n\n/**\n * @internal\n */\nexport function setupBlockHandleDraggable(\n host: HostElement,\n props: State<BlockHandleDraggableProps>,\n): void {\n const getStore = blockHandleStoreContext.consume(host)\n\n onMount(host, () => {\n host.draggable = true\n })\n\n usePointerDownHandler(host, () => getStore()?.hoverState.get() ?? null, props.editor.get)\n\n useEventListener(host, 'dragstart', (event) => {\n const store = getStore()\n store?.dragging.set(true)\n\n const view = getSafeEditorView(props.editor.get())\n const hoverState = store?.hoverState.get()\n\n if (view && hoverState) {\n view.dom.classList.add(DRAGGING_CLASS_NAME)\n createDraggingPreview(view, hoverState, event)\n setViewDragging(view, hoverState)\n }\n })\n\n useEventListener(host, 'dragend', () => {\n const store = getStore()\n store?.dragging.set(false)\n\n const view = getSafeEditorView(props.editor.get())\n if (view) {\n view.dom.classList.remove(DRAGGING_CLASS_NAME)\n }\n })\n\n useAttribute(host, 'data-dragging', () => (getStore()?.dragging.get() ? '' : undefined))\n}\n\nfunction usePointerDownHandler(\n host: HostElement,\n getHoverState: () => HoverState | null,\n getEditor: () => Editor | null,\n) {\n useEventListener(host, 'pointerdown', () => {\n const hoverState = getHoverState()\n const editor = getEditor()\n\n if (hoverState?.pos == null || !editor?.view) {\n return\n }\n\n const { view } = editor\n view.dispatch(\n view.state.tr.setSelection(NodeSelection.create(view.state.doc, hoverState.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 event.dataTransfer.clearData()\n event.dataTransfer.setData('text/html', element.outerHTML)\n event.dataTransfer.effectAllowed = 'copyMove'\n setDragPreview(event, element)\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\nconst BlockHandleDraggableElementBase: HostElementConstructor<BlockHandleDraggableProps> = defineCustomElement(\n setupBlockHandleDraggable,\n BlockHandleDraggablePropsDeclaration,\n)\n\n/**\n * `<prosekit-block-handle-draggable>` custom element.\n *\n * Properties: {@link BlockHandleDraggableProps}\n *\n * Data attributes:\n *\n * | Attribute | Description |\n * | --- | --- |\n * | `data-dragging` | Present when the element is being dragged |\n */\nexport class BlockHandleDraggableElement extends BlockHandleDraggableElementBase {}\n\n/** @internal */\nexport function registerBlockHandleDraggableElement(): void {\n registerCustomElement('prosekit-block-handle-draggable', BlockHandleDraggableElement)\n}\n","import {\n defineCustomElement,\n registerCustomElement,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { OverlayPopupPropsDeclaration, setupOverlayPopup, type OverlayPopupProps } from '@aria-ui/elements/overlay'\n\nimport { blockHandleOverlayStoreContext } from './context.ts'\n\n/**\n * @public\n */\nexport interface BlockHandlePopupProps extends OverlayPopupProps {}\n\n/** @internal */\nexport const BlockHandlePopupPropsDeclaration: PropsDeclaration<BlockHandlePopupProps> = OverlayPopupPropsDeclaration\n\n/** @internal */\nexport function setupBlockHandlePopup(\n host: HostElement,\n _props: State<BlockHandlePopupProps>,\n): void {\n const getOverlayStore = blockHandleOverlayStoreContext.consume(host)\n setupOverlayPopup(host, getOverlayStore)\n}\n\nconst BlockHandlePopupElementBase: HostElementConstructor<BlockHandlePopupProps> = defineCustomElement(\n setupBlockHandlePopup,\n BlockHandlePopupPropsDeclaration,\n)\n\n/**\n * `<prosekit-block-handle-popup>` custom element.\n *\n * Properties: {@link BlockHandlePopupProps}\n *\n * Data attributes:\n *\n * | Attribute | Description |\n * | --- | --- |\n * | `data-state` | `\"open\"` when the block handle is visible, `\"closed\"` otherwise |\n */\nexport class BlockHandlePopupElement extends BlockHandlePopupElementBase {}\n\n/** @internal */\nexport function registerBlockHandlePopupElement(): void {\n registerCustomElement('prosekit-block-handle-popup', BlockHandlePopupElement)\n}\n","import {\n defineCustomElement,\n defineProps,\n registerCustomElement,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { OverlayPositionerPropsDeclaration, setupOverlayPositioner, type OverlayPositionerProps } from '@aria-ui/elements/overlay'\nimport type { Placement } from '@floating-ui/dom'\n\nimport { blockHandleOverlayStoreContext } from './context.ts'\n\n/**\n * @public\n */\nexport interface BlockHandlePositionerProps extends Omit<OverlayPositionerProps, 'placement' | 'hoist' | 'flip' | 'shift' | 'hide'> {\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 BlockHandlePositionerPropsDeclaration: PropsDeclaration<BlockHandlePositionerProps> = /* @__PURE__ */ defineProps<\n BlockHandlePositionerProps\n>({\n ...OverlayPositionerPropsDeclaration,\n placement: { default: 'left', attribute: 'placement', type: 'string' },\n // Enabling `hoist` will cause the popover to have a small delay when\n // scrolling the page.\n hoist: { default: false, attribute: 'hoist', type: 'boolean' },\n flip: { default: false, attribute: false, type: 'json' },\n shift: { default: false, attribute: 'shift', type: 'boolean' },\n hide: { default: true, attribute: 'hide', type: 'boolean' },\n})\n\n/** @internal */\nexport function setupBlockHandlePositioner(\n host: HostElement,\n props: State<BlockHandlePositionerProps>,\n): void {\n const getOverlayStore = blockHandleOverlayStoreContext.consume(host)\n setupOverlayPositioner(host, props as unknown as State<OverlayPositionerProps>, getOverlayStore)\n}\n\nconst BlockHandlePositionerElementBase: HostElementConstructor<BlockHandlePositionerProps> = defineCustomElement(\n setupBlockHandlePositioner,\n BlockHandlePositionerPropsDeclaration,\n)\n\n/**\n * `<prosekit-block-handle-positioner>` custom element.\n *\n * Properties: {@link BlockHandlePositionerProps}\n *\n * Data attributes:\n *\n * | Attribute | Description |\n * | --- | --- |\n * | `data-state` | `\"open\"` when the block handle is visible, `\"closed\"` otherwise |\n * | `data-side` | The side of the anchor element the positioner is on |\n * | `data-align` | The alignment of the positioner relative to the anchor element |\n *\n * CSS variables:\n *\n * | Variable | Description |\n * | --- | --- |\n * | `--transform-origin` | The coordinates that this element is anchored to. Useful for scale animations. |\n */\nexport class BlockHandlePositionerElement extends BlockHandlePositionerElementBase {}\n\n/** @internal */\nexport function registerBlockHandlePositionerElement(): void {\n registerCustomElement('prosekit-block-handle-positioner', BlockHandlePositionerElement)\n}\n","export function prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') {\n return false\n }\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches\n}\n","import 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 function isHoverStateEqual(a: HoverState, b: HoverState): boolean {\n return a.pos === b.pos && a.node.eq(b.node)\n}\n","import type { VirtualElement } from '@floating-ui/dom'\nimport { isElement, isHTMLElement, isTextNode, throttle } from '@ocavue/utils'\nimport { defineDOMEventHandler, union, type PlainExtension } 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.ts'\n\nimport type { HoverState } from './hover-state.ts'\n\nexport type ElementHoverHandler = (\n reference?: VirtualElement,\n hoverState?: HoverState,\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()\n return\n }\n\n const { node, pos } = block\n const element = view.nodeDOM(pos)\n if (!element || !isHTMLElement(element)) {\n handler()\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()),\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 return getClientRect(node, { left: true, right: true })\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 type { HostElement } from '@aria-ui/core'\nimport type { Editor } from '@prosekit/core'\n\nimport { useEditorExtension } from '../../hooks/use-editor-extension.ts'\nimport { prefersReducedMotion } from '../../utils/prefers-reduced-motion.ts'\n\nimport { isHoverStateEqual, type HoverState } from './hover-state.ts'\nimport { defineElementHoverHandler, type ElementHoverHandler } from './pointer-move.ts'\n\nexport function useHoverExtension(\n host: HostElement,\n getEditor: () => Editor | null,\n handler: ElementHoverHandler,\n): void {\n const invalidTimeoutMs = prefersReducedMotion() ? 0 : 180\n\n let invalidTimeoutId: ReturnType<typeof setTimeout> | undefined\n\n let prevHoverState: HoverState | undefined\n\n const callHandler: ElementHoverHandler = (reference, hoverState) => {\n prevHoverState = hoverState\n handler(reference, hoverState)\n }\n\n const extension = defineElementHoverHandler((reference, hoverState) => {\n if (hoverState && invalidTimeoutId != null) {\n clearTimeout(invalidTimeoutId)\n invalidTimeoutId = undefined\n }\n\n if (prevHoverState && hoverState) {\n if (isHoverStateEqual(prevHoverState, hoverState)) {\n return\n }\n callHandler(reference, hoverState)\n return\n }\n\n if (!prevHoverState && !hoverState) {\n return\n }\n\n if (!prevHoverState && hoverState) {\n callHandler(reference, hoverState)\n return\n }\n\n if (prevHoverState && !hoverState) {\n if (invalidTimeoutId != null) {\n return\n }\n\n // Wait for a short period of time before invalidating the hover state.\n // This ensures smoother animation when the pointer moves between two\n // blocks with a small gap.\n invalidTimeoutId = setTimeout(() => {\n callHandler(reference, undefined)\n invalidTimeoutId = undefined\n }, invalidTimeoutMs)\n }\n })\n\n useEditorExtension(host, getEditor, extension)\n}\n","import {\n computed,\n createSignal,\n defineCustomElement,\n defineProps,\n registerCustomElement,\n useEffect,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { createOverlayStore } from '@aria-ui/elements/overlay'\nimport type { VirtualElement } from '@floating-ui/dom'\nimport type { Editor } from '@prosekit/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\n\nimport { useScrolling } from '../../hooks/use-scrolling.ts'\n\nimport { blockHandleOverlayStoreContext, BlockHandleStore, blockHandleStoreContext } from './context.ts'\nimport { useHoverExtension } from './use-hover-extension.ts'\n\nexport interface BlockHandleRootProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n}\n\n/** @internal */\nexport const BlockHandleRootPropsDeclaration: PropsDeclaration<BlockHandleRootProps> = /* @__PURE__ */ defineProps<\n BlockHandleRootProps\n>({\n editor: { default: null, attribute: false, type: 'json' },\n})\n\n/**\n * @public\n */\nexport class BlockHandleStateChangeEvent extends Event {\n /**\n * The currently hovered block's node and position, or `null` if no block is hovered.\n */\n detail: { node: ProseMirrorNode; pos: number } | null\n constructor(state: { node: ProseMirrorNode; pos: number } | null) {\n super('stateChange', { bubbles: true })\n this.detail = state\n }\n}\n\n/**\n * @public\n */\nexport interface BlockHandleRootEvents {\n /**\n * Fired when the hovered block changes.\n */\n stateChange: BlockHandleStateChangeEvent\n}\n\n/**\n * @internal\n */\nexport function setupBlockHandleRoot(\n host: HostElement,\n props: State<BlockHandleRootProps>,\n): void {\n const getEditor = props.editor.get\n\n const store = new BlockHandleStore()\n blockHandleStoreContext.provide(host, store)\n\n const reference = createSignal<VirtualElement | undefined>(undefined)\n const getScrolling = useScrolling(host)\n\n const getOpen = computed(() => !!store.hoverState.get() && !getScrolling())\n\n const overlayStore = createOverlayStore(\n getOpen,\n () => {},\n () => true,\n () => false,\n (event) => host.dispatchEvent(event),\n )\n\n useHoverExtension(host, getEditor, (ref, hoverState) => {\n reference.set(ref ?? undefined)\n store.hoverState.set(hoverState)\n const state = hoverState ? { node: hoverState.node, pos: hoverState.pos } : null\n host.dispatchEvent(new BlockHandleStateChangeEvent(state))\n })\n\n useEffect(host, () => {\n overlayStore.setAnchorElement(reference.get())\n })\n\n blockHandleOverlayStoreContext.provide(host, overlayStore)\n}\n\nconst BlockHandleRootElementBase: HostElementConstructor<BlockHandleRootProps> = defineCustomElement(\n setupBlockHandleRoot,\n BlockHandleRootPropsDeclaration,\n)\n\n/**\n * `<prosekit-block-handle-root>` custom element.\n *\n * Properties: {@link BlockHandleRootProps}\n *\n * Events: {@link BlockHandleRootEvents}\n */\nexport class BlockHandleRootElement extends BlockHandleRootElementBase {}\n\n/** @internal */\nexport function registerBlockHandleRootElement(): void {\n registerCustomElement('prosekit-block-handle-root', BlockHandleRootElement)\n}\n"],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  import { HostElement, HostElementConstructor, PropsDeclaration, State } from "@aria-ui/core";
2
2
  import { Editor } from "@prosekit/core";
3
-
4
- //#region src/components/drop-indicator/drop-indicator.d.ts
5
3
  interface DropIndicatorProps {
6
4
  /**
7
5
  * The ProseKit editor instance.
@@ -25,13 +23,14 @@ declare const DropIndicatorPropsDeclaration: PropsDeclaration<DropIndicatorProps
25
23
  declare function setupDropIndicator(host: HostElement, props: State<DropIndicatorProps>): void;
26
24
  declare const DropIndicatorElementBase: HostElementConstructor<DropIndicatorProps>;
27
25
  /**
28
- * @public
26
+ * `<prosekit-drop-indicator>` custom element.
27
+ *
28
+ * Properties: {@link DropIndicatorProps}
29
29
  */
30
30
  declare class DropIndicatorElement extends DropIndicatorElementBase {}
31
31
  /**
32
32
  * @internal
33
33
  */
34
34
  declare function registerDropIndicatorElement(): void;
35
- //#endregion
36
35
  export { DropIndicatorElement, type DropIndicatorProps, DropIndicatorPropsDeclaration, registerDropIndicatorElement, setupDropIndicator };
37
36
  //# sourceMappingURL=prosekit-web-drop-indicator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-web-drop-indicator.d.ts","names":[],"sources":["../src/components/drop-indicator/drop-indicator.ts"],"mappings":";;;;UAoBiB,kBAAA;;AAAjB;;;;;EAOE,MAAA,EAAQ,MAAA;EAOR;;;AAIF;;EAJE,KAAA;AAAA;;cAIW,6BAAA,EAA+B,gBAAA,CAAiB,kBAAA;;;;iBAgB7C,kBAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,kBAAA;AAAA,cAwDT,wBAAA,EAA0B,sBAAA,CAAuB,kBAAA;;;;cAQ1C,oBAAA,SAA6B,wBAAA;;;;iBAK1B,4BAAA,CAAA"}
1
+ {"version":3,"file":"prosekit-web-drop-indicator.d.ts","names":[],"sources":["../src/components/drop-indicator/drop-indicator.ts"],"mappings":";;UAoBiB,kBAAA;EAAA;;;;;;EAOf,MAAA,EAAQ,MAAA;EAOH;;AAIP;;;EAJE,KAAA;AAAA;AAoBF;AAAA,cAhBa,6BAAA,EAA+B,gBAAA,CAAiB,kBAAA;;;;iBAgB7C,kBAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,kBAAA;AAAA,cAwDT,wBAAA,EAA0B,sBAAA,CAAuB,kBAAA;;;;;;cAU1C,oBAAA,SAA6B,wBAAA;;AAZzC;;iBAiBe,4BAAA,CAAA"}
@@ -3,7 +3,6 @@ import { n as assignStyles, t as useScrolling } from "./use-scrolling.js";
3
3
  import { computed, createSignal, defineCustomElement, defineProps, registerCustomElement, useEffect } from "@aria-ui/core";
4
4
  import { usePresence } from "@aria-ui/utils";
5
5
  import { defineDropIndicator } from "@prosekit/extensions/drop-indicator";
6
- //#region src/components/drop-indicator/drop-indicator.ts
7
6
  /** @internal */
8
7
  const DropIndicatorPropsDeclaration = /* @__PURE__ */ defineProps({
9
8
  editor: {
@@ -64,7 +63,9 @@ function setupDropIndicator(host, props) {
64
63
  }
65
64
  const DropIndicatorElementBase = defineCustomElement(setupDropIndicator, DropIndicatorPropsDeclaration);
66
65
  /**
67
- * @public
66
+ * `<prosekit-drop-indicator>` custom element.
67
+ *
68
+ * Properties: {@link DropIndicatorProps}
68
69
  */
69
70
  var DropIndicatorElement = class extends DropIndicatorElementBase {};
70
71
  /**
@@ -73,7 +74,6 @@ var DropIndicatorElement = class extends DropIndicatorElementBase {};
73
74
  function registerDropIndicatorElement() {
74
75
  registerCustomElement("prosekit-drop-indicator", DropIndicatorElement);
75
76
  }
76
- //#endregion
77
77
  export { DropIndicatorElement, DropIndicatorPropsDeclaration, registerDropIndicatorElement, setupDropIndicator };
78
78
 
79
79
  //# sourceMappingURL=prosekit-web-drop-indicator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-web-drop-indicator.js","names":[],"sources":["../src/components/drop-indicator/drop-indicator.ts"],"sourcesContent":["import {\n computed,\n createSignal,\n defineCustomElement,\n defineProps,\n registerCustomElement,\n useEffect,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { usePresence } from '@aria-ui/utils'\nimport type { Editor } from '@prosekit/core'\nimport { defineDropIndicator, type ShowHandlerOptions } from '@prosekit/extensions/drop-indicator'\n\nimport { useEditorExtension } from '../../hooks/use-editor-extension.ts'\nimport { useScrolling } from '../../hooks/use-scrolling.ts'\nimport { assignStyles } from '../../utils/assign-styles.ts'\n\nexport interface DropIndicatorProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The line width in pixels.\n *\n * @default 2\n */\n width: number\n}\n\n/** @internal */\nexport const DropIndicatorPropsDeclaration: PropsDeclaration<DropIndicatorProps> = /* @__PURE__ */ defineProps<DropIndicatorProps>({\n editor: {\n default: null,\n attribute: false,\n type: 'json',\n },\n width: {\n default: 2,\n attribute: 'width',\n type: 'number',\n },\n})\n\n/**\n * @internal\n */\nexport function setupDropIndicator(\n host: HostElement,\n props: State<DropIndicatorProps>,\n): void {\n type DropIndicatorContext = ShowHandlerOptions | null\n const context = createSignal<DropIndicatorContext>(null)\n\n const extension = defineDropIndicator({\n onShow: (options) => context.set(options),\n onHide: () => context.set(null),\n })\n\n useEditorExtension(host, props.editor.get, extension)\n\n const getLine = computed(() => context.get()?.line)\n const getScrolling = useScrolling(host)\n const getPresence = computed(() => !!context.get() && !getScrolling())\n usePresence(host, getPresence)\n\n useEffect(host, () => {\n const lineValue = getLine()\n const lineWidth = props.width.get()\n\n if (!lineValue) return\n\n const { p1: { x: x1, y: y1 }, p2: { x: x2, y: y2 } } = lineValue\n const horizontal = y1 === y2\n\n let width: number\n let height: number\n let top: number = y1\n let left: number = x1\n\n if (horizontal) {\n width = x2 - x1\n height = lineWidth\n top -= lineWidth / 2\n } else {\n width = lineWidth\n height = y2 - y1\n left -= lineWidth / 2\n }\n\n top = Math.round(top)\n left = Math.round(left)\n\n assignStyles(host, {\n position: 'fixed',\n pointerEvents: 'none',\n width: `${width}px`,\n height: `${height}px`,\n transform: `translate(${left}px, ${top}px)`,\n left: '0px',\n top: '0px',\n })\n })\n}\n\nconst DropIndicatorElementBase: HostElementConstructor<DropIndicatorProps> = defineCustomElement(\n setupDropIndicator,\n DropIndicatorPropsDeclaration,\n)\n\n/**\n * @public\n */\nexport class DropIndicatorElement extends DropIndicatorElementBase {}\n\n/**\n * @internal\n */\nexport function registerDropIndicatorElement(): void {\n registerCustomElement('prosekit-drop-indicator', DropIndicatorElement)\n}\n"],"mappings":";;;;;;;AAsCA,MAAa,gCAAsF,4BAAgC;CACjI,QAAQ;EACN,SAAS;EACT,WAAW;EACX,MAAM;EACP;CACD,OAAO;EACL,SAAS;EACT,WAAW;EACX,MAAM;EACP;CACF,CAAC;;;;AAKF,SAAgB,mBACd,MACA,OACM;CAEN,MAAM,UAAU,aAAmC,KAAK;CAExD,MAAM,YAAY,oBAAoB;EACpC,SAAS,YAAY,QAAQ,IAAI,QAAQ;EACzC,cAAc,QAAQ,IAAI,KAAK;EAChC,CAAC;AAEF,oBAAmB,MAAM,MAAM,OAAO,KAAK,UAAU;CAErD,MAAM,UAAU,eAAe,QAAQ,KAAK,EAAE,KAAK;CACnD,MAAM,eAAe,aAAa,KAAK;AAEvC,aAAY,MADQ,eAAe,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,CACxC;AAE9B,WAAU,YAAY;EACpB,MAAM,YAAY,SAAS;EAC3B,MAAM,YAAY,MAAM,MAAM,KAAK;AAEnC,MAAI,CAAC,UAAW;EAEhB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS;EACvD,MAAM,aAAa,OAAO;EAE1B,IAAI;EACJ,IAAI;EACJ,IAAI,MAAc;EAClB,IAAI,OAAe;AAEnB,MAAI,YAAY;AACd,WAAQ,KAAK;AACb,YAAS;AACT,UAAO,YAAY;SACd;AACL,WAAQ;AACR,YAAS,KAAK;AACd,WAAQ,YAAY;;AAGtB,QAAM,KAAK,MAAM,IAAI;AACrB,SAAO,KAAK,MAAM,KAAK;AAEvB,eAAa,MAAM;GACjB,UAAU;GACV,eAAe;GACf,OAAO,GAAG,MAAM;GAChB,QAAQ,GAAG,OAAO;GAClB,WAAW,aAAa,KAAK,MAAM,IAAI;GACvC,MAAM;GACN,KAAK;GACN,CAAC;GACF;;AAGJ,MAAM,2BAAuE,oBAC3E,oBACA,8BACD;;;;AAKD,IAAa,uBAAb,cAA0C,yBAAyB;;;;AAKnE,SAAgB,+BAAqC;AACnD,uBAAsB,2BAA2B,qBAAqB"}
1
+ {"version":3,"file":"prosekit-web-drop-indicator.js","names":[],"sources":["../src/components/drop-indicator/drop-indicator.ts"],"sourcesContent":["import {\n computed,\n createSignal,\n defineCustomElement,\n defineProps,\n registerCustomElement,\n useEffect,\n type HostElement,\n type HostElementConstructor,\n type PropsDeclaration,\n type State,\n} from '@aria-ui/core'\nimport { usePresence } from '@aria-ui/utils'\nimport type { Editor } from '@prosekit/core'\nimport { defineDropIndicator, type ShowHandlerOptions } from '@prosekit/extensions/drop-indicator'\n\nimport { useEditorExtension } from '../../hooks/use-editor-extension.ts'\nimport { useScrolling } from '../../hooks/use-scrolling.ts'\nimport { assignStyles } from '../../utils/assign-styles.ts'\n\nexport interface DropIndicatorProps {\n /**\n * The ProseKit editor instance.\n *\n * @default null\n * @hidden\n */\n editor: Editor | null\n\n /**\n * The line width in pixels.\n *\n * @default 2\n */\n width: number\n}\n\n/** @internal */\nexport const DropIndicatorPropsDeclaration: PropsDeclaration<DropIndicatorProps> = /* @__PURE__ */ defineProps<DropIndicatorProps>({\n editor: {\n default: null,\n attribute: false,\n type: 'json',\n },\n width: {\n default: 2,\n attribute: 'width',\n type: 'number',\n },\n})\n\n/**\n * @internal\n */\nexport function setupDropIndicator(\n host: HostElement,\n props: State<DropIndicatorProps>,\n): void {\n type DropIndicatorContext = ShowHandlerOptions | null\n const context = createSignal<DropIndicatorContext>(null)\n\n const extension = defineDropIndicator({\n onShow: (options) => context.set(options),\n onHide: () => context.set(null),\n })\n\n useEditorExtension(host, props.editor.get, extension)\n\n const getLine = computed(() => context.get()?.line)\n const getScrolling = useScrolling(host)\n const getPresence = computed(() => !!context.get() && !getScrolling())\n usePresence(host, getPresence)\n\n useEffect(host, () => {\n const lineValue = getLine()\n const lineWidth = props.width.get()\n\n if (!lineValue) return\n\n const { p1: { x: x1, y: y1 }, p2: { x: x2, y: y2 } } = lineValue\n const horizontal = y1 === y2\n\n let width: number\n let height: number\n let top: number = y1\n let left: number = x1\n\n if (horizontal) {\n width = x2 - x1\n height = lineWidth\n top -= lineWidth / 2\n } else {\n width = lineWidth\n height = y2 - y1\n left -= lineWidth / 2\n }\n\n top = Math.round(top)\n left = Math.round(left)\n\n assignStyles(host, {\n position: 'fixed',\n pointerEvents: 'none',\n width: `${width}px`,\n height: `${height}px`,\n transform: `translate(${left}px, ${top}px)`,\n left: '0px',\n top: '0px',\n })\n })\n}\n\nconst DropIndicatorElementBase: HostElementConstructor<DropIndicatorProps> = defineCustomElement(\n setupDropIndicator,\n DropIndicatorPropsDeclaration,\n)\n\n/**\n * `<prosekit-drop-indicator>` custom element.\n *\n * Properties: {@link DropIndicatorProps}\n */\nexport class DropIndicatorElement extends DropIndicatorElementBase {}\n\n/**\n * @internal\n */\nexport function registerDropIndicatorElement(): void {\n registerCustomElement('prosekit-drop-indicator', DropIndicatorElement)\n}\n"],"mappings":";;;;;;AAsCA,MAAa,gCAAsF,4BAAgC;CACjI,QAAQ;EACN,SAAS;EACT,WAAW;EACX,MAAM;EACP;CACD,OAAO;EACL,SAAS;EACT,WAAW;EACX,MAAM;EACP;CACF,CAAC;;;;AAKF,SAAgB,mBACd,MACA,OACM;CAEN,MAAM,UAAU,aAAmC,KAAK;CAExD,MAAM,YAAY,oBAAoB;EACpC,SAAS,YAAY,QAAQ,IAAI,QAAQ;EACzC,cAAc,QAAQ,IAAI,KAAK;EAChC,CAAC;AAEF,oBAAmB,MAAM,MAAM,OAAO,KAAK,UAAU;CAErD,MAAM,UAAU,eAAe,QAAQ,KAAK,EAAE,KAAK;CACnD,MAAM,eAAe,aAAa,KAAK;AAEvC,aAAY,MADQ,eAAe,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,CACxC;AAE9B,WAAU,YAAY;EACpB,MAAM,YAAY,SAAS;EAC3B,MAAM,YAAY,MAAM,MAAM,KAAK;AAEnC,MAAI,CAAC,UAAW;EAEhB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,MAAM,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS;EACvD,MAAM,aAAa,OAAO;EAE1B,IAAI;EACJ,IAAI;EACJ,IAAI,MAAc;EAClB,IAAI,OAAe;AAEnB,MAAI,YAAY;AACd,WAAQ,KAAK;AACb,YAAS;AACT,UAAO,YAAY;SACd;AACL,WAAQ;AACR,YAAS,KAAK;AACd,WAAQ,YAAY;;AAGtB,QAAM,KAAK,MAAM,IAAI;AACrB,SAAO,KAAK,MAAM,KAAK;AAEvB,eAAa,MAAM;GACjB,UAAU;GACV,eAAe;GACf,OAAO,GAAG,MAAM;GAChB,QAAQ,GAAG,OAAO;GAClB,WAAW,aAAa,KAAK,MAAM,IAAI;GACvC,MAAM;GACN,KAAK;GACN,CAAC;GACF;;AAGJ,MAAM,2BAAuE,oBAC3E,oBACA,8BACD;;;;;;AAOD,IAAa,uBAAb,cAA0C,yBAAyB;;;;AAKnE,SAAgB,+BAAqC;AACnD,uBAAsB,2BAA2B,qBAAqB"}
@@ -1,8 +1,6 @@
1
1
  import { HostElement, HostElementConstructor, PropsDeclaration, State } from "@aria-ui/core";
2
2
  import { OpenChangeEvent, OpenChangeEvent as OpenChangeEvent$1, OverlayPopupProps, OverlayPositionerProps, OverlayRootProps } from "@aria-ui/elements/overlay";
3
3
  import { Editor } from "@prosekit/core";
4
-
5
- //#region src/components/inline-popover/inline-popover-popup.d.ts
6
4
  /**
7
5
  * @public
8
6
  */
@@ -13,13 +11,19 @@ declare const InlinePopoverPopupPropsDeclaration: PropsDeclaration<InlinePopover
13
11
  declare function setupInlinePopoverPopup(host: HostElement, _props: State<InlinePopoverPopupProps>): void;
14
12
  declare const InlinePopoverPopupElementBase: HostElementConstructor<InlinePopoverPopupProps>;
15
13
  /**
16
- * @public
14
+ * `<prosekit-inline-popover-popup>` custom element.
15
+ *
16
+ * Properties: {@link InlinePopoverPopupProps}
17
+ *
18
+ * Data attributes:
19
+ *
20
+ * | Attribute | Description |
21
+ * | --- | --- |
22
+ * | `data-state` | `"open"` when the inline popover is visible, `"closed"` otherwise |
17
23
  */
18
24
  declare class InlinePopoverPopupElement extends InlinePopoverPopupElementBase {}
19
25
  /** @internal */
20
26
  declare function registerInlinePopoverPopupElement(): void;
21
- //#endregion
22
- //#region src/components/inline-popover/inline-popover-positioner.d.ts
23
27
  /**
24
28
  * @public
25
29
  */
@@ -77,13 +81,27 @@ declare const InlinePopoverPositionerPropsDeclaration: PropsDeclaration<InlinePo
77
81
  declare function setupInlinePopoverPositioner(host: HostElement, props: State<InlinePopoverPositionerProps>): void;
78
82
  declare const InlinePopoverPositionerElementBase: HostElementConstructor<InlinePopoverPositionerProps>;
79
83
  /**
80
- * @public
84
+ * `<prosekit-inline-popover-positioner>` custom element.
85
+ *
86
+ * Properties: {@link InlinePopoverPositionerProps}
87
+ *
88
+ * Data attributes:
89
+ *
90
+ * | Attribute | Description |
91
+ * | --- | --- |
92
+ * | `data-state` | `"open"` when the inline popover is visible, `"closed"` otherwise |
93
+ * | `data-side` | The side of the anchor element the positioner is on |
94
+ * | `data-align` | The alignment of the positioner relative to the anchor element |
95
+ *
96
+ * CSS variables:
97
+ *
98
+ * | Variable | Description |
99
+ * | --- | --- |
100
+ * | `--transform-origin` | The coordinates that this element is anchored to. Useful for scale animations. |
81
101
  */
82
102
  declare class InlinePopoverPositionerElement extends InlinePopoverPositionerElementBase {}
83
103
  /** @internal */
84
104
  declare function registerInlinePopoverPositionerElement(): void;
85
- //#endregion
86
- //#region src/components/inline-popover/inline-popover-root.d.ts
87
105
  /**
88
106
  * @public
89
107
  */
@@ -116,17 +134,23 @@ declare const InlinePopoverRootPropsDeclaration: PropsDeclaration<InlinePopoverR
116
134
  * @public
117
135
  */
118
136
  interface InlinePopoverRootEvents {
137
+ /**
138
+ * Emitted when the open state of the popover changes.
139
+ */
119
140
  openChange: OpenChangeEvent$1;
120
141
  }
121
142
  /** @internal */
122
143
  declare function setupInlinePopoverRoot(host: HostElement, props: State<InlinePopoverRootProps>): void;
123
144
  declare const InlinePopoverRootElementBase: HostElementConstructor<InlinePopoverRootProps>;
124
145
  /**
125
- * @public
146
+ * `<prosekit-inline-popover-root>` custom element.
147
+ *
148
+ * Properties: {@link InlinePopoverRootProps}
149
+ *
150
+ * Events: {@link InlinePopoverRootEvents}
126
151
  */
127
152
  declare class InlinePopoverRootElement extends InlinePopoverRootElementBase {}
128
153
  /** @internal */
129
154
  declare function registerInlinePopoverRootElement(): void;
130
- //#endregion
131
155
  export { InlinePopoverPopupElement, type InlinePopoverPopupProps, InlinePopoverPopupPropsDeclaration, InlinePopoverPositionerElement, type InlinePopoverPositionerProps, InlinePopoverPositionerPropsDeclaration, InlinePopoverRootElement, type InlinePopoverRootEvents, type InlinePopoverRootProps, InlinePopoverRootPropsDeclaration, OpenChangeEvent, registerInlinePopoverPopupElement, registerInlinePopoverPositionerElement, registerInlinePopoverRootElement, setupInlinePopoverPopup, setupInlinePopoverPositioner, setupInlinePopoverRoot };
132
156
  //# sourceMappingURL=prosekit-web-inline-popover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-web-inline-popover.d.ts","names":[],"sources":["../src/components/inline-popover/inline-popover-popup.ts","../src/components/inline-popover/inline-popover-positioner.ts","../src/components/inline-popover/inline-popover-root.ts"],"mappings":";;;;;;;;UAkBiB,uBAAA,SAAgC,iBAAA;;cAGpC,kCAAA,EAAoC,gBAAA,CAAiB,uBAAA;;iBAGlD,uBAAA,CACd,IAAA,EAAM,WAAA,EACN,MAAA,EAAQ,KAAA,CAAM,uBAAA;AAAA,cAYV,6BAAA,EAA+B,sBAAA,CAAuB,uBAAA;;;;cAQ/C,yBAAA,SAAkC,6BAAA;;iBAG/B,iCAAA,CAAA;;;;;;UCjCC,4BAAA,SACf,IAAA,CACE,sBAAA;EDAqC;;;;AAGzC;ECYE,SAAA,EAAW,sBAAA;;;;ADTb;;ECgBE,MAAA,EAAQ,sBAAA;EDfF;;;;;;ECuBN,IAAA,EAAM,sBAAA;EDtBE;;;;;AAUT;ECoBC,KAAA;;;;ADVF;;;ECkBE,OAAA,EAAS,sBAAA;EDlBiE;AAG5E;;;;;ECuBE,MAAA,EAAQ,sBAAA;;;AAxDV;;;EA+DE,eAAA,EAAiB,sBAAA;AAAA;;cAIN,uCAAA,EAAyC,gBAAA,CAAiB,4BAAA;;iBAcvD,4BAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,4BAAA;AAAA,cAKT,kCAAA,EAAoC,sBAAA,CAAuB,4BAAA;;;;cAQpD,8BAAA,SAAuC,kCAAA;;iBAGpC,sCAAA,CAAA;;;;ADjGhB;;UEMiB,sBAAA,SAA+B,gBAAA;EFNC;;AAGjD;;;;EEUE,MAAA,EAAQ,MAAA;EFPM;;;;;;EEed,WAAA;EFba;;;;;;EEqBb,eAAA;AAAA;AFXD;AAAA,cEeY,iCAAA,EAAmC,gBAAA,CAAiB,sBAAA;;;;UAYhD,uBAAA;EACf,UAAA,EAAY,iBAAA;AAAA;;iBAIE,sBAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,sBAAA;AAAA,cAsCT,4BAAA,EAA8B,sBAAA,CAAuB,sBAAA;;;;cAQ9C,wBAAA,SAAiC,4BAAA;;iBAG9B,gCAAA,CAAA"}
1
+ {"version":3,"file":"prosekit-web-inline-popover.d.ts","names":[],"sources":["../src/components/inline-popover/inline-popover-popup.ts","../src/components/inline-popover/inline-popover-positioner.ts","../src/components/inline-popover/inline-popover-root.ts"],"mappings":";;;;;AAkBA;UAAiB,uBAAA,SAAgC,iBAAA;;cAGpC,kCAAA,EAAoC,gBAAA,CAAiB,uBAAA;AAAlE;AAAA,iBAGgB,uBAAA,CACd,IAAA,EAAM,WAAA,EACN,MAAA,EAAQ,KAAA,CAAM,uBAAA;AAAA,cAYV,6BAAA,EAA+B,sBAAA,CAAuB,uBAAA;;;AAd5D;;;;;;;;;cA8Ba,yBAAA,SAAkC,6BAAA;;iBAG/B,iCAAA,CAAA;;;AAvChB;UCFiB,4BAAA,SACf,IAAA,CACE,sBAAA;;;;ADGJ;;ECYE,SAAA,EAAW,sBAAA;EDZoC;;AAGjD;;;ECgBE,MAAA,EAAQ,sBAAA;EDdM;;;;;;ECsBd,IAAA,EAAM,sBAAA;EDtBQ;;;;AAUf;;ECoBC,KAAA;EDlBmC;;AAgBrC;;;;ECUE,OAAA,EAAS,sBAAA;EDPK;;;;;;ECed,MAAA,EAAQ,sBAAA;EAxDoC;;;;;EA+D5C,eAAA,EAAiB,sBAAA;AAAA;;cAIN,uCAAA,EAAyC,gBAAA,CAAiB,4BAAA;;iBAcvD,4BAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,4BAAA;AAAA,cAKT,kCAAA,EAAoC,sBAAA,CAAuB,4BAAA;;;;;;;;;;;;;;;;;;AArBjE;;cA6Ca,8BAAA,SAAuC,kCAAA;;iBAGpC,sCAAA,CAAA;ADjHhB;;;AAAA,UEMiB,sBAAA,SAA+B,gBAAA;EFNkB;AAGlE;;;;;EEUE,MAAA,EAAQ,MAAA;EFP6B;;;;;;EEerC,WAAA;EFdM;;;;;;EEsBN,eAAA;AAAA;;cAIW,iCAAA,EAAmC,gBAAA,CAAiB,sBAAA;;;AFGjE;UESiB,uBAAA;;;;EAIf,UAAA,EAAY,iBAAA;AAAA;;iBAIE,sBAAA,CACd,IAAA,EAAM,WAAA,EACN,KAAA,EAAO,KAAA,CAAM,sBAAA;AAAA,cAsCT,4BAAA,EAA8B,sBAAA,CAAuB,sBAAA;;AD/F3D;;;;;;cC2Ga,wBAAA,SAAiC,4BAAA;;iBAG9B,gCAAA,CAAA"}