@strapi/content-manager 5.15.1 → 5.16.1

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 (106) hide show
  1. package/dist/admin/hooks/useDocumentActions.js +7 -3
  2. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  3. package/dist/admin/hooks/useDocumentActions.mjs +7 -3
  4. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  5. package/dist/admin/pages/EditView/components/DocumentActions.js +5 -43
  6. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  7. package/dist/admin/pages/EditView/components/DocumentActions.mjs +6 -44
  8. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +12 -15
  10. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  11. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +12 -15
  12. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
  14. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  15. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
  16. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +2 -2
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +2 -2
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -2
  22. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +3 -3
  24. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +153 -105
  26. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +156 -108
  28. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/UID.js +4 -2
  30. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +4 -2
  32. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  34. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  36. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  38. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  40. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  41. package/dist/admin/pages/ListView/components/Filters.js +1 -0
  42. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  43. package/dist/admin/pages/ListView/components/Filters.mjs +1 -0
  44. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  45. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  46. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  47. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  48. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  49. package/dist/admin/services/documents.js +2 -2
  50. package/dist/admin/services/documents.js.map +1 -1
  51. package/dist/admin/services/documents.mjs +2 -2
  52. package/dist/admin/services/documents.mjs.map +1 -1
  53. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  54. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  55. package/dist/admin/src/services/documents.d.ts +7 -1
  56. package/dist/admin/utils/validation.js +1 -1
  57. package/dist/admin/utils/validation.js.map +1 -1
  58. package/dist/admin/utils/validation.mjs +1 -1
  59. package/dist/admin/utils/validation.mjs.map +1 -1
  60. package/dist/server/controllers/content-types.js +11 -1
  61. package/dist/server/controllers/content-types.js.map +1 -1
  62. package/dist/server/controllers/content-types.mjs +11 -1
  63. package/dist/server/controllers/content-types.mjs.map +1 -1
  64. package/dist/server/controllers/validation/index.js +14 -2
  65. package/dist/server/controllers/validation/index.js.map +1 -1
  66. package/dist/server/controllers/validation/index.mjs +14 -2
  67. package/dist/server/controllers/validation/index.mjs.map +1 -1
  68. package/dist/server/services/data-mapper.js +4 -1
  69. package/dist/server/services/data-mapper.js.map +1 -1
  70. package/dist/server/services/data-mapper.mjs +4 -1
  71. package/dist/server/services/data-mapper.mjs.map +1 -1
  72. package/dist/server/services/document-manager.js +8 -1
  73. package/dist/server/services/document-manager.js.map +1 -1
  74. package/dist/server/services/document-manager.mjs +8 -1
  75. package/dist/server/services/document-manager.mjs.map +1 -1
  76. package/dist/server/services/document-metadata.js +2 -0
  77. package/dist/server/services/document-metadata.js.map +1 -1
  78. package/dist/server/services/document-metadata.mjs +2 -0
  79. package/dist/server/services/document-metadata.mjs.map +1 -1
  80. package/dist/server/services/utils/configuration/attributes.js +1 -1
  81. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  82. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  83. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  84. package/dist/server/services/utils/configuration/layouts.js +1 -1
  85. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  86. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  87. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  88. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  89. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  90. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  91. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  92. package/dist/server/services/utils/populate.js +11 -0
  93. package/dist/server/services/utils/populate.js.map +1 -1
  94. package/dist/server/services/utils/populate.mjs +11 -0
  95. package/dist/server/services/utils/populate.mjs.map +1 -1
  96. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  97. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  98. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  99. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  100. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  101. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  102. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  103. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  104. package/dist/shared/contracts/collection-types.d.ts +0 -1
  105. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  106. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"BlocksContent.js","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\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\n handleKeyboardShortcuts(event);\n\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 const handleScrollSelectionIntoView = () => {\n if (!editor.selection) return;\n const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n const domRect = domRange.getBoundingClientRect();\n const blocksInput = blocksRef.current;\n\n if (!blocksInput) {\n return;\n }\n\n const editorRect = blocksInput.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 blocksInput.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n };\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={() => {\n return true;\n }}\n onDragStart={() => {\n return true;\n }}\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","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","domRange","toDOMRange","domRect","getBoundingClientRect","blocksInput","current","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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"}
1
+ {"version":3,"file":"BlocksContent.js","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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"}
@@ -279,6 +279,7 @@ const baseRenderElement = ({ props, blocks, editor, setDragDirection, dragDirect
279
279
  children: block.renderElement(props)
280
280
  });
281
281
  };
282
+ const dragNoop = ()=>true;
282
283
  const BlocksContent = ({ placeholder, ariaLabelId })=>{
283
284
  const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode } = useBlocksEditorContext('BlocksContent');
284
285
  const blocksRef = React.useRef(null);
@@ -453,24 +454,24 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
453
454
  * thats shifting layout for us when there is a overflowY:scroll on the viewport.
454
455
  * We are overriding it to check if the selection is not fully within the visible area of the editor,
455
456
  * we use scrollBy one line to the bottom
456
- */ const handleScrollSelectionIntoView = ()=>{
457
- if (!editor.selection) return;
458
- const domRange = ReactEditor.toDOMRange(editor, editor.selection);
459
- const domRect = domRange.getBoundingClientRect();
460
- const blocksInput = blocksRef.current;
461
- if (!blocksInput) {
457
+ */ const handleScrollSelectionIntoView = React.useCallback(()=>{
458
+ if (!editor.selection || !blocksRef.current) {
462
459
  return;
463
460
  }
464
- const editorRect = blocksInput.getBoundingClientRect();
461
+ const domRange = ReactEditor.toDOMRange(editor, editor.selection);
462
+ const domRect = domRange.getBoundingClientRect();
463
+ const editorRect = blocksRef.current.getBoundingClientRect();
465
464
  // Check if the selection is not fully within the visible area of the editor
466
465
  if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {
467
466
  // Scroll by one line to the bottom
468
- blocksInput.scrollBy({
467
+ blocksRef.current.scrollBy({
469
468
  top: 28,
470
469
  behavior: 'smooth'
471
470
  });
472
471
  }
473
- };
472
+ }, [
473
+ editor
474
+ ]);
474
475
  return /*#__PURE__*/ jsxs(Box, {
475
476
  ref: blocksRef,
476
477
  grow: 1,
@@ -495,12 +496,8 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
495
496
  onKeyDown: handleKeyDown,
496
497
  scrollSelectionIntoView: handleScrollSelectionIntoView,
497
498
  // As we have our own handler to drag and drop the elements returing true will skip slate's own event handler
498
- onDrop: ()=>{
499
- return true;
500
- },
501
- onDragStart: ()=>{
502
- return true;
503
- }
499
+ onDrop: dragNoop,
500
+ onDragStart: dragNoop
504
501
  }),
505
502
  modalElement
506
503
  ]
@@ -1 +1 @@
1
- {"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\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\n handleKeyboardShortcuts(event);\n\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 const handleScrollSelectionIntoView = () => {\n if (!editor.selection) return;\n const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n const domRect = domRange.getBoundingClientRect();\n const blocksInput = blocksRef.current;\n\n if (!blocksInput) {\n return;\n }\n\n const editorRect = blocksInput.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 blocksInput.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n };\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={() => {\n return true;\n }}\n onDragStart={() => {\n return true;\n }}\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","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","domRange","toDOMRange","domRect","getBoundingClientRect","blocksInput","current","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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"}
1
+ {"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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"}
@@ -103,9 +103,12 @@ function useBlocksEditorContext(consumerName) {
103
103
  }, [
104
104
  value
105
105
  ]);
106
+ const incrementSlateUpdatesCount = React__namespace.useCallback(()=>{
107
+ slateUpdatesCount.current += 1;
108
+ }, []);
106
109
  return {
107
110
  key,
108
- incrementSlateUpdatesCount: ()=>slateUpdatesCount.current += 1
111
+ incrementSlateUpdatesCount
109
112
  };
110
113
  }
111
114
  const pipe = (...fns)=>(value)=>fns.reduce((prev, fn)=>fn(prev), value);
@@ -127,22 +130,59 @@ const BlocksEditor = /*#__PURE__*/ React__namespace.forwardRef(({ disabled = fal
127
130
  editor
128
131
  ]);
129
132
  const { key, incrementSlateUpdatesCount } = useResetKey(value);
130
- const handleSlateChange = (state)=>{
133
+ const debounceTimeout = React__namespace.useRef(null);
134
+ const handleSlateChange = React__namespace.useCallback((state)=>{
131
135
  const isAstChange = editor.operations.some((op)=>op.type !== 'set_selection');
132
136
  if (isAstChange) {
133
- incrementSlateUpdatesCount();
134
- onChange(name, state);
137
+ /**
138
+ * Slate handles the state of the editor internally. We just need to keep Strapi's form
139
+ * state in sync with it in order to make sure that things like the "modified" state
140
+ * isn't broken. Updating the whole state on every change is very expensive however,
141
+ * so we debounce calls to onChange to mitigate input lag.
142
+ */ if (debounceTimeout.current) {
143
+ clearTimeout(debounceTimeout.current);
144
+ }
145
+ // Set a new debounce timeout
146
+ debounceTimeout.current = setTimeout(()=>{
147
+ incrementSlateUpdatesCount();
148
+ onChange(name, state);
149
+ debounceTimeout.current = null;
150
+ }, 300);
135
151
  }
136
- };
137
- const blocks = {
138
- ...Paragraph.paragraphBlocks,
139
- ...Heading.headingBlocks,
140
- ...List.listBlocks,
141
- ...Link.linkBlocks,
142
- ...Image.imageBlocks,
143
- ...Quote.quoteBlocks,
144
- ...Code.codeBlocks
145
- };
152
+ }, [
153
+ editor.operations,
154
+ incrementSlateUpdatesCount,
155
+ name,
156
+ onChange
157
+ ]);
158
+ // Clean up the timeout on unmount
159
+ React__namespace.useEffect(()=>{
160
+ return ()=>{
161
+ if (debounceTimeout.current) {
162
+ clearTimeout(debounceTimeout.current);
163
+ }
164
+ };
165
+ }, []);
166
+ // Ensure the editor is in sync after discard
167
+ React__namespace.useEffect(()=>{
168
+ // Compare the field value with the editor state to check for a stale selection
169
+ if (value && JSON.stringify(editor.children) !== JSON.stringify(value)) {
170
+ // When there is a diff, unset selection to avoid an invalid state
171
+ slate.Transforms.deselect(editor);
172
+ }
173
+ }, [
174
+ editor,
175
+ value
176
+ ]);
177
+ const blocks = React__namespace.useMemo(()=>({
178
+ ...Paragraph.paragraphBlocks,
179
+ ...Heading.headingBlocks,
180
+ ...List.listBlocks,
181
+ ...Link.linkBlocks,
182
+ ...Image.imageBlocks,
183
+ ...Quote.quoteBlocks,
184
+ ...Code.codeBlocks
185
+ }), []);
146
186
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
147
187
  children: [
148
188
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {