@prosekit/react 0.7.0-beta.3 → 0.7.0-beta.5

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 (104) hide show
  1. package/dist/editor-context.js +0 -2
  2. package/dist/editor-context.js.map +1 -1
  3. package/dist/prosekit-react-autocomplete.d.ts +10 -61
  4. package/dist/prosekit-react-autocomplete.d.ts.map +1 -1
  5. package/dist/prosekit-react-autocomplete.js +30 -49
  6. package/dist/prosekit-react-autocomplete.js.map +1 -1
  7. package/dist/prosekit-react-block-handle.d.ts +10 -61
  8. package/dist/prosekit-react-block-handle.d.ts.map +1 -1
  9. package/dist/prosekit-react-block-handle.js +30 -49
  10. package/dist/prosekit-react-block-handle.js.map +1 -1
  11. package/dist/prosekit-react-drop-indicator.d.ts +2 -13
  12. package/dist/prosekit-react-drop-indicator.d.ts.map +1 -1
  13. package/dist/prosekit-react-drop-indicator.js +13 -9
  14. package/dist/prosekit-react-drop-indicator.js.map +1 -1
  15. package/dist/prosekit-react-inline-popover.d.ts +6 -37
  16. package/dist/prosekit-react-inline-popover.d.ts.map +1 -1
  17. package/dist/prosekit-react-inline-popover.js +23 -29
  18. package/dist/prosekit-react-inline-popover.js.map +1 -1
  19. package/dist/prosekit-react-menu.d.ts +48 -88
  20. package/dist/prosekit-react-menu.d.ts.map +1 -1
  21. package/dist/prosekit-react-menu.js +72 -71
  22. package/dist/prosekit-react-menu.js.map +1 -1
  23. package/dist/prosekit-react-popover.d.ts +8 -49
  24. package/dist/prosekit-react-popover.d.ts.map +1 -1
  25. package/dist/prosekit-react-popover.js +26 -39
  26. package/dist/prosekit-react-popover.js.map +1 -1
  27. package/dist/prosekit-react-resizable.d.ts +4 -25
  28. package/dist/prosekit-react-resizable.d.ts.map +1 -1
  29. package/dist/prosekit-react-resizable.js +20 -19
  30. package/dist/prosekit-react-resizable.js.map +1 -1
  31. package/dist/prosekit-react-table-handle.d.ts +22 -133
  32. package/dist/prosekit-react-table-handle.d.ts.map +1 -1
  33. package/dist/prosekit-react-table-handle.js +67 -109
  34. package/dist/prosekit-react-table-handle.js.map +1 -1
  35. package/dist/prosekit-react-tooltip.d.ts +8 -49
  36. package/dist/prosekit-react-tooltip.d.ts.map +1 -1
  37. package/dist/prosekit-react-tooltip.js +26 -39
  38. package/dist/prosekit-react-tooltip.js.map +1 -1
  39. package/dist/prosekit-react.d.ts +0 -21
  40. package/dist/prosekit-react.d.ts.map +1 -1
  41. package/dist/prosekit-react.js +1 -26
  42. package/dist/prosekit-react.js.map +1 -1
  43. package/package.json +4 -4
  44. package/src/components/autocomplete/autocomplete-empty.gen.ts +3 -13
  45. package/src/components/autocomplete/autocomplete-item.gen.ts +3 -13
  46. package/src/components/autocomplete/autocomplete-popup.gen.ts +3 -13
  47. package/src/components/autocomplete/autocomplete-positioner.gen.ts +3 -13
  48. package/src/components/autocomplete/autocomplete-root.gen.ts +3 -13
  49. package/src/components/autocomplete/index.gen.ts +1 -3
  50. package/src/components/autocomplete/index.ts +2 -0
  51. package/src/components/block-handle/block-handle-add.gen.ts +3 -13
  52. package/src/components/block-handle/block-handle-draggable.gen.ts +3 -13
  53. package/src/components/block-handle/block-handle-popup.gen.ts +3 -13
  54. package/src/components/block-handle/block-handle-positioner.gen.ts +3 -13
  55. package/src/components/block-handle/block-handle-root.gen.ts +3 -13
  56. package/src/components/block-handle/index.gen.ts +1 -3
  57. package/src/components/block-handle/index.ts +2 -0
  58. package/src/components/drop-indicator/drop-indicator.gen.ts +3 -13
  59. package/src/components/drop-indicator/index.gen.ts +1 -3
  60. package/src/components/drop-indicator/index.ts +2 -0
  61. package/src/components/inline-popover/index.gen.ts +1 -3
  62. package/src/components/inline-popover/index.ts +2 -0
  63. package/src/components/inline-popover/inline-popover-popup.gen.ts +3 -13
  64. package/src/components/inline-popover/inline-popover-positioner.gen.ts +3 -13
  65. package/src/components/inline-popover/inline-popover-root.gen.ts +3 -13
  66. package/src/components/menu/index.gen.ts +1 -3
  67. package/src/components/menu/index.ts +2 -0
  68. package/src/components/menu/menu-item.gen.ts +3 -13
  69. package/src/components/menu/menu-popup.gen.ts +3 -13
  70. package/src/components/menu/menu-positioner.gen.ts +3 -13
  71. package/src/components/menu/menu-root.gen.ts +3 -13
  72. package/src/components/menu/menu-submenu-root.gen.ts +49 -17
  73. package/src/components/menu/menu-submenu-trigger.gen.ts +28 -19
  74. package/src/components/menu/menu-trigger.gen.ts +3 -13
  75. package/src/components/popover/index.gen.ts +1 -3
  76. package/src/components/popover/index.ts +2 -0
  77. package/src/components/popover/popover-popup.gen.ts +3 -13
  78. package/src/components/popover/popover-positioner.gen.ts +3 -13
  79. package/src/components/popover/popover-root.gen.ts +3 -13
  80. package/src/components/popover/popover-trigger.gen.ts +3 -13
  81. package/src/components/resizable/index.gen.ts +1 -3
  82. package/src/components/resizable/index.ts +2 -0
  83. package/src/components/resizable/resizable-handle.gen.ts +3 -13
  84. package/src/components/resizable/resizable-root.gen.ts +3 -13
  85. package/src/components/table-handle/index.gen.ts +1 -3
  86. package/src/components/table-handle/index.ts +2 -0
  87. package/src/components/table-handle/table-handle-column-menu-root.gen.ts +3 -13
  88. package/src/components/table-handle/table-handle-column-menu-trigger.gen.ts +3 -13
  89. package/src/components/table-handle/table-handle-column-popup.gen.ts +3 -13
  90. package/src/components/table-handle/table-handle-column-positioner.gen.ts +3 -13
  91. package/src/components/table-handle/table-handle-drag-preview.gen.ts +3 -13
  92. package/src/components/table-handle/table-handle-drop-indicator.gen.ts +3 -13
  93. package/src/components/table-handle/table-handle-root.gen.ts +3 -13
  94. package/src/components/table-handle/table-handle-row-menu-root.gen.ts +3 -13
  95. package/src/components/table-handle/table-handle-row-menu-trigger.gen.ts +3 -13
  96. package/src/components/table-handle/table-handle-row-popup.gen.ts +3 -13
  97. package/src/components/table-handle/table-handle-row-positioner.gen.ts +3 -13
  98. package/src/components/tooltip/index.gen.ts +1 -3
  99. package/src/components/tooltip/index.ts +2 -0
  100. package/src/components/tooltip/tooltip-popup.gen.ts +3 -13
  101. package/src/components/tooltip/tooltip-positioner.gen.ts +3 -13
  102. package/src/components/tooltip/tooltip-root.gen.ts +3 -13
  103. package/src/components/tooltip/tooltip-trigger.gen.ts +3 -13
  104. package/src/index.ts +2 -0
@@ -1,9 +1,6 @@
1
+ "use client";
1
2
  import { createElement, forwardRef, useCallback, useLayoutEffect, useRef } from "react";
2
3
  import { registerTooltipPopupElement, registerTooltipPositionerElement, registerTooltipRootElement, registerTooltipTriggerElement } from "@prosekit/web/tooltip";
3
- //#region src/components/tooltip/tooltip-popup.gen.ts
4
- /**
5
- * This file is auto-generated by the "@aria-ui/cli" tool. Do not edit this file directly.
6
- */
7
4
  function TooltipPopupComponent(props, forwardedRef) {
8
5
  registerTooltipPopupElement();
9
6
  const elementRef = useRef(null);
@@ -19,17 +16,8 @@ function TooltipPopupComponent(props, forwardedRef) {
19
16
  suppressHydrationWarning: true
20
17
  });
21
18
  }
22
- /**
23
- * A React component that renders an `prosekit-tooltip-popup` custom element.
24
- *
25
- * @public
26
- */
19
+ /** A React component that renders an `prosekit-tooltip-popup` custom element. */
27
20
  const TooltipPopup = /* @__PURE__ */ forwardRef(TooltipPopupComponent);
28
- //#endregion
29
- //#region src/components/tooltip/tooltip-positioner.gen.ts
30
- /**
31
- * This file is auto-generated by the "@aria-ui/cli" tool. Do not edit this file directly.
32
- */
33
21
  function TooltipPositionerComponent(props, forwardedRef) {
34
22
  registerTooltipPositionerElement();
35
23
  const elementRef = useRef(null);
@@ -69,17 +57,8 @@ function TooltipPositionerComponent(props, forwardedRef) {
69
57
  suppressHydrationWarning: true
70
58
  });
71
59
  }
72
- /**
73
- * A React component that renders an `prosekit-tooltip-positioner` custom element.
74
- *
75
- * @public
76
- */
60
+ /** A React component that renders an `prosekit-tooltip-positioner` custom element. */
77
61
  const TooltipPositioner = /* @__PURE__ */ forwardRef(TooltipPositionerComponent);
78
- //#endregion
79
- //#region src/components/tooltip/tooltip-root.gen.ts
80
- /**
81
- * This file is auto-generated by the "@aria-ui/cli" tool. Do not edit this file directly.
82
- */
83
62
  function TooltipRootComponent(props, forwardedRef) {
84
63
  registerTooltipRootElement();
85
64
  const elementRef = useRef(null);
@@ -115,17 +94,8 @@ function TooltipRootComponent(props, forwardedRef) {
115
94
  suppressHydrationWarning: true
116
95
  });
117
96
  }
118
- /**
119
- * A React component that renders an `prosekit-tooltip-root` custom element.
120
- *
121
- * @public
122
- */
97
+ /** A React component that renders an `prosekit-tooltip-root` custom element. */
123
98
  const TooltipRoot = /* @__PURE__ */ forwardRef(TooltipRootComponent);
124
- //#endregion
125
- //#region src/components/tooltip/tooltip-trigger.gen.ts
126
- /**
127
- * This file is auto-generated by the "@aria-ui/cli" tool. Do not edit this file directly.
128
- */
129
99
  function TooltipTriggerComponent(props, forwardedRef) {
130
100
  registerTooltipTriggerElement();
131
101
  const elementRef = useRef(null);
@@ -150,13 +120,30 @@ function TooltipTriggerComponent(props, forwardedRef) {
150
120
  suppressHydrationWarning: true
151
121
  });
152
122
  }
123
+ /** A React component that renders an `prosekit-tooltip-trigger` custom element. */
124
+ const TooltipTrigger = /* @__PURE__ */ forwardRef(TooltipTriggerComponent);
153
125
  /**
154
- * A React component that renders an `prosekit-tooltip-trigger` custom element.
155
- *
156
- * @public
126
+
127
+ @module
128
+
129
+ ## Anatomy
130
+
131
+ ```jsx
132
+ import {
133
+ TooltipPopup,
134
+ TooltipPositioner,
135
+ TooltipRoot,
136
+ TooltipTrigger,
137
+ } from 'prosekit/react/tooltip'
138
+
139
+ <TooltipRoot>
140
+ <TooltipTrigger>...</TooltipTrigger>
141
+ <TooltipPositioner>
142
+ <TooltipPopup>...</TooltipPopup>
143
+ </TooltipPositioner>
144
+ </TooltipRoot>
145
+ ```
157
146
  */
158
- const TooltipTrigger = /* @__PURE__ */ forwardRef(TooltipTriggerComponent);
159
- //#endregion
160
147
  export { TooltipPopup, TooltipPositioner, TooltipRoot, TooltipTrigger };
161
148
 
162
149
  //# sourceMappingURL=prosekit-react-tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-react-tooltip.js","names":[],"sources":["../src/components/tooltip/tooltip-popup.gen.ts","../src/components/tooltip/tooltip-positioner.gen.ts","../src/components/tooltip/tooltip-root.gen.ts","../src/components/tooltip/tooltip-trigger.gen.ts"],"sourcesContent":["/**\n * This file is auto-generated by the \"@aria-ui/cli\" tool. Do not edit this file directly.\n */\n\nimport { registerTooltipPopupElement, type TooltipPopupElement } from '@prosekit/web/tooltip';\nimport { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes } from 'react';\n\n/**\n * Props for the {@link TooltipPopup} React component.\n *\n * @public\n */\nexport interface TooltipPopupProps {}\n\nfunction TooltipPopupComponent(props: TooltipPopupProps, forwardedRef: ForwardedRef<TooltipPopupElement>) {\n registerTooltipPopupElement();\n\n const elementRef = useRef<TooltipPopupElement>(null);\n\n const { ...restProps } = props;\n\n const mergedRef = useCallback(\n (element: TooltipPopupElement | null) => {\n elementRef.current = element;\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n },\n [forwardedRef],\n );\n\n return createElement('prosekit-tooltip-popup', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });\n}\n\n/**\n * A React component that renders an `prosekit-tooltip-popup` custom element.\n *\n * @public\n */\nexport const TooltipPopup: ForwardRefExoticComponent<TooltipPopupProps & HTMLAttributes<TooltipPopupElement> & RefAttributes<TooltipPopupElement>> = /* @__PURE__ */ forwardRef(TooltipPopupComponent);\n","/**\n * This file is auto-generated by the \"@aria-ui/cli\" tool. Do not edit this file directly.\n */\n\nimport { registerTooltipPositionerElement, type TooltipPositionerElement, type TooltipPositionerProps as TooltipPositionerElementProps } from '@prosekit/web/tooltip';\nimport { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react';\n\n/**\n * Props for the {@link TooltipPositioner} React component.\n *\n * @public\n */\nexport interface TooltipPositionerProps {\n /**\n * The strategy to use for positioning\n *\n * @default \"absolute\"\n */\n strategy?: TooltipPositionerElementProps['strategy'];\n /**\n * The initial placement of the floating element\n *\n * @default \"top\"\n */\n placement?: TooltipPositionerElementProps['placement'];\n /**\n * Options to activate auto-update listeners\n *\n * @see https://floating-ui.com/docs/autoUpdate\n *\n * @default true\n */\n autoUpdate?: TooltipPositionerElementProps['autoUpdate'];\n /**\n * Whether to use the browser Popover API to place the floating element on\n * top of other page content.\n *\n * @default true\n */\n hoist?: TooltipPositionerElementProps['hoist'];\n /**\n * The distance between the reference and floating element.\n *\n * @default 6\n */\n offset?: TooltipPositionerElementProps['offset'];\n /**\n * Whether to flip the `placement` in order to keep it in view when the\n * preferred placement(s) will overflow the clipping boundary. You can also\n * provide an array of placements to try sequentially if the preferred\n * `placement` does not fit.\n *\n * @default true\n */\n flip?: TooltipPositionerElementProps['flip'];\n /**\n * Whether the floating element should shift to keep it in view.\n *\n * @default true\n */\n shift?: TooltipPositionerElementProps['shift'];\n /**\n * Whether the floating element can overlap the reference element to keep it\n * in view.\n *\n * @default false\n */\n overlap?: TooltipPositionerElementProps['overlap'];\n /**\n * Whether to constrain the floating element's width and height to not exceed\n * the viewport.\n *\n * @default false\n */\n fitViewport?: TooltipPositionerElementProps['fitViewport'];\n /**\n * Whether to constrain the floating element's width so that it matches the\n * reference element.\n *\n * @default false\n */\n sameWidth?: TooltipPositionerElementProps['sameWidth'];\n /**\n * Whether to constrain the floating element's height so that it matches the\n * reference element.\n *\n * @default false\n */\n sameHeight?: TooltipPositionerElementProps['sameHeight'];\n /**\n * Whether to improve positioning for inline reference elements that span over\n * multiple lines.\n *\n * @default false\n */\n inline?: TooltipPositionerElementProps['inline'];\n /**\n * Whether to hide the floating element when the reference element or the\n * floating element is fully clipped.\n *\n * @default false\n */\n hide?: TooltipPositionerElementProps['hide'];\n /**\n * Describes the clipping element(s) or area that overflow will be checked relative to.\n * Please see https://floating-ui.com/docs/detectoverflow#boundary for more information.\n *\n * @default 'clippingAncestors'\n */\n boundary?: TooltipPositionerElementProps['boundary'];\n /**\n * Describes the root boundary that the element will be checked for overflow relative to.\n * Please see https://floating-ui.com/docs/detectoverflow#rootboundary for more information.\n *\n * @default 'viewport'\n */\n rootBoundary?: TooltipPositionerElementProps['rootBoundary'];\n /**\n * Describes the virtual padding around the boundary to check for overflow.\n * Please see https://floating-ui.com/docs/detectoverflow#padding for more information.\n *\n * @default 4\n */\n overflowPadding?: TooltipPositionerElementProps['overflowPadding'];\n /**\n * The element that will be used to check for overflow. Please see\n * https://floating-ui.com/docs/detectoverflow#elementcontext for more\n * information.\n *\n * @default 'floating'\n */\n elementContext?: TooltipPositionerElementProps['elementContext'];\n /**\n * Whether to check the alternate elementContext's boundary. Please see\n * https://floating-ui.com/docs/detectoverflow#altboundary for more\n * information.\n *\n * @default false\n */\n altBoundary?: TooltipPositionerElementProps['altBoundary'];\n}\n\nfunction TooltipPositionerComponent(props: TooltipPositionerProps, forwardedRef: ForwardedRef<TooltipPositionerElement>) {\n registerTooltipPositionerElement();\n\n const elementRef = useRef<TooltipPositionerElement>(null);\n\n const { altBoundary: p0, autoUpdate: p1, boundary: p2, elementContext: p3, fitViewport: p4, flip: p5, hide: p6, hoist: p7, inline: p8, offset: p9, overflowPadding: p10, overlap: p11, placement: p12, rootBoundary: p13, sameHeight: p14, sameWidth: p15, shift: p16, strategy: p17, ...restProps } = props;\n\n useLayoutEffect(() => {\n const element = elementRef.current as Record<string, unknown> | null;\n if (!element) return;\n Object.assign(element, { altBoundary: p0, autoUpdate: p1, boundary: p2, elementContext: p3, fitViewport: p4, flip: p5, hide: p6, hoist: p7, inline: p8, offset: p9, overflowPadding: p10, overlap: p11, placement: p12, rootBoundary: p13, sameHeight: p14, sameWidth: p15, shift: p16, strategy: p17 });\n });\n\n const mergedRef = useCallback(\n (element: TooltipPositionerElement | null) => {\n elementRef.current = element;\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n },\n [forwardedRef],\n );\n\n return createElement('prosekit-tooltip-positioner', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });\n}\n\n/**\n * A React component that renders an `prosekit-tooltip-positioner` custom element.\n *\n * @public\n */\nexport const TooltipPositioner: ForwardRefExoticComponent<TooltipPositionerProps & HTMLAttributes<TooltipPositionerElement> & RefAttributes<TooltipPositionerElement>> = /* @__PURE__ */ forwardRef(TooltipPositionerComponent);\n","/**\n * This file is auto-generated by the \"@aria-ui/cli\" tool. Do not edit this file directly.\n */\n\nimport { registerTooltipRootElement, type TooltipRootElement, type TooltipRootProps as TooltipRootElementProps, type TooltipRootEvents } from '@prosekit/web/tooltip';\nimport { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react';\n\n/**\n * Props for the {@link TooltipRoot} React component.\n *\n * @public\n */\nexport interface TooltipRootProps {\n /**\n * Whether the overlay is initially open.\n * @default false\n */\n defaultOpen?: TooltipRootElementProps['defaultOpen'];\n /**\n * Whether the overlay is currently open.\n * @default null\n */\n open?: TooltipRootElementProps['open'];\n /**\n * Whether the component should ignore user interaction.\n * @default false\n */\n disabled?: TooltipRootElementProps['disabled'];\n /** Emitted when the tooltip is opened or closed. */\n onOpenChange?: (event: TooltipRootEvents['openChange']) => void;\n}\n\nfunction TooltipRootComponent(props: TooltipRootProps, forwardedRef: ForwardedRef<TooltipRootElement>) {\n registerTooltipRootElement();\n\n const elementRef = useRef<TooltipRootElement>(null);\n const handlersRef = useRef<Array<((event: Event) => void) | undefined>>([]);\n\n const { defaultOpen: p0, disabled: p1, open: p2, onOpenChange: e0, ...restProps } = props;\n\n useLayoutEffect(() => {\n const element = elementRef.current as Record<string, unknown> | null;\n if (!element) return;\n Object.assign(element, { defaultOpen: p0, disabled: p1, open: p2 });\n handlersRef.current = [e0] as Array<((event: Event) => void) | undefined>;\n });\n\n useLayoutEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n const ac = new AbortController();\n for (const [index, eventName] of ['openChange'].entries()) {\n element.addEventListener(\n eventName,\n (event: Event) => {\n handlersRef.current[index]?.(event);\n },\n { signal: ac.signal },\n );\n }\n return () => ac.abort();\n }, []);\n\n const mergedRef = useCallback(\n (element: TooltipRootElement | null) => {\n elementRef.current = element;\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n },\n [forwardedRef],\n );\n\n return createElement('prosekit-tooltip-root', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });\n}\n\n/**\n * A React component that renders an `prosekit-tooltip-root` custom element.\n *\n * @public\n */\nexport const TooltipRoot: ForwardRefExoticComponent<TooltipRootProps & HTMLAttributes<TooltipRootElement> & RefAttributes<TooltipRootElement>> = /* @__PURE__ */ forwardRef(TooltipRootComponent);\n","/**\n * This file is auto-generated by the \"@aria-ui/cli\" tool. Do not edit this file directly.\n */\n\nimport { registerTooltipTriggerElement, type TooltipTriggerElement, type TooltipTriggerProps as TooltipTriggerElementProps } from '@prosekit/web/tooltip';\nimport { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react';\n\n/**\n * Props for the {@link TooltipTrigger} React component.\n *\n * @public\n */\nexport interface TooltipTriggerProps {\n /**\n * Whether the component should ignore user interaction.\n * @default false\n */\n disabled?: TooltipTriggerElementProps['disabled'];\n /**\n * The delay in milliseconds before opening the tooltip on hover.\n * @default 600\n */\n openDelay?: TooltipTriggerElementProps['openDelay'];\n /**\n * The delay in milliseconds before closing the tooltip when hover/focus ends.\n * @default 0\n */\n closeDelay?: TooltipTriggerElementProps['closeDelay'];\n}\n\nfunction TooltipTriggerComponent(props: TooltipTriggerProps, forwardedRef: ForwardedRef<TooltipTriggerElement>) {\n registerTooltipTriggerElement();\n\n const elementRef = useRef<TooltipTriggerElement>(null);\n\n const { closeDelay: p0, disabled: p1, openDelay: p2, ...restProps } = props;\n\n useLayoutEffect(() => {\n const element = elementRef.current as Record<string, unknown> | null;\n if (!element) return;\n Object.assign(element, { closeDelay: p0, disabled: p1, openDelay: p2 });\n });\n\n const mergedRef = useCallback(\n (element: TooltipTriggerElement | null) => {\n elementRef.current = element;\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n },\n [forwardedRef],\n );\n\n return createElement('prosekit-tooltip-trigger', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });\n}\n\n/**\n * A React component that renders an `prosekit-tooltip-trigger` custom element.\n *\n * @public\n */\nexport const TooltipTrigger: ForwardRefExoticComponent<TooltipTriggerProps & HTMLAttributes<TooltipTriggerElement> & RefAttributes<TooltipTriggerElement>> = /* @__PURE__ */ forwardRef(TooltipTriggerComponent);\n"],"mappings":"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"}
1
+ {"version":3,"file":"prosekit-react-tooltip.js","names":[],"sources":["../src/components/tooltip/tooltip-popup.gen.ts","../src/components/tooltip/tooltip-positioner.gen.ts","../src/components/tooltip/tooltip-root.gen.ts","../src/components/tooltip/tooltip-trigger.gen.ts","../src/components/tooltip/index.ts"],"sourcesContent":["// This file is auto-generated by \"@aria-ui/cli\". Do not edit this file directly.\n\nimport { registerTooltipPopupElement, type TooltipPopupElement } from '@prosekit/web/tooltip';\nimport { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes } from 'react';\n\n/** Props for the {@link TooltipPopup} React component. */\nexport interface TooltipPopupProps {}\n\nfunction TooltipPopupComponent(props: TooltipPopupProps, forwardedRef: ForwardedRef<TooltipPopupElement>) {\n registerTooltipPopupElement();\n\n const elementRef = useRef<TooltipPopupElement>(null);\n\n const { ...restProps } = props;\n\n const mergedRef = useCallback(\n (element: TooltipPopupElement | null) => {\n elementRef.current = element;\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n },\n [forwardedRef],\n );\n\n return createElement('prosekit-tooltip-popup', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });\n}\n\n/** A React component that renders an `prosekit-tooltip-popup` custom element. */\nexport const TooltipPopup: ForwardRefExoticComponent<TooltipPopupProps & HTMLAttributes<TooltipPopupElement> & RefAttributes<TooltipPopupElement>> = /* @__PURE__ */ forwardRef(TooltipPopupComponent);\n","// This file is auto-generated by \"@aria-ui/cli\". Do not edit this file directly.\n\nimport { registerTooltipPositionerElement, type TooltipPositionerElement, type TooltipPositionerProps as TooltipPositionerElementProps } from '@prosekit/web/tooltip';\nimport { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react';\n\n/** Props for the {@link TooltipPositioner} React component. */\nexport interface TooltipPositionerProps {\n /**\n * The strategy to use for positioning\n *\n * @default \"absolute\"\n */\n strategy?: TooltipPositionerElementProps['strategy'];\n /**\n * The initial placement of the floating element\n *\n * @default \"top\"\n */\n placement?: TooltipPositionerElementProps['placement'];\n /**\n * Options to activate auto-update listeners\n *\n * @see https://floating-ui.com/docs/autoUpdate\n *\n * @default true\n */\n autoUpdate?: TooltipPositionerElementProps['autoUpdate'];\n /**\n * Whether to use the browser Popover API to place the floating element on\n * top of other page content.\n *\n * @default true\n */\n hoist?: TooltipPositionerElementProps['hoist'];\n /**\n * The distance between the reference and floating element.\n *\n * @default 6\n */\n offset?: TooltipPositionerElementProps['offset'];\n /**\n * Whether to flip the `placement` in order to keep it in view when the\n * preferred placement(s) will overflow the clipping boundary. You can also\n * provide an array of placements to try sequentially if the preferred\n * `placement` does not fit.\n *\n * @default true\n */\n flip?: TooltipPositionerElementProps['flip'];\n /**\n * Whether the floating element should shift to keep it in view.\n *\n * @default true\n */\n shift?: TooltipPositionerElementProps['shift'];\n /**\n * Whether the floating element can overlap the reference element to keep it\n * in view.\n *\n * @default false\n */\n overlap?: TooltipPositionerElementProps['overlap'];\n /**\n * Whether to constrain the floating element's width and height to not exceed\n * the viewport.\n *\n * @default false\n */\n fitViewport?: TooltipPositionerElementProps['fitViewport'];\n /**\n * Whether to constrain the floating element's width so that it matches the\n * reference element.\n *\n * @default false\n */\n sameWidth?: TooltipPositionerElementProps['sameWidth'];\n /**\n * Whether to constrain the floating element's height so that it matches the\n * reference element.\n *\n * @default false\n */\n sameHeight?: TooltipPositionerElementProps['sameHeight'];\n /**\n * Whether to improve positioning for inline reference elements that span over\n * multiple lines.\n *\n * @default false\n */\n inline?: TooltipPositionerElementProps['inline'];\n /**\n * Whether to hide the floating element when the reference element or the\n * floating element is fully clipped.\n *\n * @default false\n */\n hide?: TooltipPositionerElementProps['hide'];\n /**\n * Describes the clipping element(s) or area that overflow will be checked relative to.\n * Please see https://floating-ui.com/docs/detectoverflow#boundary for more information.\n *\n * @default 'clippingAncestors'\n */\n boundary?: TooltipPositionerElementProps['boundary'];\n /**\n * Describes the root boundary that the element will be checked for overflow relative to.\n * Please see https://floating-ui.com/docs/detectoverflow#rootboundary for more information.\n *\n * @default 'viewport'\n */\n rootBoundary?: TooltipPositionerElementProps['rootBoundary'];\n /**\n * Describes the virtual padding around the boundary to check for overflow.\n * Please see https://floating-ui.com/docs/detectoverflow#padding for more information.\n *\n * @default 4\n */\n overflowPadding?: TooltipPositionerElementProps['overflowPadding'];\n /**\n * The element that will be used to check for overflow. Please see\n * https://floating-ui.com/docs/detectoverflow#elementcontext for more\n * information.\n *\n * @default 'floating'\n */\n elementContext?: TooltipPositionerElementProps['elementContext'];\n /**\n * Whether to check the alternate elementContext's boundary. Please see\n * https://floating-ui.com/docs/detectoverflow#altboundary for more\n * information.\n *\n * @default false\n */\n altBoundary?: TooltipPositionerElementProps['altBoundary'];\n}\n\nfunction TooltipPositionerComponent(props: TooltipPositionerProps, forwardedRef: ForwardedRef<TooltipPositionerElement>) {\n registerTooltipPositionerElement();\n\n const elementRef = useRef<TooltipPositionerElement>(null);\n\n const { altBoundary: p0, autoUpdate: p1, boundary: p2, elementContext: p3, fitViewport: p4, flip: p5, hide: p6, hoist: p7, inline: p8, offset: p9, overflowPadding: p10, overlap: p11, placement: p12, rootBoundary: p13, sameHeight: p14, sameWidth: p15, shift: p16, strategy: p17, ...restProps } = props;\n\n useLayoutEffect(() => {\n const element = elementRef.current as Record<string, unknown> | null;\n if (!element) return;\n Object.assign(element, { altBoundary: p0, autoUpdate: p1, boundary: p2, elementContext: p3, fitViewport: p4, flip: p5, hide: p6, hoist: p7, inline: p8, offset: p9, overflowPadding: p10, overlap: p11, placement: p12, rootBoundary: p13, sameHeight: p14, sameWidth: p15, shift: p16, strategy: p17 });\n });\n\n const mergedRef = useCallback(\n (element: TooltipPositionerElement | null) => {\n elementRef.current = element;\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n },\n [forwardedRef],\n );\n\n return createElement('prosekit-tooltip-positioner', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });\n}\n\n/** A React component that renders an `prosekit-tooltip-positioner` custom element. */\nexport const TooltipPositioner: ForwardRefExoticComponent<TooltipPositionerProps & HTMLAttributes<TooltipPositionerElement> & RefAttributes<TooltipPositionerElement>> = /* @__PURE__ */ forwardRef(TooltipPositionerComponent);\n","// This file is auto-generated by \"@aria-ui/cli\". Do not edit this file directly.\n\nimport { registerTooltipRootElement, type TooltipRootElement, type TooltipRootProps as TooltipRootElementProps, type TooltipRootEvents } from '@prosekit/web/tooltip';\nimport { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react';\n\n/** Props for the {@link TooltipRoot} React component. */\nexport interface TooltipRootProps {\n /**\n * Whether the overlay is initially open.\n * @default false\n */\n defaultOpen?: TooltipRootElementProps['defaultOpen'];\n /**\n * Whether the overlay is currently open.\n * @default null\n */\n open?: TooltipRootElementProps['open'];\n /**\n * Whether the component should ignore user interaction.\n * @default false\n */\n disabled?: TooltipRootElementProps['disabled'];\n /** Emitted when the tooltip is opened or closed. */\n onOpenChange?: (event: TooltipRootEvents['openChange']) => void;\n}\n\nfunction TooltipRootComponent(props: TooltipRootProps, forwardedRef: ForwardedRef<TooltipRootElement>) {\n registerTooltipRootElement();\n\n const elementRef = useRef<TooltipRootElement>(null);\n const handlersRef = useRef<Array<((event: Event) => void) | undefined>>([]);\n\n const { defaultOpen: p0, disabled: p1, open: p2, onOpenChange: e0, ...restProps } = props;\n\n useLayoutEffect(() => {\n const element = elementRef.current as Record<string, unknown> | null;\n if (!element) return;\n Object.assign(element, { defaultOpen: p0, disabled: p1, open: p2 });\n handlersRef.current = [e0] as Array<((event: Event) => void) | undefined>;\n });\n\n useLayoutEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n const ac = new AbortController();\n for (const [index, eventName] of ['openChange'].entries()) {\n element.addEventListener(\n eventName,\n (event: Event) => {\n handlersRef.current[index]?.(event);\n },\n { signal: ac.signal },\n );\n }\n return () => ac.abort();\n }, []);\n\n const mergedRef = useCallback(\n (element: TooltipRootElement | null) => {\n elementRef.current = element;\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n },\n [forwardedRef],\n );\n\n return createElement('prosekit-tooltip-root', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });\n}\n\n/** A React component that renders an `prosekit-tooltip-root` custom element. */\nexport const TooltipRoot: ForwardRefExoticComponent<TooltipRootProps & HTMLAttributes<TooltipRootElement> & RefAttributes<TooltipRootElement>> = /* @__PURE__ */ forwardRef(TooltipRootComponent);\n","// This file is auto-generated by \"@aria-ui/cli\". Do not edit this file directly.\n\nimport { registerTooltipTriggerElement, type TooltipTriggerElement, type TooltipTriggerProps as TooltipTriggerElementProps } from '@prosekit/web/tooltip';\nimport { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react';\n\n/** Props for the {@link TooltipTrigger} React component. */\nexport interface TooltipTriggerProps {\n /**\n * Whether the component should ignore user interaction.\n * @default false\n */\n disabled?: TooltipTriggerElementProps['disabled'];\n /**\n * The delay in milliseconds before opening the tooltip on hover.\n * @default 600\n */\n openDelay?: TooltipTriggerElementProps['openDelay'];\n /**\n * The delay in milliseconds before closing the tooltip when hover/focus ends.\n * @default 0\n */\n closeDelay?: TooltipTriggerElementProps['closeDelay'];\n}\n\nfunction TooltipTriggerComponent(props: TooltipTriggerProps, forwardedRef: ForwardedRef<TooltipTriggerElement>) {\n registerTooltipTriggerElement();\n\n const elementRef = useRef<TooltipTriggerElement>(null);\n\n const { closeDelay: p0, disabled: p1, openDelay: p2, ...restProps } = props;\n\n useLayoutEffect(() => {\n const element = elementRef.current as Record<string, unknown> | null;\n if (!element) return;\n Object.assign(element, { closeDelay: p0, disabled: p1, openDelay: p2 });\n });\n\n const mergedRef = useCallback(\n (element: TooltipTriggerElement | null) => {\n elementRef.current = element;\n if (typeof forwardedRef === 'function') {\n forwardedRef(element);\n } else if (forwardedRef) {\n forwardedRef.current = element;\n }\n },\n [forwardedRef],\n );\n\n return createElement('prosekit-tooltip-trigger', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });\n}\n\n/** A React component that renders an `prosekit-tooltip-trigger` custom element. */\nexport const TooltipTrigger: ForwardRefExoticComponent<TooltipTriggerProps & HTMLAttributes<TooltipTriggerElement> & RefAttributes<TooltipTriggerElement>> = /* @__PURE__ */ forwardRef(TooltipTriggerComponent);\n","/**\n\n@module\n\n## Anatomy\n\n```jsx\nimport {\n TooltipPopup,\n TooltipPositioner,\n TooltipRoot,\n TooltipTrigger,\n} from 'prosekit/react/tooltip'\n\n<TooltipRoot>\n <TooltipTrigger>...</TooltipTrigger>\n <TooltipPositioner>\n <TooltipPopup>...</TooltipPopup>\n </TooltipPositioner>\n</TooltipRoot>\n```\n*/\n\n'use client'\n\nexport * from './index.gen.ts'\n"],"mappings":"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"}
@@ -4,8 +4,6 @@ import { MarkViewContext, NodeViewContext } from "@prosemirror-adapter/react";
4
4
  import { CoreMarkViewUserOptions, CoreNodeViewUserOptions } from "@prosemirror-adapter/core";
5
5
  import { ProseMirrorNode } from "@prosekit/pm/model";
6
6
  import { EditorState } from "@prosekit/pm/state";
7
-
8
- //#region src/components/prosekit.d.ts
9
7
  interface ProseKitProps {
10
8
  editor: Editor;
11
9
  children?: ReactNode;
@@ -16,8 +14,6 @@ interface ProseKitProps {
16
14
  * @public
17
15
  */
18
16
  declare const ProseKit: ComponentType<ProseKitProps>;
19
- //#endregion
20
- //#region src/extensions/react-mark-view.d.ts
21
17
  /**
22
18
  * @public
23
19
  */
@@ -43,8 +39,6 @@ interface ReactMarkViewOptions extends CoreMarkViewUserOptions<ReactMarkViewComp
43
39
  * @public
44
40
  */
45
41
  declare function defineReactMarkView(options: ReactMarkViewOptions): Extension;
46
- //#endregion
47
- //#region src/extensions/react-node-view.d.ts
48
42
  /**
49
43
  * @public
50
44
  */
@@ -70,8 +64,6 @@ interface ReactNodeViewOptions extends CoreNodeViewUserOptions<ReactNodeViewComp
70
64
  * @public
71
65
  */
72
66
  declare function defineReactNodeView(options: ReactNodeViewOptions): Extension;
73
- //#endregion
74
- //#region src/hooks/use-extension.d.ts
75
67
  interface UseExtensionOptions {
76
68
  /**
77
69
  * The editor to add the extension to. If not provided, it will use the
@@ -93,16 +85,12 @@ declare function useExtension(
93
85
  */
94
86
 
95
87
  extension: Extension | null, options?: UseExtensionOptions): void;
96
- //#endregion
97
- //#region src/hooks/use-doc-change.d.ts
98
88
  /**
99
89
  * Calls the given handler whenever the editor document changes.
100
90
  *
101
91
  * @public
102
92
  */
103
93
  declare function useDocChange(handler: (doc: ProseMirrorNode) => void, options?: UseExtensionOptions): void;
104
- //#endregion
105
- //#region src/hooks/use-editor-derived-value.d.ts
106
94
  interface UseEditorDerivedOptions<E extends Extension = any> {
107
95
  /**
108
96
  * The editor to add the extension to. If not provided, it will use the
@@ -132,8 +120,6 @@ declare function useEditorDerivedValue<E extends Extension, Derived>(
132
120
  */
133
121
 
134
122
  derive: (editor: Editor<E>) => Derived, options?: UseEditorDerivedOptions<E>): Derived;
135
- //#endregion
136
- //#region src/hooks/use-editor.d.ts
137
123
  /**
138
124
  * Retrieves the editor instance from the nearest ProseKit component.
139
125
  *
@@ -153,25 +139,18 @@ declare function useEditor<E extends Extension = any>(options?: {
153
139
  */
154
140
  update?: boolean;
155
141
  }): Editor<E>;
156
- //#endregion
157
- //#region src/hooks/use-keymap.d.ts
158
142
  declare function useKeymap(keymap: Keymap, options?: UseExtensionOptions): void;
159
- //#endregion
160
- //#region src/hooks/use-state-update.d.ts
161
143
  /**
162
144
  * Calls the given handler whenever the editor state changes.
163
145
  *
164
146
  * @public
165
147
  */
166
148
  declare function useStateUpdate(handler: (state: EditorState) => void, options?: UseExtensionOptions): void;
167
- //#endregion
168
- //#region src/types.d.ts
169
149
  /**
170
150
  * @internal
171
151
  */
172
152
  type PropsWithClassName<P = unknown> = P & {
173
153
  className?: string | undefined;
174
154
  };
175
- //#endregion
176
155
  export { type PropsWithClassName, ProseKit, type ProseKitProps, type ReactMarkViewComponent, type ReactMarkViewOptions, type ReactMarkViewProps, type ReactNodeViewComponent, type ReactNodeViewOptions, type ReactNodeViewProps, type UseEditorDerivedOptions, type UseExtensionOptions, defineReactMarkView, defineReactNodeView, useDocChange, useEditor, useEditorDerivedValue, useExtension, useKeymap, useStateUpdate };
177
156
  //# sourceMappingURL=prosekit-react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-react.d.ts","names":[],"sources":["../src/components/prosekit.ts","../src/extensions/react-mark-view.ts","../src/extensions/react-node-view.ts","../src/hooks/use-extension.ts","../src/hooks/use-doc-change.ts","../src/hooks/use-editor-derived-value.ts","../src/hooks/use-editor.ts","../src/hooks/use-keymap.ts","../src/hooks/use-state-update.ts","../src/types.ts"],"mappings":";;;;;;;;UAOiB,aAAA;EACf,MAAA,EAAQ,MAAA;EACR,QAAA,GAAW,SAAA;AAAA;;;AAFb;;;cAUa,QAAA,EAAU,aAAA,CAAc,aAAA;;;;;;UCHpB,kBAAA,SAA2B,eAAA;;;;KAKhC,sBAAA,GAAyB,aAAA,CAAc,kBAAA;;;;;;UAOlC,oBAAA,SAA6B,uBAAA,CAAwB,sBAAA;EDErE;;;ECEC,IAAA;AAAA;;;;AAXF;;iBA6CgB,mBAAA,CAAoB,OAAA,EAAS,oBAAA,GAAuB,SAAA;;;;;;UClDnD,kBAAA,SAA2B,eAAA;;;;KAKhC,sBAAA,GAAyB,aAAA,CAAc,kBAAA;;;;;;UAOlC,oBAAA,SAA6B,uBAAA,CAAwB,sBAAA;EFErE;;;EEEC,IAAA;AAAA;;;;ADXF;;iBC6CgB,mBAAA,CAAoB,OAAA,EAAS,oBAAA,GAAuB,SAAA;;;UCzDnD,mBAAA;;;;;EAKf,MAAA,GAAS,MAAA;;AHLX;;EGUE,QAAA,GAAW,QAAA;AAAA;;;;iBAMG,YAAA;;;AHNhB;;;AGWE,SAAA,EAAW,SAAA,SACX,OAAA,GAAU,mBAAA;;;;;;;;iBCjBI,YAAA,CACd,OAAA,GAAU,GAAA,EAAK,eAAA,WACf,OAAA,GAAU,mBAAA;;;UCTK,uBAAA,WAAkC,SAAA;;;;;EAKjD,MAAA,GAAS,MAAA,CAAO,CAAA;AAAA;ALHlB;;;;;;;;;;AAUA;AAVA,iBKiBgB,qBAAA,WAAgC,SAAA,UAAA;;;;;;;AJVhD;;;AImBE,MAAA,GAAS,MAAA,EAAQ,MAAA,CAAO,CAAA,MAAO,OAAA,EAC/B,OAAA,GAAU,uBAAA,CAAwB,CAAA,IACjC,OAAA;;;;;;;;iBCzBa,SAAA,WAAoB,SAAA,OAAA,CAAiB,OAAA;;ANHrD;;;;;;;;;;EMeE,MAAA;AAAA,IACE,MAAA,CAAO,CAAA;;;iBClBK,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,GAAU,mBAAA;;;;;;;;iBCOpC,cAAA,CACd,OAAA,GAAU,KAAA,EAAO,WAAA,WACjB,OAAA,GAAU,mBAAA;;;;;;KCXA,kBAAA,gBAAkC,CAAA;EAC5C,SAAA;AAAA"}
1
+ {"version":3,"file":"prosekit-react.d.ts","names":[],"sources":["../src/components/prosekit.ts","../src/extensions/react-mark-view.ts","../src/extensions/react-node-view.ts","../src/hooks/use-extension.ts","../src/hooks/use-doc-change.ts","../src/hooks/use-editor-derived-value.ts","../src/hooks/use-editor.ts","../src/hooks/use-keymap.ts","../src/hooks/use-state-update.ts","../src/types.ts"],"mappings":";;;;;;UAOiB,aAAA;EACf,MAAA,EAAQ,MAAA;EACR,QAAA,GAAW,SAAA;AAAA;;AAFb;;;;cAUa,QAAA,EAAU,aAAA,CAAc,aAAA;;;;UCHpB,kBAAA,SAA2B,eAAA;;;;KAKhC,sBAAA,GAAyB,aAAA,CAAc,kBAAA;;;;;ADFnD;UCSiB,oBAAA,SAA6B,uBAAA,CAAwB,sBAAA;;;;EAIpE,IAAA;AAAA;AAXF;;;;;AAAA,iBA6CgB,mBAAA,CAAoB,OAAA,EAAS,oBAAA,GAAuB,SAAA;;;;UClDnD,kBAAA,SAA2B,eAAA;;;;KAKhC,sBAAA,GAAyB,aAAA,CAAc,kBAAA;;;;;AFFnD;UESiB,oBAAA,SAA6B,uBAAA,CAAwB,sBAAA;;;;EAIpE,IAAA;AAAA;ADXF;;;;;AAAA,iBC6CgB,mBAAA,CAAoB,OAAA,EAAS,oBAAA,GAAuB,SAAA;AAAA,UCzDnD,mBAAA;;;;;EAKf,MAAA,GAAS,MAAA;EHLM;;;EGUf,QAAA,GAAW,QAAA;AAAA;;;;iBAMG,YAAA;;AHNhB;;;;AGWE,SAAA,EAAW,SAAA,SACX,OAAA,GAAU,mBAAA;;;;;;iBCjBI,YAAA,CACd,OAAA,GAAU,GAAA,EAAK,eAAA,WACf,OAAA,GAAU,mBAAA;AAAA,UCTK,uBAAA,WAAkC,SAAA;;;;;EAKjD,MAAA,GAAS,MAAA,CAAO,CAAA;AAAA;;;;;;;;;;ALOlB;;iBKOgB,qBAAA,WAAgC,SAAA,UAAA;;;;AJVhD;;;;;;AImBE,MAAA,GAAS,MAAA,EAAQ,MAAA,CAAO,CAAA,MAAO,OAAA,EAC/B,OAAA,GAAU,uBAAA,CAAwB,CAAA,IACjC,OAAA;;;;;;iBCzBa,SAAA,WAAoB,SAAA,OAAA,CAAiB,OAAA;ENHpC;;;;;;;;;;AAUjB;EMKE,MAAA;AAAA,IACE,MAAA,CAAO,CAAA;AAAA,iBClBK,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,GAAU,mBAAA;;;;;;iBCOpC,cAAA,CACd,OAAA,GAAU,KAAA,EAAO,WAAA,WACjB,OAAA,GAAU,mBAAA;;;;KCXA,kBAAA,gBAAkC,CAAA;EAC5C,SAAA;AAAA"}
@@ -1,10 +1,10 @@
1
+ "use client";
1
2
  import { n as useEditorContext, t as EditorContextProvider } from "./editor-context.js";
2
3
  import { Fragment, createElement, useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useSyncExternalStore } from "react";
3
4
  import { EditorNotFoundError, ProseKitError, defineDocChangeHandler, defineKeymap, defineMarkViewComponent, defineMarkViewFactory, defineMountHandler, defineNodeViewComponent, defineNodeViewFactory, defineUpdateHandler, union, withPriority } from "@prosekit/core";
4
5
  import { AbstractReactMarkView, AbstractReactNodeView, buildReactMarkViewCreator, buildReactNodeViewCreator, useReactRenderer } from "@prosemirror-adapter/react";
5
6
  import { createPortal } from "react-dom";
6
7
  import { queueExtension } from "@prosekit/web";
7
- //#region src/extensions/react-mark-view.ts
8
8
  var ProseKitReactMarkView = class extends AbstractReactMarkView {
9
9
  constructor(..._args) {
10
10
  super(..._args);
@@ -35,8 +35,6 @@ function defineReactMarkView(options) {
35
35
  args: options
36
36
  });
37
37
  }
38
- //#endregion
39
- //#region src/extensions/react-node-view.ts
40
38
  var ProseKitReactNodeView = class extends AbstractReactNodeView {
41
39
  constructor(..._args) {
42
40
  super(..._args);
@@ -67,8 +65,6 @@ function defineReactNodeView(options) {
67
65
  args: options
68
66
  });
69
67
  }
70
- //#endregion
71
- //#region src/hooks/use-editor-extension.ts
72
68
  /**
73
69
  * @internal
74
70
  */
@@ -78,8 +74,6 @@ function useEditorExtension(editor, extension) {
78
74
  if (extension) return queueExtension(editor, extension);
79
75
  }, [editor, extension]);
80
76
  }
81
- //#endregion
82
- //#region src/components/view-renderer.ts
83
77
  const ViewRenderer = ({ editor, children }) => {
84
78
  const { renderReactRenderer, removeReactRenderer, render } = useReactRenderer();
85
79
  useEditorExtension(editor, useMemo(() => {
@@ -87,8 +81,6 @@ const ViewRenderer = ({ editor, children }) => {
87
81
  }, [renderReactRenderer, removeReactRenderer]));
88
82
  return createElement(Fragment, null, createElement(Fragment, null, children), createElement(Fragment, null, render()));
89
83
  };
90
- //#endregion
91
- //#region src/components/prosekit.ts
92
84
  /**
93
85
  * The root component for a ProseKit editor.
94
86
  *
@@ -101,8 +93,6 @@ const ProseKit = (props) => {
101
93
  children
102
94
  }));
103
95
  };
104
- //#endregion
105
- //#region src/hooks/use-event-callback.ts
106
96
  /**
107
97
  * @internal
108
98
  */
@@ -113,8 +103,6 @@ function useEventCallback(callback) {
113
103
  }, [callback]);
114
104
  return useCallback((...args) => callbackRef.current(...args), []);
115
105
  }
116
- //#endregion
117
- //#region src/hooks/use-priority-extension.ts
118
106
  /**
119
107
  * @internal
120
108
  */
@@ -123,8 +111,6 @@ function usePriorityExtension(extension, priority) {
123
111
  return extension && priority ? withPriority(extension, priority) : extension;
124
112
  }, [extension, priority]);
125
113
  }
126
- //#endregion
127
- //#region src/hooks/use-extension.ts
128
114
  /**
129
115
  * Add an extension to the editor.
130
116
  */
@@ -132,8 +118,6 @@ function useExtension(extension, options) {
132
118
  const editorContext = useEditorContext();
133
119
  useEditorExtension(options?.editor || editorContext, usePriorityExtension(extension, options?.priority));
134
120
  }
135
- //#endregion
136
- //#region src/hooks/use-doc-change.ts
137
121
  /**
138
122
  * Calls the given handler whenever the editor document changes.
139
123
  *
@@ -143,8 +127,6 @@ function useDocChange(handler, options) {
143
127
  const memoizedHandler = useEventCallback(handler);
144
128
  useExtension(useMemo(() => defineDocChangeHandler((view) => memoizedHandler(view.state.doc)), [memoizedHandler]), options);
145
129
  }
146
- //#endregion
147
- //#region src/hooks/use-editor-derived-value.ts
148
130
  /**
149
131
  * Runs a function to derive a value from the editor instance after editor state
150
132
  * changes.
@@ -185,8 +167,6 @@ function createEditorStore(editor, derive) {
185
167
  };
186
168
  return [subscribe, getSnapshot];
187
169
  }
188
- //#endregion
189
- //#region src/hooks/use-editor.ts
190
170
  /**
191
171
  * Retrieves the editor instance from the nearest ProseKit component.
192
172
  *
@@ -213,13 +193,9 @@ function useForceUpdate() {
213
193
  const [, dispatch] = useReducer((x) => x + 1, 0);
214
194
  return dispatch;
215
195
  }
216
- //#endregion
217
- //#region src/hooks/use-keymap.ts
218
196
  function useKeymap(keymap, options) {
219
197
  useExtension(useMemo(() => defineKeymap(keymap), [keymap]), options);
220
198
  }
221
- //#endregion
222
- //#region src/hooks/use-state-update.ts
223
199
  /**
224
200
  * Calls the given handler whenever the editor state changes.
225
201
  *
@@ -229,7 +205,6 @@ function useStateUpdate(handler, options) {
229
205
  const memoizedHandler = useEventCallback(handler);
230
206
  useExtension(useMemo(() => defineUpdateHandler((view) => memoizedHandler(view.state)), [memoizedHandler]), options);
231
207
  }
232
- //#endregion
233
208
  export { ProseKit, defineReactMarkView, defineReactNodeView, useDocChange, useEditor, useEditorDerivedValue, useExtension, useKeymap, useStateUpdate };
234
209
 
235
210
  //# sourceMappingURL=prosekit-react.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prosekit-react.js","names":[],"sources":["../src/extensions/react-mark-view.ts","../src/extensions/react-node-view.ts","../src/hooks/use-editor-extension.ts","../src/components/view-renderer.ts","../src/components/prosekit.ts","../src/hooks/use-event-callback.ts","../src/hooks/use-priority-extension.ts","../src/hooks/use-extension.ts","../src/hooks/use-doc-change.ts","../src/hooks/use-editor-derived-value.ts","../src/hooks/use-editor.ts","../src/hooks/use-keymap.ts","../src/hooks/use-state-update.ts"],"sourcesContent":["import { defineMarkViewComponent, defineMarkViewFactory, type Extension } from '@prosekit/core'\nimport type { CoreMarkViewUserOptions } from '@prosemirror-adapter/core'\nimport {\n AbstractReactMarkView,\n buildReactMarkViewCreator,\n type MarkViewContext,\n type ReactRendererResult,\n} from '@prosemirror-adapter/react'\nimport { createElement, type ComponentType, type ReactPortal } from 'react'\nimport { createPortal } from 'react-dom'\n\n/**\n * @public\n */\nexport interface ReactMarkViewProps extends MarkViewContext {}\n\n/**\n * @public\n */\nexport type ReactMarkViewComponent = ComponentType<ReactMarkViewProps>\n\n/**\n * Options for {@link defineReactMarkView}.\n *\n * @public\n */\nexport interface ReactMarkViewOptions extends CoreMarkViewUserOptions<ReactMarkViewComponent> {\n /**\n * The name of the mark type.\n */\n name: string\n}\n\nclass ProseKitReactMarkView extends AbstractReactMarkView<ReactMarkViewComponent> {\n render = (): ReactPortal => {\n const UserComponent = this.component\n const props = { ...this.context }\n return createPortal(\n createElement(UserComponent, props),\n this.dom,\n this.key,\n )\n }\n}\n\n/**\n * @internal\n */\nexport function defineReactMarkViewFactory(\n renderReactRenderer: ReactRendererResult['renderReactRenderer'],\n removeReactRenderer: ReactRendererResult['removeReactRenderer'],\n): Extension {\n const factory = buildReactMarkViewCreator(renderReactRenderer, removeReactRenderer, ProseKitReactMarkView)\n return defineMarkViewFactory<ReactMarkViewOptions>({\n group: 'react',\n factory,\n })\n}\n\n/**\n * Defines a mark view using a React component.\n *\n * @public\n */\nexport function defineReactMarkView(options: ReactMarkViewOptions): Extension {\n return defineMarkViewComponent<ReactMarkViewOptions>({\n group: 'react',\n name: options.name,\n args: options,\n })\n}\n","import { defineNodeViewComponent, defineNodeViewFactory, type Extension } from '@prosekit/core'\nimport type { CoreNodeViewUserOptions } from '@prosemirror-adapter/core'\nimport {\n AbstractReactNodeView,\n buildReactNodeViewCreator,\n type NodeViewContext,\n type ReactRendererResult,\n} from '@prosemirror-adapter/react'\nimport { createElement, type ComponentType, type ReactPortal } from 'react'\nimport { createPortal } from 'react-dom'\n\n/**\n * @public\n */\nexport interface ReactNodeViewProps extends NodeViewContext {}\n\n/**\n * @public\n */\nexport type ReactNodeViewComponent = ComponentType<ReactNodeViewProps>\n\n/**\n * Options for {@link defineReactNodeView}.\n *\n * @public\n */\nexport interface ReactNodeViewOptions extends CoreNodeViewUserOptions<ReactNodeViewComponent> {\n /**\n * The name of the node type.\n */\n name: string\n}\n\nclass ProseKitReactNodeView extends AbstractReactNodeView<ReactNodeViewComponent> {\n render = (): ReactPortal => {\n const UserComponent = this.component\n const props = { ...this.context }\n return createPortal(\n createElement(UserComponent, props),\n this.dom,\n this.key,\n )\n }\n}\n\n/**\n * @internal\n */\nexport function defineReactNodeViewFactory(\n renderReactRenderer: ReactRendererResult['renderReactRenderer'],\n removeReactRenderer: ReactRendererResult['removeReactRenderer'],\n): Extension {\n const factory = buildReactNodeViewCreator(renderReactRenderer, removeReactRenderer, ProseKitReactNodeView)\n return defineNodeViewFactory<ReactNodeViewOptions>({\n group: 'react',\n factory,\n })\n}\n\n/**\n * Defines a node view using a React component.\n *\n * @public\n */\nexport function defineReactNodeView(options: ReactNodeViewOptions): Extension {\n return defineNodeViewComponent<ReactNodeViewOptions>({\n group: 'react',\n name: options.name,\n args: options,\n })\n}\n","import { EditorNotFoundError, type Editor, type Extension } from '@prosekit/core'\nimport { queueExtension } from '@prosekit/web'\nimport { useEffect } from 'react'\n\n/**\n * @internal\n */\nexport function useEditorExtension(\n editor: Editor | null | undefined,\n extension: Extension | null,\n): void {\n if (!editor) {\n throw new EditorNotFoundError()\n }\n\n useEffect(() => {\n if (extension) {\n return queueExtension(editor, extension)\n }\n }, [editor, extension])\n}\n","import { union, type Editor } from '@prosekit/core'\nimport { useReactRenderer } from '@prosemirror-adapter/react'\nimport { createElement, Fragment, useMemo, type ComponentType, type ReactNode } from 'react'\n\nimport { defineReactMarkViewFactory } from '../extensions/react-mark-view.ts'\nimport { defineReactNodeViewFactory } from '../extensions/react-node-view.ts'\nimport { useEditorExtension } from '../hooks/use-editor-extension.ts'\n\ninterface ViewRendererProps {\n editor: Editor\n children: ReactNode\n}\n\nexport const ViewRenderer: ComponentType<ViewRendererProps> = ({ editor, children }): ReactNode => {\n const { renderReactRenderer, removeReactRenderer, render } = useReactRenderer()\n\n const extension = useMemo(() => {\n return union([\n defineReactMarkViewFactory(renderReactRenderer, removeReactRenderer),\n defineReactNodeViewFactory(renderReactRenderer, removeReactRenderer),\n ])\n }, [renderReactRenderer, removeReactRenderer])\n\n useEditorExtension(editor, extension)\n\n return createElement(Fragment, null, createElement(Fragment, null, children), createElement(Fragment, null, render()))\n}\n","import type { Editor } from '@prosekit/core'\nimport { createElement, type ComponentType, type ReactNode } from 'react'\n\nimport { EditorContextProvider } from '../contexts/editor-context.ts'\n\nimport { ViewRenderer } from './view-renderer.ts'\n\nexport interface ProseKitProps {\n editor: Editor\n children?: ReactNode\n}\n\n/**\n * The root component for a ProseKit editor.\n *\n * @public\n */\nexport const ProseKit: ComponentType<ProseKitProps> = (props) => {\n const { editor, children } = props\n\n return createElement(\n EditorContextProvider,\n { value: editor },\n createElement(\n ViewRenderer,\n { editor, children },\n ),\n )\n}\n","import { useCallback, useLayoutEffect, useRef } from 'react'\n\n/**\n * @internal\n */\nexport function useEventCallback<Args extends unknown[], Return>(\n callback: (...args: Args) => Return,\n): (...args: Args) => Return {\n const callbackRef = useRef(callback)\n useLayoutEffect(() => {\n callbackRef.current = callback\n }, [callback])\n return useCallback((...args: Args) => callbackRef.current(...args), [])\n}\n","import { withPriority, type Extension, type Priority } from '@prosekit/core'\nimport { useMemo } from 'react'\n\n/**\n * @internal\n */\nexport function usePriorityExtension<T extends Extension = Extension>(\n extension: T | null,\n priority?: Priority | null,\n): T | null {\n return useMemo(() => {\n return extension && priority ? withPriority(extension, priority) : extension\n }, [extension, priority])\n}\n","import type { Editor, Extension, Priority } from '@prosekit/core'\n\nimport { useEditorContext } from '../contexts/editor-context.ts'\n\nimport { useEditorExtension } from './use-editor-extension.ts'\nimport { usePriorityExtension } from './use-priority-extension.ts'\n\nexport interface UseExtensionOptions {\n /**\n * The editor to add the extension to. If not provided, it will use the\n * editor from the nearest `<ProseKit>` component.\n */\n editor?: Editor\n\n /**\n * Optional priority to add the extension with.\n */\n priority?: Priority\n}\n\n/**\n * Add an extension to the editor.\n */\nexport function useExtension(\n /**\n * The extension to add to the editor. If it changes, the previous\n * extension will be removed and the new one (if not null) will be added.\n */\n extension: Extension | null,\n options?: UseExtensionOptions,\n): void {\n const editorContext = useEditorContext()\n useEditorExtension(\n options?.editor || editorContext,\n usePriorityExtension(extension, options?.priority),\n )\n}\n","import { defineDocChangeHandler } from '@prosekit/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\nimport { useMemo } from 'react'\n\nimport { useEventCallback } from './use-event-callback.ts'\nimport { useExtension, type UseExtensionOptions } from './use-extension.ts'\n\n/**\n * Calls the given handler whenever the editor document changes.\n *\n * @public\n */\nexport function useDocChange(\n handler: (doc: ProseMirrorNode) => void,\n options?: UseExtensionOptions,\n): void {\n const memoizedHandler = useEventCallback(handler)\n const extension = useMemo(\n () => defineDocChangeHandler((view) => memoizedHandler(view.state.doc)),\n [memoizedHandler],\n )\n useExtension(extension, options)\n}\n","import { defineMountHandler, defineUpdateHandler, EditorNotFoundError, union, type Editor, type Extension } from '@prosekit/core'\nimport { useMemo, useSyncExternalStore } from 'react'\n\nimport { useEditorContext } from '../contexts/editor-context.ts'\n\nexport interface UseEditorDerivedOptions<E extends Extension = any> {\n /**\n * The editor to add the extension to. If not provided, it will use the\n * editor from the nearest `<ProseKit>` component.\n */\n editor?: Editor<E>\n}\n\n/**\n * Runs a function to derive a value from the editor instance after editor state\n * changes.\n *\n * This is useful when you need to render something based on the editor state,\n * for example, whether the selected text is wrapped in an italic mark.\n *\n * It returns the derived value that updates whenever the editor state changes.\n *\n * @public\n */\nexport function useEditorDerivedValue<E extends Extension, Derived>(\n /**\n * A function that receives the editor instance and returns a derived value.\n *\n * It will be called whenever the editor's document state changes, or when it\n * mounts.\n *\n * This function should be memoized.\n */\n derive: (editor: Editor<E>) => Derived,\n options?: UseEditorDerivedOptions<E>,\n): Derived {\n const editorContext = useEditorContext<E>()\n const editor = options?.editor ?? editorContext\n if (!editor) {\n throw new EditorNotFoundError()\n }\n\n const [subscribe, getSnapshot] = useMemo(() => {\n return createEditorStore(editor, derive)\n }, [editor, derive])\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n}\n\nfunction createEditorStore<Derived, E extends Extension = any>(editor: Editor<E>, derive: (editor: Editor<E>) => Derived) {\n let dirty = true\n let derived: Derived\n\n const subscribe = (onChange: VoidFunction): VoidFunction => {\n const handleChange = () => {\n dirty = true\n onChange()\n }\n const extension = union(\n defineUpdateHandler(handleChange),\n defineMountHandler(handleChange),\n )\n return editor.use(extension)\n }\n\n const getSnapshot = () => {\n if (dirty) {\n dirty = false\n derived = derive(editor)\n }\n return derived\n }\n\n return [subscribe, getSnapshot] as const\n}\n","import { defineMountHandler, defineUpdateHandler, ProseKitError, union, type Editor, type Extension } from '@prosekit/core'\nimport { useEffect, useReducer } from 'react'\n\nimport { useEditorContext } from '../contexts/editor-context.ts'\n\n/**\n * Retrieves the editor instance from the nearest ProseKit component.\n *\n * @public\n */\nexport function useEditor<E extends Extension = any>(options?: {\n /**\n * Whether to update the component when the editor is mounted or editor state\n * is updated.\n *\n * Note this this option doesn't work with [React\n * compiler](https://react.dev/learn/react-compiler) because the returned\n * editor will be the same instance after state updates. If you're using React\n * compiler, you should use {@link useEditorDerivedValue} instead.\n *\n * @default false\n */\n update?: boolean\n}): Editor<E> {\n const update = options?.update ?? false\n\n const editor = useEditorContext<E>()\n if (!editor) {\n throw new ProseKitError(\n 'useEditor must be used within the ProseKit component',\n )\n }\n\n const forceUpdate = useForceUpdate()\n\n useEffect(() => {\n if (update) {\n const extension = union(\n defineMountHandler(forceUpdate),\n defineUpdateHandler(forceUpdate),\n )\n return editor.use(extension)\n }\n }, [editor, update, forceUpdate])\n\n return editor\n}\n\nfunction useForceUpdate() {\n const [, dispatch] = useReducer((x: number) => x + 1, 0)\n return dispatch\n}\n","import { defineKeymap, type Keymap } from '@prosekit/core'\nimport { useMemo } from 'react'\n\nimport { useExtension, type UseExtensionOptions } from './use-extension.ts'\n\nexport function useKeymap(keymap: Keymap, options?: UseExtensionOptions): void {\n const extension = useMemo(() => defineKeymap(keymap), [keymap])\n useExtension(extension, options)\n}\n","import { defineUpdateHandler } from '@prosekit/core'\nimport type { EditorState } from '@prosekit/pm/state'\nimport { useMemo } from 'react'\n\nimport { useEventCallback } from './use-event-callback.ts'\nimport { useExtension, type UseExtensionOptions } from './use-extension.ts'\n\n/**\n * Calls the given handler whenever the editor state changes.\n *\n * @public\n */\nexport function useStateUpdate(\n handler: (state: EditorState) => void,\n options?: UseExtensionOptions,\n): void {\n const memoizedHandler = useEventCallback(handler)\n const extension = useMemo(\n () => defineUpdateHandler((view) => memoizedHandler(view.state)),\n [memoizedHandler],\n )\n useExtension(extension, options)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"prosekit-react.js","names":[],"sources":["../src/extensions/react-mark-view.ts","../src/extensions/react-node-view.ts","../src/hooks/use-editor-extension.ts","../src/components/view-renderer.ts","../src/components/prosekit.ts","../src/hooks/use-event-callback.ts","../src/hooks/use-priority-extension.ts","../src/hooks/use-extension.ts","../src/hooks/use-doc-change.ts","../src/hooks/use-editor-derived-value.ts","../src/hooks/use-editor.ts","../src/hooks/use-keymap.ts","../src/hooks/use-state-update.ts"],"sourcesContent":["import { defineMarkViewComponent, defineMarkViewFactory, type Extension } from '@prosekit/core'\nimport type { CoreMarkViewUserOptions } from '@prosemirror-adapter/core'\nimport {\n AbstractReactMarkView,\n buildReactMarkViewCreator,\n type MarkViewContext,\n type ReactRendererResult,\n} from '@prosemirror-adapter/react'\nimport { createElement, type ComponentType, type ReactPortal } from 'react'\nimport { createPortal } from 'react-dom'\n\n/**\n * @public\n */\nexport interface ReactMarkViewProps extends MarkViewContext {}\n\n/**\n * @public\n */\nexport type ReactMarkViewComponent = ComponentType<ReactMarkViewProps>\n\n/**\n * Options for {@link defineReactMarkView}.\n *\n * @public\n */\nexport interface ReactMarkViewOptions extends CoreMarkViewUserOptions<ReactMarkViewComponent> {\n /**\n * The name of the mark type.\n */\n name: string\n}\n\nclass ProseKitReactMarkView extends AbstractReactMarkView<ReactMarkViewComponent> {\n render = (): ReactPortal => {\n const UserComponent = this.component\n const props = { ...this.context }\n return createPortal(\n createElement(UserComponent, props),\n this.dom,\n this.key,\n )\n }\n}\n\n/**\n * @internal\n */\nexport function defineReactMarkViewFactory(\n renderReactRenderer: ReactRendererResult['renderReactRenderer'],\n removeReactRenderer: ReactRendererResult['removeReactRenderer'],\n): Extension {\n const factory = buildReactMarkViewCreator(renderReactRenderer, removeReactRenderer, ProseKitReactMarkView)\n return defineMarkViewFactory<ReactMarkViewOptions>({\n group: 'react',\n factory,\n })\n}\n\n/**\n * Defines a mark view using a React component.\n *\n * @public\n */\nexport function defineReactMarkView(options: ReactMarkViewOptions): Extension {\n return defineMarkViewComponent<ReactMarkViewOptions>({\n group: 'react',\n name: options.name,\n args: options,\n })\n}\n","import { defineNodeViewComponent, defineNodeViewFactory, type Extension } from '@prosekit/core'\nimport type { CoreNodeViewUserOptions } from '@prosemirror-adapter/core'\nimport {\n AbstractReactNodeView,\n buildReactNodeViewCreator,\n type NodeViewContext,\n type ReactRendererResult,\n} from '@prosemirror-adapter/react'\nimport { createElement, type ComponentType, type ReactPortal } from 'react'\nimport { createPortal } from 'react-dom'\n\n/**\n * @public\n */\nexport interface ReactNodeViewProps extends NodeViewContext {}\n\n/**\n * @public\n */\nexport type ReactNodeViewComponent = ComponentType<ReactNodeViewProps>\n\n/**\n * Options for {@link defineReactNodeView}.\n *\n * @public\n */\nexport interface ReactNodeViewOptions extends CoreNodeViewUserOptions<ReactNodeViewComponent> {\n /**\n * The name of the node type.\n */\n name: string\n}\n\nclass ProseKitReactNodeView extends AbstractReactNodeView<ReactNodeViewComponent> {\n render = (): ReactPortal => {\n const UserComponent = this.component\n const props = { ...this.context }\n return createPortal(\n createElement(UserComponent, props),\n this.dom,\n this.key,\n )\n }\n}\n\n/**\n * @internal\n */\nexport function defineReactNodeViewFactory(\n renderReactRenderer: ReactRendererResult['renderReactRenderer'],\n removeReactRenderer: ReactRendererResult['removeReactRenderer'],\n): Extension {\n const factory = buildReactNodeViewCreator(renderReactRenderer, removeReactRenderer, ProseKitReactNodeView)\n return defineNodeViewFactory<ReactNodeViewOptions>({\n group: 'react',\n factory,\n })\n}\n\n/**\n * Defines a node view using a React component.\n *\n * @public\n */\nexport function defineReactNodeView(options: ReactNodeViewOptions): Extension {\n return defineNodeViewComponent<ReactNodeViewOptions>({\n group: 'react',\n name: options.name,\n args: options,\n })\n}\n","import { EditorNotFoundError, type Editor, type Extension } from '@prosekit/core'\nimport { queueExtension } from '@prosekit/web'\nimport { useEffect } from 'react'\n\n/**\n * @internal\n */\nexport function useEditorExtension(\n editor: Editor | null | undefined,\n extension: Extension | null,\n): void {\n if (!editor) {\n throw new EditorNotFoundError()\n }\n\n useEffect(() => {\n if (extension) {\n return queueExtension(editor, extension)\n }\n }, [editor, extension])\n}\n","import { union, type Editor } from '@prosekit/core'\nimport { useReactRenderer } from '@prosemirror-adapter/react'\nimport { createElement, Fragment, useMemo, type ComponentType, type ReactNode } from 'react'\n\nimport { defineReactMarkViewFactory } from '../extensions/react-mark-view.ts'\nimport { defineReactNodeViewFactory } from '../extensions/react-node-view.ts'\nimport { useEditorExtension } from '../hooks/use-editor-extension.ts'\n\ninterface ViewRendererProps {\n editor: Editor\n children: ReactNode\n}\n\nexport const ViewRenderer: ComponentType<ViewRendererProps> = ({ editor, children }): ReactNode => {\n const { renderReactRenderer, removeReactRenderer, render } = useReactRenderer()\n\n const extension = useMemo(() => {\n return union([\n defineReactMarkViewFactory(renderReactRenderer, removeReactRenderer),\n defineReactNodeViewFactory(renderReactRenderer, removeReactRenderer),\n ])\n }, [renderReactRenderer, removeReactRenderer])\n\n useEditorExtension(editor, extension)\n\n return createElement(Fragment, null, createElement(Fragment, null, children), createElement(Fragment, null, render()))\n}\n","import type { Editor } from '@prosekit/core'\nimport { createElement, type ComponentType, type ReactNode } from 'react'\n\nimport { EditorContextProvider } from '../contexts/editor-context.ts'\n\nimport { ViewRenderer } from './view-renderer.ts'\n\nexport interface ProseKitProps {\n editor: Editor\n children?: ReactNode\n}\n\n/**\n * The root component for a ProseKit editor.\n *\n * @public\n */\nexport const ProseKit: ComponentType<ProseKitProps> = (props) => {\n const { editor, children } = props\n\n return createElement(\n EditorContextProvider,\n { value: editor },\n createElement(\n ViewRenderer,\n { editor, children },\n ),\n )\n}\n","import { useCallback, useLayoutEffect, useRef } from 'react'\n\n/**\n * @internal\n */\nexport function useEventCallback<Args extends unknown[], Return>(\n callback: (...args: Args) => Return,\n): (...args: Args) => Return {\n const callbackRef = useRef(callback)\n useLayoutEffect(() => {\n callbackRef.current = callback\n }, [callback])\n return useCallback((...args: Args) => callbackRef.current(...args), [])\n}\n","import { withPriority, type Extension, type Priority } from '@prosekit/core'\nimport { useMemo } from 'react'\n\n/**\n * @internal\n */\nexport function usePriorityExtension<T extends Extension = Extension>(\n extension: T | null,\n priority?: Priority | null,\n): T | null {\n return useMemo(() => {\n return extension && priority ? withPriority(extension, priority) : extension\n }, [extension, priority])\n}\n","import type { Editor, Extension, Priority } from '@prosekit/core'\n\nimport { useEditorContext } from '../contexts/editor-context.ts'\n\nimport { useEditorExtension } from './use-editor-extension.ts'\nimport { usePriorityExtension } from './use-priority-extension.ts'\n\nexport interface UseExtensionOptions {\n /**\n * The editor to add the extension to. If not provided, it will use the\n * editor from the nearest `<ProseKit>` component.\n */\n editor?: Editor\n\n /**\n * Optional priority to add the extension with.\n */\n priority?: Priority\n}\n\n/**\n * Add an extension to the editor.\n */\nexport function useExtension(\n /**\n * The extension to add to the editor. If it changes, the previous\n * extension will be removed and the new one (if not null) will be added.\n */\n extension: Extension | null,\n options?: UseExtensionOptions,\n): void {\n const editorContext = useEditorContext()\n useEditorExtension(\n options?.editor || editorContext,\n usePriorityExtension(extension, options?.priority),\n )\n}\n","import { defineDocChangeHandler } from '@prosekit/core'\nimport type { ProseMirrorNode } from '@prosekit/pm/model'\nimport { useMemo } from 'react'\n\nimport { useEventCallback } from './use-event-callback.ts'\nimport { useExtension, type UseExtensionOptions } from './use-extension.ts'\n\n/**\n * Calls the given handler whenever the editor document changes.\n *\n * @public\n */\nexport function useDocChange(\n handler: (doc: ProseMirrorNode) => void,\n options?: UseExtensionOptions,\n): void {\n const memoizedHandler = useEventCallback(handler)\n const extension = useMemo(\n () => defineDocChangeHandler((view) => memoizedHandler(view.state.doc)),\n [memoizedHandler],\n )\n useExtension(extension, options)\n}\n","import { defineMountHandler, defineUpdateHandler, EditorNotFoundError, union, type Editor, type Extension } from '@prosekit/core'\nimport { useMemo, useSyncExternalStore } from 'react'\n\nimport { useEditorContext } from '../contexts/editor-context.ts'\n\nexport interface UseEditorDerivedOptions<E extends Extension = any> {\n /**\n * The editor to add the extension to. If not provided, it will use the\n * editor from the nearest `<ProseKit>` component.\n */\n editor?: Editor<E>\n}\n\n/**\n * Runs a function to derive a value from the editor instance after editor state\n * changes.\n *\n * This is useful when you need to render something based on the editor state,\n * for example, whether the selected text is wrapped in an italic mark.\n *\n * It returns the derived value that updates whenever the editor state changes.\n *\n * @public\n */\nexport function useEditorDerivedValue<E extends Extension, Derived>(\n /**\n * A function that receives the editor instance and returns a derived value.\n *\n * It will be called whenever the editor's document state changes, or when it\n * mounts.\n *\n * This function should be memoized.\n */\n derive: (editor: Editor<E>) => Derived,\n options?: UseEditorDerivedOptions<E>,\n): Derived {\n const editorContext = useEditorContext<E>()\n const editor = options?.editor ?? editorContext\n if (!editor) {\n throw new EditorNotFoundError()\n }\n\n const [subscribe, getSnapshot] = useMemo(() => {\n return createEditorStore(editor, derive)\n }, [editor, derive])\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n}\n\nfunction createEditorStore<Derived, E extends Extension = any>(editor: Editor<E>, derive: (editor: Editor<E>) => Derived) {\n let dirty = true\n let derived: Derived\n\n const subscribe = (onChange: VoidFunction): VoidFunction => {\n const handleChange = () => {\n dirty = true\n onChange()\n }\n const extension = union(\n defineUpdateHandler(handleChange),\n defineMountHandler(handleChange),\n )\n return editor.use(extension)\n }\n\n const getSnapshot = () => {\n if (dirty) {\n dirty = false\n derived = derive(editor)\n }\n return derived\n }\n\n return [subscribe, getSnapshot] as const\n}\n","import { defineMountHandler, defineUpdateHandler, ProseKitError, union, type Editor, type Extension } from '@prosekit/core'\nimport { useEffect, useReducer } from 'react'\n\nimport { useEditorContext } from '../contexts/editor-context.ts'\n\n/**\n * Retrieves the editor instance from the nearest ProseKit component.\n *\n * @public\n */\nexport function useEditor<E extends Extension = any>(options?: {\n /**\n * Whether to update the component when the editor is mounted or editor state\n * is updated.\n *\n * Note this this option doesn't work with [React\n * compiler](https://react.dev/learn/react-compiler) because the returned\n * editor will be the same instance after state updates. If you're using React\n * compiler, you should use {@link useEditorDerivedValue} instead.\n *\n * @default false\n */\n update?: boolean\n}): Editor<E> {\n const update = options?.update ?? false\n\n const editor = useEditorContext<E>()\n if (!editor) {\n throw new ProseKitError(\n 'useEditor must be used within the ProseKit component',\n )\n }\n\n const forceUpdate = useForceUpdate()\n\n useEffect(() => {\n if (update) {\n const extension = union(\n defineMountHandler(forceUpdate),\n defineUpdateHandler(forceUpdate),\n )\n return editor.use(extension)\n }\n }, [editor, update, forceUpdate])\n\n return editor\n}\n\nfunction useForceUpdate() {\n const [, dispatch] = useReducer((x: number) => x + 1, 0)\n return dispatch\n}\n","import { defineKeymap, type Keymap } from '@prosekit/core'\nimport { useMemo } from 'react'\n\nimport { useExtension, type UseExtensionOptions } from './use-extension.ts'\n\nexport function useKeymap(keymap: Keymap, options?: UseExtensionOptions): void {\n const extension = useMemo(() => defineKeymap(keymap), [keymap])\n useExtension(extension, options)\n}\n","import { defineUpdateHandler } from '@prosekit/core'\nimport type { EditorState } from '@prosekit/pm/state'\nimport { useMemo } from 'react'\n\nimport { useEventCallback } from './use-event-callback.ts'\nimport { useExtension, type UseExtensionOptions } from './use-extension.ts'\n\n/**\n * Calls the given handler whenever the editor state changes.\n *\n * @public\n */\nexport function useStateUpdate(\n handler: (state: EditorState) => void,\n options?: UseExtensionOptions,\n): void {\n const memoizedHandler = useEventCallback(handler)\n const extension = useMemo(\n () => defineUpdateHandler((view) => memoizedHandler(view.state)),\n [memoizedHandler],\n )\n useExtension(extension, options)\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prosekit/react",
3
3
  "type": "module",
4
- "version": "0.7.0-beta.3",
4
+ "version": "0.7.0-beta.5",
5
5
  "private": false,
6
6
  "description": "React components and utilities for ProseKit",
7
7
  "author": {
@@ -75,8 +75,8 @@
75
75
  "@prosemirror-adapter/core": "^0.5.3",
76
76
  "@prosemirror-adapter/react": "^0.5.3",
77
77
  "@prosekit/core": "^0.12.0-beta.0",
78
- "@prosekit/web": "^0.8.0-beta.3",
79
- "@prosekit/pm": "^0.1.15"
78
+ "@prosekit/pm": "^0.1.15",
79
+ "@prosekit/web": "^0.8.0-beta.4"
80
80
  },
81
81
  "peerDependencies": {
82
82
  "react": ">= 18.2.0",
@@ -99,8 +99,8 @@
99
99
  "typescript": "~5.9.3",
100
100
  "vitest": "^4.1.4",
101
101
  "vitest-browser-react": "^2.2.0",
102
- "@prosekit/config-ts": "0.0.0",
103
102
  "@prosekit/config-tsdown": "0.0.0",
103
+ "@prosekit/config-ts": "0.0.0",
104
104
  "@prosekit/config-vitest": "0.0.0",
105
105
  "@prosekit/testing": "0.0.0"
106
106
  },
@@ -1,15 +1,9 @@
1
- /**
2
- * This file is auto-generated by the "@aria-ui/cli" tool. Do not edit this file directly.
3
- */
1
+ // This file is auto-generated by "@aria-ui/cli". Do not edit this file directly.
4
2
 
5
3
  import { registerAutocompleteEmptyElement, type AutocompleteEmptyElement } from '@prosekit/web/autocomplete';
6
4
  import { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes } from 'react';
7
5
 
8
- /**
9
- * Props for the {@link AutocompleteEmpty} React component.
10
- *
11
- * @public
12
- */
6
+ /** Props for the {@link AutocompleteEmpty} React component. */
13
7
  export interface AutocompleteEmptyProps {}
14
8
 
15
9
  function AutocompleteEmptyComponent(props: AutocompleteEmptyProps, forwardedRef: ForwardedRef<AutocompleteEmptyElement>) {
@@ -34,9 +28,5 @@ function AutocompleteEmptyComponent(props: AutocompleteEmptyProps, forwardedRef:
34
28
  return createElement('prosekit-autocomplete-empty', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });
35
29
  }
36
30
 
37
- /**
38
- * A React component that renders an `prosekit-autocomplete-empty` custom element.
39
- *
40
- * @public
41
- */
31
+ /** A React component that renders an `prosekit-autocomplete-empty` custom element. */
42
32
  export const AutocompleteEmpty: ForwardRefExoticComponent<AutocompleteEmptyProps & HTMLAttributes<AutocompleteEmptyElement> & RefAttributes<AutocompleteEmptyElement>> = /* @__PURE__ */ forwardRef(AutocompleteEmptyComponent);
@@ -1,15 +1,9 @@
1
- /**
2
- * This file is auto-generated by the "@aria-ui/cli" tool. Do not edit this file directly.
3
- */
1
+ // This file is auto-generated by "@aria-ui/cli". Do not edit this file directly.
4
2
 
5
3
  import { registerAutocompleteItemElement, type AutocompleteItemElement, type AutocompleteItemProps as AutocompleteItemElementProps, type AutocompleteItemEvents } from '@prosekit/web/autocomplete';
6
4
  import { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react';
7
5
 
8
- /**
9
- * Props for the {@link AutocompleteItem} React component.
10
- *
11
- * @public
12
- */
6
+ /** Props for the {@link AutocompleteItem} React component. */
13
7
  export interface AutocompleteItemProps {
14
8
  /**
15
9
  * The value of the item, which will be matched against the query.
@@ -75,9 +69,5 @@ function AutocompleteItemComponent(props: AutocompleteItemProps, forwardedRef: F
75
69
  return createElement('prosekit-autocomplete-item', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });
76
70
  }
77
71
 
78
- /**
79
- * A React component that renders an `prosekit-autocomplete-item` custom element.
80
- *
81
- * @public
82
- */
72
+ /** A React component that renders an `prosekit-autocomplete-item` custom element. */
83
73
  export const AutocompleteItem: ForwardRefExoticComponent<AutocompleteItemProps & Omit<HTMLAttributes<AutocompleteItemElement>, 'onSelect'> & RefAttributes<AutocompleteItemElement>> = /* @__PURE__ */ forwardRef(AutocompleteItemComponent);
@@ -1,15 +1,9 @@
1
- /**
2
- * This file is auto-generated by the "@aria-ui/cli" tool. Do not edit this file directly.
3
- */
1
+ // This file is auto-generated by "@aria-ui/cli". Do not edit this file directly.
4
2
 
5
3
  import { registerAutocompletePopupElement, type AutocompletePopupElement, type AutocompletePopupEvents } from '@prosekit/web/autocomplete';
6
4
  import { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react';
7
5
 
8
- /**
9
- * Props for the {@link AutocompletePopup} React component.
10
- *
11
- * @public
12
- */
6
+ /** Props for the {@link AutocompletePopup} React component. */
13
7
  export interface AutocompletePopupProps {
14
8
  /**
15
9
  * Emitted when the selected value changes. Only available when multiple is
@@ -68,9 +62,5 @@ function AutocompletePopupComponent(props: AutocompletePopupProps, forwardedRef:
68
62
  return createElement('prosekit-autocomplete-popup', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });
69
63
  }
70
64
 
71
- /**
72
- * A React component that renders an `prosekit-autocomplete-popup` custom element.
73
- *
74
- * @public
75
- */
65
+ /** A React component that renders an `prosekit-autocomplete-popup` custom element. */
76
66
  export const AutocompletePopup: ForwardRefExoticComponent<AutocompletePopupProps & HTMLAttributes<AutocompletePopupElement> & RefAttributes<AutocompletePopupElement>> = /* @__PURE__ */ forwardRef(AutocompletePopupComponent);
@@ -1,15 +1,9 @@
1
- /**
2
- * This file is auto-generated by the "@aria-ui/cli" tool. Do not edit this file directly.
3
- */
1
+ // This file is auto-generated by "@aria-ui/cli". Do not edit this file directly.
4
2
 
5
3
  import { registerAutocompletePositionerElement, type AutocompletePositionerElement, type AutocompletePositionerProps as AutocompletePositionerElementProps } from '@prosekit/web/autocomplete';
6
4
  import { createElement, forwardRef, useCallback, useRef, type ForwardedRef, type ForwardRefExoticComponent, type HTMLAttributes, type RefAttributes, useLayoutEffect } from 'react';
7
5
 
8
- /**
9
- * Props for the {@link AutocompletePositioner} React component.
10
- *
11
- * @public
12
- */
6
+ /** Props for the {@link AutocompletePositioner} React component. */
13
7
  export interface AutocompletePositionerProps {
14
8
  /**
15
9
  * The placement of the popover, relative to the text cursor.
@@ -143,9 +137,5 @@ function AutocompletePositionerComponent(props: AutocompletePositionerProps, for
143
137
  return createElement('prosekit-autocomplete-positioner', { ...restProps, ref: mergedRef, suppressHydrationWarning: true });
144
138
  }
145
139
 
146
- /**
147
- * A React component that renders an `prosekit-autocomplete-positioner` custom element.
148
- *
149
- * @public
150
- */
140
+ /** A React component that renders an `prosekit-autocomplete-positioner` custom element. */
151
141
  export const AutocompletePositioner: ForwardRefExoticComponent<AutocompletePositionerProps & HTMLAttributes<AutocompletePositionerElement> & RefAttributes<AutocompletePositionerElement>> = /* @__PURE__ */ forwardRef(AutocompletePositionerComponent);