@portabletext/editor 1.36.6 → 1.38.0

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 (119) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +84 -49
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/behavior.markdown.cjs +1 -1
  4. package/lib/_chunks-cjs/editor-provider.cjs +919 -526
  5. package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
  6. package/lib/_chunks-cjs/{util.block-offsets-to-selection.cjs → parse-blocks.cjs} +36 -21
  7. package/lib/_chunks-cjs/parse-blocks.cjs.map +1 -0
  8. package/lib/_chunks-cjs/selector.get-text-before.cjs +2 -2
  9. package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
  10. package/lib/_chunks-cjs/{selector.is-active-style.cjs → selector.is-overlapping-selection.cjs} +144 -3
  11. package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs.map +1 -0
  12. package/lib/_chunks-cjs/util.slice-blocks.cjs +12 -0
  13. package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
  14. package/lib/_chunks-es/behavior.core.js +84 -49
  15. package/lib/_chunks-es/behavior.core.js.map +1 -1
  16. package/lib/_chunks-es/behavior.markdown.js +1 -1
  17. package/lib/_chunks-es/editor-provider.js +911 -517
  18. package/lib/_chunks-es/editor-provider.js.map +1 -1
  19. package/lib/_chunks-es/{util.block-offsets-to-selection.js → parse-blocks.js} +37 -22
  20. package/lib/_chunks-es/parse-blocks.js.map +1 -0
  21. package/lib/_chunks-es/selector.get-text-before.js +1 -2
  22. package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
  23. package/lib/_chunks-es/{selector.is-active-style.js → selector.is-overlapping-selection.js} +146 -5
  24. package/lib/_chunks-es/selector.is-overlapping-selection.js.map +1 -0
  25. package/lib/_chunks-es/util.slice-blocks.js +12 -0
  26. package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
  27. package/lib/behaviors/index.d.cts +10535 -4689
  28. package/lib/behaviors/index.d.ts +10535 -4689
  29. package/lib/index.cjs +582 -209
  30. package/lib/index.cjs.map +1 -1
  31. package/lib/index.d.cts +5297 -1178
  32. package/lib/index.d.ts +5297 -1178
  33. package/lib/index.js +591 -213
  34. package/lib/index.js.map +1 -1
  35. package/lib/plugins/index.cjs +2 -2
  36. package/lib/plugins/index.cjs.map +1 -1
  37. package/lib/plugins/index.d.cts +5297 -1178
  38. package/lib/plugins/index.d.ts +5297 -1178
  39. package/lib/plugins/index.js +2 -2
  40. package/lib/selectors/index.cjs +21 -103
  41. package/lib/selectors/index.cjs.map +1 -1
  42. package/lib/selectors/index.d.cts +5313 -1178
  43. package/lib/selectors/index.d.ts +5313 -1178
  44. package/lib/selectors/index.js +13 -96
  45. package/lib/selectors/index.js.map +1 -1
  46. package/lib/utils/index.cjs +4 -4
  47. package/lib/utils/index.cjs.map +1 -1
  48. package/lib/utils/index.d.cts +5297 -1178
  49. package/lib/utils/index.d.ts +5297 -1178
  50. package/lib/utils/index.js +3 -4
  51. package/lib/utils/index.js.map +1 -1
  52. package/package.json +15 -14
  53. package/src/behavior-actions/behavior.action.blur.ts +8 -0
  54. package/src/behavior-actions/behavior.action.decorator.add.ts +2 -1
  55. package/src/behavior-actions/behavior.action.delete.backward.ts +7 -0
  56. package/src/behavior-actions/behavior.action.delete.block.ts +24 -0
  57. package/src/behavior-actions/behavior.action.delete.forward.ts +7 -0
  58. package/src/behavior-actions/behavior.action.delete.text.ts +2 -1
  59. package/src/behavior-actions/behavior.action.delete.ts +1 -3
  60. package/src/behavior-actions/behavior.action.deserialization.failure.ts +9 -0
  61. package/src/behavior-actions/behavior.action.deserialization.success.ts +16 -0
  62. package/src/behavior-actions/behavior.action.effect.ts +7 -0
  63. package/src/behavior-actions/behavior.action.focus.ts +8 -0
  64. package/src/behavior-actions/behavior.action.insert-blocks.ts +118 -74
  65. package/src/behavior-actions/behavior.action.insert-break.ts +1 -0
  66. package/src/behavior-actions/{behavior.action.insert-block-object.ts → behavior.action.insert.block-object.ts} +9 -14
  67. package/src/behavior-actions/behavior.action.insert.block.ts +247 -2
  68. package/src/behavior-actions/behavior.action.insert.text-block.ts +33 -0
  69. package/src/behavior-actions/behavior.action.insert.text.ts +7 -0
  70. package/src/behavior-actions/behavior.action.move.block-down.ts +48 -0
  71. package/src/behavior-actions/behavior.action.move.block-up.ts +53 -0
  72. package/src/behavior-actions/behavior.action.move.block.ts +16 -0
  73. package/src/behavior-actions/behavior.action.noop.ts +5 -0
  74. package/src/behavior-actions/behavior.action.select.next-block.ts +44 -0
  75. package/src/behavior-actions/behavior.action.select.previous-block.ts +48 -0
  76. package/src/behavior-actions/behavior.action.select.ts +15 -0
  77. package/src/behavior-actions/behavior.action.serialization.failure.ts +9 -0
  78. package/src/behavior-actions/behavior.action.serialization.success.ts +14 -0
  79. package/src/behavior-actions/behavior.actions.ts +54 -212
  80. package/src/behaviors/behavior.core.block-objects.ts +35 -6
  81. package/src/behaviors/behavior.core.insert-break.ts +1 -0
  82. package/src/behaviors/behavior.core.ts +2 -0
  83. package/src/behaviors/behavior.default.ts +241 -33
  84. package/src/behaviors/behavior.types.ts +138 -20
  85. package/src/converters/converter.portable-text.ts +5 -2
  86. package/src/converters/converter.text-html.serialize.test.ts +4 -4
  87. package/src/converters/converter.text-html.ts +5 -2
  88. package/src/converters/converter.text-plain.test.ts +6 -6
  89. package/src/converters/converter.text-plain.ts +5 -2
  90. package/src/converters/converter.types.ts +3 -3
  91. package/src/editor/Editable.tsx +403 -48
  92. package/src/editor/components/Element.tsx +133 -18
  93. package/src/editor/components/use-draggable.ts +34 -102
  94. package/src/editor/editor-machine.ts +66 -10
  95. package/src/editor/editor-selector.ts +2 -0
  96. package/src/editor/editor-snapshot.ts +17 -0
  97. package/src/editor/plugins/create-with-event-listeners.ts +6 -40
  98. package/src/internal-utils/create-test-snapshot.ts +2 -0
  99. package/src/internal-utils/event-position.ts +210 -0
  100. package/src/internal-utils/slate-utils.ts +56 -0
  101. package/src/internal-utils/weakMaps.ts +1 -15
  102. package/src/selectors/index.ts +2 -0
  103. package/src/selectors/selector.get-focus-inline-object.ts +21 -0
  104. package/src/selectors/selector.is-overlapping-selection.test.ts +171 -0
  105. package/src/selectors/selector.is-overlapping-selection.ts +108 -4
  106. package/src/selectors/selector.is-point-after-selection.ts +3 -1
  107. package/src/selectors/selector.is-point-before-selection.ts +3 -1
  108. package/src/selectors/selector.is-selecting-entire-blocks.ts +34 -0
  109. package/lib/_chunks-cjs/selector.is-active-style.cjs.map +0 -1
  110. package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +0 -1
  111. package/lib/_chunks-cjs/util.reverse-selection.cjs +0 -14
  112. package/lib/_chunks-cjs/util.reverse-selection.cjs.map +0 -1
  113. package/lib/_chunks-es/selector.is-active-style.js.map +0 -1
  114. package/lib/_chunks-es/util.block-offsets-to-selection.js.map +0 -1
  115. package/lib/_chunks-es/util.reverse-selection.js +0 -15
  116. package/lib/_chunks-es/util.reverse-selection.js.map +0 -1
  117. package/src/behavior-actions/behavior.action-utils.insert-block.ts +0 -61
  118. package/src/editor/__tests__/handleClick.test.tsx +0 -277
  119. package/src/editor/components/use-droppable.ts +0 -135
package/lib/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/internal-utils/selection.ts","../src/editor/components/DefaultObject.tsx","../src/editor/components/drop-indicator.tsx","../src/editor/components/use-draggable.ts","../src/editor/components/use-droppable.ts","../src/editor/components/Element.tsx","../src/editor/components/Leaf.tsx","../src/editor/plugins/createWithHotKeys.ts","../src/editor/withSyncRangeDecorations.ts","../src/editor/Editable.tsx","../src/editor-event-listener.tsx"],"sourcesContent":["import type {Path, PortableTextBlock} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\nexport function normalizePoint(\n point: EditorSelectionPoint,\n value: PortableTextBlock[],\n): EditorSelectionPoint | null {\n if (!point || !value) {\n return null\n }\n const newPath: Path = []\n let newOffset: number = point.offset || 0\n const blockKey =\n typeof point.path[0] === 'object' &&\n '_key' in point.path[0] &&\n point.path[0]._key\n const childKey =\n typeof point.path[2] === 'object' &&\n '_key' in point.path[2] &&\n point.path[2]._key\n const block: PortableTextBlock | undefined = value.find(\n (blk) => blk._key === blockKey,\n )\n if (block) {\n newPath.push({_key: block._key})\n } else {\n return null\n }\n if (block && point.path[1] === 'children') {\n if (\n !block.children ||\n (Array.isArray(block.children) && block.children.length === 0)\n ) {\n return null\n }\n const child =\n Array.isArray(block.children) &&\n block.children.find((cld) => cld._key === childKey)\n if (child) {\n newPath.push('children')\n newPath.push({_key: child._key})\n newOffset =\n child.text && child.text.length >= point.offset\n ? point.offset\n : (child.text && child.text.length) || 0\n } else {\n return null\n }\n }\n return {path: newPath, offset: newOffset}\n}\n\nexport function normalizeSelection(\n selection: EditorSelection,\n value: PortableTextBlock[] | undefined,\n): EditorSelection | null {\n if (!selection || !value || value.length === 0) {\n return null\n }\n let newAnchor: EditorSelectionPoint | null = null\n let newFocus: EditorSelectionPoint | null = null\n const {anchor, focus} = selection\n if (\n anchor &&\n value.find((blk) => isEqual({_key: blk._key}, anchor.path[0]))\n ) {\n newAnchor = normalizePoint(anchor, value)\n }\n if (focus && value.find((blk) => isEqual({_key: blk._key}, focus.path[0]))) {\n newFocus = normalizePoint(focus, value)\n }\n if (newAnchor && newFocus) {\n return {anchor: newAnchor, focus: newFocus, backward: selection.backward}\n }\n return null\n}\n","import type {PortableTextBlock, PortableTextChild} from '@sanity/types'\n\nexport function DefaultBlockObject(props: {\n value: PortableTextBlock | PortableTextChild\n}) {\n return (\n <div style={{userSelect: 'none'}}>\n [{props.value._type}: {props.value._key}]\n </div>\n )\n}\n\nexport function DefaultInlineObject(props: {\n value: PortableTextBlock | PortableTextChild\n}) {\n return (\n <span style={{userSelect: 'none'}}>\n [{props.value._type}: {props.value._key}]\n </span>\n )\n}\n","export function DropIndicator() {\n return (\n <div\n className=\"pt-drop-indicator\"\n style={{\n position: 'absolute',\n width: '100%',\n height: 1,\n borderBottom: '1px solid currentColor',\n zIndex: 5,\n }}\n />\n )\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type DragEvent,\n type RefObject,\n} from 'react'\nimport {Path, Transforms, type Element as SlateElement} from 'slate'\nimport {ReactEditor, useSlateStatic} from 'slate-react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {\n IS_DRAGGING,\n IS_DRAGGING_BLOCK_ELEMENT,\n IS_DRAGGING_BLOCK_TARGET_POSITION,\n IS_DRAGGING_ELEMENT_TARGET,\n} from '../../internal-utils/weakMaps'\n\nconst debug = debugWithName('useDraggable')\n\ntype Draggable = {\n draggableProps: {\n draggable: boolean\n onDragStart?: (event: DragEvent) => void\n onDrag?: (event: DragEvent) => void\n onDragEnd?: (event: DragEvent) => void\n }\n}\n\nexport function useDraggable(props: {\n element: SlateElement\n readOnly: boolean\n blockRef: RefObject<HTMLDivElement | null>\n}): Draggable {\n const editor = useSlateStatic()\n const dragGhostRef = useRef<HTMLElement>(undefined)\n const [blockElement, setBlockElement] = useState<HTMLElement | null>(null)\n\n useEffect(\n () =>\n setBlockElement(\n props.blockRef\n ? props.blockRef.current\n : ReactEditor.toDOMNode(editor, props.element),\n ),\n [editor, props.element, props.blockRef],\n )\n\n // Note: this is called for the dragging block\n const handleDragEnd = useCallback(\n (event: DragEvent) => {\n const targetBlock = IS_DRAGGING_ELEMENT_TARGET.get(editor)\n if (targetBlock) {\n IS_DRAGGING.set(editor, false)\n event.preventDefault()\n event.stopPropagation()\n IS_DRAGGING_ELEMENT_TARGET.delete(editor)\n if (dragGhostRef.current) {\n debug('Removing drag ghost')\n document.body.removeChild(dragGhostRef.current)\n }\n const dragPosition = IS_DRAGGING_BLOCK_TARGET_POSITION.get(editor)\n IS_DRAGGING_BLOCK_TARGET_POSITION.delete(editor)\n let targetPath = ReactEditor.findPath(editor, targetBlock)\n const myPath = ReactEditor.findPath(editor, props.element)\n const isBefore = Path.isBefore(myPath, targetPath)\n if (dragPosition === 'bottom' && !isBefore) {\n // If it is already at the bottom, don't do anything.\n if (targetPath[0] >= editor.children.length - 1) {\n debug('target is already at the bottom, not moving')\n return\n }\n const originalPath = targetPath\n targetPath = Path.next(targetPath)\n debug(\n `Adjusting targetPath from ${JSON.stringify(originalPath)} to ${JSON.stringify(\n targetPath,\n )}`,\n )\n }\n if (\n dragPosition === 'top' &&\n isBefore &&\n targetPath[0] !== editor.children.length - 1\n ) {\n const originalPath = targetPath\n targetPath = Path.previous(targetPath)\n debug(\n `Adjusting targetPath from ${JSON.stringify(originalPath)} to ${JSON.stringify(\n targetPath,\n )}`,\n )\n }\n if (Path.equals(targetPath, myPath)) {\n event.preventDefault()\n debug('targetPath and myPath is the same, not moving')\n return\n }\n debug(\n `Moving element ${props.element._key} from path ${JSON.stringify(myPath)} to ${JSON.stringify(\n targetPath,\n )} (${dragPosition})`,\n )\n Transforms.moveNodes(editor, {at: myPath, to: targetPath})\n editor.onChange()\n return\n }\n debug('No target element, not doing anything')\n },\n [editor, props.element],\n )\n\n // Note: this is called for the dragging block\n const handleDrag = useCallback(\n (event: DragEvent) => {\n IS_DRAGGING.set(editor, true)\n IS_DRAGGING_BLOCK_ELEMENT.set(editor, props.element)\n event.stopPropagation() // Stop propagation so that leafs don't get this and take focus/selection!\n\n const target = event.target\n\n if (target instanceof HTMLElement) {\n target.style.opacity = '1'\n }\n },\n [editor, props.element],\n )\n\n // Note: this is called for the dragging block\n const handleDragStart = useCallback(\n (event: DragEvent) => {\n debug('Drag start')\n IS_DRAGGING.set(editor, true)\n if (event.dataTransfer) {\n event.dataTransfer.setData('application/portable-text', 'something')\n event.dataTransfer.effectAllowed = 'move'\n }\n // Clone blockElement so that it will not be visually clipped by scroll-containers etc.\n // The application that uses the portable-text-editor may indicate the element used as\n // drag ghost by adding a truthy data attribute 'data-pt-drag-ghost-element' to a HTML element.\n if (blockElement && blockElement instanceof HTMLElement) {\n let dragGhost = blockElement.cloneNode(true) as HTMLElement\n const customGhost = dragGhost.querySelector(\n '[data-pt-drag-ghost-element]',\n )\n if (customGhost) {\n dragGhost = customGhost as HTMLElement\n }\n\n // Set the `data-dragged` attribute so the consumer can style the element while it’s dragged\n dragGhost.setAttribute('data-dragged', '')\n\n if (document.body) {\n dragGhostRef.current = dragGhost\n dragGhost.style.position = 'absolute'\n dragGhost.style.left = '-99999px'\n dragGhost.style.boxSizing = 'border-box'\n document.body.appendChild(dragGhost)\n const rect = blockElement.getBoundingClientRect()\n const x = event.clientX - rect.left\n const y = event.clientY - rect.top\n dragGhost.style.width = `${rect.width}px`\n dragGhost.style.height = `${rect.height}px`\n event.dataTransfer.setDragImage(dragGhost, x, y)\n }\n }\n handleDrag(event)\n },\n [blockElement, editor, handleDrag],\n )\n\n if (props.readOnly) {\n return {\n draggableProps: {\n draggable: false,\n onDragStart: undefined,\n onDrag: undefined,\n onDragEnd: undefined,\n },\n }\n }\n\n return {\n draggableProps: {\n draggable: true,\n onDragStart: handleDragStart,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n },\n }\n}\n","import type React from 'react'\nimport {useCallback, useEffect, useState, type DragEvent} from 'react'\nimport type {Element as SlateElement} from 'slate'\nimport {ReactEditor, useSlateStatic} from 'slate-react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {\n IS_DRAGGING_BLOCK_ELEMENT,\n IS_DRAGGING_BLOCK_TARGET_POSITION,\n IS_DRAGGING_ELEMENT_TARGET,\n} from '../../internal-utils/weakMaps'\n\nconst debug = debugWithName('useDroppable')\n\ntype Droppable = {\n droppableProps: {\n onDragOver?: (event: DragEvent) => void\n onDragLeave?: () => void\n onDrop?: (event: DragEvent) => void\n }\n isDraggingOverTop: boolean\n isDraggingOverBottom: boolean\n}\n\nexport function useDroppable(props: {\n element: SlateElement\n blockRef: React.RefObject<HTMLDivElement | null>\n readOnly: boolean\n}): Droppable {\n const editor = useSlateStatic()\n const [isDragOver, setIsDragOver] = useState(false)\n const [blockElement, setBlockElement] = useState<HTMLElement | null>(null)\n\n useEffect(\n () =>\n setBlockElement(\n props.blockRef\n ? props.blockRef.current\n : ReactEditor.toDOMNode(editor, props.element),\n ),\n [editor, props.element, props.blockRef],\n )\n\n const handleDragOver = useCallback(\n (event: DragEvent) => {\n const isMyDragOver = IS_DRAGGING_BLOCK_ELEMENT.get(editor)\n // debug('Drag over', blockElement)\n if (!isMyDragOver || !blockElement) {\n return\n }\n event.preventDefault()\n event.dataTransfer.dropEffect = 'move'\n IS_DRAGGING_ELEMENT_TARGET.set(editor, props.element)\n const elementRect = blockElement.getBoundingClientRect()\n const offset = elementRect.top\n const height = elementRect.height\n const Y = event.pageY\n const loc = Math.abs(offset - Y)\n let position: 'top' | 'bottom' = 'bottom'\n if (props.element === editor.children[0]) {\n position = 'top'\n } else if (loc < height / 2) {\n position = 'top'\n IS_DRAGGING_BLOCK_TARGET_POSITION.set(editor, position)\n } else {\n position = 'bottom'\n IS_DRAGGING_BLOCK_TARGET_POSITION.set(editor, position)\n }\n if (isMyDragOver === props.element) {\n event.dataTransfer.dropEffect = 'none'\n return\n }\n setIsDragOver(true)\n },\n [blockElement, editor, props.element],\n )\n\n const handleDragLeave = useCallback(() => {\n setIsDragOver(false)\n }, [])\n\n const handleDrop = useCallback(\n (event: DragEvent) => {\n if (IS_DRAGGING_BLOCK_ELEMENT.get(editor)) {\n debug('On drop (prevented)', props.element)\n event.preventDefault()\n event.stopPropagation()\n setIsDragOver(false)\n }\n },\n [editor, props.element],\n )\n\n const isDraggingOverFirstBlock =\n isDragOver && editor.children[0] === IS_DRAGGING_ELEMENT_TARGET.get(editor)\n const isDraggingOverLastBlock =\n isDragOver &&\n editor.children[editor.children.length - 1] ===\n IS_DRAGGING_ELEMENT_TARGET.get(editor)\n const dragPosition = IS_DRAGGING_BLOCK_TARGET_POSITION.get(editor)\n\n const isDraggingOverTop =\n isDraggingOverFirstBlock ||\n (isDragOver &&\n !isDraggingOverFirstBlock &&\n !isDraggingOverLastBlock &&\n dragPosition === 'top')\n const isDraggingOverBottom =\n isDraggingOverLastBlock ||\n (isDragOver &&\n !isDraggingOverFirstBlock &&\n !isDraggingOverLastBlock &&\n dragPosition === 'bottom')\n\n if (props.readOnly) {\n return {\n droppableProps: {\n onDragOver: undefined,\n onDragLeave: undefined,\n onDrop: undefined,\n },\n isDraggingOverTop: false,\n isDraggingOverBottom: false,\n }\n }\n\n return {\n droppableProps: {\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n },\n isDraggingOverTop,\n isDraggingOverBottom,\n }\n}\n","import type {\n Path,\n PortableTextChild,\n PortableTextObject,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {\n useMemo,\n useRef,\n type FunctionComponent,\n type JSX,\n type ReactElement,\n} from 'react'\nimport {Editor, Range, Element as SlateElement} from 'slate'\nimport {\n ReactEditor,\n useSelected,\n useSlateStatic,\n type RenderElementProps,\n} from 'slate-react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {fromSlateValue} from '../../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../../internal-utils/weakMaps'\nimport type {\n BlockRenderProps,\n PortableTextMemberSchemaTypes,\n RenderBlockFunction,\n RenderChildFunction,\n RenderListItemFunction,\n RenderStyleFunction,\n} from '../../types/editor'\nimport {DefaultBlockObject, DefaultInlineObject} from './DefaultObject'\nimport {DropIndicator} from './drop-indicator'\nimport {useDraggable} from './use-draggable'\nimport {useDroppable} from './use-droppable'\n\nconst debug = debugWithName('components:Element')\nconst debugRenders = false\nconst EMPTY_ANNOTATIONS: PortableTextObject[] = []\n\n/**\n * @internal\n */\nexport interface ElementProps {\n attributes: RenderElementProps['attributes']\n children: ReactElement<any>\n element: SlateElement\n schemaTypes: PortableTextMemberSchemaTypes\n readOnly: boolean\n renderBlock?: RenderBlockFunction\n renderChild?: RenderChildFunction\n renderListItem?: RenderListItemFunction\n renderStyle?: RenderStyleFunction\n spellCheck?: boolean\n}\n\nconst inlineBlockStyle = {display: 'inline-block'}\n\n/**\n * Renders Portable Text block and inline object nodes in Slate\n * @internal\n */\nexport const Element: FunctionComponent<ElementProps> = ({\n attributes,\n children,\n element,\n schemaTypes,\n readOnly,\n renderBlock,\n renderChild,\n renderListItem,\n renderStyle,\n spellCheck,\n}) => {\n const editor = useSlateStatic()\n const selected = useSelected()\n const blockRef = useRef<HTMLDivElement | null>(null)\n const inlineBlockObjectRef = useRef(null)\n const focused =\n (selected && editor.selection && Range.isCollapsed(editor.selection)) ||\n false\n const droppable = useDroppable({element, blockRef, readOnly})\n const draggable = useDraggable({element, blockRef, readOnly})\n\n const value = useMemo(\n () =>\n fromSlateValue(\n [element],\n schemaTypes.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n )[0],\n [editor, element, schemaTypes.block.name],\n )\n\n let renderedBlock = children\n\n let className: string | undefined\n\n const blockPath: Path = useMemo(() => [{_key: element._key}], [element])\n\n if (typeof element._type !== 'string') {\n throw new Error(`Expected element to have a _type property`)\n }\n\n if (typeof element._key !== 'string') {\n throw new Error(`Expected element to have a _key property`)\n }\n\n // Test for inline objects first\n if (editor.isInline(element)) {\n const path = ReactEditor.findPath(editor, element)\n const [block] = Editor.node(editor, path, {depth: 1})\n const schemaType = schemaTypes.inlineObjects.find(\n (_type) => _type.name === element._type,\n )\n if (!schemaType) {\n throw new Error('Could not find type for inline block element')\n }\n if (SlateElement.isElement(block)) {\n const elmPath: Path = [\n {_key: block._key},\n 'children',\n {_key: element._key},\n ]\n if (debugRenders) {\n debug(`Render ${element._key} (inline object)`)\n }\n return (\n <span {...attributes}>\n {/* Note that children must follow immediately or cut and selections will not work properly in Chrome. */}\n {children}\n <span\n draggable={!readOnly}\n className=\"pt-inline-object\"\n data-testid=\"pt-inline-object\"\n ref={inlineBlockObjectRef}\n key={element._key}\n style={inlineBlockStyle}\n contentEditable={false}\n >\n {renderChild &&\n renderChild({\n annotations: EMPTY_ANNOTATIONS, // These inline objects currently doesn't support annotations. This is a limitation of the current PT spec/model.\n children: <DefaultInlineObject value={value} />,\n editorElementRef: inlineBlockObjectRef,\n focused,\n path: elmPath,\n schemaType,\n selected,\n type: schemaType,\n value: value as PortableTextChild,\n })}\n {!renderChild && <DefaultInlineObject value={value} />}\n </span>\n </span>\n )\n }\n throw new Error('Block not found!')\n }\n\n // If not inline, it's either a block (text) or a block object (non-text)\n // NOTE: text blocks aren't draggable with DraggableBlock (yet?)\n if (element._type === schemaTypes.block.name) {\n className = `pt-block pt-text-block`\n const isListItem = 'listItem' in element\n if (debugRenders) {\n debug(`Render ${element._key} (text block)`)\n }\n const style = ('style' in element && element.style) || 'normal'\n className = `pt-block pt-text-block pt-text-block-style-${style}`\n const blockStyleType = schemaTypes.styles.find(\n (item) => item.value === style,\n )\n if (renderStyle && blockStyleType) {\n renderedBlock = renderStyle({\n block: element as PortableTextTextBlock,\n children,\n focused,\n selected,\n value: style,\n path: blockPath,\n schemaType: blockStyleType,\n editorElementRef: blockRef,\n })\n }\n let level: number | undefined\n\n if (isListItem) {\n if (typeof element.level === 'number') {\n level = element.level\n }\n className += ` pt-list-item pt-list-item-${element.listItem} pt-list-item-level-${level || 1}`\n }\n\n if (editor.isListBlock(value) && isListItem && element.listItem) {\n const listType = schemaTypes.lists.find(\n (item) => item.value === element.listItem,\n )\n if (renderListItem && listType) {\n renderedBlock = renderListItem({\n block: value,\n children: renderedBlock,\n focused,\n selected,\n value: element.listItem,\n path: blockPath,\n schemaType: listType,\n level: value.level || 1,\n editorElementRef: blockRef,\n })\n }\n }\n\n const renderProps: Omit<BlockRenderProps, 'type'> = Object.defineProperty(\n {\n children: renderedBlock,\n editorElementRef: blockRef,\n focused,\n level,\n listItem: isListItem ? element.listItem : undefined,\n path: blockPath,\n selected,\n style,\n schemaType: schemaTypes.block,\n value,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaTypes.block\n },\n },\n )\n\n const propsOrDefaultRendered = renderBlock\n ? renderBlock(renderProps as BlockRenderProps)\n : children\n\n return (\n <div\n key={element._key}\n {...attributes}\n className={className}\n spellCheck={spellCheck}\n {...droppable.droppableProps}\n >\n {droppable.isDraggingOverTop ? <DropIndicator /> : null}\n <div ref={blockRef}>{propsOrDefaultRendered}</div>\n {droppable.isDraggingOverBottom ? <DropIndicator /> : null}\n </div>\n )\n }\n\n const schemaType = schemaTypes.blockObjects.find(\n (_type) => _type.name === element._type,\n )\n\n if (!schemaType) {\n throw new Error(\n `Could not find schema type for block element of _type ${element._type}`,\n )\n }\n\n if (debugRenders) {\n debug(`Render ${element._key} (object block)`)\n }\n\n className = 'pt-block pt-object-block'\n\n const block = fromSlateValue(\n [element],\n schemaTypes.block.name,\n KEY_TO_VALUE_ELEMENT.get(editor),\n )[0]\n\n let renderedBlockFromProps: JSX.Element | undefined\n\n if (renderBlock) {\n const _props: Omit<BlockRenderProps, 'type'> = Object.defineProperty(\n {\n children: <DefaultBlockObject value={value} />,\n editorElementRef: blockRef,\n focused,\n path: blockPath,\n schemaType,\n selected,\n value: block,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaType\n },\n },\n )\n renderedBlockFromProps = renderBlock(_props as BlockRenderProps)\n }\n\n return (\n <div\n key={element._key}\n {...attributes}\n className={className}\n {...droppable.droppableProps}\n {...draggable.draggableProps}\n >\n {droppable.isDraggingOverTop ? <DropIndicator /> : null}\n {children}\n <div ref={blockRef} contentEditable={false}>\n {renderedBlockFromProps ? (\n renderedBlockFromProps\n ) : (\n <DefaultBlockObject value={value} />\n )}\n </div>\n {droppable.isDraggingOverBottom ? <DropIndicator /> : null}\n </div>\n )\n}\n\nElement.displayName = 'Element'\n","import type {\n Path,\n PortableTextObject,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {isEqual, uniq} from 'lodash'\nimport {\n startTransition,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n} from 'react'\nimport {Text} from 'slate'\nimport {useSelected, type RenderLeafProps} from 'slate-react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport type {\n BlockAnnotationRenderProps,\n BlockChildRenderProps,\n BlockDecoratorRenderProps,\n PortableTextMemberSchemaTypes,\n RenderAnnotationFunction,\n RenderChildFunction,\n RenderDecoratorFunction,\n} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {usePortableTextEditor} from '../hooks/usePortableTextEditor'\nimport {PortableTextEditor} from '../PortableTextEditor'\n\nconst debug = debugWithName('components:Leaf')\n\nconst EMPTY_MARKS: string[] = []\n\n/**\n * @internal\n */\nexport interface LeafProps extends RenderLeafProps {\n editorActor: EditorActor\n children: ReactElement<any>\n schemaTypes: PortableTextMemberSchemaTypes\n renderAnnotation?: RenderAnnotationFunction\n renderChild?: RenderChildFunction\n renderDecorator?: RenderDecoratorFunction\n readOnly: boolean\n}\n\n/**\n * Renders Portable Text span nodes in Slate\n * @internal\n */\nexport const Leaf = (props: LeafProps) => {\n const {\n editorActor,\n attributes,\n children,\n leaf,\n schemaTypes,\n renderChild,\n renderDecorator,\n renderAnnotation,\n } = props\n const spanRef = useRef<HTMLElement>(null)\n const portableTextEditor = usePortableTextEditor()\n const blockSelected = useSelected()\n const [focused, setFocused] = useState(false)\n const [selected, setSelected] = useState(false)\n const block = children.props.parent as PortableTextTextBlock | undefined\n const path: Path = useMemo(\n () => (block ? [{_key: block?._key}, 'children', {_key: leaf._key}] : []),\n [block, leaf._key],\n )\n const decoratorValues = useMemo(\n () => schemaTypes.decorators.map((dec) => dec.value),\n [schemaTypes.decorators],\n )\n const marks: string[] = useMemo(\n () =>\n uniq(\n (leaf.marks || EMPTY_MARKS).filter((mark) =>\n decoratorValues.includes(mark),\n ),\n ),\n [decoratorValues, leaf.marks],\n )\n const annotationMarks = Array.isArray(leaf.marks) ? leaf.marks : EMPTY_MARKS\n const annotations = useMemo(\n () =>\n annotationMarks\n .map(\n (mark) =>\n !decoratorValues.includes(mark) &&\n block?.markDefs?.find((def) => def._key === mark),\n )\n .filter(Boolean) as PortableTextObject[],\n [annotationMarks, block, decoratorValues],\n )\n\n const shouldTrackSelectionAndFocus = annotations.length > 0 && blockSelected\n\n useEffect(() => {\n if (!shouldTrackSelectionAndFocus) {\n setFocused(false)\n return\n }\n const sel = PortableTextEditor.getSelection(portableTextEditor)\n if (\n sel &&\n isEqual(sel.focus.path, path) &&\n PortableTextEditor.isCollapsedSelection(portableTextEditor)\n ) {\n startTransition(() => {\n setFocused(true)\n })\n }\n }, [shouldTrackSelectionAndFocus, path, portableTextEditor])\n\n // Function to check if this leaf is currently inside the user's text selection\n const setSelectedFromRange = useCallback(() => {\n if (!shouldTrackSelectionAndFocus) {\n return\n }\n debug('Setting selection and focus from range')\n const winSelection = window.getSelection()\n if (!winSelection) {\n setSelected(false)\n return\n }\n if (winSelection && winSelection.rangeCount > 0) {\n const range = winSelection.getRangeAt(0)\n if (spanRef.current && range.intersectsNode(spanRef.current)) {\n setSelected(true)\n } else {\n setSelected(false)\n }\n } else {\n setSelected(false)\n }\n }, [shouldTrackSelectionAndFocus])\n\n useEffect(() => {\n if (!shouldTrackSelectionAndFocus) {\n return undefined\n }\n\n const onBlur = editorActor.on('blur', () => {\n setFocused(false)\n setSelected(false)\n })\n\n const onFocus = editorActor.on('focus', () => {\n const sel = PortableTextEditor.getSelection(portableTextEditor)\n if (\n sel &&\n isEqual(sel.focus.path, path) &&\n PortableTextEditor.isCollapsedSelection(portableTextEditor)\n ) {\n setFocused(true)\n }\n setSelectedFromRange()\n })\n\n const onSelection = editorActor.on('selection', (event) => {\n if (\n event.selection &&\n isEqual(event.selection.focus.path, path) &&\n PortableTextEditor.isCollapsedSelection(portableTextEditor)\n ) {\n setFocused(true)\n } else {\n setFocused(false)\n }\n setSelectedFromRange()\n })\n\n return () => {\n onBlur.unsubscribe()\n onFocus.unsubscribe()\n onSelection.unsubscribe()\n }\n }, [\n editorActor,\n path,\n portableTextEditor,\n setSelectedFromRange,\n shouldTrackSelectionAndFocus,\n ])\n\n useEffect(() => setSelectedFromRange(), [setSelectedFromRange])\n\n const content = useMemo(() => {\n let returnedChildren = children\n // Render text nodes\n if (Text.isText(leaf) && leaf._type === schemaTypes.span.name) {\n marks.forEach((mark) => {\n const schemaType = schemaTypes.decorators.find(\n (dec) => dec.value === mark,\n )\n if (schemaType && renderDecorator) {\n const _props: Omit<BlockDecoratorRenderProps, 'type'> =\n Object.defineProperty(\n {\n children: returnedChildren,\n editorElementRef: spanRef,\n focused,\n path,\n selected,\n schemaType,\n value: mark,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaType\n },\n },\n )\n returnedChildren = renderDecorator(\n _props as BlockDecoratorRenderProps,\n )\n }\n })\n\n if (block && annotations.length > 0) {\n annotations.forEach((annotation) => {\n const schemaType = schemaTypes.annotations.find(\n (t) => t.name === annotation._type,\n )\n if (schemaType) {\n if (renderAnnotation) {\n const _props: Omit<BlockAnnotationRenderProps, 'type'> =\n Object.defineProperty(\n {\n block,\n children: returnedChildren,\n editorElementRef: spanRef,\n focused,\n path,\n selected,\n schemaType,\n value: annotation,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaType\n },\n },\n )\n\n returnedChildren = (\n <span ref={spanRef}>\n {renderAnnotation(_props as BlockAnnotationRenderProps)}\n </span>\n )\n } else {\n returnedChildren = <span ref={spanRef}>{returnedChildren}</span>\n }\n }\n })\n }\n if (block && renderChild) {\n const child = block.children.find((_child) => _child._key === leaf._key) // Ensure object equality\n if (child) {\n const defaultRendered = <>{returnedChildren}</>\n const _props: Omit<BlockChildRenderProps, 'type'> =\n Object.defineProperty(\n {\n annotations,\n children: defaultRendered,\n editorElementRef: spanRef,\n focused,\n path,\n schemaType: schemaTypes.span,\n selected,\n value: child,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaTypes.span\n },\n },\n )\n returnedChildren = renderChild(_props as BlockChildRenderProps)\n }\n }\n }\n return returnedChildren\n }, [\n annotations,\n block,\n children,\n focused,\n leaf,\n marks,\n path,\n renderAnnotation,\n renderChild,\n renderDecorator,\n schemaTypes.annotations,\n schemaTypes.decorators,\n schemaTypes.span,\n selected,\n ])\n return useMemo(\n () => (\n <span key={leaf._key} {...attributes} ref={spanRef}>\n {content}\n </span>\n ),\n [leaf, attributes, content],\n )\n}\n\nLeaf.displayName = 'Leaf'\n","import type {KeyboardEvent} from 'react'\nimport type {ReactEditor} from 'slate-react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {isHotkey} from '../../internal-utils/is-hotkey'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {HotkeyOptions} from '../../types/options'\nimport type {EditorActor} from '../editor-machine'\nimport type {PortableTextEditor} from '../PortableTextEditor'\n\nconst debug = debugWithName('plugin:withHotKeys')\n\n/**\n * This plugin takes care of all hotkeys in the editor\n *\n */\nexport function createWithHotkeys(\n editorActor: EditorActor,\n portableTextEditor: PortableTextEditor,\n hotkeysFromOptions?: HotkeyOptions,\n): (editor: PortableTextSlateEditor & ReactEditor) => any {\n const reservedHotkeys = ['enter', 'tab', 'shift', 'delete', 'end']\n const activeHotkeys = hotkeysFromOptions ?? {}\n return function withHotKeys(editor: PortableTextSlateEditor & ReactEditor) {\n editor.pteWithHotKeys = (event: KeyboardEvent<HTMLDivElement>): void => {\n // Wire up custom marks hotkeys\n Object.keys(activeHotkeys).forEach((cat) => {\n if (cat === 'marks') {\n for (const hotkey in activeHotkeys[cat]) {\n if (reservedHotkeys.includes(hotkey)) {\n throw new Error(`The hotkey ${hotkey} is reserved!`)\n }\n if (isHotkey(hotkey, event.nativeEvent)) {\n event.preventDefault()\n const possibleMark = activeHotkeys[cat]\n if (possibleMark) {\n const mark = possibleMark[hotkey]\n debug(`HotKey ${hotkey} to toggle ${mark}`)\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'decorator.toggle',\n decorator: mark,\n },\n editor,\n })\n }\n }\n }\n }\n if (cat === 'custom') {\n for (const hotkey in activeHotkeys[cat]) {\n if (reservedHotkeys.includes(hotkey)) {\n throw new Error(`The hotkey ${hotkey} is reserved!`)\n }\n if (isHotkey(hotkey, event.nativeEvent)) {\n const possibleCommand = activeHotkeys[cat]\n if (possibleCommand) {\n const command = possibleCommand[hotkey]\n command(event, portableTextEditor)\n }\n }\n }\n }\n })\n }\n return editor\n }\n}\n","import type {BaseEditor, Operation} from 'slate'\nimport type {ReactEditor} from 'slate-react'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorActor} from './editor-machine'\n\n// React Compiler considers `slateEditor` as immutable, and opts-out if we do this inline in a useEffect, doing it in a function moves it out of the scope, and opts-in again for the rest of the component.\nexport function withSyncRangeDecorations({\n editorActor,\n slateEditor,\n syncRangeDecorations,\n}: {\n editorActor: EditorActor\n slateEditor: BaseEditor & ReactEditor & PortableTextSlateEditor\n syncRangeDecorations: (operation?: Operation) => void\n}) {\n const originalApply = slateEditor.apply\n\n slateEditor.apply = (op: Operation) => {\n originalApply(op)\n\n if (\n !editorActor.getSnapshot().matches({'edit mode': 'read only'}) &&\n op.type !== 'set_selection'\n ) {\n syncRangeDecorations(op)\n }\n }\n\n return () => {\n slateEditor.apply = originalApply\n }\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport {useSelector} from '@xstate/react'\nimport {isEqual, noop} from 'lodash'\nimport {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type ClipboardEvent,\n type CSSProperties,\n type FocusEventHandler,\n type KeyboardEvent,\n type MutableRefObject,\n type TextareaHTMLAttributes,\n} from 'react'\nimport {\n Editor,\n Node,\n Path,\n Range as SlateRange,\n Transforms,\n type BaseRange,\n type NodeEntry,\n type Operation,\n type Text,\n} from 'slate'\nimport {\n ReactEditor,\n Editable as SlateEditable,\n useSlate,\n type RenderElementProps,\n type RenderLeafProps,\n} from 'slate-react'\nimport {debugWithName} from '../internal-utils/debug'\nimport {\n moveRangeByOperation,\n toPortableTextRange,\n toSlateRange,\n} from '../internal-utils/ranges'\nimport {normalizeSelection} from '../internal-utils/selection'\nimport {\n fromSlateValue,\n isEqualToEmptyEditor,\n toSlateValue,\n} from '../internal-utils/values'\nimport type {\n EditorSelection,\n OnCopyFn,\n OnPasteFn,\n RangeDecoration,\n RenderAnnotationFunction,\n RenderBlockFunction,\n RenderChildFunction,\n RenderDecoratorFunction,\n RenderListItemFunction,\n RenderPlaceholderFunction,\n RenderStyleFunction,\n ScrollSelectionIntoViewFunction,\n} from '../types/editor'\nimport type {HotkeyOptions} from '../types/options'\nimport type {SlateTextBlock, VoidElement} from '../types/slate'\nimport {Element} from './components/Element'\nimport {Leaf} from './components/Leaf'\nimport {EditorActorContext} from './editor-actor-context'\nimport {usePortableTextEditor} from './hooks/usePortableTextEditor'\nimport {createWithHotkeys} from './plugins/createWithHotKeys'\nimport {PortableTextEditor} from './PortableTextEditor'\nimport {withSyncRangeDecorations} from './withSyncRangeDecorations'\n\nconst debug = debugWithName('component:Editable')\n\nconst PLACEHOLDER_STYLE: CSSProperties = {\n position: 'absolute',\n userSelect: 'none',\n pointerEvents: 'none',\n left: 0,\n right: 0,\n}\n\ninterface BaseRangeWithDecoration extends BaseRange {\n rangeDecoration: RangeDecoration\n}\n\n/**\n * @public\n */\nexport type PortableTextEditableProps = Omit<\n TextareaHTMLAttributes<HTMLDivElement>,\n 'onPaste' | 'onCopy' | 'onBeforeInput'\n> & {\n hotkeys?: HotkeyOptions\n onBeforeInput?: (event: InputEvent) => void\n onPaste?: OnPasteFn\n onCopy?: OnCopyFn\n ref: MutableRefObject<HTMLDivElement | null>\n rangeDecorations?: RangeDecoration[]\n renderAnnotation?: RenderAnnotationFunction\n renderBlock?: RenderBlockFunction\n renderChild?: RenderChildFunction\n renderDecorator?: RenderDecoratorFunction\n renderListItem?: RenderListItemFunction\n renderPlaceholder?: RenderPlaceholderFunction\n renderStyle?: RenderStyleFunction\n scrollSelectionIntoView?: ScrollSelectionIntoViewFunction\n selection?: EditorSelection\n spellCheck?: boolean\n}\n\n/**\n * @public\n *\n *\n * The core component that renders the editor. Must be placed within the {@link EditorProvider} component.\n *\n * @example\n * ```tsx\n * import { PortableTextEditable, EditorProvider } from '@portabletext/editor'\n *\n * function MyComponent() {\n * return (\n * <EditorProvider>\n * <PortableTextEditable />\n * </EditorProvider>\n * )\n * }\n * ```\n * @group Components\n */\nexport const PortableTextEditable = forwardRef<\n Omit<HTMLDivElement, 'as' | 'onPaste' | 'onBeforeInput'>,\n PortableTextEditableProps\n>(function PortableTextEditable(props, forwardedRef) {\n const {\n hotkeys,\n onBlur,\n onFocus,\n onBeforeInput,\n onPaste,\n onCopy,\n onClick,\n rangeDecorations,\n renderAnnotation,\n renderBlock,\n renderChild,\n renderDecorator,\n renderListItem,\n renderPlaceholder,\n renderStyle,\n selection: propsSelection,\n scrollSelectionIntoView,\n spellCheck,\n ...restProps\n } = props\n\n const portableTextEditor = usePortableTextEditor()\n const ref = useRef<HTMLDivElement | null>(null)\n const [editableElement, setEditableElement] = useState<HTMLDivElement | null>(\n null,\n )\n const [hasInvalidValue, setHasInvalidValue] = useState(false)\n const [rangeDecorationState, setRangeDecorationsState] = useState<\n BaseRangeWithDecoration[]\n >([])\n\n // Forward ref to parent component\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n forwardedRef,\n () => ref.current,\n )\n\n const rangeDecorationsRef = useRef(rangeDecorations)\n\n const editorActor = useContext(EditorActorContext)\n const readOnly = useSelector(editorActor, (s) =>\n s.matches({'edit mode': 'read only'}),\n )\n const schemaTypes = useSelector(editorActor, (s) => s.context.schema)\n const slateEditor = useSlate()\n\n const blockTypeName = schemaTypes.block.name\n\n // Output a minimal React editor inside Editable when in readOnly mode.\n // NOTE: make sure all the plugins used here can be safely run over again at any point.\n // There will be a problem if they redefine editor methods and then calling the original method within themselves.\n useMemo(() => {\n // React/UI-specific plugins\n if (readOnly) {\n debug('Editable is in read only mode')\n return slateEditor\n }\n const withHotKeys = createWithHotkeys(\n editorActor,\n portableTextEditor,\n hotkeys,\n )\n\n debug('Editable is in edit mode')\n return withHotKeys(slateEditor)\n }, [editorActor, hotkeys, portableTextEditor, readOnly, slateEditor])\n\n const renderElement = useCallback(\n (eProps: RenderElementProps) => (\n <Element\n {...eProps}\n readOnly={readOnly}\n renderBlock={renderBlock}\n renderChild={renderChild}\n renderListItem={renderListItem}\n renderStyle={renderStyle}\n schemaTypes={schemaTypes}\n spellCheck={spellCheck}\n />\n ),\n [\n schemaTypes,\n spellCheck,\n readOnly,\n renderBlock,\n renderChild,\n renderListItem,\n renderStyle,\n ],\n )\n\n const renderLeaf = useCallback(\n (\n lProps: RenderLeafProps & {\n leaf: Text & {placeholder?: boolean; rangeDecoration?: RangeDecoration}\n },\n ) => {\n if (lProps.leaf._type === 'span') {\n let rendered = (\n <Leaf\n {...lProps}\n editorActor={editorActor}\n schemaTypes={schemaTypes}\n renderAnnotation={renderAnnotation}\n renderChild={renderChild}\n renderDecorator={renderDecorator}\n readOnly={readOnly}\n />\n )\n if (\n renderPlaceholder &&\n lProps.leaf.placeholder &&\n lProps.text.text === ''\n ) {\n return (\n <>\n <span style={PLACEHOLDER_STYLE} contentEditable={false}>\n {renderPlaceholder()}\n </span>\n {rendered}\n </>\n )\n }\n const decoration = lProps.leaf.rangeDecoration\n if (decoration) {\n rendered = decoration.component({children: rendered})\n }\n return rendered\n }\n return lProps.children\n },\n [\n editorActor,\n readOnly,\n renderAnnotation,\n renderChild,\n renderDecorator,\n renderPlaceholder,\n schemaTypes,\n ],\n )\n\n const restoreSelectionFromProps = useCallback(() => {\n if (propsSelection) {\n debug(`Selection from props ${JSON.stringify(propsSelection)}`)\n const normalizedSelection = normalizeSelection(\n propsSelection,\n fromSlateValue(slateEditor.children, blockTypeName),\n )\n if (normalizedSelection !== null) {\n debug(\n `Normalized selection from props ${JSON.stringify(normalizedSelection)}`,\n )\n const slateRange = toSlateRange(normalizedSelection, slateEditor)\n if (slateRange) {\n Transforms.select(slateEditor, slateRange)\n // Output selection here in those cases where the editor selection was the same, and there are no set_selection operations made.\n // The selection is usually automatically emitted to change$ by the withPortableTextSelections plugin whenever there is a set_selection operation applied.\n if (!slateEditor.operations.some((o) => o.type === 'set_selection')) {\n editorActor.send({\n type: 'notify.selection',\n selection: normalizedSelection,\n })\n }\n slateEditor.onChange()\n }\n }\n }\n }, [blockTypeName, editorActor, propsSelection, slateEditor])\n\n const syncRangeDecorations = useCallback(\n (operation?: Operation) => {\n if (rangeDecorations && rangeDecorations.length > 0) {\n const newSlateRanges: BaseRangeWithDecoration[] = []\n rangeDecorations.forEach((rangeDecorationItem) => {\n const slateRange = toSlateRange(\n rangeDecorationItem.selection,\n slateEditor,\n )\n if (!SlateRange.isRange(slateRange)) {\n if (rangeDecorationItem.onMoved) {\n rangeDecorationItem.onMoved({\n newSelection: null,\n rangeDecoration: rangeDecorationItem,\n origin: 'local',\n })\n }\n return\n }\n let newRange: BaseRange | null | undefined\n if (operation) {\n newRange = moveRangeByOperation(slateRange, operation)\n if (\n (newRange && newRange !== slateRange) ||\n (newRange === null && slateRange)\n ) {\n const value = PortableTextEditor.getValue(portableTextEditor)\n const newRangeSelection = toPortableTextRange(\n value,\n newRange,\n schemaTypes,\n )\n if (rangeDecorationItem.onMoved) {\n rangeDecorationItem.onMoved({\n newSelection: newRangeSelection,\n rangeDecoration: rangeDecorationItem,\n origin: 'local',\n })\n }\n }\n }\n // If the newRange is null, it means that the range is not valid anymore and should be removed\n // If it's undefined, it means that the slateRange is still valid and should be kept\n if (newRange !== null) {\n newSlateRanges.push({\n ...(newRange || slateRange),\n rangeDecoration: rangeDecorationItem,\n })\n }\n })\n if (newSlateRanges.length > 0) {\n setRangeDecorationsState(newSlateRanges)\n return\n }\n }\n setRangeDecorationsState((rangeDecorationState) => {\n // If there's state then we want to reset\n if (rangeDecorationState.length > 0) {\n return []\n }\n // Otherwise we no-op, React will skip a state update if what we return has reference equality to the previous state\n return rangeDecorationState\n })\n },\n [portableTextEditor, rangeDecorations, schemaTypes, slateEditor],\n )\n\n // Restore selection from props when the editor has been initialized properly with it's value\n useEffect(() => {\n const onReady = editorActor.on('ready', () => {\n syncRangeDecorations()\n restoreSelectionFromProps()\n })\n const onInvalidValue = editorActor.on('invalid value', () => {\n setHasInvalidValue(true)\n })\n const onValueChanged = editorActor.on('value changed', () => {\n setHasInvalidValue(false)\n })\n\n return () => {\n onReady.unsubscribe()\n onInvalidValue.unsubscribe()\n onValueChanged.unsubscribe()\n }\n }, [editorActor, restoreSelectionFromProps, syncRangeDecorations])\n\n // Restore selection from props when it changes\n useEffect(() => {\n if (propsSelection && !hasInvalidValue) {\n restoreSelectionFromProps()\n }\n }, [hasInvalidValue, propsSelection, restoreSelectionFromProps])\n\n const [syncedRangeDecorations, setSyncedRangeDecorations] = useState(false)\n useEffect(() => {\n if (!syncedRangeDecorations) {\n // We only want this to run once, on mount\n setSyncedRangeDecorations(true)\n syncRangeDecorations()\n }\n }, [syncRangeDecorations, syncedRangeDecorations])\n\n useEffect(() => {\n if (!isEqual(rangeDecorations, rangeDecorationsRef.current)) {\n syncRangeDecorations()\n }\n rangeDecorationsRef.current = rangeDecorations\n }, [rangeDecorations, syncRangeDecorations])\n\n // Sync range decorations after an operation is applied\n useEffect(() => {\n const teardown = withSyncRangeDecorations({\n editorActor,\n slateEditor,\n syncRangeDecorations,\n })\n return () => teardown()\n }, [editorActor, slateEditor, syncRangeDecorations])\n\n // Handle from props onCopy function\n const handleCopy = useCallback(\n (event: ClipboardEvent<HTMLDivElement>): void | ReactEditor => {\n if (onCopy) {\n const result = onCopy(event)\n // CopyFn may return something to avoid doing default stuff\n if (result !== undefined) {\n event.preventDefault()\n }\n } else if (event.nativeEvent.clipboardData) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'copy',\n data: event.nativeEvent.clipboardData,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [onCopy, editorActor, slateEditor],\n )\n\n // Handle incoming pasting events in the editor\n const handlePaste = useCallback(\n (event: ClipboardEvent<HTMLDivElement>): Promise<void> | void => {\n const value = PortableTextEditor.getValue(portableTextEditor)\n const ptRange = toPortableTextRange(\n value,\n slateEditor.selection,\n schemaTypes,\n )\n const path = ptRange?.focus.path || []\n const onPasteResult = onPaste?.({event, value, path, schemaTypes})\n\n if (onPasteResult || !slateEditor.selection) {\n event.preventDefault()\n\n // Resolve it as promise (can be either async promise or sync return value)\n editorActor.send({type: 'notify.loading'})\n\n Promise.resolve(onPasteResult)\n .then((result) => {\n debug('Custom paste function from client resolved', result)\n\n if (!result || !result.insert) {\n debug('No result from custom paste handler, pasting normally')\n\n slateEditor.insertData(event.clipboardData)\n } else if (result.insert) {\n slateEditor.insertFragment(\n toSlateValue(result.insert as PortableTextBlock[], {\n schemaTypes,\n }),\n )\n } else {\n console.warn(\n 'Your onPaste function returned something unexpected:',\n result,\n )\n }\n })\n .catch((error) => {\n console.error(error)\n\n return error\n })\n .finally(() => {\n editorActor.send({type: 'notify.done loading'})\n })\n } else if (event.nativeEvent.clipboardData) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'paste',\n data: event.nativeEvent.clipboardData,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n\n debug('No result from custom paste handler, pasting normally')\n },\n [editorActor, onPaste, portableTextEditor, schemaTypes, slateEditor],\n )\n\n const handleOnFocus: FocusEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (onFocus) {\n onFocus(event)\n }\n if (!event.isDefaultPrevented()) {\n const selection = PortableTextEditor.getSelection(portableTextEditor)\n // Create an editor selection if it does'nt exist\n if (selection === null) {\n Transforms.select(slateEditor, Editor.start(slateEditor, []))\n slateEditor.onChange()\n }\n editorActor.send({type: 'notify.focused', event})\n const newSelection = PortableTextEditor.getSelection(portableTextEditor)\n // If the selection is the same, emit it explicitly here as there is no actual onChange event triggered.\n if (selection === newSelection) {\n editorActor.send({\n type: 'notify.selection',\n selection,\n })\n }\n }\n },\n [editorActor, onFocus, portableTextEditor, slateEditor],\n )\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (onClick) {\n onClick(event)\n }\n\n const focusBlockPath = slateEditor.selection\n ? slateEditor.selection.focus.path.slice(0, 1)\n : undefined\n const focusBlock = focusBlockPath\n ? (Node.descendant(slateEditor, focusBlockPath) as\n | SlateTextBlock\n | VoidElement)\n : undefined\n const [_, lastNodePath] = Node.last(slateEditor, [])\n const lastBlockPath = lastNodePath.slice(0, 1)\n const lastNodeFocused = focusBlockPath\n ? Path.equals(lastBlockPath, focusBlockPath)\n : false\n const lastBlockIsVoid = focusBlock\n ? !slateEditor.isTextBlock(focusBlock)\n : false\n const collapsedSelection =\n slateEditor.selection && SlateRange.isCollapsed(slateEditor.selection)\n\n if (collapsedSelection && lastNodeFocused && lastBlockIsVoid) {\n Transforms.insertNodes(\n slateEditor,\n slateEditor.pteCreateTextBlock({decorators: []}),\n )\n slateEditor.onChange()\n }\n },\n [onClick, slateEditor],\n )\n\n const handleOnBlur: FocusEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (onBlur) {\n onBlur(event)\n }\n if (!event.isPropagationStopped()) {\n editorActor.send({type: 'notify.blurred', event})\n }\n },\n [editorActor, onBlur],\n )\n\n const handleOnBeforeInput = useCallback(\n (event: InputEvent) => {\n if (onBeforeInput) {\n onBeforeInput(event)\n }\n },\n [onBeforeInput],\n )\n\n // This function will handle unexpected DOM changes inside the Editable rendering,\n // and make sure that we can maintain a stable slateEditor.selection when that happens.\n //\n // For example, if this Editable is rendered inside something that might re-render\n // this component (hidden contexts) while the user is still actively changing the\n // contentEditable, this could interfere with the intermediate DOM selection,\n // which again could be picked up by ReactEditor's event listeners.\n // If that range is invalid at that point, the slate.editorSelection could be\n // set either wrong, or invalid, to which slateEditor will throw exceptions\n // that are impossible to recover properly from or result in a wrong selection.\n //\n // Also the other way around, when the ReactEditor will try to create a DOM Range\n // from the current slateEditor.selection, it may throw unrecoverable errors\n // if the current editor.selection is invalid according to the DOM.\n // If this is the case, default to selecting the top of the document, if the\n // user already had a selection.\n const validateSelection = useCallback(() => {\n if (!slateEditor.selection) {\n return\n }\n const root = ReactEditor.findDocumentOrShadowRoot(slateEditor)\n const {activeElement} = root\n // Return if the editor isn't the active element\n if (ref.current !== activeElement) {\n return\n }\n const window = ReactEditor.getWindow(slateEditor)\n const domSelection = window.getSelection()\n if (!domSelection || domSelection.rangeCount === 0) {\n return\n }\n const existingDOMRange = domSelection.getRangeAt(0)\n try {\n const newDOMRange = ReactEditor.toDOMRange(\n slateEditor,\n slateEditor.selection,\n )\n if (\n newDOMRange.startOffset !== existingDOMRange.startOffset ||\n newDOMRange.endOffset !== existingDOMRange.endOffset\n ) {\n debug('DOM range out of sync, validating selection')\n // Remove all ranges temporary\n domSelection?.removeAllRanges()\n // Set the correct range\n domSelection.addRange(newDOMRange)\n }\n } catch {\n debug(`Could not resolve selection, selecting top document`)\n // Deselect the editor\n Transforms.deselect(slateEditor)\n // Select top document if there is a top block to select\n if (slateEditor.children.length > 0) {\n Transforms.select(slateEditor, [0, 0])\n }\n slateEditor.onChange()\n }\n }, [ref, slateEditor])\n\n // Observe mutations (child list and subtree) to this component's DOM,\n // and make sure the editor selection is valid when that happens.\n useEffect(() => {\n if (editableElement) {\n const mutationObserver = new MutationObserver(validateSelection)\n mutationObserver.observe(editableElement, {\n attributeOldValue: false,\n attributes: false,\n characterData: false,\n childList: true,\n subtree: true,\n })\n return () => {\n mutationObserver.disconnect()\n }\n }\n return undefined\n }, [validateSelection, editableElement])\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (props.onKeyDown) {\n props.onKeyDown(event)\n }\n if (!event.isDefaultPrevented()) {\n slateEditor.pteWithHotKeys(event)\n }\n if (!event.isDefaultPrevented()) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'key.down',\n keyboardEvent: {\n key: event.key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n },\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [props, editorActor, slateEditor],\n )\n\n const handleKeyUp = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (props.onKeyUp) {\n props.onKeyUp(event)\n }\n if (!event.isDefaultPrevented()) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'key.up',\n keyboardEvent: {\n key: event.key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n },\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [props, editorActor, slateEditor],\n )\n\n const scrollSelectionIntoViewToSlate = useMemo(() => {\n // Use slate-react default scroll into view\n if (scrollSelectionIntoView === undefined) {\n return undefined\n }\n // Disable scroll into view totally\n if (scrollSelectionIntoView === null) {\n return noop\n }\n // Translate PortableTextEditor prop fn to Slate plugin fn\n return (_editor: ReactEditor, domRange: Range) => {\n scrollSelectionIntoView(portableTextEditor, domRange)\n }\n }, [portableTextEditor, scrollSelectionIntoView])\n\n const decorate: (entry: NodeEntry) => BaseRange[] = useCallback(\n ([, path]) => {\n if (isEqualToEmptyEditor(slateEditor.children, schemaTypes)) {\n return [\n {\n anchor: {\n path: [0, 0],\n offset: 0,\n },\n focus: {\n path: [0, 0],\n offset: 0,\n },\n placeholder: true,\n },\n ]\n }\n // Editor node has a path length of 0 (should never be decorated)\n if (path.length === 0) {\n return []\n }\n const result = rangeDecorationState.filter((item) => {\n // Special case in order to only return one decoration for collapsed ranges\n if (SlateRange.isCollapsed(item)) {\n // Collapsed ranges should only be decorated if they are on a block child level (length 2)\n if (path.length !== 2) {\n return false\n }\n return (\n Path.equals(item.focus.path, path) &&\n Path.equals(item.anchor.path, path)\n )\n }\n // Include decorations that either include or intersects with this path\n return (\n SlateRange.intersection(item, {\n anchor: {path, offset: 0},\n focus: {path, offset: 0},\n }) || SlateRange.includes(item, path)\n )\n })\n if (result.length > 0) {\n return result\n }\n return []\n },\n [slateEditor, schemaTypes, rangeDecorationState],\n )\n\n // Set the forwarded ref to be the Slate editable DOM element\n // Also set the editable element in a state so that the MutationObserver\n // is setup when this element is ready.\n useEffect(() => {\n ref.current = ReactEditor.toDOMNode(\n slateEditor,\n slateEditor,\n ) as HTMLDivElement | null\n setEditableElement(ref.current)\n }, [slateEditor, ref])\n\n useEffect(() => {\n const window = ReactEditor.getWindow(slateEditor)\n\n const onDragEnd = () => {\n editorActor.send({type: 'dragend'})\n }\n const onDrop = () => {\n editorActor.send({type: 'drop'})\n }\n\n window.document.addEventListener('dragend', onDragEnd)\n window.document.addEventListener('drop', onDrop)\n\n return () => {\n window.document.removeEventListener('dragend', onDragEnd)\n window.document.removeEventListener('drop', onDrop)\n }\n }, [slateEditor, editorActor])\n\n if (!portableTextEditor) {\n return null\n }\n return hasInvalidValue ? null : (\n <SlateEditable\n {...restProps}\n autoFocus={false}\n className={restProps.className || 'pt-editable'}\n decorate={decorate}\n onBlur={handleOnBlur}\n onCopy={handleCopy}\n onClick={handleClick}\n onDOMBeforeInput={handleOnBeforeInput}\n onDragStart={(event) => {\n props.onDragStart?.(event)\n\n if (!event.isDefaultPrevented() && !event.isPropagationStopped()) {\n editorActor.send({type: 'dragstart'})\n }\n }}\n onFocus={handleOnFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onPaste={handlePaste}\n readOnly={readOnly}\n // We have implemented our own placeholder logic with decorations.\n // This 'renderPlaceholder' should not be used.\n renderPlaceholder={undefined}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n scrollSelectionIntoView={scrollSelectionIntoViewToSlate}\n />\n )\n})\n\nPortableTextEditable.displayName = 'ForwardRef(PortableTextEditable)'\n","import {useEffect} from 'react'\nimport {useEffectEvent} from 'use-effect-event'\nimport type {EditorEmittedEvent} from './editor/editor-machine'\nimport {useEditor} from './editor/editor-provider'\n\n/**\n * @public\n * @deprecated\n * This component has been renamed. Use `EventListenerPlugin` instead.\n *\n * ```\n * import {EventListenerPlugin} from '@portabletext/editor/plugins'\n * ```\n */\nexport function EditorEventListener(props: {\n on: (event: EditorEmittedEvent) => void\n}) {\n const editor = useEditor()\n const on = useEffectEvent(props.on)\n\n useEffect(() => {\n const subscription = editor.on('*', on)\n\n return () => {\n subscription.unsubscribe()\n }\n }, [editor])\n\n return null\n}\n"],"names":["normalizePoint","point","value","newPath","newOffset","offset","blockKey","path","_key","childKey","block","find","blk","push","children","Array","isArray","length","child","cld","text","normalizeSelection","selection","newAnchor","newFocus","anchor","focus","isEqual","backward","DefaultBlockObject","props","$","_c","t0","Symbol","for","userSelect","t1","_type","jsxs","DefaultInlineObject","DropIndicator","position","width","height","borderBottom","zIndex","debug","debugWithName","useDraggable","editor","useSlateStatic","dragGhostRef","useRef","undefined","blockElement","setBlockElement","useState","blockRef","element","current","ReactEditor","toDOMNode","useEffect","t2","event","targetBlock","IS_DRAGGING_ELEMENT_TARGET","get","set","preventDefault","stopPropagation","delete","document","body","removeChild","dragPosition","IS_DRAGGING_BLOCK_TARGET_POSITION","targetPath","findPath","myPath","isBefore","Path","originalPath","JSON","stringify","originalPath_0","equals","Transforms","moveNodes","at","to","onChange","handleDragEnd","t3","event_0","IS_DRAGGING_BLOCK_ELEMENT","target","HTMLElement","style","opacity","handleDrag","t4","event_1","IS_DRAGGING","dataTransfer","setData","effectAllowed","dragGhost","cloneNode","customGhost","querySelector","setAttribute","left","boxSizing","appendChild","rect","getBoundingClientRect","x","clientX","y","clientY","top","setDragImage","handleDragStart","readOnly","t5","draggableProps","draggable","onDragStart","onDrag","onDragEnd","useDroppable","isDragOver","setIsDragOver","isMyDragOver","dropEffect","elementRect","Y","pageY","loc","Math","abs","handleDragOver","handleDragLeave","handleDrop","isDraggingOverFirstBlock","t6","isDraggingOverLastBlock","isDraggingOverTop","isDraggingOverBottom","t7","droppableProps","onDragOver","onDragLeave","onDrop","t8","EMPTY_ANNOTATIONS","inlineBlockStyle","display","Element","attributes","schemaTypes","renderBlock","renderChild","renderListItem","renderStyle","spellCheck","selected","useSelected","inlineBlockObjectRef","focused","Range","isCollapsed","droppable","useMemo","fromSlateValue","name","KEY_TO_VALUE_ELEMENT","renderedBlock","className","blockPath","Error","isInline","Editor","node","depth","schemaType","inlineObjects","SlateElement","isElement","elmPath","debugRenders","annotations","jsx","editorElementRef","type","isListItem","blockStyleType","styles","item","level","listItem","isListBlock","listType","lists","renderProps","Object","defineProperty","enumerable","warn","propsOrDefaultRendered","blockObjects","renderedBlockFromProps","_props","displayName","EMPTY_MARKS","Leaf","editorActor","leaf","renderDecorator","renderAnnotation","spanRef","portableTextEditor","usePortableTextEditor","blockSelected","setFocused","setSelected","parent","decoratorValues","decorators","map","dec","marks","uniq","filter","mark","includes","annotationMarks","markDefs","def","Boolean","shouldTrackSelectionAndFocus","sel","PortableTextEditor","getSelection","isCollapsedSelection","startTransition","setSelectedFromRange","useCallback","winSelection","window","rangeCount","range","getRangeAt","intersectsNode","onBlur","on","onFocus","onSelection","unsubscribe","content","returnedChildren","Text","isText","span","forEach","annotation","t","_child","createWithHotkeys","hotkeysFromOptions","reservedHotkeys","activeHotkeys","pteWithHotKeys","keys","cat","hotkey","isHotkey","nativeEvent","possibleMark","send","behaviorEvent","decorator","possibleCommand","command","withSyncRangeDecorations","slateEditor","syncRangeDecorations","originalApply","apply","op","getSnapshot","matches","PLACEHOLDER_STYLE","pointerEvents","right","PortableTextEditable","forwardRef","forwardedRef","hotkeys","onBeforeInput","onPaste","onCopy","onClick","rangeDecorations","renderPlaceholder","propsSelection","scrollSelectionIntoView","restProps","ref","editableElement","setEditableElement","hasInvalidValue","setHasInvalidValue","rangeDecorationState","setRangeDecorationsState","rangeDecorationsRef","useContext","EditorActorContext","useSelector","s","context","schema","useSlate","blockTypeName","withHotKeys","renderElement","eProps","renderLeaf","lProps","rendered","placeholder","Fragment","decoration","rangeDecoration","component","restoreSelectionFromProps","normalizedSelection","slateRange","toSlateRange","select","operations","some","o","operation","newSlateRanges","rangeDecorationItem","SlateRange","isRange","onMoved","newSelection","origin","newRange","moveRangeByOperation","getValue","newRangeSelection","toPortableTextRange","onReady","onInvalidValue","onValueChanged","syncedRangeDecorations","setSyncedRangeDecorations","teardown","handleCopy","clipboardData","data","handlePaste","onPasteResult","Promise","resolve","then","result","insert","insertData","insertFragment","toSlateValue","console","catch","error","finally","handleOnFocus","isDefaultPrevented","start","handleClick","focusBlockPath","slice","focusBlock","Node","descendant","_","lastNodePath","last","lastBlockPath","lastNodeFocused","lastBlockIsVoid","isTextBlock","insertNodes","pteCreateTextBlock","handleOnBlur","isPropagationStopped","handleOnBeforeInput","validateSelection","root","findDocumentOrShadowRoot","activeElement","domSelection","getWindow","existingDOMRange","newDOMRange","toDOMRange","startOffset","endOffset","removeAllRanges","addRange","deselect","mutationObserver","MutationObserver","observe","attributeOldValue","characterData","childList","subtree","disconnect","handleKeyDown","onKeyDown","keyboardEvent","key","code","altKey","ctrlKey","metaKey","shiftKey","handleKeyUp","onKeyUp","scrollSelectionIntoViewToSlate","noop","_editor","domRange","decorate","isEqualToEmptyEditor","intersection","addEventListener","removeEventListener","SlateEditable","EditorEventListener","useEditor","useEffectEvent","subscription"],"mappings":";;;;;;;AAIgBA,SAAAA,eACdC,OACAC,OAC6B;AACzB,MAAA,CAACD,SAAS,CAACC;AACN,WAAA;AAET,QAAMC,UAAgB,CAAE;AACpBC,MAAAA,YAAoBH,MAAMI,UAAU;AACxC,QAAMC,WACJ,OAAOL,MAAMM,KAAK,CAAC,KAAM,YACzB,UAAUN,MAAMM,KAAK,CAAC,KACtBN,MAAMM,KAAK,CAAC,EAAEC,MACVC,WACJ,OAAOR,MAAMM,KAAK,CAAC,KAAM,YACzB,UAAUN,MAAMM,KAAK,CAAC,KACtBN,MAAMM,KAAK,CAAC,EAAEC,MACVE,QAAuCR,MAAMS,KAChDC,CAAQA,QAAAA,IAAIJ,SAASF,QACxB;AACII,MAAAA;AACFP,YAAQU,KAAK;AAAA,MAACL,MAAME,MAAMF;AAAAA,IAAAA,CAAK;AAAA;AAExB,WAAA;AAET,MAAIE,SAAST,MAAMM,KAAK,CAAC,MAAM,YAAY;AAEvC,QAAA,CAACG,MAAMI,YACNC,MAAMC,QAAQN,MAAMI,QAAQ,KAAKJ,MAAMI,SAASG,WAAW;AAErD,aAAA;AAET,UAAMC,QACJH,MAAMC,QAAQN,MAAMI,QAAQ,KAC5BJ,MAAMI,SAASH,KAAMQ,CAAAA,QAAQA,IAAIX,SAASC,QAAQ;AAChDS,QAAAA;AACFf,cAAQU,KAAK,UAAU,GACvBV,QAAQU,KAAK;AAAA,QAACL,MAAMU,MAAMV;AAAAA,MAAAA,CAAK,GAC/BJ,YACEc,MAAME,QAAQF,MAAME,KAAKH,UAAUhB,MAAMI,SACrCJ,MAAMI,SACLa,MAAME,QAAQF,MAAME,KAAKH,UAAW;AAAA;AAEpC,aAAA;AAAA,EAAA;AAGJ,SAAA;AAAA,IAACV,MAAMJ;AAAAA,IAASE,QAAQD;AAAAA,EAAS;AAC1C;AAEgBiB,SAAAA,mBACdC,WACApB,OACwB;AACxB,MAAI,CAACoB,aAAa,CAACpB,SAASA,MAAMe,WAAW;AACpC,WAAA;AAELM,MAAAA,YAAyC,MACzCC,WAAwC;AACtC,QAAA;AAAA,IAACC;AAAAA,IAAQC;AAAAA,EAAAA,IAASJ;AAUxB,SAREG,UACAvB,MAAMS,KAAMC,CAAAA,QAAQe,iBAAAA,QAAQ;AAAA,IAACnB,MAAMI,IAAIJ;AAAAA,EAAAA,GAAOiB,OAAOlB,KAAK,CAAC,CAAC,CAAC,MAE7DgB,YAAYvB,eAAeyB,QAAQvB,KAAK,IAEtCwB,SAASxB,MAAMS,KAAMC,SAAQe,yBAAQ;AAAA,IAACnB,MAAMI,IAAIJ;AAAAA,EAAOkB,GAAAA,MAAMnB,KAAK,CAAC,CAAC,CAAC,MACvEiB,WAAWxB,eAAe0B,OAAOxB,KAAK,IAEpCqB,aAAaC,WACR;AAAA,IAACC,QAAQF;AAAAA,IAAWG,OAAOF;AAAAA,IAAUI,UAAUN,UAAUM;AAAAA,EAAAA,IAE3D;AACT;AC1EO,SAAAC,mBAAAC,OAAA;AAAAC,QAAAA,IAAAC,uBAAA,CAAA;AAAAC,MAAAA;AAAAF,IAAA,CAAA,MAAAG,OAAAC,IAAA,2BAAA,KAISF,KAAA;AAAA,IAAAG,YAAa;AAAA,EAAA,GAAOL,OAAAE,MAAAA,KAAAF,EAAA,CAAA;AAAAM,MAAAA;AAAA,SAAAN,EAAA,CAAA,MAAAD,MAAA5B,MAAAM,QAAAuB,EAAAD,CAAAA,MAAAA,MAAA5B,MAAAoC,SAAhCD,KAAAE,2BAAA,KAAA,OAAA,EAAY,OAAAN,IAAsB,UAAA;AAAA,IAAA;AAAA,IAC9BH,MAAK5B,MAAAoC;AAAAA,IAAa;AAAA,IAAGR,MAAK5B,MAAAM;AAAAA,IAAY;AAAA,EAAA,GAC1C,GAAMuB,EAAAD,CAAAA,IAAAA,MAAA5B,MAAAM,MAAAuB,EAAAD,CAAAA,IAAAA,MAAA5B,MAAAoC,OAAAP,OAAAM,MAAAA,KAAAN,EAAA,CAAA,GAFNM;AAEM;AAIH,SAAAG,oBAAAV,OAAA;AAAAC,QAAAA,IAAAC,uBAAA,CAAA;AAAAC,MAAAA;AAAAF,IAAA,CAAA,MAAAG,OAAAC,IAAA,2BAAA,KAIUF,KAAA;AAAA,IAAAG,YAAa;AAAA,EAAA,GAAOL,OAAAE,MAAAA,KAAAF,EAAA,CAAA;AAAAM,MAAAA;AAAA,SAAAN,EAAA,CAAA,MAAAD,MAAA5B,MAAAM,QAAAuB,EAAAD,CAAAA,MAAAA,MAAA5B,MAAAoC,SAAjCD,KAAAE,2BAAA,KAAA,QAAA,EAAa,OAAAN,IAAsB,UAAA;AAAA,IAAA;AAAA,IAC/BH,MAAK5B,MAAAoC;AAAAA,IAAa;AAAA,IAAGR,MAAK5B,MAAAM;AAAAA,IAAY;AAAA,EAAA,GAC1C,GAAOuB,EAAAD,CAAAA,IAAAA,MAAA5B,MAAAM,MAAAuB,EAAAD,CAAAA,IAAAA,MAAA5B,MAAAoC,OAAAP,OAAAM,MAAAA,KAAAN,EAAA,CAAA,GAFPM;AAEO;AClBJ,SAAAI,gBAAA;AAAAV,QAAAA,IAAAC,uBAAA,CAAA;AAAAC,MAAAA;AAAA,SAAAF,EAAA,CAAA,MAAAG,OAAAC,IAAA,2BAAA,KAEHF,6CACY,WAAA,qBACH,OAAA;AAAA,IAAAS,UACK;AAAA,IAAUC,OACb;AAAA,IAAMC,QAAA;AAAA,IAAAC,cAEC;AAAA,IAAwBC,QAAA;AAAA,EAAA,GAGxC,GAAAf,OAAAE,MAAAA,KAAAF,EAAA,CAAA,GATFE;AASE;ACON,MAAMc,UAAQC,6BAAc,cAAc;AAWnC,SAAAC,aAAAnB,OAAA;AAAA,QAAAC,IAAAC,qBAAAA,EAAA,EAAA,GAKLkB,SAAeC,6BACfC,eAAqBC,MAAAA,OAAAC,MAA6B,GAClD,CAAAC,cAAAC,eAAA,IAAwCC,mBAAiC;AAAC,MAAAxB,IAAAI;AAAAN,IAAA,CAAA,MAAAmB,UAAAnB,EAAAD,CAAAA,MAAAA,MAAA4B,YAAA3B,EAAAD,CAAAA,MAAAA,MAAA6B,WAGxE1B,KAAAA,MACEuB,gBACE1B,MAAK4B,WACD5B,MAAK4B,SAAAE,UACLC,uBAAAC,UAAsBZ,QAAQpB,MAAK6B,OAAQ,CACjD,GACFtB,KAAA,CAACa,QAAQpB,MAAK6B,SAAU7B,MAAK4B,QAAA,GAAU3B,OAAAmB,QAAAnB,EAAA,CAAA,IAAAD,MAAA4B,UAAA3B,EAAA,CAAA,IAAAD,MAAA6B,SAAA5B,OAAAE,IAAAF,OAAAM,OAAAJ,KAAAF,EAAA,CAAA,GAAAM,KAAAN,EAAA,CAAA,IAPzCgC,MAAAA,UACE9B,IAMAI,EACF;AAAC2B,MAAAA;AAAAjC,WAAAmB,UAAAnB,EAAAD,CAAAA,MAAAA,MAAA6B,WAICK,KAAAC,CAAA,UAAA;AACEC,UAAAA,cAAoBC,eAAAA,2BAAAC,IAA+BlB,MAAM;AAAC,QACtDgB,aAAW;AACbG,qBAAAA,YAAAA,IAAgBnB,UAAa,GAC7Be,MAAKK,eAAgB,GACrBL,MAAKM,gBACLJ,GAAAA,0CAAAK,OAAkCtB,MAAM,GACpCE,aAAYQ,YACdb,QAAM,qBAAqB,GAC3B0B,SAAAC,KAAAC,YAA0BvB,aAAYQ,OAAQ;AAEhDgB,YAAAA,eAAqBC,eAAAA,kCAAAT,IAAsClB,MAAM;AACjE2B,qBAAAA,kCAAAL,OAAyCtB,MAAM;AAC/C,UAAA4B,aAAiBjB,WAAAA,YAAAkB,SAAqB7B,QAAQgB,WAAW;AACzDc,YAAAA,SAAenB,WAAAA,YAAAkB,SAAqB7B,QAAQpB,MAAK6B,OAAQ,GACzDsB,WAAiBC,MAAAA,KAAAD,SAAcD,QAAQF,UAAU;AAC7CF,UAAAA,iBAAiB,YAAQ,CAAKK,UAAQ;AAAA,YAEpCH,WAAiB5B,CAAAA,KAAAA,OAAMpC,SAAAG,SAAoB,GAAA;AAC7C8B,kBAAM,6CAA6C;AAAC;AAAA,QAAA;AAGtD,cAAAoC,eAAqBL;AACrBA,qBAAaA,MAAAA,KAAAA,KAAUA,UAAU,GACjC/B,QACE,6BAA6BqC,KAAAC,UAAeF,YAAY,CAAC,OAAOC,KAAAC,UAC9DP,UACF,CAAC,EACH;AAAA,MAAA;AAGAF,UAAAA,iBAAiB,SACjBK,YACAH,WAAU,CAAA,MAAQ5B,OAAMpC,SAAAG,SAAoB,GAAA;AAE5C,cAAAqE,iBAAqBR;AACrBA,qBAAaA,MAAAA,KAAAA,SAAcA,UAAU,GACrC/B,QACE,6BAA6BqC,KAAAC,UAAeF,cAAY,CAAC,OAAOC,KAAAC,UAC9DP,UACF,CAAC,EACH;AAAA,MAAA;AAAC,UAECI,WAAAK,OAAYT,YAAYE,MAAM,GAAC;AAC5BV,cAAAA,eAAAA,GACLvB,QAAM,+CAA+C;AAAC;AAAA,MAAA;AAItDA,cAAA,kBAAkBjB,MAAK6B,QAAAnD,IAAA,cAA2B4E,KAAAC,UAAeL,MAAM,CAAC,OAAOI,KAAAC,UAC7EP,UACF,CAAC,KAAKF,YAAY,GACpB,GACAY,MAAAA,WAAAC,UAAqBvC,QAAM;AAAA,QAAAwC,IAAOV;AAAAA,QAAMW,IAAMb;AAAAA,MAAAA,CAAW,GACzD5B,OAAM0C,SAAU;AAAC;AAAA,IAAA;AAGnB7C,YAAM,uCAAuC;AAAA,EAAA,GAC9ChB,OAAAmB,QAAAnB,EAAA,CAAA,IAAAD,MAAA6B,SAAA5B,OAAAiC,MAAAA,KAAAjC,EAAA,CAAA;AA3DH,QAAA8D,gBAAsB7B;AA6DrB8B,MAAAA;AAAA/D,WAAAmB,UAAAnB,EAAAD,CAAAA,MAAAA,MAAA6B,WAICmC,KAAAC,CAAA,YAAA;AACE1B,mBAAAA,YAAAA,IAAgBnB,UAAY,GAC5B8C,eAAAA,0BAAA3B,IAA8BnB,QAAQpB,MAAK6B,OAAQ,GACnDM,QAAKM,gBAAiB;AAEtB,UAAA0B,SAAehC,QAAKgC;AAEhBA,sBAAMC,gBACRD,OAAME,MAAAC,UAAiB;AAAA,EAAA,GAE1BrE,OAAAmB,QAAAnB,EAAA,CAAA,IAAAD,MAAA6B,SAAA5B,QAAA+D,MAAAA,KAAA/D,EAAA,EAAA;AAXH,QAAAsE,aAAmBP;AAalBQ,MAAAA;AAAAvE,IAAAwB,EAAAA,MAAAA,gBAAAxB,UAAAmB,UAAAnB,EAAA,EAAA,MAAAsE,cAICC,KAAAC,CAAA,YAAA;AACExD,QAAAA,QAAM,YAAY,GAClByD,eAAAA,YAAAnC,IAAgBnB,UAAY,GACxBe,QAAKwC,iBACPxC,QAAKwC,aAAAC,QAAsB,6BAA6B,WAAW,GACnEzC,QAAKwC,aAAAE,gBAA8B,SAKjCpD,gBAAgBA,wBAAY2C,aAAuB;AACrDU,UAAAA,YAAgBrD,aAAYsD,YAAe;AAC3CC,YAAAA,cAAoBF,UAASG,cAC3B,8BACF;AACID,UAAAA,gBACFF,YAAYE,cAIdF,UAASI,aAAc,gBAAgB,EAAE,GAACvC,SAAAC,MAAA;AAGxCtB,qBAAYQ,UAAWgD,WACvBA,UAAST,MAAAzD,WAAkB,YAC3BkE,UAAST,MAAAc,OAAc,YACvBL,UAAST,MAAAe,YAAmB,cAC5BzC,SAAAC,KAAAyC,YAA0BP,SAAS;AACnC,cAAAQ,OAAa7D,aAAY8D,sBAAuB,GAChDC,IAAUrD,QAAKsD,UAAWH,KAAIH,MAC9BO,IAAUvD,QAAKwD,UAAWL,KAAIM;AAC9Bd,kBAAST,MAAAxD,QAAe,GAAGyE,KAAIzE,KAAA,MAC/BiE,UAAST,MAAAvD,SAAgB,GAAGwE,KAAIxE,MAAA,MAChCqB,QAAKwC,aAAAkB,aAA2Bf,WAAWU,GAAGE,CAAC;AAAA,MAAA;AAAA,IAAC;AAGpDnB,eAAWpC,OAAK;AAAA,EAAA,GACjBlC,QAAAwB,cAAAxB,QAAAmB,QAAAnB,QAAAsE,YAAAtE,QAAAuE,MAAAA,KAAAvE,EAAA,EAAA;AAtCH,QAAA6F,kBAAwBtB;AAwCvB,MAEGxE,MAAK+F,UAAA;AAAAC,QAAAA;AAAA,WAAA/F,EAAA,EAAA,MAAAG,OAAAC,IAAA,2BAAA,KACA2F,MAAA;AAAA,MAAAC,gBAAA;AAAA,QAAAC,WAAA;AAAA,QAAAC,aAAA3E;AAAAA,QAAA4E,QAAA5E;AAAAA,QAAA6E,WAAA7E;AAAAA,MAAAA;AAAAA,IAAA,GAONvB,QAAA+F,OAAAA,MAAA/F,EAAA,EAAA,GAPM+F;AAAAA,EAAAA;AAONA,MAAAA;AAAA,SAAA/F,EAAAsE,EAAAA,MAAAA,cAAAtE,UAAA8D,iBAAA9D,EAAA,EAAA,MAAA6F,mBAGIE,KAAA;AAAA,IAAAC,gBAAA;AAAA,MAAAC,WAAA;AAAA,MAAAC,aAGUL;AAAAA,MAAeM,QACpB7B;AAAAA,MAAU8B,WACPtC;AAAAA,IAAAA;AAAAA,EAAa,GAE3B9D,QAAAsE,YAAAtE,QAAA8D,eAAA9D,QAAA6F,iBAAA7F,QAAA+F,MAAAA,KAAA/F,EAAA,EAAA,GAPM+F;AAON;AClLH,MAAM/E,UAAQC,6BAAc,cAAc;AAYnC,SAAAoF,aAAAtG,OAAA;AAAA,QAAAC,IAAAC,qBAAAA,EAAA,EAAA,GAKLkB,SAAeC,WAAAA,kBACf,CAAAkF,YAAAC,aAAA,IAAoC7E,MAAAA,WAAc,GAClD,CAAAF,cAAAC,eAAA,IAAwCC,mBAAiC;AAAC,MAAAxB,IAAAI;AAAAN,IAAA,CAAA,MAAAmB,UAAAnB,EAAAD,CAAAA,MAAAA,MAAA4B,YAAA3B,EAAAD,CAAAA,MAAAA,MAAA6B,WAGxE1B,KAAAA,MACEuB,gBACE1B,MAAK4B,WACD5B,MAAK4B,SAAAE,UACLC,uBAAAC,UAAsBZ,QAAQpB,MAAK6B,OAAQ,CACjD,GACFtB,KAAA,CAACa,QAAQpB,MAAK6B,SAAU7B,MAAK4B,QAAA,GAAU3B,OAAAmB,QAAAnB,EAAA,CAAA,IAAAD,MAAA4B,UAAA3B,EAAA,CAAA,IAAAD,MAAA6B,SAAA5B,OAAAE,IAAAF,OAAAM,OAAAJ,KAAAF,EAAA,CAAA,GAAAM,KAAAN,EAAA,CAAA,IAPzCgC,MAAAA,UACE9B,IAMAI,EACF;AAAC2B,MAAAA;AAAAjC,IAAA,CAAA,MAAAwB,gBAAAxB,EAAA,CAAA,MAAAmB,UAAAnB,EAAA,CAAA,MAAAD,MAAA6B,WAGCK,KAAAC,CAAA,UAAA;AACEsE,UAAAA,eAAqBvC,eAAAA,0BAAA5B,IAA8BlB,MAAM;AAErD,QAAA,CAACqF,gBAAY,CAAKhF;AAAY;AAG7Be,UAAAA,eAAAA,GACLL,MAAKwC,aAAA+B,aAA2B,QAChCrE,eAAAA,2BAAAE,IAA+BnB,QAAQpB,MAAK6B,OAAQ;AACpD,UAAA8E,cAAoBlF,aAAY8D,sBAAAA,GAChChH,SAAeoI,YAAWf,KAC1B9E,SAAe6F,YAAW7F,QAC1B8F,IAAUzE,MAAK0E,OACfC,MAAYC,KAAAC,IAASzI,SAASqI,CAAC;AAE3B5G,QAAAA,MAAK6B,YAAaT,OAAMpC,SAAY,CAAA,MAE7B8H,MAAMhG,SAAU,IAEzBiC,iDAAAR,IAAsCnB,QAD3B,KAC2C,IAGtD2B,eAAAR,kCAAAA,IAAsCnB,QAD3B,QAC2C,IAEpDqF,iBAAiBzG,MAAK6B,SAAQ;AAChCM,YAAKwC,aAAA+B,aAA2B;AAAM;AAAA,IAAA;AAGxCF,oBAAkB;AAAA,EAAA,GACnBvG,OAAAwB,cAAAxB,OAAAmB,QAAAnB,EAAA,CAAA,IAAAD,MAAA6B,SAAA5B,OAAAiC,MAAAA,KAAAjC,EAAA,CAAA;AA9BH,QAAAgH,iBAAuB/E;AAgCtB8B,MAAAA;AAAA/D,IAAA,CAAA,MAAAG,OAAAC,IAAA,2BAAA,KAEmC2D,KAAAA,MAAA;AAClCwC,oBAAmB;AAAA,EAAA,GACpBvG,OAAA+D,MAAAA,KAAA/D,EAAA,CAAA;AAFD,QAAAiH,kBAAwBlD;AAElBQ,MAAAA;AAAAvE,YAAAmB,UAAAnB,EAAAD,EAAAA,MAAAA,MAAA6B,WAGJ2C,KAAAP,CAAA,YAAA;AACMC,6CAAA5B,IAA8BlB,MAAM,MACtCH,QAAM,uBAAuBjB,MAAK6B,OAAQ,GAC1CM,QAAKK,eACLL,GAAAA,QAAKM,gBAAiB,GACtB+D,gBAAmB;AAAA,EAAA,GAEtBvG,QAAAmB,QAAAnB,EAAA,EAAA,IAAAD,MAAA6B,SAAA5B,QAAAuE,MAAAA,KAAAvE,EAAA,EAAA;AARH,QAAAkH,aAAmB3C;AAUlBwB,MAAAA;AAAA/F,IAAAmB,EAAAA,MAAAA,UAAAnB,UAAAsG,cAGCP,KAAAO,cAAcnF,OAAMpC,SAAiBqD,CAAAA,MAAAA,eAAAC,2BAAAA,IAA+BlB,MAAM,GAACnB,QAAAmB,QAAAnB,QAAAsG,YAAAtG,QAAA+F,MAAAA,KAAA/F,EAAA,EAAA;AAD7E,QAAAmH,2BACEpB;AAA2EqB,MAAAA;AAAApH,IAAAmB,EAAAA,MAAAA,UAAAnB,UAAAsG,cAE3Ec,KAAAd,cACAnF,OAAMpC,SAAUoC,OAAMpC,SAAAG,UAAoB,MACxCkD,eAAAA,2BAAAC,IAA+BlB,MAAM,GAACnB,QAAAmB,QAAAnB,QAAAsG,YAAAtG,QAAAoH,MAAAA,KAAApH,EAAA,EAAA;AAH1CqH,QAAAA,0BACED,IAGFvE,eAAqBC,iDAAAT,IAAsClB,MAAM,GAEjEmG,oBACEH,4BACCb,cAAU,CACRa,4BAAwB,CACxBE,2BACDxE,iBAAiB,OACrB0E,uBACEF,2BACCf,cAAU,CACRa,4BAAwB,CACxBE,2BACDxE,iBAAiB;AAAS,MAE1B9C,MAAK+F,UAAA;AAAA0B,QAAAA;AAAA,WAAAxH,EAAA,EAAA,MAAAG,OAAAC,IAAA,2BAAA,KACAoH,MAAA;AAAA,MAAAC,gBAAA;AAAA,QAAAC,YAAAnG;AAAAA,QAAAoG,aAAApG;AAAAA,QAAAqG,QAAArG;AAAAA,MAAA;AAAA,MAAA+F,mBAAA;AAAA,MAAAC,sBAAA;AAAA,IAAA,GAQNvH,QAAAwH,OAAAA,MAAAxH,EAAA,EAAA,GARMwH;AAAAA,EAAAA;AAQNA,MAAAA;AAAAxH,IAAAgH,EAAAA,MAAAA,kBAAAhH,UAAAkH,cAIeM,KAAA;AAAA,IAAAE,YACFV;AAAAA,IAAcW,aACbV;AAAAA,IAAeW,QACpBV;AAAAA,EACTlH,GAAAA,QAAAgH,gBAAAhH,QAAAkH,YAAAlH,QAAAwH,MAAAA,KAAAxH,EAAA,EAAA;AAAA6H,MAAAA;AAAA,SAAA7H,EAAAuH,EAAAA,MAAAA,wBAAAvH,UAAAsH,qBAAAtH,EAAA,EAAA,MAAAwH,MALIK,KAAA;AAAA,IAAAJ,gBACWD;AAAAA,IAIfF;AAAAA,IAAAC;AAAAA,EAAAA,GAGFvH,QAAAuH,sBAAAvH,QAAAsH,mBAAAtH,QAAAwH,IAAAxH,QAAA6H,MAAAA,KAAA7H,EAAA,EAAA,GARM6H;AAQN;ACjGW5G,6BAAc,oBAAoB;AAAA,MAE1C6G,oBAA0C,CAAE,GAkB5CC,mBAAmB;AAAA,EAACC,SAAS;AAAc,GAMpCC,UAA2CA,CAAC;AAAA,EACvDC;AAAAA,EACAnJ;AAAAA,EACA6C;AAAAA,EACAuG;AAAAA,EACArC;AAAAA,EACAsC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AACF,MAAM;AACErH,QAAAA,SAASC,WAAAA,kBACTqH,WAAWC,WAAAA,YAAAA,GACX/G,WAAWL,aAA8B,IAAI,GAC7CqH,uBAAuBrH,MAAAA,OAAO,IAAI,GAClCsH,UACHH,YAAYtH,OAAO5B,aAAasJ,MAAAA,MAAMC,YAAY3H,OAAO5B,SAAS,KACnE,IACIwJ,YAAY1C,aAAa;AAAA,IAACzE;AAAAA,IAASD;AAAAA,IAAUmE;AAAAA,EAAAA,CAAS,GACtDG,YAAY/E,aAAa;AAAA,IAACU;AAAAA,IAASD;AAAAA,IAAUmE;AAAAA,EAAAA,CAAS,GAEtD3H,QAAQ6K,MACZ,QAAA,MACEC,8BACE,CAACrH,OAAO,GACRuG,YAAYxJ,MAAMuK,MAClBC,eAAAA,qBAAqB9G,IAAIlB,MAAM,CACjC,EAAE,CAAC,GACL,CAACA,QAAQS,SAASuG,YAAYxJ,MAAMuK,IAAI,CAC1C;AAEA,MAAIE,gBAAgBrK,UAEhBsK;AAEEC,QAAAA,YAAkBN,MAAQ,QAAA,MAAM,CAAC;AAAA,IAACvK,MAAMmD,QAAQnD;AAAAA,EAAAA,CAAK,GAAG,CAACmD,OAAO,CAAC;AAEnE,MAAA,OAAOA,QAAQrB,SAAU;AACrB,UAAA,IAAIgJ,MAAM,2CAA2C;AAGzD,MAAA,OAAO3H,QAAQnD,QAAS;AACpB,UAAA,IAAI8K,MAAM,0CAA0C;AAIxDpI,MAAAA,OAAOqI,SAAS5H,OAAO,GAAG;AAC5B,UAAMpD,OAAOsD,WAAAA,YAAYkB,SAAS7B,QAAQS,OAAO,GAC3C,CAACjD,KAAK,IAAI8K,MAAAA,OAAOC,KAAKvI,QAAQ3C,MAAM;AAAA,MAACmL,OAAO;AAAA,IAAE,CAAA,GAC9CC,aAAazB,YAAY0B,cAAcjL,KAC1C2B,CAAUA,UAAAA,MAAM2I,SAAStH,QAAQrB,KACpC;AACA,QAAI,CAACqJ;AACG,YAAA,IAAIL,MAAM,8CAA8C;AAE5DO,QAAAA,MAAAA,QAAaC,UAAUpL,KAAK,GAAG;AACjC,YAAMqL,UAAgB,CACpB;AAAA,QAACvL,MAAME,MAAMF;AAAAA,SACb,YACA;AAAA,QAACA,MAAMmD,QAAQnD;AAAAA,MAAAA,CAAK;AAElBwL,aAIFzJ,2BAAAA,KAAC,QAAK,EAAA,GAAI0H,YAEPnJ,UAAAA;AAAAA,QAAAA;AAAAA,QACAyB,2BAAA,KAAA,QAAA,EACC,WAAW,CAACsF,UACZ,WAAU,oBACV,eAAY,oBACZ,KAAK6C,sBAEL,OAAOZ,kBACP,iBAAiB,IAEhBM,UAAAA;AAAAA,UAAAA,eACCA,YAAY;AAAA,YACV6B,aAAapC;AAAAA;AAAAA,YACb/I,UAAWoL,2BAAA,IAAA,qBAAA,EAAoB,MAAgB,CAAA;AAAA,YAC/CC,kBAAkBzB;AAAAA,YAClBC;AAAAA,YACApK,MAAMwL;AAAAA,YACNJ;AAAAA,YACAnB;AAAAA,YACA4B,MAAMT;AAAAA,YACNzL;AAAAA,UAAAA,CACD;AAAA,UACF,CAACkK,eAAgB8B,2BAAAA,IAAA,qBAAA,EAAoB,MAAgB,CAAA;AAAA,QAAA,EAAA,GAhBjDvI,QAAQnD,IAiBf;AAAA,MAAA,GACF;AAAA,IAAA;AAGE,UAAA,IAAI8K,MAAM,kBAAkB;AAAA,EAAA;AAKpC,MAAI3H,QAAQrB,UAAU4H,YAAYxJ,MAAMuK,MAAM;AAChC,gBAAA;AACZ,UAAMoB,aAAa,cAAc1I,SAI3BwC,QAAS,WAAWxC,WAAWA,QAAQwC,SAAU;AACvDiF,gBAAY,8CAA8CjF,KAAK;AAC/D,UAAMmG,iBAAiBpC,YAAYqC,OAAO5L,KACvC6L,CAASA,SAAAA,KAAKtM,UAAUiG,KAC3B;AACImE,mBAAegC,mBACjBnB,gBAAgBb,YAAY;AAAA,MAC1B5J,OAAOiD;AAAAA,MACP7C;AAAAA,MACA6J;AAAAA,MACAH;AAAAA,MACAtK,OAAOiG;AAAAA,MACP5F,MAAM8K;AAAAA,MACNM,YAAYW;AAAAA,MACZH,kBAAkBzI;AAAAA,IAAAA,CACnB;AAEC+I,QAAAA;AAEAJ,QAAAA,eACE,OAAO1I,QAAQ8I,SAAU,aAC3BA,QAAQ9I,QAAQ8I,QAElBrB,aAAa,8BAA8BzH,QAAQ+I,QAAQ,uBAAuBD,SAAS,CAAC,KAG1FvJ,OAAOyJ,YAAYzM,KAAK,KAAKmM,cAAc1I,QAAQ+I,UAAU;AACzDE,YAAAA,WAAW1C,YAAY2C,MAAMlM,KAChC6L,YAASA,OAAKtM,UAAUyD,QAAQ+I,QACnC;AACIrC,wBAAkBuC,aACpBzB,gBAAgBd,eAAe;AAAA,QAC7B3J,OAAOR;AAAAA,QACPY,UAAUqK;AAAAA,QACVR;AAAAA,QACAH;AAAAA,QACAtK,OAAOyD,QAAQ+I;AAAAA,QACfnM,MAAM8K;AAAAA,QACNM,YAAYiB;AAAAA,QACZH,OAAOvM,MAAMuM,SAAS;AAAA,QACtBN,kBAAkBzI;AAAAA,MAAAA,CACnB;AAAA,IAAA;AAICoJ,UAAAA,cAA8CC,OAAOC,eACzD;AAAA,MACElM,UAAUqK;AAAAA,MACVgB,kBAAkBzI;AAAAA,MAClBiH;AAAAA,MACA8B;AAAAA,MACAC,UAAUL,aAAa1I,QAAQ+I,WAAWpJ;AAAAA,MAC1C/C,MAAM8K;AAAAA,MACNb;AAAAA,MACArE;AAAAA,MACAwF,YAAYzB,YAAYxJ;AAAAA,MACxBR;AAAAA,OAEF,QACA;AAAA,MACE+M,YAAY;AAAA,MACZ7I,MAAM;AACI8I,eAAAA,QAAAA,KACN,0DACF,GACOhD,YAAYxJ;AAAAA,MAAAA;AAAAA,IAGzB,CAAA,GAEMyM,yBAAyBhD,cAC3BA,YAAY2C,WAA+B,IAC3ChM;AAGF,WAAAyB,2BAAA,KAAC,SAEC,GAAI0H,YACJ,WACA,YACA,GAAIa,UAAUtB,gBAEbsB,UAAAA;AAAAA,MAAUzB,UAAAA,oBAAqB6C,2BAAAA,IAAA,eAAA,CAAA,CAAgB,IAAG;AAAA,MAClDA,2BAAA,IAAA,OAAA,EAAI,KAAKxI,UAAWyJ,UAAuB,wBAAA;AAAA,MAC3CrC,UAAUxB,uBAAwB4C,2BAAAA,IAAA,eAAA,CAAgB,CAAA,IAAG;AAAA,IAAA,EAAA,GARjDvI,QAAQnD,IASf;AAAA,EAAA;AAIEmL,QAAAA,eAAazB,YAAYkD,aAAazM,KACzC2B,aAAUA,QAAM2I,SAAStH,QAAQrB,KACpC;AAEA,MAAI,CAACqJ;AACH,UAAM,IAAIL,MACR,yDAAyD3H,QAAQrB,KAAK,EACxE;AAOF8I,cAAY;AAEZ,QAAM1K,UAAQsK,eAAAA,eACZ,CAACrH,OAAO,GACRuG,YAAYxJ,MAAMuK,MAClBC,eAAqB9G,qBAAAA,IAAIlB,MAAM,CACjC,EAAE,CAAC;AAECmK,MAAAA;AAEJ,MAAIlD,aAAa;AACTmD,UAAAA,SAAyCP,OAAOC,eACpD;AAAA,MACElM,UAAWoL,2BAAA,IAAA,oBAAA,EAAmB,MAAgB,CAAA;AAAA,MAC9CC,kBAAkBzI;AAAAA,MAClBiH;AAAAA,MACApK,MAAM8K;AAAAA,MACNM,YAAAA;AAAAA,MACAnB;AAAAA,MACAtK,OAAOQ;AAAAA,OAET,QACA;AAAA,MACEuM,YAAY;AAAA,MACZ7I,MAAM;AACI8I,eAAAA,QAAAA,KACN,0DACF,GACOvB;AAAAA,MAAAA;AAAAA,IACT,CAEJ;AACA0B,6BAAyBlD,YAAYmD,MAA0B;AAAA,EAAA;AAI/D,SAAA/K,gCAAC,OAEC,EAAA,GAAI0H,YACJ,cACIa,UAAUtB,gBACd,GAAIxB,UAAUD,gBAEb+C,UAAAA;AAAAA,IAAUzB,UAAAA,oBAAqB6C,2BAAAA,IAAA,eAAA,CAAA,CAAgB,IAAG;AAAA,IAClDpL;AAAAA,IACDoL,2BAAAA,IAAC,OAAI,EAAA,KAAKxI,UAAU,iBAAiB,IAClC2J,UAGC,0BAAAnB,2BAAAA,IAAC,oBAAmB,EAAA,MAAA,CACrB,EACH,CAAA;AAAA,IACCpB,UAAUxB,uBAAwB4C,2BAAAA,IAAA,eAAA,CAAgB,CAAA,IAAG;AAAA,EAAA,EAAA,GAfjDvI,QAAQnD,IAgBf;AAEJ;AAEAwJ,QAAQuD,cAAc;ACzStB,MAAMxK,UAAQC,eAAAA,cAAc,iBAAiB,GAEvCwK,cAAwB,CAAE,GAmBnBC,OAAQ3L,CAAqB,UAAA;AAClC,QAAA;AAAA,IACJ4L;AAAAA,IACAzD;AAAAA,IACAnJ;AAAAA,IACA6M;AAAAA,IACAzD;AAAAA,IACAE;AAAAA,IACAwD;AAAAA,IACAC;AAAAA,EACE/L,IAAAA,OACEgM,UAAUzK,MAAAA,OAAoB,IAAI,GAClC0K,qBAAqBC,eAAAA,yBACrBC,gBAAgBxD,WAAAA,YAAY,GAC5B,CAACE,SAASuD,UAAU,IAAIzK,MAAAA,SAAS,EAAK,GACtC,CAAC+G,UAAU2D,WAAW,IAAI1K,eAAS,EAAK,GACxC/C,QAAQI,SAASgB,MAAMsM,QACvB7N,OAAawK,MAAAA,QACjB,MAAOrK,QAAQ,CAAC;AAAA,IAACF,MAAME,OAAOF;AAAAA,KAAO,YAAY;AAAA,IAACA,MAAMmN,KAAKnN;AAAAA,EAAAA,CAAK,IAAI,IACtE,CAACE,OAAOiN,KAAKnN,IAAI,CACnB,GACM6N,kBAAkBtD,cACtB,MAAMb,YAAYoE,WAAWC,IAAKC,CAAAA,QAAQA,IAAItO,KAAK,GACnD,CAACgK,YAAYoE,UAAU,CACzB,GACMG,QAAkB1D,MACtB,QAAA,MACE2D,uBACGf,KAAKc,SAASjB,aAAamB,OAAQC,CAAAA,SAClCP,gBAAgBQ,SAASD,IAAI,CAC/B,CACF,GACF,CAACP,iBAAiBV,KAAKc,KAAK,CAC9B,GACMK,kBAAkB/N,MAAMC,QAAQ2M,KAAKc,KAAK,IAAId,KAAKc,QAAQjB,aAC3DvB,cAAclB,MAAAA,QAClB,MACE+D,gBACGP,IACEK,YACC,CAACP,gBAAgBQ,SAASD,MAAI,KAC9BlO,OAAOqO,UAAUpO,KAAMqO,CAAQA,QAAAA,IAAIxO,SAASoO,MAAI,CACpD,EACCD,OAAOM,OAAO,GACnB,CAACH,iBAAiBpO,OAAO2N,eAAe,CAC1C,GAEMa,+BAA+BjD,YAAYhL,SAAS,KAAKgN;AAE/DlK,QAAAA,UAAU,MAAM;AACd,QAAI,CAACmL,8BAA8B;AACjChB,iBAAW,EAAK;AAChB;AAAA,IAAA;AAEIiB,UAAAA,MAAMC,eAAAA,mBAAmBC,aAAatB,kBAAkB;AAE5DoB,WACAxN,iBAAAA,QAAQwN,IAAIzN,MAAMnB,MAAMA,IAAI,KAC5B6O,eAAAA,mBAAmBE,qBAAqBvB,kBAAkB,KAE1DwB,MAAAA,gBAAgB,MAAM;AACpBrB,iBAAW,EAAI;AAAA,IAAA,CAChB;AAAA,EAEF,GAAA,CAACgB,8BAA8B3O,MAAMwN,kBAAkB,CAAC;AAGrDyB,QAAAA,uBAAuBC,MAAAA,YAAY,MAAM;AAC7C,QAAI,CAACP;AACH;AAEFnM,YAAM,wCAAwC;AACxC2M,UAAAA,eAAeC,OAAON,aAAa;AACzC,QAAI,CAACK,cAAc;AACjBvB,kBAAY,EAAK;AACjB;AAAA,IAAA;AAEEuB,QAAAA,gBAAgBA,aAAaE,aAAa,GAAG;AACzCC,YAAAA,QAAQH,aAAaI,WAAW,CAAC;AACnChC,cAAQlK,WAAWiM,MAAME,eAAejC,QAAQlK,OAAO,IACzDuK,YAAY,EAAI,IAEhBA,YAAY,EAAK;AAAA,IAErB;AACEA,kBAAY,EAAK;AAAA,EAAA,GAElB,CAACe,4BAA4B,CAAC;AAEjCnL,QAAAA,UAAU,MAAM;AACd,QAAI,CAACmL;AACH;AAGF,UAAMc,SAAStC,YAAYuC,GAAG,QAAQ,MAAM;AAC/B,iBAAA,EAAK,GAChB9B,YAAY,EAAK;AAAA,IAClB,CAAA,GAEK+B,UAAUxC,YAAYuC,GAAG,SAAS,MAAM;AACtCd,YAAAA,QAAMC,eAAAA,mBAAmBC,aAAatB,kBAAkB;AAE5DoB,eACAxN,iBAAAA,QAAQwN,MAAIzN,MAAMnB,MAAMA,IAAI,KAC5B6O,kCAAmBE,qBAAqBvB,kBAAkB,KAE1DG,WAAW,EAAI,GAEjBsB,qBAAqB;AAAA,IAAA,CACtB,GAEKW,cAAczC,YAAYuC,GAAG,aAAchM,CAAU,UAAA;AAEvDA,YAAM3C,aACNK,yBAAQsC,MAAM3C,UAAUI,MAAMnB,MAAMA,IAAI,KACxC6O,kCAAmBE,qBAAqBvB,kBAAkB,IAE1DG,WAAW,EAAI,IAEfA,WAAW,EAAK,GAElBsB,qBAAqB;AAAA,IAAA,CACtB;AAED,WAAO,MAAM;AACXQ,aAAOI,eACPF,QAAQE,YAAY,GACpBD,YAAYC,YAAY;AAAA,IAC1B;AAAA,EACC,GAAA,CACD1C,aACAnN,MACAwN,oBACAyB,sBACAN,4BAA4B,CAC7B,GAEDnL,gBAAU,MAAMyL,wBAAwB,CAACA,oBAAoB,CAAC;AAExDa,QAAAA,UAAUtF,MAAAA,QAAQ,MAAM;AAC5B,QAAIuF,mBAAmBxP;AAEnByP,QAAAA,MAAAA,KAAKC,OAAO7C,IAAI,KAAKA,KAAKrL,UAAU4H,YAAYuG,KAAKxF,SACvDwD,MAAMiC,QAAS9B,CAAS,WAAA;AACtB,YAAMjD,aAAazB,YAAYoE,WAAW3N,KACvC6N,CAAQA,UAAAA,MAAItO,UAAU0O,MACzB;AACA,UAAIjD,cAAciC,iBAAiB;AAC3BN,cAAAA,SACJP,OAAOC,eACL;AAAA,UACElM,UAAUwP;AAAAA,UACVnE,kBAAkB2B;AAAAA,UAClBnD;AAAAA,UACApK;AAAAA,UACAiK;AAAAA,UACAmB;AAAAA,UACAzL,OAAO0O;AAAAA,WAET,QACA;AAAA,UACE3B,YAAY;AAAA,UACZ7I,MAAM;AACI8I,mBAAAA,QAAAA,KACN,0DACF,GACOvB;AAAAA,UAAAA;AAAAA,QACT,CAEJ;AACF2E,2BAAmB1C,gBACjBN,MACF;AAAA,MAAA;AAAA,IACF,CACD,GAEG5M,SAASuL,YAAYhL,SAAS,KAChCgL,YAAYyE,QAASC,CAAe,eAAA;AAC5BhF,YAAAA,eAAazB,YAAY+B,YAAYtL,KACxCiQ,OAAMA,EAAE3F,SAAS0F,WAAWrO,KAC/B;AACIqJ,UAAAA;AACF,YAAIkC,kBAAkB;AACdP,gBAAAA,WACJP,OAAOC,eACL;AAAA,YACEtM;AAAAA,YACAI,UAAUwP;AAAAA,YACVnE,kBAAkB2B;AAAAA,YAClBnD;AAAAA,YACApK;AAAAA,YACAiK;AAAAA,YACAmB,YAAAA;AAAAA,YACAzL,OAAOyQ;AAAAA,aAET,QACA;AAAA,YACE1D,YAAY;AAAA,YACZ7I,MAAM;AACI8I,qBAAAA,QAAAA,KACN,0DACF,GACOvB;AAAAA,YAAAA;AAAAA,UACT,CAEJ;AAEF2E,4DACG,QAAK,EAAA,KAAKxC,SACRD,UAAAA,iBAAiBP,QAAoC,GACxD;AAAA,QAEJ;AACEgD,6BAAoBpE,2BAAA,IAAA,QAAA,EAAK,KAAK4B,SAAUwC,UAAiB,kBAAA;AAAA,IAAA,CAG9D,GAEC5P,SAAS0J,cAAa;AAClBlJ,YAAAA,QAAQR,MAAMI,SAASH,KAAMkQ,YAAWA,OAAOrQ,SAASmN,KAAKnN,IAAI;AACvE,UAAIU,OAAO;AAEHoM,cAAAA,WACJP,OAAOC,eACL;AAAA,UACEf;AAAAA,UACAnL,gEALqBwP,UAAiB,iBAAA,CAAA;AAAA,UAMtCnE,kBAAkB2B;AAAAA,UAClBnD;AAAAA,UACApK;AAAAA,UACAoL,YAAYzB,YAAYuG;AAAAA,UACxBjG;AAAAA,UACAtK,OAAOgB;AAAAA,WAET,QACA;AAAA,UACE+L,YAAY;AAAA,UACZ7I,MAAM;AACI8I,mBAAAA,QAAAA,KACN,0DACF,GACOhD,YAAYuG;AAAAA,UAAAA;AAAAA,QACrB,CAEJ;AACFH,2BAAmBlG,YAAYkD,QAA+B;AAAA,MAAA;AAAA,IAChE;AAGGgD,WAAAA;AAAAA,EAAAA,GACN,CACDrE,aACAvL,OACAI,UACA6J,SACAgD,MACAc,OACAlO,MACAsN,kBACAzD,aACAwD,iBACA1D,YAAY+B,aACZ/B,YAAYoE,YACZpE,YAAYuG,MACZjG,QAAQ,CACT;AACD,SAAOO,MAAAA,QACL,MACEmB,+BAAC,aAAyBjC,YAAY,KAAK6D,SACxCuC,UADQ1C,QAAAA,GAAAA,KAAKnN,IAEhB,GAEF,CAACmN,MAAM1D,YAAYoG,OAAO,CAC5B;AACF;AAEA5C,KAAKF,cAAc;AC/TnB,MAAMxK,UAAQC,6BAAc,oBAAoB;AAMhC8N,SAAAA,kBACdpD,aACAK,oBACAgD,oBACwD;AAClDC,QAAAA,kBAAkB,CAAC,SAAS,OAAO,SAAS,UAAU,KAAK,GAC3DC,gBAAgBF,sBAAsB,CAAC;AAC7C,SAAO,SAAqB7N,QAA+C;AACzEA,WAAAA,OAAOgO,iBAAkBjN,CAA+C,UAAA;AAEtE8I,aAAOoE,KAAKF,aAAa,EAAEP,QAASU,CAAQ,QAAA;AAC1C,YAAIA,QAAQ;AACCC,qBAAAA,UAAUJ,cAAcG,GAAG,GAAG;AACnCJ,gBAAAA,gBAAgBnC,SAASwC,MAAM;AACjC,oBAAM,IAAI/F,MAAM,cAAc+F,MAAM,eAAe;AAErD,gBAAIC,uBAASD,QAAQpN,MAAMsN,WAAW,GAAG;AACvCtN,oBAAMK,eAAe;AACfkN,oBAAAA,eAAeP,cAAcG,GAAG;AACtC,kBAAII,cAAc;AACV5C,sBAAAA,OAAO4C,aAAaH,MAAM;AAChCtO,wBAAM,UAAUsO,MAAM,cAAczC,IAAI,EAAE,GAC1ClB,YAAY+D,KAAK;AAAA,kBACfrF,MAAM;AAAA,kBACNsF,eAAe;AAAA,oBACbtF,MAAM;AAAA,oBACNuF,WAAW/C;AAAAA,kBACb;AAAA,kBACA1L;AAAAA,gBAAAA,CACD;AAAA,cAAA;AAAA,YACH;AAAA,UACF;AAGJ,YAAIkO,QAAQ;AACCC,qBAAAA,UAAUJ,cAAcG,GAAG,GAAG;AACnCJ,gBAAAA,gBAAgBnC,SAASwC,MAAM;AACjC,oBAAM,IAAI/F,MAAM,cAAc+F,MAAM,eAAe;AAErD,gBAAIC,uBAASD,QAAQpN,MAAMsN,WAAW,GAAG;AACjCK,oBAAAA,kBAAkBX,cAAcG,GAAG;AACzC,kBAAIQ,iBAAiB;AACbC,sBAAAA,UAAUD,gBAAgBP,MAAM;AACtCQ,wBAAQ5N,OAAO8J,kBAAkB;AAAA,cAAA;AAAA,YACnC;AAAA,UACF;AAAA,MACF,CAEH;AAAA,IAAA,GAEI7K;AAAAA,EACT;AACF;AC7DO,SAAS4O,yBAAyB;AAAA,EACvCpE;AAAAA,EACAqE;AAAAA,EACAC;AAKF,GAAG;AACD,QAAMC,gBAAgBF,YAAYG;AAElCH,SAAAA,YAAYG,QAASC,CAAkB,OAAA;AACrCF,kBAAcE,EAAE,GAGd,CAACzE,YAAY0E,YAAAA,EAAcC,QAAQ;AAAA,MAAC,aAAa;AAAA,IAAY,CAAA,KAC7DF,GAAG/F,SAAS,mBAEZ4F,qBAAqBG,EAAE;AAAA,EAAA,GAIpB,MAAM;AACXJ,gBAAYG,QAAQD;AAAAA,EACtB;AACF;AC0CA,MAAMlP,QAAQC,eAAAA,cAAc,oBAAoB,GAE1CsP,oBAAmC;AAAA,EACvC5P,UAAU;AAAA,EACVN,YAAY;AAAA,EACZmQ,eAAe;AAAA,EACftL,MAAM;AAAA,EACNuL,OAAO;AACT,GAmDaC,uBAAuBC,MAAAA,WAGlC,SAA8B5Q,OAAO6Q,cAAc;AAC7C,QAAA;AAAA,IACJC;AAAAA,IACA5C;AAAAA,IACAE;AAAAA,IACA2C;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACApF;AAAAA,IACA1D;AAAAA,IACAC;AAAAA,IACAwD;AAAAA,IACAvD;AAAAA,IACA6I;AAAAA,IACA5I;AAAAA,IACAhJ,WAAW6R;AAAAA,IACXC;AAAAA,IACA7I;AAAAA,IACA,GAAG8I;AAAAA,EACDvR,IAAAA,OAEEiM,qBAAqBC,eAAAA,sBAAAA,GACrBsF,MAAMjQ,aAA8B,IAAI,GACxC,CAACkQ,iBAAiBC,kBAAkB,IAAI/P,MAAAA,SAC5C,IACF,GACM,CAACgQ,iBAAiBC,kBAAkB,IAAIjQ,eAAS,EAAK,GACtD,CAACkQ,sBAAsBC,wBAAwB,IAAInQ,MAAAA,SAEvD,CAAA,CAAE;AAIFkP,QAAAA,oBAAAA,cACA,MAAMW,IAAI1P,OACZ;AAEA,QAAMiQ,sBAAsBxQ,MAAAA,OAAO4P,gBAAgB,GAE7CvF,cAAcoG,MAAAA,WAAWC,eAAAA,kBAAkB,GAC3ClM,WAAWmM,MAAAA,YAAYtG,aAAcuG,CAAAA,MACzCA,EAAE5B,QAAQ;AAAA,IAAC,aAAa;AAAA,EAAA,CAAY,CACtC,GACMnI,cAAc8J,MAAAA,YAAYtG,aAAcuG,CAAMA,QAAAA,IAAEC,QAAQC,MAAM,GAC9DpC,cAAcqC,WAAAA,SAAAA,GAEdC,gBAAgBnK,YAAYxJ,MAAMuK;AAKxCF,QAAAA,QAAQ,MAAM;AAERlD,QAAAA;AACF9E,aAAAA,MAAM,+BAA+B,GAC9BgP;AAET,UAAMuC,cAAcxD,kBAClBpD,aACAK,oBACA6E,OACF;AAEM,WAAA,MAAA,0BAA0B,GACzB0B,YAAYvC,WAAW;AAAA,EAAA,GAC7B,CAACrE,aAAakF,SAAS7E,oBAAoBlG,UAAUkK,WAAW,CAAC;AAE9DwC,QAAAA,gBAAgB9E,MACnB+E,YAAAA,CAAAA,WACEtI,2BAAA,IAAA,SAAA,EACKsI,GAAAA,QACJ,UACA,aACA,aACA,gBACA,aACA,aACA,WAEH,CAAA,GACD,CACEtK,aACAK,YACA1C,UACAsC,aACAC,aACAC,gBACAC,WAAW,CAEf,GAEMmK,aAAahF,MAAAA,YAEfiF,CAGG,WAAA;AACCA,QAAAA,OAAO/G,KAAKrL,UAAU,QAAQ;AAC5BqS,UAAAA,WACDzI,2BAAAA,IAAA,MAAA,EACKwI,GAAAA,QACJ,aACA,aACA,kBACA,aACA,iBACA,SAEH,CAAA;AACD,UACExB,qBACAwB,OAAO/G,KAAKiH,eACZF,OAAOtT,KAAKA,SAAS;AAErB,eAEImB,2BAAA,KAAAsS,qBAAA,EAAA,UAAA;AAAA,UAAA3I,+BAAC,UAAK,OAAOoG,mBAAmB,iBAAiB,IAC9CY,+BACH;AAAA,UACCyB;AAAAA,QAAAA,GACH;AAGEG,YAAAA,aAAaJ,OAAO/G,KAAKoH;AAC3BD,aAAAA,eACFH,WAAWG,WAAWE,UAAU;AAAA,QAAClU,UAAU6T;AAAAA,MAAS,CAAA,IAE/CA;AAAAA,IAAAA;AAET,WAAOD,OAAO5T;AAAAA,EAEhB,GAAA,CACE4M,aACA7F,UACAgG,kBACAzD,aACAwD,iBACAsF,mBACAhJ,WAAW,CAEf,GAEM+K,4BAA4BxF,kBAAY,MAAM;AAClD,QAAI0D,gBAAgB;AAClBpQ,YAAM,wBAAwBqC,KAAKC,UAAU8N,cAAc,CAAC,EAAE;AAC9D,YAAM+B,sBAAsB7T,mBAC1B8R,gBACAnI,8BAAe+G,YAAYjR,UAAUuT,aAAa,CACpD;AACA,UAAIa,wBAAwB,MAAM;AAChCnS,cACE,mCAAmCqC,KAAKC,UAAU6P,mBAAmB,CAAC,EACxE;AACMC,cAAAA,aAAaC,eAAAA,aAAaF,qBAAqBnD,WAAW;AAC5DoD,uBACF3P,MAAAA,WAAW6P,OAAOtD,aAAaoD,UAAU,GAGpCpD,YAAYuD,WAAWC,KAAMC,OAAMA,EAAEpJ,SAAS,eAAe,KAChEsB,YAAY+D,KAAK;AAAA,UACfrF,MAAM;AAAA,UACN9K,WAAW4T;AAAAA,QAAAA,CACZ,GAEHnD,YAAYnM;MAAS;AAAA,IAEzB;AAAA,EACF,GACC,CAACyO,eAAe3G,aAAayF,gBAAgBpB,WAAW,CAAC,GAEtDC,uBAAuBvC,kBAC1BgG,CAA0B,cAAA;AACrBxC,QAAAA,oBAAoBA,iBAAiBhS,SAAS,GAAG;AACnD,YAAMyU,iBAA4C,CAAE;AACpDzC,UAAAA,iBAAiBvC,QAASiF,CAAwB,wBAAA;AAChD,cAAMR,eAAaC,eAAAA,aACjBO,oBAAoBrU,WACpByQ,WACF;AACA,YAAI,CAAC6D,MAAAA,MAAWC,QAAQV,YAAU,GAAG;AAC/BQ,8BAAoBG,WACtBH,oBAAoBG,QAAQ;AAAA,YAC1BC,cAAc;AAAA,YACdhB,iBAAiBY;AAAAA,YACjBK,QAAQ;AAAA,UAAA,CACT;AAEH;AAAA,QAAA;AAEEC,YAAAA;AACAR,YAAAA,cACFQ,WAAWC,oCAAqBf,cAAYM,SAAS,GAElDQ,YAAYA,aAAad,gBACzBc,aAAa,QAAQd,eACtB;AACMjV,gBAAAA,QAAQkP,kCAAmB+G,SAASpI,kBAAkB,GACtDqI,oBAAoBC,mCACxBnW,OACA+V,UACA/L,WACF;AACIyL,8BAAoBG,WACtBH,oBAAoBG,QAAQ;AAAA,YAC1BC,cAAcK;AAAAA,YACdrB,iBAAiBY;AAAAA,YACjBK,QAAQ;AAAA,UAAA,CACT;AAAA,QAAA;AAMHC,qBAAa,QACfP,eAAe7U,KAAK;AAAA,UAClB,GAAIoV,YAAYd;AAAAA,UAChBJ,iBAAiBY;AAAAA,QAAAA,CAClB;AAAA,MAAA,CAEJ,GACGD,eAAezU,SAAS,GAAG;AAC7B2S,iCAAyB8B,cAAc;AACvC;AAAA,MAAA;AAAA,IACF;AAEF9B,6BAA0BD,4BAEpBA,uBAAqB1S,SAAS,IACzB,KAGF0S,sBACR;AAAA,KAEH,CAAC5F,oBAAoBkF,kBAAkB/I,aAAa6H,WAAW,CACjE;AAGAhO,QAAAA,UAAU,MAAM;AACd,UAAMuS,UAAU5I,YAAYuC,GAAG,SAAS,MAAM;AAC5C+B,2BAAAA,GACAiD,0BAA0B;AAAA,IAC3B,CAAA,GACKsB,iBAAiB7I,YAAYuC,GAAG,iBAAiB,MAAM;AAC3DyD,yBAAmB,EAAI;AAAA,IACxB,CAAA,GACK8C,iBAAiB9I,YAAYuC,GAAG,iBAAiB,MAAM;AAC3DyD,yBAAmB,EAAK;AAAA,IAAA,CACzB;AAED,WAAO,MAAM;AACX4C,cAAQlG,eACRmG,eAAenG,YAAY,GAC3BoG,eAAepG,YAAY;AAAA,IAC7B;AAAA,EAAA,GACC,CAAC1C,aAAauH,2BAA2BjD,oBAAoB,CAAC,GAGjEjO,gBAAU,MAAM;AACVoP,sBAAkB,CAACM,mBACrBwB,0BAA0B;AAAA,EAE3B,GAAA,CAACxB,iBAAiBN,gBAAgB8B,yBAAyB,CAAC;AAE/D,QAAM,CAACwB,wBAAwBC,yBAAyB,IAAIjT,MAAAA,SAAS,EAAK;AAC1EM,QAAAA,UAAU,MAAM;AACT0S,+BAEHC,0BAA0B,EAAI,GAC9B1E,qBAAqB;AAAA,KAEtB,CAACA,sBAAsByE,sBAAsB,CAAC,GAEjD1S,gBAAU,MAAM;AACTpC,6BAAQsR,kBAAkBY,oBAAoBjQ,OAAO,KACxDoO,wBAEF6B,oBAAoBjQ,UAAUqP;AAAAA,KAC7B,CAACA,kBAAkBjB,oBAAoB,CAAC,GAG3CjO,gBAAU,MAAM;AACd,UAAM4S,WAAW7E,yBAAyB;AAAA,MACxCpE;AAAAA,MACAqE;AAAAA,MACAC;AAAAA,IAAAA,CACD;AACD,WAAO,MAAM2E,SAAS;AAAA,EACrB,GAAA,CAACjJ,aAAaqE,aAAaC,oBAAoB,CAAC;AAG7C4E,QAAAA,aAAanH,kBAChBxL,CAA8D,UAAA;AACzD8O,aACaA,OAAO9O,KAAK,MAEZX,UACbW,MAAMK,eAAe,IAEdL,MAAMsN,YAAYsF,iBAC3BnJ,YAAY+D,KAAK;AAAA,MACfrF,MAAM;AAAA,MACNsF,eAAe;AAAA,QACbtF,MAAM;AAAA,QACN0K,MAAM7S,MAAMsN,YAAYsF;AAAAA,MAC1B;AAAA,MACA3T,QAAQ6O;AAAAA,MACRR,aAAatN;AAAAA,IAAAA,CACd;AAAA,EAAA,GAGL,CAAC8O,QAAQrF,aAAaqE,WAAW,CACnC,GAGMgF,cAActH,MAAAA,YACjBxL,CAAgE,YAAA;AAC/D,UAAM/D,UAAQkP,eAAAA,mBAAmB+G,SAASpI,kBAAkB,GAMtDxN,OALU8V,eAAAA,oBACdnW,SACA6R,YAAYzQ,WACZ4I,WACF,GACsBxI,MAAMnB,QAAQ,CAAE,GAChCyW,gBAAgBlE,UAAU;AAAA,MAAC7O,OAAAA;AAAAA,MAAO/D,OAAAA;AAAAA,MAAOK;AAAAA,MAAM2J;AAAAA,IAAAA,CAAY;AAE7D8M,qBAAiB,CAACjF,YAAYzQ,aAChC2C,QAAMK,eAAe,GAGrBoJ,YAAY+D,KAAK;AAAA,MAACrF,MAAM;AAAA,IAAA,CAAiB,GAEzC6K,QAAQC,QAAQF,aAAa,EAC1BG,KAAMC,CAAW,aAAA;AACV,YAAA,8CAA8CA,QAAM,GAEtD,CAACA,YAAU,CAACA,SAAOC,UACrBtU,MAAM,uDAAuD,GAE7DgP,YAAYuF,WAAWrT,QAAM4S,aAAa,KACjCO,SAAOC,SAChBtF,YAAYwF,eACVC,eAAAA,aAAaJ,SAAOC,QAA+B;AAAA,QACjDnN;AAAAA,MACD,CAAA,CACH,IAEAuN,QAAQvK,KACN,wDACAkK,QACF;AAAA,IAEH,CAAA,EACAM,MAAOC,CACNF,WAAAA,QAAQE,MAAMA,KAAK,GAEZA,MACR,EACAC,QAAQ,MAAM;AACblK,kBAAY+D,KAAK;AAAA,QAACrF,MAAM;AAAA,MAAA,CAAsB;AAAA,IAC/C,CAAA,KACMnI,QAAMsN,YAAYsF,iBAC3BnJ,YAAY+D,KAAK;AAAA,MACfrF,MAAM;AAAA,MACNsF,eAAe;AAAA,QACbtF,MAAM;AAAA,QACN0K,MAAM7S,QAAMsN,YAAYsF;AAAAA,MAC1B;AAAA,MACA3T,QAAQ6O;AAAAA,MACRR,aAAatN;AAAAA,IAAAA,CACd,GAGHlB,MAAM,uDAAuD;AAAA,EAC/D,GACA,CAAC2K,aAAaoF,SAAS/E,oBAAoB7D,aAAa6H,WAAW,CACrE,GAEM8F,gBAAmDpI,kBACtDxL,CAAU,YAAA;AAIT,QAHIiM,WACFA,QAAQjM,OAAK,GAEX,CAACA,QAAM6T,sBAAsB;AACzBxW,YAAAA,YAAY8N,eAAAA,mBAAmBC,aAAatB,kBAAkB;AAEhEzM,oBAAc,SAChBkE,MAAAA,WAAW6P,OAAOtD,aAAavG,aAAOuM,MAAMhG,aAAa,CAAE,CAAA,CAAC,GAC5DA,YAAYnM,SAAS,IAEvB8H,YAAY+D,KAAK;AAAA,QAACrF,MAAM;AAAA,QAAkBnI,OAAAA;AAAAA,MAAAA,CAAM;AAC1C8R,YAAAA,eAAe3G,eAAAA,mBAAmBC,aAAatB,kBAAkB;AAEnEzM,oBAAcyU,gBAChBrI,YAAY+D,KAAK;AAAA,QACfrF,MAAM;AAAA,QACN9K;AAAAA,MAAAA,CACD;AAAA,IAAA;AAAA,EAEL,GAEF,CAACoM,aAAawC,SAASnC,oBAAoBgE,WAAW,CACxD,GAEMiG,cAAcvI,kBACjBxL,CAAwD,YAAA;AACnD+O,eACFA,QAAQ/O,OAAK;AAGTgU,UAAAA,iBAAiBlG,YAAYzQ,YAC/ByQ,YAAYzQ,UAAUI,MAAMnB,KAAK2X,MAAM,GAAG,CAAC,IAC3C5U,QACE6U,aAAaF,iBACdG,WAAKC,WAAWtG,aAAakG,cAAc,IAG5C3U,QACE,CAACgV,GAAGC,YAAY,IAAIH,MAAAA,KAAKI,KAAKzG,aAAa,CAAA,CAAE,GAC7C0G,gBAAgBF,aAAaL,MAAM,GAAG,CAAC,GACvCQ,kBAAkBT,iBACpB/S,MAAAA,KAAKK,OAAOkT,eAAeR,cAAc,IACzC,IACEU,kBAAkBR,aACpB,CAACpG,YAAY6G,YAAYT,UAAU,IACnC;AAEFpG,gBAAYzQ,aAAasU,MAAAA,MAAW/K,YAAYkH,YAAYzQ,SAAS,KAE7CoX,mBAAmBC,oBAC3CnT,MAAAA,WAAWqT,YACT9G,aACAA,YAAY+G,mBAAmB;AAAA,MAACxK,YAAY,CAAA;AAAA,IAAA,CAAG,CACjD,GACAyD,YAAYnM;EAAS,GAGzB,CAACoN,SAASjB,WAAW,CACvB,GAEMgH,eAAkDtJ,MAAAA,YACrDxL,CAAU,YAAA;AACL+L,cACFA,OAAO/L,OAAK,GAETA,QAAM+U,qBAAqB,KAC9BtL,YAAY+D,KAAK;AAAA,MAACrF,MAAM;AAAA,MAAkBnI,OAAAA;AAAAA,IAAAA,CAAM;AAAA,EAAA,GAGpD,CAACyJ,aAAasC,MAAM,CACtB,GAEMiJ,sBAAsBxJ,MAAAA,YACzBxL,CAAsB,YAAA;AACjB4O,qBACFA,cAAc5O,OAAK;AAAA,KAGvB,CAAC4O,aAAa,CAChB,GAkBMqG,oBAAoBzJ,kBAAY,MAAM;AAC1C,QAAI,CAACsC,YAAYzQ;AACf;AAEF,UAAM6X,OAAOtV,WAAAA,YAAYuV,yBAAyBrH,WAAW,GACvD;AAAA,MAACsH;AAAAA,IAAAA,IAAiBF;AAExB,QAAI7F,IAAI1P,YAAYyV;AAClB;AAGF,UAAMC,eADSzV,WAAAA,YAAY0V,UAAUxH,WAAW,EACpB1C,aAAa;AACrC,QAAA,CAACiK,gBAAgBA,aAAa1J,eAAe;AAC/C;AAEI4J,UAAAA,mBAAmBF,aAAaxJ,WAAW,CAAC;AAC9C,QAAA;AACF,YAAM2J,cAAc5V,WAAAA,YAAY6V,WAC9B3H,aACAA,YAAYzQ,SACd;AACA,OACEmY,YAAYE,gBAAgBH,iBAAiBG,eAC7CF,YAAYG,cAAcJ,iBAAiBI,eAE3C7W,MAAM,6CAA6C,GAEnDuW,cAAcO,gBAEdP,GAAAA,aAAaQ,SAASL,WAAW;AAAA,IAAA,QAE7B;AACN1W,YAAM,qDAAqD,GAE3DyC,iBAAWuU,SAAShI,WAAW,GAE3BA,YAAYjR,SAASG,SAAS,KAChCuE,iBAAW6P,OAAOtD,aAAa,CAAC,GAAG,CAAC,CAAC,GAEvCA,YAAYnM,SAAS;AAAA,IAAA;AAAA,EACvB,GACC,CAAC0N,KAAKvB,WAAW,CAAC;AAIrBhO,QAAAA,UAAU,MAAM;AACd,QAAIwP,iBAAiB;AACbyG,YAAAA,mBAAmB,IAAIC,iBAAiBf,iBAAiB;AAC/Dc,aAAAA,iBAAiBE,QAAQ3G,iBAAiB;AAAA,QACxC4G,mBAAmB;AAAA,QACnBlQ,YAAY;AAAA,QACZmQ,eAAe;AAAA,QACfC,WAAW;AAAA,QACXC,SAAS;AAAA,MACV,CAAA,GACM,MAAM;AACXN,yBAAiBO,WAAW;AAAA,MAC9B;AAAA,IAAA;AAAA,EACF,GAEC,CAACrB,mBAAmB3F,eAAe,CAAC;AAEjCiH,QAAAA,gBAAgB/K,kBACnBxL,CAAyC,YAAA;AACpCnC,UAAM2Y,aACR3Y,MAAM2Y,UAAUxW,OAAK,GAElBA,QAAM6T,mBAAAA,KACT/F,YAAYb,eAAejN,OAAK,GAE7BA,QAAM6T,mBAAmB,KAC5BpK,YAAY+D,KAAK;AAAA,MACfrF,MAAM;AAAA,MACNsF,eAAe;AAAA,QACbtF,MAAM;AAAA,QACNsO,eAAe;AAAA,UACbC,KAAK1W,QAAM0W;AAAAA,UACXC,MAAM3W,QAAM2W;AAAAA,UACZC,QAAQ5W,QAAM4W;AAAAA,UACdC,SAAS7W,QAAM6W;AAAAA,UACfC,SAAS9W,QAAM8W;AAAAA,UACfC,UAAU/W,QAAM+W;AAAAA,QAAAA;AAAAA,MAEpB;AAAA,MACA9X,QAAQ6O;AAAAA,MACRR,aAAatN;AAAAA,IAAAA,CACd;AAAA,EAAA,GAGL,CAACnC,OAAO4L,aAAaqE,WAAW,CAClC,GAEMkJ,cAAcxL,MAAAA,YACjBxL,CAAyC,YAAA;AACpCnC,UAAMoZ,WACRpZ,MAAMoZ,QAAQjX,OAAK,GAEhBA,QAAM6T,mBAAAA,KACTpK,YAAY+D,KAAK;AAAA,MACfrF,MAAM;AAAA,MACNsF,eAAe;AAAA,QACbtF,MAAM;AAAA,QACNsO,eAAe;AAAA,UACbC,KAAK1W,QAAM0W;AAAAA,UACXC,MAAM3W,QAAM2W;AAAAA,UACZC,QAAQ5W,QAAM4W;AAAAA,UACdC,SAAS7W,QAAM6W;AAAAA,UACfC,SAAS9W,QAAM8W;AAAAA,UACfC,UAAU/W,QAAM+W;AAAAA,QAAAA;AAAAA,MAEpB;AAAA,MACA9X,QAAQ6O;AAAAA,MACRR,aAAatN;AAAAA,IAAAA,CACd;AAAA,EAAA,GAGL,CAACnC,OAAO4L,aAAaqE,WAAW,CAClC,GAEMoJ,iCAAiCpQ,MAAAA,QAAQ,MAAM;AAEnD,QAAIqI,4BAA4B9P;AAIhC,aAAI8P,4BAA4B,OACvBgI,cAGF,UAAA,CAACC,SAAsBC,aAAoB;AAChDlI,gCAAwBrF,oBAAoBuN,QAAQ;AAAA,MACtD;AAAA,EAAA,GACC,CAACvN,oBAAoBqF,uBAAuB,CAAC,GAE1CmI,WAA8C9L,kBAClD,CAAC,CAAGlP,EAAAA,MAAI,MAAM;AACRib,QAAAA,oCAAqBzJ,YAAYjR,UAAUoJ,WAAW;AACxD,aAAO,CACL;AAAA,QACEzI,QAAQ;AAAA,UACNlB,MAAM,CAAC,GAAG,CAAC;AAAA,UACXF,QAAQ;AAAA,QACV;AAAA,QACAqB,OAAO;AAAA,UACLnB,MAAM,CAAC,GAAG,CAAC;AAAA,UACXF,QAAQ;AAAA,QACV;AAAA,QACAuU,aAAa;AAAA,MAAA,CACd;AAIL,QAAIrU,OAAKU,WAAW;AAClB,aAAO,CAAE;AAEX,UAAMmW,WAASzD,qBAAqBhF,OAAQnC,CAAAA,SAEtCoJ,MAAAA,MAAW/K,YAAY2B,IAAI,IAEzBjM,OAAKU,WAAW,IACX,KAGPiE,MAAAA,KAAKK,OAAOiH,KAAK9K,MAAMnB,MAAMA,MAAI,KACjC2E,MAAAA,KAAKK,OAAOiH,KAAK/K,OAAOlB,MAAMA,MAAI,IAKpCqV,MAAAA,MAAW6F,aAAajP,MAAM;AAAA,MAC5B/K,QAAQ;AAAA,QAAClB,MAAAA;AAAAA,QAAMF,QAAQ;AAAA,MAAC;AAAA,MACxBqB,OAAO;AAAA,QAACnB,MAAAA;AAAAA,QAAMF,QAAQ;AAAA,MAAA;AAAA,IACvB,CAAA,KAAKuV,MAAAA,MAAW/G,SAASrC,MAAMjM,MAAI,CAEvC;AACD,WAAI6W,SAAOnW,SAAS,IACXmW,WAEF,CAAE;AAAA,EAEX,GAAA,CAACrF,aAAa7H,aAAayJ,oBAAoB,CACjD;AAgCA,SA3BA5P,gBAAU,MAAM;AACVH,QAAAA,UAAUC,uBAAYC,UACxBiO,aACAA,WACF,GACAyB,mBAAmBF,IAAI1P,OAAO;AAAA,KAC7B,CAACmO,aAAauB,GAAG,CAAC,GAErBvP,gBAAU,MAAM;AACd,UAAM4L,WAAS9L,WAAAA,YAAY0V,UAAUxH,WAAW,GAE1C5J,YAAYA,MAAM;AACtBuF,kBAAY+D,KAAK;AAAA,QAACrF,MAAM;AAAA,MAAA,CAAU;AAAA,IACpC,GACMzC,SAASA,MAAM;AACnB+D,kBAAY+D,KAAK;AAAA,QAACrF,MAAM;AAAA,MAAA,CAAO;AAAA,IACjC;AAEO3H,WAAAA,SAAAA,SAASiX,iBAAiB,WAAWvT,SAAS,GACrDwH,SAAOlL,SAASiX,iBAAiB,QAAQ/R,MAAM,GAExC,MAAM;AACJlF,eAAAA,SAASkX,oBAAoB,WAAWxT,SAAS,GACxDwH,SAAOlL,SAASkX,oBAAoB,QAAQhS,MAAM;AAAA,IACpD;AAAA,EAAA,GACC,CAACoI,aAAarE,WAAW,CAAC,GAExBK,qBAGE0F,kBAAkB,OACvBvH,2BAAA;AAAA,IAAC0P,WAAA;AAAA,IAAA;AAAA,MACC,GAAIvI;AAAAA,MACJ,WAAW;AAAA,MACX,WAAWA,UAAUjI,aAAa;AAAA,MAClC;AAAA,MACA,QAAQ2N;AAAAA,MACR,QAAQnC;AAAAA,MACR,SAASoB;AAAAA,MACT,kBAAkBiB;AAAAA,MAClB,aAAchV,CAAU,YAAA;AACtBnC,cAAMmG,cAAchE,OAAK,GAErB,CAACA,QAAM6T,wBAAwB,CAAC7T,QAAM+U,0BACxCtL,YAAY+D,KAAK;AAAA,UAACrF,MAAM;AAAA,QAAA,CAAY;AAAA,MAExC;AAAA,MACA,SAASyL;AAAAA,MACT,WAAW2C;AAAAA,MACX,SAASS;AAAAA,MACT,SAASlE;AAAAA,MACT;AAAA,MAGA,mBAAmBzT;AAAAA,MACnB;AAAA,MACA;AAAA,MACA,yBAAyB6X;AAAAA,IAAAA;AAAAA,EAAAA,IA7BpB;AAgCX,CAAC;AAED1I,qBAAqBlF,cAAc;ACh1B5B,SAAAsO,oBAAA/Z,OAAA;AAAAC,QAAAA,IAAAC,qBAAAA,EAAA,CAAA,GAGLkB,SAAe4Y,yBACf7L,GAAAA,KAAW8L,eAAAA,eAAeja,MAAKmO,EAAG;AAAChO,MAAAA;AAAAF,IAAAmB,CAAAA,MAAAA,UAAAnB,SAAAkO,MAEzBhO,KAAAA,MAAA;AACR,UAAA+Z,eAAqB9Y,OAAM+M,GAAI,KAAKA,EAAE;AAAC,WAAA,MAAA;AAGrC+L,mBAAY5L,YAAa;AAAA,IAAC;AAAA,EAE7BrO,GAAAA,OAAAmB,QAAAnB,OAAAkO,IAAAlO,OAAAE,MAAAA,KAAAF,EAAA,CAAA;AAAAM,MAAAA;AAAAN,SAAAA,SAAAmB,UAAEb,MAACa,MAAM,GAACnB,OAAAmB,QAAAnB,OAAAM,MAAAA,KAAAN,EAAA,CAAA,GANXgC,gBAAU9B,IAMPI,EAAQ,GAAC;AAAA;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/internal-utils/event-position.ts","../src/internal-utils/selection.ts","../src/editor/components/DefaultObject.tsx","../src/editor/components/drop-indicator.tsx","../src/editor/components/use-draggable.ts","../src/editor/components/Element.tsx","../src/editor/components/Leaf.tsx","../src/editor/plugins/createWithHotKeys.ts","../src/editor/withSyncRangeDecorations.ts","../src/editor/Editable.tsx","../src/editor-event-listener.tsx"],"sourcesContent":["import {Editor, type BaseRange} from 'slate'\nimport {DOMEditor, isDOMNode} from 'slate-dom'\nimport {ReactEditor} from 'slate-react'\nimport type {EditorSelection, EditorSnapshot} from '..'\nimport * as selectors from '../selectors'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport * as utils from '../utils'\nimport {toPortableTextRange} from './ranges'\n\nexport type EventPosition = {\n block: 'start' | 'end'\n /**\n * Did the event origin from the editor DOM node itself or from a child node?\n */\n isEditor: boolean\n selection: NonNullable<EditorSelection>\n}\nexport type EventPositionBlock = EventPosition['block']\n\nexport function getEventPosition({\n snapshot,\n slateEditor,\n event,\n}: {\n snapshot: EditorSnapshot\n slateEditor: PortableTextSlateEditor\n event: DragEvent | ClipboardEvent | MouseEvent\n}): EventPosition | undefined {\n if (!DOMEditor.hasTarget(slateEditor, event.target)) {\n return undefined\n }\n\n const node = DOMEditor.toSlateNode(slateEditor, event.target)\n\n if (isClipboardEvent(event)) {\n const selection = snapshot.context.selection\n\n if (!selection) {\n return undefined\n }\n\n return {\n block: 'end',\n isEditor: Editor.isEditor(node),\n selection,\n }\n }\n\n const block = getEventPositionBlock({slateEditor, event})\n const selection = getEventPositionSelection({snapshot, slateEditor, event})\n\n if (!block || !selection) {\n return undefined\n }\n\n return {\n block,\n isEditor: Editor.isEditor(node),\n selection,\n }\n}\n\nfunction getEventPositionBlock({\n slateEditor,\n event,\n}: {\n slateEditor: PortableTextSlateEditor\n event: DragEvent | MouseEvent\n}): EventPositionBlock | undefined {\n if (!ReactEditor.hasTarget(slateEditor, event.target)) {\n return undefined\n }\n\n const node = ReactEditor.toSlateNode(slateEditor, event.target)\n const element = ReactEditor.toDOMNode(slateEditor, node)\n const elementRect = element.getBoundingClientRect()\n const top = elementRect.top\n const height = elementRect.height\n const location = Math.abs(top - event.pageY)\n\n return location < height / 2 ? 'start' : 'end'\n}\n\nfunction getEventPositionSelection({\n snapshot,\n slateEditor,\n event,\n}: {\n snapshot: EditorSnapshot\n slateEditor: PortableTextSlateEditor\n event: DragEvent | MouseEvent\n}): EditorSelection {\n const range = getSlateRangeFromEvent(slateEditor, event)\n\n const selection = range\n ? toPortableTextRange(\n snapshot.context.value,\n range,\n snapshot.context.schema,\n )\n : null\n\n if (!selection) {\n return selection\n }\n\n const collapsedSelection = selectors.isSelectionCollapsed({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection,\n },\n })\n const focusTextBlock = selectors.getFocusTextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection,\n },\n })\n const focusSpan = selectors.getFocusSpan({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection,\n },\n })\n\n if (\n event.type === 'dragstart' &&\n collapsedSelection &&\n focusTextBlock &&\n focusSpan\n ) {\n // Looks like we are dragging an empty span. Let's drag the entire block\n // instead\n\n const blockStartPoint = utils.getBlockStartPoint(focusTextBlock)\n const blockEndPoint = utils.getBlockEndPoint(focusTextBlock)\n\n return {\n anchor: blockStartPoint,\n focus: blockEndPoint,\n }\n }\n\n return selection\n}\n\nfunction getSlateRangeFromEvent(\n editor: PortableTextSlateEditor,\n event: DragEvent | MouseEvent,\n) {\n if (!event.target) {\n return undefined\n }\n\n if (!isDOMNode(event.target)) {\n return undefined\n }\n\n const window = DOMEditor.getWindow(editor)\n\n let domRange: Range | undefined\n\n if (window.document.caretPositionFromPoint !== undefined) {\n const position = window.document.caretPositionFromPoint(\n event.clientX,\n event.clientY,\n )\n\n if (position) {\n domRange = window.document.createRange()\n domRange.setStart(position.offsetNode, position.offset)\n domRange.setEnd(position.offsetNode, position.offset)\n }\n } else if (window.document.caretRangeFromPoint !== undefined) {\n // Use WebKit-proprietary fallback method\n domRange =\n window.document.caretRangeFromPoint(event.clientX, event.clientY) ??\n undefined\n } else {\n console.warn(\n 'Neither caretPositionFromPoint nor caretRangeFromPoint is supported',\n )\n return undefined\n }\n\n if (!domRange) {\n return undefined\n }\n\n let range: BaseRange | undefined\n\n try {\n range = DOMEditor.toSlateRange(editor, domRange, {\n exactMatch: false,\n // It can still throw even with this option set to true\n suppressThrow: false,\n })\n } catch {}\n\n return range\n}\n\nfunction isClipboardEvent(\n event: DragEvent | ClipboardEvent | MouseEvent,\n): event is ClipboardEvent {\n return event.type === 'copy' || event.type === 'cut' || event.type === 'paste'\n}\n","import type {Path, PortableTextBlock} from '@sanity/types'\nimport {isEqual} from 'lodash'\nimport type {EditorSelection, EditorSelectionPoint} from '../types/editor'\n\nexport function normalizePoint(\n point: EditorSelectionPoint,\n value: PortableTextBlock[],\n): EditorSelectionPoint | null {\n if (!point || !value) {\n return null\n }\n const newPath: Path = []\n let newOffset: number = point.offset || 0\n const blockKey =\n typeof point.path[0] === 'object' &&\n '_key' in point.path[0] &&\n point.path[0]._key\n const childKey =\n typeof point.path[2] === 'object' &&\n '_key' in point.path[2] &&\n point.path[2]._key\n const block: PortableTextBlock | undefined = value.find(\n (blk) => blk._key === blockKey,\n )\n if (block) {\n newPath.push({_key: block._key})\n } else {\n return null\n }\n if (block && point.path[1] === 'children') {\n if (\n !block.children ||\n (Array.isArray(block.children) && block.children.length === 0)\n ) {\n return null\n }\n const child =\n Array.isArray(block.children) &&\n block.children.find((cld) => cld._key === childKey)\n if (child) {\n newPath.push('children')\n newPath.push({_key: child._key})\n newOffset =\n child.text && child.text.length >= point.offset\n ? point.offset\n : (child.text && child.text.length) || 0\n } else {\n return null\n }\n }\n return {path: newPath, offset: newOffset}\n}\n\nexport function normalizeSelection(\n selection: EditorSelection,\n value: PortableTextBlock[] | undefined,\n): EditorSelection | null {\n if (!selection || !value || value.length === 0) {\n return null\n }\n let newAnchor: EditorSelectionPoint | null = null\n let newFocus: EditorSelectionPoint | null = null\n const {anchor, focus} = selection\n if (\n anchor &&\n value.find((blk) => isEqual({_key: blk._key}, anchor.path[0]))\n ) {\n newAnchor = normalizePoint(anchor, value)\n }\n if (focus && value.find((blk) => isEqual({_key: blk._key}, focus.path[0]))) {\n newFocus = normalizePoint(focus, value)\n }\n if (newAnchor && newFocus) {\n return {anchor: newAnchor, focus: newFocus, backward: selection.backward}\n }\n return null\n}\n","import type {PortableTextBlock, PortableTextChild} from '@sanity/types'\n\nexport function DefaultBlockObject(props: {\n value: PortableTextBlock | PortableTextChild\n}) {\n return (\n <div style={{userSelect: 'none'}}>\n [{props.value._type}: {props.value._key}]\n </div>\n )\n}\n\nexport function DefaultInlineObject(props: {\n value: PortableTextBlock | PortableTextChild\n}) {\n return (\n <span style={{userSelect: 'none'}}>\n [{props.value._type}: {props.value._key}]\n </span>\n )\n}\n","export function DropIndicator() {\n return (\n <div\n className=\"pt-drop-indicator\"\n style={{\n position: 'absolute',\n width: '100%',\n height: 1,\n borderBottom: '1px solid currentColor',\n zIndex: 5,\n }}\n />\n )\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useState,\n type DragEvent,\n type RefObject,\n} from 'react'\nimport type {Element as SlateElement} from 'slate'\nimport {ReactEditor, useSlateStatic} from 'slate-react'\nimport {getEventPosition} from '../../internal-utils/event-position'\nimport {EditorActorContext} from '../editor-actor-context'\nimport {getEditorSnapshot} from '../editor-selector'\n\ntype Draggable = {\n draggableProps: {\n draggable: boolean\n onDragStart?: (event: DragEvent) => void\n onDragEnd?: (event: DragEvent) => void\n }\n}\n\nexport function useDraggable(props: {\n element: SlateElement\n readOnly: boolean\n blockRef: RefObject<HTMLDivElement | null>\n}): Draggable {\n const editorActor = useContext(EditorActorContext)\n const editor = useSlateStatic()\n const [blockElement, setBlockElement] = useState<HTMLElement | null>(null)\n\n useEffect(\n () =>\n setBlockElement(\n props.blockRef\n ? props.blockRef.current\n : ReactEditor.toDOMNode(editor, props.element),\n ),\n [editor, props.element, props.blockRef],\n )\n\n const handleDragEnd = useCallback(() => {\n editorActor.send({type: 'dragend'})\n }, [editorActor])\n\n const handleDragStart = useCallback(\n (event: DragEvent) => {\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: editor,\n }),\n slateEditor: editor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.error('Could not find position for dragstart event')\n return\n }\n\n // Clone blockElement so that it will not be visually clipped by scroll-containers etc.\n // The application that uses the portable-text-editor may indicate the element used as\n // drag ghost by adding a truthy data attribute 'data-pt-drag-ghost-element' to a HTML element.\n if (blockElement && blockElement instanceof HTMLElement) {\n let dragGhost = blockElement.cloneNode(true) as HTMLElement\n const customGhost = dragGhost.querySelector(\n '[data-pt-drag-ghost-element]',\n )\n if (customGhost) {\n dragGhost = customGhost as HTMLElement\n }\n\n // Set the `data-dragged` attribute so the consumer can style the element while it’s dragged\n dragGhost.setAttribute('data-dragged', '')\n\n if (document.body) {\n dragGhost.style.position = 'absolute'\n dragGhost.style.left = '-99999px'\n dragGhost.style.boxSizing = 'border-box'\n document.body.appendChild(dragGhost)\n const rect = blockElement.getBoundingClientRect()\n const x = event.clientX - rect.left\n const y = event.clientY - rect.top\n dragGhost.style.width = `${rect.width}px`\n dragGhost.style.height = `${rect.height}px`\n event.dataTransfer.setDragImage(dragGhost, x, y)\n\n editorActor.send({\n type: 'dragstart',\n origin: position,\n ghost: dragGhost,\n })\n return\n }\n\n editorActor.send({\n type: 'dragstart',\n origin: position,\n })\n }\n },\n [blockElement, editor, editorActor],\n )\n\n if (props.readOnly) {\n return {\n draggableProps: {\n draggable: false,\n onDragStart: undefined,\n onDragEnd: undefined,\n },\n }\n }\n\n return {\n draggableProps: {\n draggable: true,\n onDragStart: handleDragStart,\n onDragEnd: handleDragEnd,\n },\n }\n}\n","import type {\n Path,\n PortableTextChild,\n PortableTextObject,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type FunctionComponent,\n type JSX,\n type ReactElement,\n} from 'react'\nimport {Editor, Range, Element as SlateElement} from 'slate'\nimport {\n ReactEditor,\n useSelected,\n useSlateStatic,\n type RenderElementProps,\n} from 'slate-react'\nimport {defineBehavior} from '../../behaviors'\nimport {debugWithName} from '../../internal-utils/debug'\nimport type {EventPositionBlock} from '../../internal-utils/event-position'\nimport {fromSlateValue} from '../../internal-utils/values'\nimport {KEY_TO_VALUE_ELEMENT} from '../../internal-utils/weakMaps'\nimport * as selectors from '../../selectors'\nimport type {\n BlockRenderProps,\n PortableTextMemberSchemaTypes,\n RenderBlockFunction,\n RenderChildFunction,\n RenderListItemFunction,\n RenderStyleFunction,\n} from '../../types/editor'\nimport {EditorActorContext} from '../editor-actor-context'\nimport {DefaultBlockObject, DefaultInlineObject} from './DefaultObject'\nimport {DropIndicator} from './drop-indicator'\nimport {useDraggable} from './use-draggable'\n\nconst debug = debugWithName('components:Element')\nconst debugRenders = false\nconst EMPTY_ANNOTATIONS: PortableTextObject[] = []\n\n/**\n * @internal\n */\nexport interface ElementProps {\n attributes: RenderElementProps['attributes']\n children: ReactElement<any>\n element: SlateElement\n schemaTypes: PortableTextMemberSchemaTypes\n readOnly: boolean\n renderBlock?: RenderBlockFunction\n renderChild?: RenderChildFunction\n renderListItem?: RenderListItemFunction\n renderStyle?: RenderStyleFunction\n spellCheck?: boolean\n}\n\nconst inlineBlockStyle = {display: 'inline-block'}\n\n/**\n * Renders Portable Text block and inline object nodes in Slate\n * @internal\n */\nexport const Element: FunctionComponent<ElementProps> = ({\n attributes,\n children,\n element,\n schemaTypes,\n readOnly,\n renderBlock,\n renderChild,\n renderListItem,\n renderStyle,\n spellCheck,\n}) => {\n const editorActor = useContext(EditorActorContext)\n const slateEditor = useSlateStatic()\n const selected = useSelected()\n const blockRef = useRef<HTMLDivElement | null>(null)\n const inlineBlockObjectRef = useRef(null)\n const focused =\n (selected &&\n slateEditor.selection &&\n Range.isCollapsed(slateEditor.selection)) ||\n false\n const [dragPositionBlock, setDragPositionBlock] =\n useState<EventPositionBlock>()\n const draggable = useDraggable({element, readOnly, blockRef})\n\n useEffect(() => {\n const behavior = defineBehavior({\n on: 'drag.dragover',\n guard: ({snapshot, event}) => {\n const dropFocusBlock = selectors.getFocusBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n\n if (!dropFocusBlock || dropFocusBlock.node._key !== element._key) {\n return false\n }\n\n const dragOrigin = snapshot.beta.internalDrag?.origin\n\n if (!dragOrigin) {\n return false\n }\n\n const draggedBlocks = selectors.getSelectedBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n\n if (\n draggedBlocks.some(\n (draggedBlock) => draggedBlock.node._key === element._key,\n )\n ) {\n return false\n }\n\n const draggingEntireBlocks = selectors.isSelectingEntireBlocks({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n\n return draggingEntireBlocks\n },\n actions: [\n ({event}) => [\n {\n type: 'effect',\n effect: () => {\n setDragPositionBlock(event.position.block)\n },\n },\n {\n type: 'noop',\n },\n ],\n ],\n })\n\n editorActor.send({\n type: 'add behavior',\n behavior,\n })\n\n return () => {\n editorActor.send({\n type: 'remove behavior',\n behavior,\n })\n }\n }, [editorActor, element._key])\n\n useEffect(() => {\n const behavior = defineBehavior({\n on: 'drag.*',\n guard: ({event}) => {\n return event.type !== 'drag.dragover'\n },\n actions: [\n () => [\n {\n type: 'effect',\n effect: () => {\n setDragPositionBlock(undefined)\n },\n },\n ],\n ],\n })\n\n editorActor.send({\n type: 'add behavior',\n behavior,\n })\n\n return () => {\n editorActor.send({\n type: 'remove behavior',\n behavior,\n })\n }\n }, [editorActor])\n\n const value = useMemo(\n () =>\n fromSlateValue(\n [element],\n schemaTypes.block.name,\n KEY_TO_VALUE_ELEMENT.get(slateEditor),\n )[0],\n [slateEditor, element, schemaTypes.block.name],\n )\n\n let renderedBlock = children\n\n let className: string | undefined\n\n const blockPath: Path = useMemo(() => [{_key: element._key}], [element])\n\n if (typeof element._type !== 'string') {\n throw new Error(`Expected element to have a _type property`)\n }\n\n if (typeof element._key !== 'string') {\n throw new Error(`Expected element to have a _key property`)\n }\n\n // Test for inline objects first\n if (slateEditor.isInline(element)) {\n const path = ReactEditor.findPath(slateEditor, element)\n const [block] = Editor.node(slateEditor, path, {depth: 1})\n const schemaType = schemaTypes.inlineObjects.find(\n (_type) => _type.name === element._type,\n )\n if (!schemaType) {\n throw new Error('Could not find type for inline block element')\n }\n if (SlateElement.isElement(block)) {\n const elmPath: Path = [\n {_key: block._key},\n 'children',\n {_key: element._key},\n ]\n if (debugRenders) {\n debug(`Render ${element._key} (inline object)`)\n }\n return (\n <span {...attributes}>\n {/* Note that children must follow immediately or cut and selections will not work properly in Chrome. */}\n {children}\n <span\n draggable={!readOnly}\n className=\"pt-inline-object\"\n data-testid=\"pt-inline-object\"\n ref={inlineBlockObjectRef}\n key={element._key}\n style={inlineBlockStyle}\n contentEditable={false}\n >\n {renderChild &&\n renderChild({\n annotations: EMPTY_ANNOTATIONS, // These inline objects currently doesn't support annotations. This is a limitation of the current PT spec/model.\n children: <DefaultInlineObject value={value} />,\n editorElementRef: inlineBlockObjectRef,\n focused,\n path: elmPath,\n schemaType,\n selected,\n type: schemaType,\n value: value as PortableTextChild,\n })}\n {!renderChild && <DefaultInlineObject value={value} />}\n </span>\n </span>\n )\n }\n throw new Error('Block not found!')\n }\n\n // If not inline, it's either a block (text) or a block object (non-text)\n // NOTE: text blocks aren't draggable with DraggableBlock (yet?)\n if (element._type === schemaTypes.block.name) {\n className = `pt-block pt-text-block`\n const isListItem = 'listItem' in element\n if (debugRenders) {\n debug(`Render ${element._key} (text block)`)\n }\n const style = ('style' in element && element.style) || 'normal'\n className = `pt-block pt-text-block pt-text-block-style-${style}`\n const blockStyleType = schemaTypes.styles.find(\n (item) => item.value === style,\n )\n if (renderStyle && blockStyleType) {\n renderedBlock = renderStyle({\n block: element as PortableTextTextBlock,\n children,\n focused,\n selected,\n value: style,\n path: blockPath,\n schemaType: blockStyleType,\n editorElementRef: blockRef,\n })\n }\n let level: number | undefined\n\n if (isListItem) {\n if (typeof element.level === 'number') {\n level = element.level\n }\n className += ` pt-list-item pt-list-item-${element.listItem} pt-list-item-level-${level || 1}`\n }\n\n if (slateEditor.isListBlock(value) && isListItem && element.listItem) {\n const listType = schemaTypes.lists.find(\n (item) => item.value === element.listItem,\n )\n if (renderListItem && listType) {\n renderedBlock = renderListItem({\n block: value,\n children: renderedBlock,\n focused,\n selected,\n value: element.listItem,\n path: blockPath,\n schemaType: listType,\n level: value.level || 1,\n editorElementRef: blockRef,\n })\n }\n }\n\n const renderProps: Omit<BlockRenderProps, 'type'> = Object.defineProperty(\n {\n children: renderedBlock,\n editorElementRef: blockRef,\n focused,\n level,\n listItem: isListItem ? element.listItem : undefined,\n path: blockPath,\n selected,\n style,\n schemaType: schemaTypes.block,\n value,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaTypes.block\n },\n },\n )\n\n const propsOrDefaultRendered = renderBlock\n ? renderBlock(renderProps as BlockRenderProps)\n : children\n\n return (\n <div\n key={element._key}\n {...attributes}\n className={className}\n spellCheck={spellCheck}\n >\n {dragPositionBlock === 'start' ? <DropIndicator /> : null}\n <div ref={blockRef}>{propsOrDefaultRendered}</div>\n {dragPositionBlock === 'end' ? <DropIndicator /> : null}\n </div>\n )\n }\n\n const schemaType = schemaTypes.blockObjects.find(\n (_type) => _type.name === element._type,\n )\n\n if (!schemaType) {\n throw new Error(\n `Could not find schema type for block element of _type ${element._type}`,\n )\n }\n\n if (debugRenders) {\n debug(`Render ${element._key} (object block)`)\n }\n\n className = 'pt-block pt-object-block'\n\n const block = fromSlateValue(\n [element],\n schemaTypes.block.name,\n KEY_TO_VALUE_ELEMENT.get(slateEditor),\n )[0]\n\n let renderedBlockFromProps: JSX.Element | undefined\n\n if (renderBlock) {\n const _props: Omit<BlockRenderProps, 'type'> = Object.defineProperty(\n {\n children: <DefaultBlockObject value={value} />,\n editorElementRef: blockRef,\n focused,\n path: blockPath,\n schemaType,\n selected,\n value: block,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaType\n },\n },\n )\n renderedBlockFromProps = renderBlock(_props as BlockRenderProps)\n }\n\n return (\n <div\n key={element._key}\n {...attributes}\n className={className}\n {...draggable.draggableProps}\n >\n {dragPositionBlock === 'start' ? <DropIndicator /> : null}\n {children}\n <div ref={blockRef} contentEditable={false}>\n {renderedBlockFromProps ? (\n renderedBlockFromProps\n ) : (\n <DefaultBlockObject value={value} />\n )}\n </div>\n {dragPositionBlock === 'end' ? <DropIndicator /> : null}\n </div>\n )\n}\n\nElement.displayName = 'Element'\n","import type {\n Path,\n PortableTextObject,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport {isEqual, uniq} from 'lodash'\nimport {\n startTransition,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n} from 'react'\nimport {Text} from 'slate'\nimport {useSelected, type RenderLeafProps} from 'slate-react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport type {\n BlockAnnotationRenderProps,\n BlockChildRenderProps,\n BlockDecoratorRenderProps,\n PortableTextMemberSchemaTypes,\n RenderAnnotationFunction,\n RenderChildFunction,\n RenderDecoratorFunction,\n} from '../../types/editor'\nimport type {EditorActor} from '../editor-machine'\nimport {usePortableTextEditor} from '../hooks/usePortableTextEditor'\nimport {PortableTextEditor} from '../PortableTextEditor'\n\nconst debug = debugWithName('components:Leaf')\n\nconst EMPTY_MARKS: string[] = []\n\n/**\n * @internal\n */\nexport interface LeafProps extends RenderLeafProps {\n editorActor: EditorActor\n children: ReactElement<any>\n schemaTypes: PortableTextMemberSchemaTypes\n renderAnnotation?: RenderAnnotationFunction\n renderChild?: RenderChildFunction\n renderDecorator?: RenderDecoratorFunction\n readOnly: boolean\n}\n\n/**\n * Renders Portable Text span nodes in Slate\n * @internal\n */\nexport const Leaf = (props: LeafProps) => {\n const {\n editorActor,\n attributes,\n children,\n leaf,\n schemaTypes,\n renderChild,\n renderDecorator,\n renderAnnotation,\n } = props\n const spanRef = useRef<HTMLElement>(null)\n const portableTextEditor = usePortableTextEditor()\n const blockSelected = useSelected()\n const [focused, setFocused] = useState(false)\n const [selected, setSelected] = useState(false)\n const block = children.props.parent as PortableTextTextBlock | undefined\n const path: Path = useMemo(\n () => (block ? [{_key: block?._key}, 'children', {_key: leaf._key}] : []),\n [block, leaf._key],\n )\n const decoratorValues = useMemo(\n () => schemaTypes.decorators.map((dec) => dec.value),\n [schemaTypes.decorators],\n )\n const marks: string[] = useMemo(\n () =>\n uniq(\n (leaf.marks || EMPTY_MARKS).filter((mark) =>\n decoratorValues.includes(mark),\n ),\n ),\n [decoratorValues, leaf.marks],\n )\n const annotationMarks = Array.isArray(leaf.marks) ? leaf.marks : EMPTY_MARKS\n const annotations = useMemo(\n () =>\n annotationMarks\n .map(\n (mark) =>\n !decoratorValues.includes(mark) &&\n block?.markDefs?.find((def) => def._key === mark),\n )\n .filter(Boolean) as PortableTextObject[],\n [annotationMarks, block, decoratorValues],\n )\n\n const shouldTrackSelectionAndFocus = annotations.length > 0 && blockSelected\n\n useEffect(() => {\n if (!shouldTrackSelectionAndFocus) {\n setFocused(false)\n return\n }\n const sel = PortableTextEditor.getSelection(portableTextEditor)\n if (\n sel &&\n isEqual(sel.focus.path, path) &&\n PortableTextEditor.isCollapsedSelection(portableTextEditor)\n ) {\n startTransition(() => {\n setFocused(true)\n })\n }\n }, [shouldTrackSelectionAndFocus, path, portableTextEditor])\n\n // Function to check if this leaf is currently inside the user's text selection\n const setSelectedFromRange = useCallback(() => {\n if (!shouldTrackSelectionAndFocus) {\n return\n }\n debug('Setting selection and focus from range')\n const winSelection = window.getSelection()\n if (!winSelection) {\n setSelected(false)\n return\n }\n if (winSelection && winSelection.rangeCount > 0) {\n const range = winSelection.getRangeAt(0)\n if (spanRef.current && range.intersectsNode(spanRef.current)) {\n setSelected(true)\n } else {\n setSelected(false)\n }\n } else {\n setSelected(false)\n }\n }, [shouldTrackSelectionAndFocus])\n\n useEffect(() => {\n if (!shouldTrackSelectionAndFocus) {\n return undefined\n }\n\n const onBlur = editorActor.on('blur', () => {\n setFocused(false)\n setSelected(false)\n })\n\n const onFocus = editorActor.on('focus', () => {\n const sel = PortableTextEditor.getSelection(portableTextEditor)\n if (\n sel &&\n isEqual(sel.focus.path, path) &&\n PortableTextEditor.isCollapsedSelection(portableTextEditor)\n ) {\n setFocused(true)\n }\n setSelectedFromRange()\n })\n\n const onSelection = editorActor.on('selection', (event) => {\n if (\n event.selection &&\n isEqual(event.selection.focus.path, path) &&\n PortableTextEditor.isCollapsedSelection(portableTextEditor)\n ) {\n setFocused(true)\n } else {\n setFocused(false)\n }\n setSelectedFromRange()\n })\n\n return () => {\n onBlur.unsubscribe()\n onFocus.unsubscribe()\n onSelection.unsubscribe()\n }\n }, [\n editorActor,\n path,\n portableTextEditor,\n setSelectedFromRange,\n shouldTrackSelectionAndFocus,\n ])\n\n useEffect(() => setSelectedFromRange(), [setSelectedFromRange])\n\n const content = useMemo(() => {\n let returnedChildren = children\n // Render text nodes\n if (Text.isText(leaf) && leaf._type === schemaTypes.span.name) {\n marks.forEach((mark) => {\n const schemaType = schemaTypes.decorators.find(\n (dec) => dec.value === mark,\n )\n if (schemaType && renderDecorator) {\n const _props: Omit<BlockDecoratorRenderProps, 'type'> =\n Object.defineProperty(\n {\n children: returnedChildren,\n editorElementRef: spanRef,\n focused,\n path,\n selected,\n schemaType,\n value: mark,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaType\n },\n },\n )\n returnedChildren = renderDecorator(\n _props as BlockDecoratorRenderProps,\n )\n }\n })\n\n if (block && annotations.length > 0) {\n annotations.forEach((annotation) => {\n const schemaType = schemaTypes.annotations.find(\n (t) => t.name === annotation._type,\n )\n if (schemaType) {\n if (renderAnnotation) {\n const _props: Omit<BlockAnnotationRenderProps, 'type'> =\n Object.defineProperty(\n {\n block,\n children: returnedChildren,\n editorElementRef: spanRef,\n focused,\n path,\n selected,\n schemaType,\n value: annotation,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaType\n },\n },\n )\n\n returnedChildren = (\n <span ref={spanRef}>\n {renderAnnotation(_props as BlockAnnotationRenderProps)}\n </span>\n )\n } else {\n returnedChildren = <span ref={spanRef}>{returnedChildren}</span>\n }\n }\n })\n }\n if (block && renderChild) {\n const child = block.children.find((_child) => _child._key === leaf._key) // Ensure object equality\n if (child) {\n const defaultRendered = <>{returnedChildren}</>\n const _props: Omit<BlockChildRenderProps, 'type'> =\n Object.defineProperty(\n {\n annotations,\n children: defaultRendered,\n editorElementRef: spanRef,\n focused,\n path,\n schemaType: schemaTypes.span,\n selected,\n value: child,\n },\n 'type',\n {\n enumerable: false,\n get() {\n console.warn(\n \"Property 'type' is deprecated, use 'schemaType' instead.\",\n )\n return schemaTypes.span\n },\n },\n )\n returnedChildren = renderChild(_props as BlockChildRenderProps)\n }\n }\n }\n return returnedChildren\n }, [\n annotations,\n block,\n children,\n focused,\n leaf,\n marks,\n path,\n renderAnnotation,\n renderChild,\n renderDecorator,\n schemaTypes.annotations,\n schemaTypes.decorators,\n schemaTypes.span,\n selected,\n ])\n return useMemo(\n () => (\n <span key={leaf._key} {...attributes} ref={spanRef}>\n {content}\n </span>\n ),\n [leaf, attributes, content],\n )\n}\n\nLeaf.displayName = 'Leaf'\n","import type {KeyboardEvent} from 'react'\nimport type {ReactEditor} from 'slate-react'\nimport {debugWithName} from '../../internal-utils/debug'\nimport {isHotkey} from '../../internal-utils/is-hotkey'\nimport type {PortableTextSlateEditor} from '../../types/editor'\nimport type {HotkeyOptions} from '../../types/options'\nimport type {EditorActor} from '../editor-machine'\nimport type {PortableTextEditor} from '../PortableTextEditor'\n\nconst debug = debugWithName('plugin:withHotKeys')\n\n/**\n * This plugin takes care of all hotkeys in the editor\n *\n */\nexport function createWithHotkeys(\n editorActor: EditorActor,\n portableTextEditor: PortableTextEditor,\n hotkeysFromOptions?: HotkeyOptions,\n): (editor: PortableTextSlateEditor & ReactEditor) => any {\n const reservedHotkeys = ['enter', 'tab', 'shift', 'delete', 'end']\n const activeHotkeys = hotkeysFromOptions ?? {}\n return function withHotKeys(editor: PortableTextSlateEditor & ReactEditor) {\n editor.pteWithHotKeys = (event: KeyboardEvent<HTMLDivElement>): void => {\n // Wire up custom marks hotkeys\n Object.keys(activeHotkeys).forEach((cat) => {\n if (cat === 'marks') {\n for (const hotkey in activeHotkeys[cat]) {\n if (reservedHotkeys.includes(hotkey)) {\n throw new Error(`The hotkey ${hotkey} is reserved!`)\n }\n if (isHotkey(hotkey, event.nativeEvent)) {\n event.preventDefault()\n const possibleMark = activeHotkeys[cat]\n if (possibleMark) {\n const mark = possibleMark[hotkey]\n debug(`HotKey ${hotkey} to toggle ${mark}`)\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'decorator.toggle',\n decorator: mark,\n },\n editor,\n })\n }\n }\n }\n }\n if (cat === 'custom') {\n for (const hotkey in activeHotkeys[cat]) {\n if (reservedHotkeys.includes(hotkey)) {\n throw new Error(`The hotkey ${hotkey} is reserved!`)\n }\n if (isHotkey(hotkey, event.nativeEvent)) {\n const possibleCommand = activeHotkeys[cat]\n if (possibleCommand) {\n const command = possibleCommand[hotkey]\n command(event, portableTextEditor)\n }\n }\n }\n }\n })\n }\n return editor\n }\n}\n","import type {BaseEditor, Operation} from 'slate'\nimport type {ReactEditor} from 'slate-react'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {EditorActor} from './editor-machine'\n\n// React Compiler considers `slateEditor` as immutable, and opts-out if we do this inline in a useEffect, doing it in a function moves it out of the scope, and opts-in again for the rest of the component.\nexport function withSyncRangeDecorations({\n editorActor,\n slateEditor,\n syncRangeDecorations,\n}: {\n editorActor: EditorActor\n slateEditor: BaseEditor & ReactEditor & PortableTextSlateEditor\n syncRangeDecorations: (operation?: Operation) => void\n}) {\n const originalApply = slateEditor.apply\n\n slateEditor.apply = (op: Operation) => {\n originalApply(op)\n\n if (\n !editorActor.getSnapshot().matches({'edit mode': 'read only'}) &&\n op.type !== 'set_selection'\n ) {\n syncRangeDecorations(op)\n }\n }\n\n return () => {\n slateEditor.apply = originalApply\n }\n}\n","import {useSelector} from '@xstate/react'\nimport {isEqual, noop} from 'lodash'\nimport {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type ClipboardEvent,\n type CSSProperties,\n type FocusEventHandler,\n type KeyboardEvent,\n type MutableRefObject,\n type TextareaHTMLAttributes,\n} from 'react'\nimport {\n Editor,\n Path,\n Element as SlateElement,\n Range as SlateRange,\n Transforms,\n type BaseRange,\n type NodeEntry,\n type Operation,\n type Text,\n} from 'slate'\nimport {\n ReactEditor,\n Editable as SlateEditable,\n useSlate,\n type RenderElementProps,\n type RenderLeafProps,\n} from 'slate-react'\nimport {debugWithName} from '../internal-utils/debug'\nimport {getEventPosition} from '../internal-utils/event-position'\nimport {parseBlocks} from '../internal-utils/parse-blocks'\nimport {\n moveRangeByOperation,\n toPortableTextRange,\n toSlateRange,\n} from '../internal-utils/ranges'\nimport {normalizeSelection} from '../internal-utils/selection'\nimport {fromSlateValue, isEqualToEmptyEditor} from '../internal-utils/values'\nimport type {\n EditorSelection,\n OnCopyFn,\n OnPasteFn,\n RangeDecoration,\n RenderAnnotationFunction,\n RenderBlockFunction,\n RenderChildFunction,\n RenderDecoratorFunction,\n RenderListItemFunction,\n RenderPlaceholderFunction,\n RenderStyleFunction,\n ScrollSelectionIntoViewFunction,\n} from '../types/editor'\nimport type {HotkeyOptions} from '../types/options'\nimport {Element} from './components/Element'\nimport {Leaf} from './components/Leaf'\nimport {EditorActorContext} from './editor-actor-context'\nimport {getEditorSnapshot} from './editor-selector'\nimport {usePortableTextEditor} from './hooks/usePortableTextEditor'\nimport {createWithHotkeys} from './plugins/createWithHotKeys'\nimport {PortableTextEditor} from './PortableTextEditor'\nimport {withSyncRangeDecorations} from './withSyncRangeDecorations'\n\nconst debug = debugWithName('component:Editable')\n\nconst PLACEHOLDER_STYLE: CSSProperties = {\n position: 'absolute',\n userSelect: 'none',\n pointerEvents: 'none',\n left: 0,\n right: 0,\n}\n\ninterface BaseRangeWithDecoration extends BaseRange {\n rangeDecoration: RangeDecoration\n}\n\n/**\n * @public\n */\nexport type PortableTextEditableProps = Omit<\n TextareaHTMLAttributes<HTMLDivElement>,\n 'onPaste' | 'onCopy' | 'onBeforeInput'\n> & {\n hotkeys?: HotkeyOptions\n onBeforeInput?: (event: InputEvent) => void\n onPaste?: OnPasteFn\n onCopy?: OnCopyFn\n ref: MutableRefObject<HTMLDivElement | null>\n rangeDecorations?: RangeDecoration[]\n renderAnnotation?: RenderAnnotationFunction\n renderBlock?: RenderBlockFunction\n renderChild?: RenderChildFunction\n renderDecorator?: RenderDecoratorFunction\n renderListItem?: RenderListItemFunction\n renderPlaceholder?: RenderPlaceholderFunction\n renderStyle?: RenderStyleFunction\n scrollSelectionIntoView?: ScrollSelectionIntoViewFunction\n selection?: EditorSelection\n spellCheck?: boolean\n}\n\n/**\n * @public\n *\n *\n * The core component that renders the editor. Must be placed within the {@link EditorProvider} component.\n *\n * @example\n * ```tsx\n * import { PortableTextEditable, EditorProvider } from '@portabletext/editor'\n *\n * function MyComponent() {\n * return (\n * <EditorProvider>\n * <PortableTextEditable />\n * </EditorProvider>\n * )\n * }\n * ```\n * @group Components\n */\nexport const PortableTextEditable = forwardRef<\n Omit<HTMLDivElement, 'as' | 'onPaste' | 'onBeforeInput'>,\n PortableTextEditableProps\n>(function PortableTextEditable(props, forwardedRef) {\n const {\n hotkeys,\n onBlur,\n onFocus,\n onBeforeInput,\n onPaste,\n onCopy,\n onCut,\n onClick,\n onDragStart,\n onDrag,\n onDragEnd,\n onDragEnter,\n onDragOver,\n onDrop,\n onDragLeave,\n rangeDecorations,\n renderAnnotation,\n renderBlock,\n renderChild,\n renderDecorator,\n renderListItem,\n renderPlaceholder,\n renderStyle,\n selection: propsSelection,\n scrollSelectionIntoView,\n spellCheck,\n ...restProps\n } = props\n\n const portableTextEditor = usePortableTextEditor()\n const ref = useRef<HTMLDivElement | null>(null)\n const [editableElement, setEditableElement] = useState<HTMLDivElement | null>(\n null,\n )\n const [hasInvalidValue, setHasInvalidValue] = useState(false)\n const [rangeDecorationState, setRangeDecorationsState] = useState<\n BaseRangeWithDecoration[]\n >([])\n\n // Forward ref to parent component\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(\n forwardedRef,\n () => ref.current,\n )\n\n const rangeDecorationsRef = useRef(rangeDecorations)\n\n const editorActor = useContext(EditorActorContext)\n const readOnly = useSelector(editorActor, (s) =>\n s.matches({'edit mode': 'read only'}),\n )\n const schemaTypes = useSelector(editorActor, (s) => s.context.schema)\n const slateEditor = useSlate()\n\n const blockTypeName = schemaTypes.block.name\n\n // Output a minimal React editor inside Editable when in readOnly mode.\n // NOTE: make sure all the plugins used here can be safely run over again at any point.\n // There will be a problem if they redefine editor methods and then calling the original method within themselves.\n useMemo(() => {\n // React/UI-specific plugins\n if (readOnly) {\n debug('Editable is in read only mode')\n return slateEditor\n }\n const withHotKeys = createWithHotkeys(\n editorActor,\n portableTextEditor,\n hotkeys,\n )\n\n debug('Editable is in edit mode')\n return withHotKeys(slateEditor)\n }, [editorActor, hotkeys, portableTextEditor, readOnly, slateEditor])\n\n const renderElement = useCallback(\n (eProps: RenderElementProps) => (\n <Element\n {...eProps}\n readOnly={readOnly}\n renderBlock={renderBlock}\n renderChild={renderChild}\n renderListItem={renderListItem}\n renderStyle={renderStyle}\n schemaTypes={schemaTypes}\n spellCheck={spellCheck}\n />\n ),\n [\n schemaTypes,\n spellCheck,\n readOnly,\n renderBlock,\n renderChild,\n renderListItem,\n renderStyle,\n ],\n )\n\n const renderLeaf = useCallback(\n (\n lProps: RenderLeafProps & {\n leaf: Text & {placeholder?: boolean; rangeDecoration?: RangeDecoration}\n },\n ) => {\n if (lProps.leaf._type === 'span') {\n let rendered = (\n <Leaf\n {...lProps}\n editorActor={editorActor}\n schemaTypes={schemaTypes}\n renderAnnotation={renderAnnotation}\n renderChild={renderChild}\n renderDecorator={renderDecorator}\n readOnly={readOnly}\n />\n )\n if (\n renderPlaceholder &&\n lProps.leaf.placeholder &&\n lProps.text.text === ''\n ) {\n return (\n <>\n <span style={PLACEHOLDER_STYLE} contentEditable={false}>\n {renderPlaceholder()}\n </span>\n {rendered}\n </>\n )\n }\n const decoration = lProps.leaf.rangeDecoration\n if (decoration) {\n rendered = decoration.component({children: rendered})\n }\n return rendered\n }\n return lProps.children\n },\n [\n editorActor,\n readOnly,\n renderAnnotation,\n renderChild,\n renderDecorator,\n renderPlaceholder,\n schemaTypes,\n ],\n )\n\n const restoreSelectionFromProps = useCallback(() => {\n if (propsSelection) {\n debug(`Selection from props ${JSON.stringify(propsSelection)}`)\n const normalizedSelection = normalizeSelection(\n propsSelection,\n fromSlateValue(slateEditor.children, blockTypeName),\n )\n if (normalizedSelection !== null) {\n debug(\n `Normalized selection from props ${JSON.stringify(normalizedSelection)}`,\n )\n const slateRange = toSlateRange(normalizedSelection, slateEditor)\n if (slateRange) {\n Transforms.select(slateEditor, slateRange)\n // Output selection here in those cases where the editor selection was the same, and there are no set_selection operations made.\n // The selection is usually automatically emitted to change$ by the withPortableTextSelections plugin whenever there is a set_selection operation applied.\n if (!slateEditor.operations.some((o) => o.type === 'set_selection')) {\n editorActor.send({\n type: 'notify.selection',\n selection: normalizedSelection,\n })\n }\n slateEditor.onChange()\n }\n }\n }\n }, [blockTypeName, editorActor, propsSelection, slateEditor])\n\n const syncRangeDecorations = useCallback(\n (operation?: Operation) => {\n if (rangeDecorations && rangeDecorations.length > 0) {\n const newSlateRanges: BaseRangeWithDecoration[] = []\n rangeDecorations.forEach((rangeDecorationItem) => {\n const slateRange = toSlateRange(\n rangeDecorationItem.selection,\n slateEditor,\n )\n if (!SlateRange.isRange(slateRange)) {\n if (rangeDecorationItem.onMoved) {\n rangeDecorationItem.onMoved({\n newSelection: null,\n rangeDecoration: rangeDecorationItem,\n origin: 'local',\n })\n }\n return\n }\n let newRange: BaseRange | null | undefined\n if (operation) {\n newRange = moveRangeByOperation(slateRange, operation)\n if (\n (newRange && newRange !== slateRange) ||\n (newRange === null && slateRange)\n ) {\n const value = PortableTextEditor.getValue(portableTextEditor)\n const newRangeSelection = toPortableTextRange(\n value,\n newRange,\n schemaTypes,\n )\n if (rangeDecorationItem.onMoved) {\n rangeDecorationItem.onMoved({\n newSelection: newRangeSelection,\n rangeDecoration: rangeDecorationItem,\n origin: 'local',\n })\n }\n }\n }\n // If the newRange is null, it means that the range is not valid anymore and should be removed\n // If it's undefined, it means that the slateRange is still valid and should be kept\n if (newRange !== null) {\n newSlateRanges.push({\n ...(newRange || slateRange),\n rangeDecoration: rangeDecorationItem,\n })\n }\n })\n if (newSlateRanges.length > 0) {\n setRangeDecorationsState(newSlateRanges)\n return\n }\n }\n setRangeDecorationsState((rangeDecorationState) => {\n // If there's state then we want to reset\n if (rangeDecorationState.length > 0) {\n return []\n }\n // Otherwise we no-op, React will skip a state update if what we return has reference equality to the previous state\n return rangeDecorationState\n })\n },\n [portableTextEditor, rangeDecorations, schemaTypes, slateEditor],\n )\n\n // Restore selection from props when the editor has been initialized properly with it's value\n useEffect(() => {\n const onReady = editorActor.on('ready', () => {\n syncRangeDecorations()\n restoreSelectionFromProps()\n })\n const onInvalidValue = editorActor.on('invalid value', () => {\n setHasInvalidValue(true)\n })\n const onValueChanged = editorActor.on('value changed', () => {\n setHasInvalidValue(false)\n })\n\n return () => {\n onReady.unsubscribe()\n onInvalidValue.unsubscribe()\n onValueChanged.unsubscribe()\n }\n }, [editorActor, restoreSelectionFromProps, syncRangeDecorations])\n\n // Restore selection from props when it changes\n useEffect(() => {\n if (propsSelection && !hasInvalidValue) {\n restoreSelectionFromProps()\n }\n }, [hasInvalidValue, propsSelection, restoreSelectionFromProps])\n\n const [syncedRangeDecorations, setSyncedRangeDecorations] = useState(false)\n useEffect(() => {\n if (!syncedRangeDecorations) {\n // We only want this to run once, on mount\n setSyncedRangeDecorations(true)\n syncRangeDecorations()\n }\n }, [syncRangeDecorations, syncedRangeDecorations])\n\n useEffect(() => {\n if (!isEqual(rangeDecorations, rangeDecorationsRef.current)) {\n syncRangeDecorations()\n }\n rangeDecorationsRef.current = rangeDecorations\n }, [rangeDecorations, syncRangeDecorations])\n\n // Sync range decorations after an operation is applied\n useEffect(() => {\n const teardown = withSyncRangeDecorations({\n editorActor,\n slateEditor,\n syncRangeDecorations,\n })\n return () => teardown()\n }, [editorActor, slateEditor, syncRangeDecorations])\n\n // Handle from props onCopy function\n const handleCopy = useCallback(\n (event: ClipboardEvent<HTMLDivElement>): void | ReactEditor => {\n if (onCopy) {\n const result = onCopy(event)\n // CopyFn may return something to avoid doing default stuff\n if (result !== undefined) {\n event.preventDefault()\n }\n } else if (event.nativeEvent.clipboardData) {\n // Prevent Slate from handling the event\n event.stopPropagation()\n event.preventDefault()\n\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor,\n }),\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for copy event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'copy',\n data: event.nativeEvent.clipboardData,\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [onCopy, editorActor, slateEditor],\n )\n\n const handleCut = useCallback(\n (event: ClipboardEvent<HTMLDivElement>) => {\n if (onCut) {\n const result = onCut(event)\n // CutFn may return something to avoid doing default stuff\n if (result !== undefined) {\n event.preventDefault()\n }\n } else if (event.nativeEvent.clipboardData) {\n // Prevent Slate from handling the event\n event.stopPropagation()\n event.preventDefault()\n\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor,\n }),\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for cut event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'cut',\n dataTransfer: event.nativeEvent.clipboardData,\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [onCut, editorActor, slateEditor],\n )\n\n // Handle incoming pasting events in the editor\n const handlePaste = useCallback(\n (event: ClipboardEvent<HTMLDivElement>): Promise<void> | void => {\n const value = PortableTextEditor.getValue(portableTextEditor)\n const ptRange = toPortableTextRange(\n value,\n slateEditor.selection,\n schemaTypes,\n )\n const path = ptRange?.focus.path || []\n const onPasteResult = onPaste?.({event, value, path, schemaTypes})\n\n if (onPasteResult || !slateEditor.selection) {\n event.preventDefault()\n\n // Resolve it as promise (can be either async promise or sync return value)\n editorActor.send({type: 'notify.loading'})\n\n Promise.resolve(onPasteResult)\n .then((result) => {\n debug('Custom paste function from client resolved', result)\n\n if (!result || !result.insert) {\n debug('No result from custom paste handler, pasting normally')\n\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor,\n }),\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for paste event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'paste',\n data: event.clipboardData,\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n } else if (result.insert) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'insert.blocks',\n blocks: parseBlocks({\n context: {\n keyGenerator:\n editorActor.getSnapshot().context.keyGenerator,\n schema: editorActor.getSnapshot().context.schema,\n },\n blocks: result.insert,\n options: {\n refreshKeys: true,\n },\n }),\n placement: 'auto',\n },\n editor: slateEditor,\n })\n } else {\n console.warn(\n 'Your onPaste function returned something unexpected:',\n result,\n )\n }\n })\n .catch((error) => {\n console.warn(error)\n\n return error\n })\n .finally(() => {\n editorActor.send({type: 'notify.done loading'})\n })\n } else if (event.nativeEvent.clipboardData) {\n // Prevent Slate from handling the event\n event.preventDefault()\n event.stopPropagation()\n\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor,\n }),\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for paste event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'paste',\n data: event.nativeEvent.clipboardData,\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n\n debug('No result from custom paste handler, pasting normally')\n },\n [editorActor, onPaste, portableTextEditor, schemaTypes, slateEditor],\n )\n\n const handleOnFocus: FocusEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (onFocus) {\n onFocus(event)\n }\n if (!event.isDefaultPrevented()) {\n const selection = PortableTextEditor.getSelection(portableTextEditor)\n // Create an editor selection if it does'nt exist\n if (selection === null) {\n Transforms.select(slateEditor, Editor.start(slateEditor, []))\n slateEditor.onChange()\n }\n editorActor.send({type: 'notify.focused', event})\n const newSelection = PortableTextEditor.getSelection(portableTextEditor)\n // If the selection is the same, emit it explicitly here as there is no actual onChange event triggered.\n if (selection === newSelection) {\n editorActor.send({\n type: 'notify.selection',\n selection,\n })\n }\n }\n },\n [editorActor, onFocus, portableTextEditor, slateEditor],\n )\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n if (onClick) {\n onClick(event)\n }\n\n if (event.isDefaultPrevented() || event.isPropagationStopped()) {\n return\n }\n\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor,\n }),\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find EventPosition for MouseEvent')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'mouse.click',\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n },\n [onClick, editorActor, slateEditor],\n )\n\n const handleOnBlur: FocusEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (onBlur) {\n onBlur(event)\n }\n if (!event.isPropagationStopped()) {\n editorActor.send({type: 'notify.blurred', event})\n }\n },\n [editorActor, onBlur],\n )\n\n const handleOnBeforeInput = useCallback(\n (event: InputEvent) => {\n if (onBeforeInput) {\n onBeforeInput(event)\n }\n },\n [onBeforeInput],\n )\n\n // This function will handle unexpected DOM changes inside the Editable rendering,\n // and make sure that we can maintain a stable slateEditor.selection when that happens.\n //\n // For example, if this Editable is rendered inside something that might re-render\n // this component (hidden contexts) while the user is still actively changing the\n // contentEditable, this could interfere with the intermediate DOM selection,\n // which again could be picked up by ReactEditor's event listeners.\n // If that range is invalid at that point, the slate.editorSelection could be\n // set either wrong, or invalid, to which slateEditor will throw exceptions\n // that are impossible to recover properly from or result in a wrong selection.\n //\n // Also the other way around, when the ReactEditor will try to create a DOM Range\n // from the current slateEditor.selection, it may throw unrecoverable errors\n // if the current editor.selection is invalid according to the DOM.\n // If this is the case, default to selecting the top of the document, if the\n // user already had a selection.\n const validateSelection = useCallback(() => {\n if (!slateEditor.selection) {\n return\n }\n const root = ReactEditor.findDocumentOrShadowRoot(slateEditor)\n const {activeElement} = root\n // Return if the editor isn't the active element\n if (ref.current !== activeElement) {\n return\n }\n const window = ReactEditor.getWindow(slateEditor)\n const domSelection = window.getSelection()\n if (!domSelection || domSelection.rangeCount === 0) {\n return\n }\n const existingDOMRange = domSelection.getRangeAt(0)\n try {\n const newDOMRange = ReactEditor.toDOMRange(\n slateEditor,\n slateEditor.selection,\n )\n if (\n newDOMRange.startOffset !== existingDOMRange.startOffset ||\n newDOMRange.endOffset !== existingDOMRange.endOffset\n ) {\n debug('DOM range out of sync, validating selection')\n // Remove all ranges temporary\n domSelection?.removeAllRanges()\n // Set the correct range\n domSelection.addRange(newDOMRange)\n }\n } catch {\n debug(`Could not resolve selection, selecting top document`)\n // Deselect the editor\n Transforms.deselect(slateEditor)\n // Select top document if there is a top block to select\n if (slateEditor.children.length > 0) {\n Transforms.select(slateEditor, [0, 0])\n }\n slateEditor.onChange()\n }\n }, [ref, slateEditor])\n\n // Observe mutations (child list and subtree) to this component's DOM,\n // and make sure the editor selection is valid when that happens.\n useEffect(() => {\n if (editableElement) {\n const mutationObserver = new MutationObserver(validateSelection)\n mutationObserver.observe(editableElement, {\n attributeOldValue: false,\n attributes: false,\n characterData: false,\n childList: true,\n subtree: true,\n })\n return () => {\n mutationObserver.disconnect()\n }\n }\n return undefined\n }, [validateSelection, editableElement])\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (props.onKeyDown) {\n props.onKeyDown(event)\n }\n if (!event.isDefaultPrevented()) {\n slateEditor.pteWithHotKeys(event)\n }\n if (!event.isDefaultPrevented()) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'key.down',\n keyboardEvent: {\n key: event.key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n },\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [props, editorActor, slateEditor],\n )\n\n const handleKeyUp = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (props.onKeyUp) {\n props.onKeyUp(event)\n }\n if (!event.isDefaultPrevented()) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'key.up',\n keyboardEvent: {\n key: event.key,\n code: event.code,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n },\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n }\n },\n [props, editorActor, slateEditor],\n )\n\n const scrollSelectionIntoViewToSlate = useMemo(() => {\n // Use slate-react default scroll into view\n if (scrollSelectionIntoView === undefined) {\n return undefined\n }\n // Disable scroll into view totally\n if (scrollSelectionIntoView === null) {\n return noop\n }\n // Translate PortableTextEditor prop fn to Slate plugin fn\n return (_editor: ReactEditor, domRange: Range) => {\n scrollSelectionIntoView(portableTextEditor, domRange)\n }\n }, [portableTextEditor, scrollSelectionIntoView])\n\n const decorate: (entry: NodeEntry) => BaseRange[] = useCallback(\n ([, path]) => {\n if (isEqualToEmptyEditor(slateEditor.children, schemaTypes)) {\n return [\n {\n anchor: {\n path: [0, 0],\n offset: 0,\n },\n focus: {\n path: [0, 0],\n offset: 0,\n },\n placeholder: true,\n },\n ]\n }\n // Editor node has a path length of 0 (should never be decorated)\n if (path.length === 0) {\n return []\n }\n const result = rangeDecorationState.filter((item) => {\n // Special case in order to only return one decoration for collapsed ranges\n if (SlateRange.isCollapsed(item)) {\n // Collapsed ranges should only be decorated if they are on a block child level (length 2)\n if (path.length !== 2) {\n return false\n }\n return (\n Path.equals(item.focus.path, path) &&\n Path.equals(item.anchor.path, path)\n )\n }\n // Include decorations that either include or intersects with this path\n return (\n SlateRange.intersection(item, {\n anchor: {path, offset: 0},\n focus: {path, offset: 0},\n }) || SlateRange.includes(item, path)\n )\n })\n if (result.length > 0) {\n return result\n }\n return []\n },\n [slateEditor, schemaTypes, rangeDecorationState],\n )\n\n // Set the forwarded ref to be the Slate editable DOM element\n // Also set the editable element in a state so that the MutationObserver\n // is setup when this element is ready.\n useEffect(() => {\n ref.current = ReactEditor.toDOMNode(\n slateEditor,\n slateEditor,\n ) as HTMLDivElement | null\n setEditableElement(ref.current)\n }, [slateEditor, ref])\n\n useEffect(() => {\n const window = ReactEditor.getWindow(slateEditor)\n\n const onDragEnd = () => {\n editorActor.send({type: 'dragend'})\n }\n const onDrop = () => {\n editorActor.send({type: 'drop'})\n }\n\n window.document.addEventListener('dragend', onDragEnd)\n window.document.addEventListener('drop', onDrop)\n\n return () => {\n window.document.removeEventListener('dragend', onDragEnd)\n window.document.removeEventListener('drop', onDrop)\n }\n }, [slateEditor, editorActor])\n\n const handleDragStart = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragStart?.(event)\n\n if (!event.isDefaultPrevented() && !event.isPropagationStopped()) {\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor,\n }),\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for dragstart event')\n return\n }\n\n if (ReactEditor.hasTarget(slateEditor, event.target)) {\n const node = ReactEditor.toSlateNode(slateEditor, event.target)\n const path = ReactEditor.findPath(slateEditor, node)\n const voidMatch =\n (SlateElement.isElement(node) &&\n Editor.isVoid(slateEditor, node)) ||\n Editor.void(slateEditor, {at: path, voids: true})\n\n // If starting a drag on a void node, make sure it is selected\n // so that it shows up in the selection's fragment.\n if (voidMatch) {\n const range = Editor.range(slateEditor, path)\n Transforms.select(slateEditor, range)\n }\n }\n\n editorActor.send({\n type: 'dragstart',\n origin: position,\n })\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragstart',\n dataTransfer: event.dataTransfer,\n position,\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n event.stopPropagation()\n }\n },\n [onDragStart, editorActor, slateEditor],\n )\n\n const handleDrag = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDrag?.(event)\n\n if (!event.isDefaultPrevented() && !event.isPropagationStopped()) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.drag',\n dataTransfer: event.dataTransfer,\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n event.stopPropagation()\n }\n },\n [onDrag, editorActor, slateEditor],\n )\n\n const handleDragEnd = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragEnd?.(event)\n\n if (!event.isDefaultPrevented() && !event.isPropagationStopped()) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragend',\n dataTransfer: event.dataTransfer,\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n event.stopPropagation()\n }\n },\n [onDragEnd, editorActor, slateEditor],\n )\n\n const handleDragEnter = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragEnter?.(event)\n\n if (!event.isDefaultPrevented() && !event.isPropagationStopped()) {\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor,\n }),\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for dragenter event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragenter',\n dataTransfer: event.dataTransfer,\n position,\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n event.stopPropagation()\n }\n },\n [onDragEnter, editorActor, slateEditor],\n )\n\n const handleDragOver = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragOver?.(event)\n\n if (!event.isDefaultPrevented() && !event.isPropagationStopped()) {\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor,\n }),\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for dragover event')\n return\n }\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragover',\n dataTransfer: event.dataTransfer,\n position,\n },\n editor: slateEditor,\n nativeEvent: event,\n })\n\n // Prevent Slate from handling the event\n event.stopPropagation()\n }\n },\n [onDragOver, editorActor, slateEditor],\n )\n\n const handleDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDrop?.(event)\n\n if (!event.isDefaultPrevented() && !event.isPropagationStopped()) {\n const position = getEventPosition({\n snapshot: getEditorSnapshot({\n editorActorSnapshot: editorActor.getSnapshot(),\n slateEditorInstance: slateEditor,\n }),\n slateEditor,\n event: event.nativeEvent,\n })\n\n if (!position) {\n console.warn('Could not find position for drop event')\n return\n }\n\n // Find and select the range where the drop happened\n const range = ReactEditor.findEventRange(slateEditor, event)\n slateEditor.select(range)\n\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.drop',\n dataTransfer: event.dataTransfer,\n position,\n },\n editor: slateEditor,\n })\n\n // Prevent Slate from handling the event\n event.preventDefault()\n }\n },\n [onDrop, editorActor, slateEditor],\n )\n\n const handleDragLeave = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n onDragLeave?.(event)\n\n if (!event.isDefaultPrevented() && !event.isPropagationStopped()) {\n editorActor.send({\n type: 'behavior event',\n behaviorEvent: {\n type: 'drag.dragleave',\n dataTransfer: event.dataTransfer,\n },\n editor: slateEditor,\n })\n }\n },\n [onDragLeave, editorActor, slateEditor],\n )\n\n if (!portableTextEditor) {\n return null\n }\n\n return hasInvalidValue ? null : (\n <SlateEditable\n {...restProps}\n autoFocus={false}\n className={restProps.className || 'pt-editable'}\n decorate={decorate}\n onBlur={handleOnBlur}\n onCopy={handleCopy}\n onCut={handleCut}\n onClick={handleClick}\n onDOMBeforeInput={handleOnBeforeInput}\n onDragStart={handleDragStart}\n onDrag={handleDrag}\n onDragEnd={handleDragEnd}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onDragLeave={handleDragLeave}\n onFocus={handleOnFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onPaste={handlePaste}\n readOnly={readOnly}\n // We have implemented our own placeholder logic with decorations.\n // This 'renderPlaceholder' should not be used.\n renderPlaceholder={undefined}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n scrollSelectionIntoView={scrollSelectionIntoViewToSlate}\n />\n )\n})\n\nPortableTextEditable.displayName = 'ForwardRef(PortableTextEditable)'\n","import {useEffect} from 'react'\nimport {useEffectEvent} from 'use-effect-event'\nimport type {EditorEmittedEvent} from './editor/editor-machine'\nimport {useEditor} from './editor/editor-provider'\n\n/**\n * @public\n * @deprecated\n * This component has been renamed. Use `EventListenerPlugin` instead.\n *\n * ```\n * import {EventListenerPlugin} from '@portabletext/editor/plugins'\n * ```\n */\nexport function EditorEventListener(props: {\n on: (event: EditorEmittedEvent) => void\n}) {\n const editor = useEditor()\n const on = useEffectEvent(props.on)\n\n useEffect(() => {\n const subscription = editor.on('*', on)\n\n return () => {\n subscription.unsubscribe()\n }\n }, [editor])\n\n return null\n}\n"],"names":["getEventPosition","snapshot","slateEditor","event","DOMEditor","hasTarget","target","node","toSlateNode","isClipboardEvent","selection","context","block","isEditor","Editor","getEventPositionBlock","getEventPositionSelection","ReactEditor","elementRect","toDOMNode","getBoundingClientRect","top","height","Math","abs","pageY","range","getSlateRangeFromEvent","toPortableTextRange","value","schema","collapsedSelection","selectors","focusTextBlock","focusSpan","type","blockStartPoint","utils","blockEndPoint","anchor","focus","editor","isDOMNode","window","getWindow","domRange","document","caretPositionFromPoint","undefined","position","clientX","clientY","createRange","setStart","offsetNode","offset","setEnd","caretRangeFromPoint","console","warn","toSlateRange","exactMatch","suppressThrow","normalizePoint","point","newPath","newOffset","blockKey","path","_key","childKey","find","blk","push","children","Array","isArray","length","child","cld","text","normalizeSelection","newAnchor","newFocus","isEqual","backward","DefaultBlockObject","props","$","_c","t0","Symbol","for","userSelect","t1","_type","jsxs","DefaultInlineObject","DropIndicator","width","borderBottom","zIndex","useDraggable","editorActor","useContext","EditorActorContext","useSlateStatic","blockElement","setBlockElement","useState","blockRef","element","current","useEffect","t2","send","handleDragEnd","t3","getEditorSnapshot","editorActorSnapshot","getSnapshot","slateEditorInstance","nativeEvent","error","HTMLElement","dragGhost","cloneNode","customGhost","querySelector","setAttribute","body","style","left","boxSizing","appendChild","rect","x","y","dataTransfer","setDragImage","origin","ghost","handleDragStart","readOnly","t4","draggableProps","draggable","onDragStart","onDragEnd","debugWithName","EMPTY_ANNOTATIONS","inlineBlockStyle","display","Element","attributes","schemaTypes","renderBlock","renderChild","renderListItem","renderStyle","spellCheck","selected","useSelected","useRef","inlineBlockObjectRef","focused","Range","isCollapsed","dragPositionBlock","setDragPositionBlock","behavior","defineBehavior","on","guard","dropFocusBlock","dragOrigin","beta","internalDrag","some","draggedBlock","actions","effect","useMemo","fromSlateValue","name","KEY_TO_VALUE_ELEMENT","get","renderedBlock","className","blockPath","Error","isInline","findPath","depth","schemaType","inlineObjects","SlateElement","isElement","elmPath","debugRenders","annotations","jsx","editorElementRef","isListItem","blockStyleType","styles","item","level","listItem","isListBlock","listType","lists","renderProps","Object","defineProperty","enumerable","propsOrDefaultRendered","blockObjects","renderedBlockFromProps","_props","displayName","debug","EMPTY_MARKS","Leaf","leaf","renderDecorator","renderAnnotation","spanRef","portableTextEditor","usePortableTextEditor","blockSelected","setFocused","setSelected","parent","decoratorValues","decorators","map","dec","marks","uniq","filter","mark","includes","annotationMarks","markDefs","def","Boolean","shouldTrackSelectionAndFocus","sel","PortableTextEditor","getSelection","isCollapsedSelection","startTransition","setSelectedFromRange","useCallback","winSelection","rangeCount","getRangeAt","intersectsNode","onBlur","onFocus","onSelection","unsubscribe","content","returnedChildren","Text","isText","span","forEach","annotation","t","_child","createWithHotkeys","hotkeysFromOptions","reservedHotkeys","activeHotkeys","pteWithHotKeys","keys","cat","hotkey","isHotkey","preventDefault","possibleMark","behaviorEvent","decorator","possibleCommand","command","withSyncRangeDecorations","syncRangeDecorations","originalApply","apply","op","matches","PLACEHOLDER_STYLE","pointerEvents","right","PortableTextEditable","forwardRef","forwardedRef","hotkeys","onBeforeInput","onPaste","onCopy","onCut","onClick","onDrag","onDragEnter","onDragOver","onDrop","onDragLeave","rangeDecorations","renderPlaceholder","propsSelection","scrollSelectionIntoView","restProps","ref","editableElement","setEditableElement","hasInvalidValue","setHasInvalidValue","rangeDecorationState","setRangeDecorationsState","rangeDecorationsRef","useSelector","s","useSlate","blockTypeName","withHotKeys","renderElement","eProps","renderLeaf","lProps","rendered","placeholder","Fragment","decoration","rangeDecoration","component","restoreSelectionFromProps","JSON","stringify","normalizedSelection","slateRange","Transforms","select","operations","o","onChange","operation","newSlateRanges","rangeDecorationItem","SlateRange","isRange","onMoved","newSelection","newRange","moveRangeByOperation","getValue","newRangeSelection","onReady","onInvalidValue","onValueChanged","syncedRangeDecorations","setSyncedRangeDecorations","teardown","handleCopy","clipboardData","stopPropagation","data","handleCut","handlePaste","onPasteResult","Promise","resolve","then","result","insert","blocks","parseBlocks","keyGenerator","options","refreshKeys","placement","catch","finally","handleOnFocus","isDefaultPrevented","start","handleClick","isPropagationStopped","handleOnBlur","handleOnBeforeInput","validateSelection","root","findDocumentOrShadowRoot","activeElement","domSelection","existingDOMRange","newDOMRange","toDOMRange","startOffset","endOffset","removeAllRanges","addRange","deselect","mutationObserver","MutationObserver","observe","attributeOldValue","characterData","childList","subtree","disconnect","handleKeyDown","onKeyDown","keyboardEvent","key","code","altKey","ctrlKey","metaKey","shiftKey","handleKeyUp","onKeyUp","scrollSelectionIntoViewToSlate","noop","_editor","decorate","isEqualToEmptyEditor","Path","equals","intersection","addEventListener","removeEventListener","isVoid","void","at","voids","handleDrag","handleDragEnter","handleDragOver","handleDrop","findEventRange","handleDragLeave","SlateEditable","EditorEventListener","useEditor","useEffectEvent","subscription"],"mappings":"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"}