{"version":3,"file":"BlocksContent.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n  Box,\n  BoxComponent,\n  Flex,\n  FlexComponent,\n  IconButton,\n  IconButtonComponent,\n  useComposedRefs,\n} from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Editor, Range, Transforms } from 'slate';\nimport { ReactEditor, type RenderElementProps, type RenderLeafProps, Editable } from 'slate-react';\nimport { styled, CSSProperties, css } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDragAndDrop, DIRECTIONS } from '../../../../../hooks/useDragAndDrop';\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { decorateCode } from './Blocks/Code';\nimport { type BlocksStore, useBlocksEditorContext } from './BlocksEditor';\nimport { useConversionModal } from './BlocksToolbar';\nimport { type ModifiersStore } from './Modifiers';\nimport { getEntries, isLinkNode, isListNode } from './utils/types';\n\nconst StyledEditable = styled(Editable)<{ isExpandedMode: boolean }>`\n  // The outline style is set on the wrapper with :focus-within\n  outline: none;\n  display: flex;\n  flex-direction: column;\n  gap: ${({ theme }) => theme.spaces[3]};\n  height: 100%;\n  // For fullscreen align input in the center with fixed width\n  width: ${(props) => (props.isExpandedMode ? '512px' : '100%')};\n  margin: auto;\n\n  > *:last-child {\n    padding-bottom: ${({ theme }) => theme.spaces[3]};\n  }\n`;\n\nconst Wrapper = styled<BoxComponent>(Box)<{ isOverDropTarget: boolean }>`\n  position: ${({ isOverDropTarget }) => isOverDropTarget && 'relative'};\n`;\n\ntype DragDirection = (typeof DIRECTIONS)[keyof typeof DIRECTIONS];\n\nconst DropPlaceholder = styled<BoxComponent>(Box)<{\n  dragDirection: DragDirection | null;\n  placeholderMargin: 1 | 2;\n}>`\n  position: absolute;\n  right: 0;\n\n  // Show drop placeholder 8px above or below the drop target\n  ${({ dragDirection, theme, placeholderMargin }) => css`\n    top: ${dragDirection === DIRECTIONS.UPWARD && `-${theme.spaces[placeholderMargin]}`};\n    bottom: ${dragDirection === DIRECTIONS.DOWNWARD && `-${theme.spaces[placeholderMargin]}`};\n  `}\n`;\n\nconst DragItem = styled<FlexComponent>(Flex)<{ $dragVisibility: CSSProperties['visibility'] }>`\n  // Style each block rendered using renderElement()\n  & > [data-slate-node='element'] {\n    width: 100%;\n    opacity: inherit;\n  }\n\n  // Set the visibility of drag button\n  [role='button'] {\n    visibility: ${(props) => props.$dragVisibility};\n    opacity: inherit;\n  }\n  &[aria-disabled='true'] {\n    user-drag: none;\n  }\n`;\n\nconst DragIconButton = styled<IconButtonComponent<'div'>>(IconButton)<{\n  $dragHandleTopMargin?: CSSProperties['marginTop'];\n}>`\n  user-select: none;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border: none;\n  border-radius: ${({ theme }) => theme.borderRadius};\n  padding-left: ${({ theme }) => theme.spaces[0]};\n  padding-right: ${({ theme }) => theme.spaces[0]};\n  padding-top: ${({ theme }) => theme.spaces[1]};\n  padding-bottom: ${({ theme }) => theme.spaces[1]};\n  visibility: hidden;\n  cursor: grab;\n  opacity: inherit;\n  margin-top: ${(props) => props.$dragHandleTopMargin ?? 0};\n\n  &:hover {\n    background: ${({ theme }) => theme.colors.neutral100};\n  }\n  &:active {\n    cursor: grabbing;\n    background: ${({ theme }) => theme.colors.neutral150};\n  }\n  &[aria-disabled='true'] {\n    visibility: hidden;\n  }\n  svg {\n    min-width: ${({ theme }) => theme.spaces[3]};\n\n    path {\n      fill: ${({ theme }) => theme.colors.neutral500};\n    }\n  }\n`;\n\ntype Direction = {\n  setDragDirection: (direction: DragDirection) => void;\n  dragDirection: DragDirection | null;\n};\n\ntype DragAndDropElementProps = Direction & {\n  children: RenderElementProps['children'];\n  index: Array<number>;\n  dragHandleTopMargin?: CSSProperties['marginTop'];\n};\n\nconst DragAndDropElement = ({\n  children,\n  index,\n  setDragDirection,\n  dragDirection,\n  dragHandleTopMargin,\n}: DragAndDropElementProps) => {\n  const { editor, disabled, name, setLiveText } = useBlocksEditorContext('drag-and-drop');\n  const { formatMessage } = useIntl();\n  const [dragVisibility, setDragVisibility] = React.useState<CSSProperties['visibility']>('hidden');\n\n  const handleMoveBlock = React.useCallback(\n    (newIndex: Array<number>, currentIndex: Array<number>) => {\n      Transforms.moveNodes(editor, {\n        at: currentIndex,\n        to: newIndex,\n      });\n\n      // Add 1 to the index for the live text message\n      const currentIndexPosition = [currentIndex[0] + 1, ...currentIndex.slice(1)];\n      const newIndexPosition = [newIndex[0] + 1, ...newIndex.slice(1)];\n\n      setLiveText(\n        formatMessage(\n          {\n            id: getTranslation('components.Blocks.dnd.reorder'),\n            defaultMessage: '{item}, moved. New position in the editor: {position}.',\n          },\n          {\n            item: `${name}.${currentIndexPosition.join(',')}`,\n            position: `${newIndexPosition.join(',')} of ${editor.children.length}`,\n          }\n        )\n      );\n    },\n    [editor, formatMessage, name, setLiveText]\n  );\n\n  const [{ handlerId, isDragging, isOverDropTarget, direction }, blockRef, dropRef, dragRef] =\n    useDragAndDrop(!disabled, {\n      type: `${ItemTypes.BLOCKS}_${name}`,\n      index,\n      item: {\n        index,\n        displayedValue: children,\n      },\n      onDropItem(currentIndex, newIndex) {\n        if (newIndex) handleMoveBlock(newIndex, currentIndex);\n      },\n    });\n\n  const composedBoxRefs = useComposedRefs(blockRef, dropRef);\n\n  // Set Drag direction before loosing state while dragging\n  React.useEffect(() => {\n    if (direction) {\n      setDragDirection(direction);\n    }\n  }, [direction, setDragDirection]);\n\n  // On selection change hide drag handle\n  React.useEffect(() => {\n    setDragVisibility('hidden');\n  }, [editor.selection]);\n\n  return (\n    <Wrapper ref={composedBoxRefs} isOverDropTarget={isOverDropTarget}>\n      {isOverDropTarget && (\n        <DropPlaceholder\n          borderStyle=\"solid\"\n          borderColor=\"secondary200\"\n          borderWidth=\"2px\"\n          width=\"calc(100% - 24px)\"\n          marginLeft=\"auto\"\n          dragDirection={dragDirection}\n          // For list items placeholder reduce the margin around\n          placeholderMargin={children.props.as && children.props.as === 'li' ? 1 : 2}\n        />\n      )}\n      {isDragging ? (\n        <CloneDragItem dragHandleTopMargin={dragHandleTopMargin}>{children}</CloneDragItem>\n      ) : (\n        <DragItem\n          ref={dragRef}\n          data-handler-id={handlerId}\n          gap={2}\n          paddingLeft={2}\n          alignItems=\"start\"\n          onDragStart={(event) => {\n            const target = event.target as HTMLElement;\n            const currentTarget = event.currentTarget as HTMLElement;\n\n            // Dragging action should only trigger drag event when button is dragged, however update styles on the whole dragItem.\n            if (target.getAttribute('role') !== 'button') {\n              event.preventDefault();\n            } else {\n              // Setting styles using dragging state is not working, so set it on current target element as nodes get dragged\n              currentTarget.style.opacity = '0.5';\n            }\n          }}\n          onDragEnd={(event) => {\n            const currentTarget = event.currentTarget as HTMLElement;\n            currentTarget.style.opacity = '1';\n          }}\n          onMouseMove={() => setDragVisibility('visible')}\n          onSelect={() => setDragVisibility('visible')}\n          onMouseLeave={() => setDragVisibility('hidden')}\n          aria-disabled={disabled}\n          $dragVisibility={dragVisibility}\n        >\n          <DragIconButton\n            tag=\"div\"\n            contentEditable={false}\n            role=\"button\"\n            tabIndex={0}\n            withTooltip={false}\n            label={formatMessage({\n              id: getTranslation('components.DragHandle-label'),\n              defaultMessage: 'Drag',\n            })}\n            onClick={(e) => e.stopPropagation()}\n            aria-disabled={disabled}\n            disabled={disabled}\n            draggable\n            // For some blocks top margin added to drag handle to align at the text level\n            $dragHandleTopMargin={dragHandleTopMargin}\n          >\n            <Drag color=\"primary500\" />\n          </DragIconButton>\n          {children}\n        </DragItem>\n      )}\n    </Wrapper>\n  );\n};\n\ninterface CloneDragItemProps {\n  children: RenderElementProps['children'];\n  dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\n// To prevent applying opacity to the original item being dragged, display a cloned element without opacity.\nconst CloneDragItem = ({ children, dragHandleTopMargin }: CloneDragItemProps) => {\n  const { formatMessage } = useIntl();\n\n  return (\n    <DragItem gap={2} paddingLeft={2} alignItems=\"start\" $dragVisibility=\"visible\">\n      <DragIconButton\n        tag=\"div\"\n        role=\"button\"\n        withTooltip={false}\n        label={formatMessage({\n          id: getTranslation('components.DragHandle-label'),\n          defaultMessage: 'Drag',\n        })}\n        $dragHandleTopMargin={dragHandleTopMargin}\n      >\n        <Drag color=\"neutral600\" />\n      </DragIconButton>\n      {children}\n    </DragItem>\n  );\n};\n\ninterface ExtendedRenderLeafProps extends RenderLeafProps {\n  leaf: RenderLeafProps['leaf'] & { className?: string };\n}\n\nconst baseRenderLeaf = (props: ExtendedRenderLeafProps, modifiers: ModifiersStore) => {\n  // Recursively wrap the children for each active modifier\n  const wrappedChildren = getEntries(modifiers).reduce((currentChildren, modifierEntry) => {\n    const [name, modifier] = modifierEntry;\n\n    if (props.leaf[name]) {\n      return modifier.renderLeaf(currentChildren);\n    }\n\n    return currentChildren;\n  }, props.children);\n\n  return (\n    <span {...props.attributes} className={props.leaf.className}>\n      {wrappedChildren}\n    </span>\n  );\n};\n\ntype BaseRenderElementProps = Direction & {\n  props: RenderElementProps['children'];\n  blocks: BlocksStore;\n  editor: Editor;\n};\n\nconst baseRenderElement = ({\n  props,\n  blocks,\n  editor,\n  setDragDirection,\n  dragDirection,\n}: BaseRenderElementProps) => {\n  const { element } = props;\n\n  const blockMatch = Object.values(blocks).find((block) => block.matchNode(element));\n  const block = blockMatch || blocks.paragraph;\n  const nodePath = ReactEditor.findPath(editor, element);\n\n  // Link is inline block so it cannot be dragged\n  // List items and nested list blocks i.e. lists with indent level higher than 0 are skipped from dragged items\n  if (\n    isLinkNode(element) ||\n    (isListNode(element) && element.indentLevel && element.indentLevel > 0) ||\n    element.type === 'list-item'\n  ) {\n    return block.renderElement(props);\n  }\n\n  return (\n    <DragAndDropElement\n      index={nodePath}\n      setDragDirection={setDragDirection}\n      dragDirection={dragDirection}\n      dragHandleTopMargin={block.dragHandleTopMargin}\n    >\n      {block.renderElement(props)}\n    </DragAndDropElement>\n  );\n};\n\nconst dragNoop = () => true;\n\ninterface BlocksContentProps {\n  placeholder?: string;\n  ariaLabelId: string;\n}\n\nconst BlocksContent = ({ placeholder, ariaLabelId }: BlocksContentProps) => {\n  const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode } =\n    useBlocksEditorContext('BlocksContent');\n  const blocksRef = React.useRef<HTMLDivElement>(null);\n  const { formatMessage } = useIntl();\n  const [dragDirection, setDragDirection] = React.useState<DragDirection | null>(null);\n  const { modalElement, handleConversionResult } = useConversionModal();\n\n  // Create renderLeaf function based on the modifiers store\n  const renderLeaf = React.useCallback(\n    (props: ExtendedRenderLeafProps) => baseRenderLeaf(props, modifiers),\n    [modifiers]\n  );\n\n  const handleMoveBlocks = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n    if (!editor.selection) return;\n\n    const start = Range.start(editor.selection);\n    const currentIndex = [start.path[0]];\n    let newIndexPosition = 0;\n\n    if (event.key === 'ArrowUp') {\n      newIndexPosition = currentIndex[0] > 0 ? currentIndex[0] - 1 : currentIndex[0];\n    } else {\n      newIndexPosition =\n        currentIndex[0] < editor.children.length - 1 ? currentIndex[0] + 1 : currentIndex[0];\n    }\n\n    const newIndex = [newIndexPosition];\n\n    if (newIndexPosition !== currentIndex[0]) {\n      Transforms.moveNodes(editor, {\n        at: currentIndex,\n        to: newIndex,\n      });\n\n      setLiveText(\n        formatMessage(\n          {\n            id: getTranslation('components.Blocks.dnd.reorder'),\n            defaultMessage: '{item}, moved. New position in the editor: {position}.',\n          },\n          {\n            item: `${name}.${currentIndex[0] + 1}`,\n            position: `${newIndex[0] + 1} of ${editor.children.length}`,\n          }\n        )\n      );\n\n      event.preventDefault();\n    }\n  };\n\n  // Create renderElement function base on the blocks store\n  const renderElement = React.useCallback(\n    (props: RenderElementProps) =>\n      baseRenderElement({ props, blocks, editor, dragDirection, setDragDirection }),\n    [blocks, editor, dragDirection, setDragDirection]\n  );\n\n  const checkSnippet = (event: React.KeyboardEvent<HTMLElement>) => {\n    // Get current text block\n    if (!editor.selection) {\n      return;\n    }\n\n    const [textNode, textNodePath] = Editor.node(editor, editor.selection.anchor.path);\n\n    // Narrow the type to a text node\n    if (Editor.isEditor(textNode) || textNode.type !== 'text') {\n      return;\n    }\n\n    // Don't check for snippets if we're not at the start of a block\n    if (textNodePath.at(-1) !== 0) {\n      return;\n    }\n\n    // Check if the text node starts with a known snippet\n    const blockMatchingSnippet = Object.values(blocks).find((block) => {\n      return block.snippets?.includes(textNode.text);\n    });\n\n    if (blockMatchingSnippet?.handleConvert) {\n      // Prevent the space from being created and delete the snippet\n      event.preventDefault();\n      Transforms.delete(editor, {\n        distance: textNode.text.length,\n        unit: 'character',\n        reverse: true,\n      });\n\n      // Convert the selected block\n      const maybeRenderModal = blockMatchingSnippet.handleConvert(editor);\n      handleConversionResult(maybeRenderModal);\n    }\n  };\n\n  const handleEnter = (event: React.KeyboardEvent<HTMLElement>) => {\n    if (!editor.selection) {\n      return;\n    }\n\n    const selectedNode = editor.children[editor.selection.anchor.path[0]];\n    const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n    if (!selectedBlock) {\n      return;\n    }\n\n    // Allow forced line breaks when shift is pressed\n    if (event.shiftKey && selectedNode.type !== 'image') {\n      Transforms.insertText(editor, '\\n');\n      return;\n    }\n\n    // Check if there's an enter handler for the selected block\n    if (selectedBlock.handleEnterKey) {\n      selectedBlock.handleEnterKey(editor);\n    } else {\n      blocks.paragraph.handleEnterKey!(editor);\n    }\n  };\n\n  const handleBackspaceEvent = (event: React.KeyboardEvent<HTMLElement>) => {\n    if (!editor.selection) {\n      return;\n    }\n\n    const selectedNode = editor.children[editor.selection.anchor.path[0]];\n    const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n\n    if (!selectedBlock) {\n      return;\n    }\n\n    if (selectedBlock.handleBackspaceKey) {\n      selectedBlock.handleBackspaceKey(editor, event);\n    }\n  };\n\n  const handleTab = (event: React.KeyboardEvent<HTMLElement>) => {\n    if (!editor.selection) {\n      return;\n    }\n\n    const selectedNode = editor.children[editor.selection.anchor.path[0]];\n    const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n    if (!selectedBlock) {\n      return;\n    }\n\n    if (selectedBlock.handleTab) {\n      event.preventDefault();\n      selectedBlock.handleTab(editor);\n    }\n  };\n\n  const handleKeyboardShortcuts = (event: React.KeyboardEvent<HTMLElement>) => {\n    const isCtrlOrCmd = event.metaKey || event.ctrlKey;\n\n    if (isCtrlOrCmd) {\n      // Check if there's a modifier to toggle\n      Object.values(modifiers).forEach((value) => {\n        if (value.isValidEventKey(event)) {\n          value.handleToggle(editor);\n          return;\n        }\n      });\n      if (event.shiftKey && ['ArrowUp', 'ArrowDown'].includes(event.key)) {\n        handleMoveBlocks(editor, event);\n      }\n    }\n  };\n\n  const handleKeyDown: React.KeyboardEventHandler<HTMLElement> = (event) => {\n    // Find the right block-specific handlers for enter and backspace key presses\n    switch (event.key) {\n      case 'Enter':\n        event.preventDefault();\n        return handleEnter(event);\n      case 'Backspace':\n        return handleBackspaceEvent(event);\n      case 'Tab':\n        return handleTab(event);\n      case 'Escape':\n        return ReactEditor.blur(editor);\n    }\n    handleKeyboardShortcuts(event);\n    // Check if a snippet was triggered\n    if (event.key === ' ') {\n      checkSnippet(event);\n    }\n  };\n\n  /**\n   *  scrollSelectionIntoView : Slate's default method to scroll a DOM selection into the view,\n   *  thats shifting layout for us when there is a overflowY:scroll on the viewport.\n   *  We are overriding it to check if the selection is not fully within the visible area of the editor,\n   *  we use scrollBy one line to the bottom\n   */\n\n  const handleScrollSelectionIntoView = React.useCallback(() => {\n    if (!editor.selection || !blocksRef.current) {\n      return;\n    }\n\n    const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n    const domRect = domRange.getBoundingClientRect();\n\n    const editorRect = blocksRef.current.getBoundingClientRect();\n\n    // Check if the selection is not fully within the visible area of the editor\n    if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {\n      // Scroll by one line to the bottom\n      blocksRef.current.scrollBy({\n        top: 28, // 20px is the line-height + 8px line gap\n        behavior: 'smooth',\n      });\n    }\n  }, [editor]);\n\n  return (\n    <Box\n      ref={blocksRef}\n      grow={1}\n      width=\"100%\"\n      overflow=\"auto\"\n      fontSize={2}\n      background=\"neutral0\"\n      color=\"neutral800\"\n      lineHeight={6}\n      paddingRight={7}\n      paddingTop={6}\n      paddingBottom={3}\n    >\n      <StyledEditable\n        aria-labelledby={ariaLabelId}\n        readOnly={disabled}\n        placeholder={placeholder}\n        isExpandedMode={isExpandedMode}\n        decorate={decorateCode}\n        renderElement={renderElement}\n        renderLeaf={renderLeaf}\n        onKeyDown={handleKeyDown}\n        scrollSelectionIntoView={handleScrollSelectionIntoView}\n        // As we have our own handler to drag and drop the elements returing true will skip slate's own event handler\n        onDrop={dragNoop}\n        onDragStart={dragNoop}\n      />\n      {modalElement}\n    </Box>\n  );\n};\n\nexport { BlocksContent, BlocksContentProps };\n"],"names":["StyledEditable","styled","Editable","theme","spaces","props","isExpandedMode","Wrapper","Box","isOverDropTarget","DropPlaceholder","dragDirection","placeholderMargin","css","DIRECTIONS","UPWARD","DOWNWARD","DragItem","Flex","$dragVisibility","DragIconButton","IconButton","borderRadius","$dragHandleTopMargin","colors","neutral100","neutral150","neutral500","DragAndDropElement","children","index","setDragDirection","dragHandleTopMargin","editor","disabled","name","setLiveText","useBlocksEditorContext","formatMessage","useIntl","dragVisibility","setDragVisibility","React","useState","handleMoveBlock","useCallback","newIndex","currentIndex","Transforms","moveNodes","at","to","currentIndexPosition","slice","newIndexPosition","id","getTranslation","defaultMessage","item","join","position","length","handlerId","isDragging","direction","blockRef","dropRef","dragRef","useDragAndDrop","type","ItemTypes","BLOCKS","displayedValue","onDropItem","composedBoxRefs","useComposedRefs","useEffect","selection","_jsxs","ref","_jsx","borderStyle","borderColor","borderWidth","width","marginLeft","as","CloneDragItem","data-handler-id","gap","paddingLeft","alignItems","onDragStart","event","target","currentTarget","getAttribute","preventDefault","style","opacity","onDragEnd","onMouseMove","onSelect","onMouseLeave","aria-disabled","tag","contentEditable","role","tabIndex","withTooltip","label","onClick","e","stopPropagation","draggable","Drag","color","baseRenderLeaf","modifiers","wrappedChildren","getEntries","reduce","currentChildren","modifierEntry","modifier","leaf","renderLeaf","span","attributes","className","baseRenderElement","blocks","element","blockMatch","Object","values","find","block","matchNode","paragraph","nodePath","ReactEditor","findPath","isLinkNode","isListNode","indentLevel","renderElement","dragNoop","BlocksContent","placeholder","ariaLabelId","blocksRef","useRef","modalElement","handleConversionResult","useConversionModal","handleMoveBlocks","start","Range","path","key","checkSnippet","textNode","textNodePath","Editor","node","anchor","isEditor","blockMatchingSnippet","snippets","includes","text","handleConvert","delete","distance","unit","reverse","maybeRenderModal","handleEnter","selectedNode","selectedBlock","shiftKey","insertText","handleEnterKey","handleBackspaceEvent","handleBackspaceKey","handleTab","handleKeyboardShortcuts","isCtrlOrCmd","metaKey","ctrlKey","forEach","value","isValidEventKey","handleToggle","handleKeyDown","blur","handleScrollSelectionIntoView","current","domRange","toDOMRange","domRect","getBoundingClientRect","editorRect","top","bottom","scrollBy","behavior","grow","overflow","fontSize","background","lineHeight","paddingRight","paddingTop","paddingBottom","aria-labelledby","readOnly","decorate","decorateCode","onKeyDown","scrollSelectionIntoView","onDrop"],"mappings":"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"}