@strapi/content-manager 5.33.3 → 5.33.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +23 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +23 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +14 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +14 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +157 -7
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +154 -5
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +28 -20
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +25 -17
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +6 -3
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +7 -4
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +12 -12
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +13 -13
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js +4 -8
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs +4 -7
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -12
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -12
- package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +48 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +49 -2
- package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +47 -13
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +49 -15
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +1 -0
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +10 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +10 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +5 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.js +6 -2
- package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
- package/dist/admin/pages/EditView/components/InputRenderer.mjs +6 -2
- package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +22 -0
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +22 -1
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.d.ts +1 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/types.d.ts +2 -4
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +2 -1
- package/dist/admin/src/pages/EditView/utils/data.d.ts +6 -1
- package/package.json +7 -7
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js +0 -17
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js.map +0 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs +0 -15
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs.map +0 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js +0 -75
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js.map +0 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs +0 -73
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs.map +0 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +0 -88
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +0 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +0 -84
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +0 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.d.ts +0 -11
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.d.ts +0 -9
- package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +0 -12
|
@@ -45,7 +45,11 @@ const StyledEditable = styledComponents.styled(slateReact.Editable)`
|
|
|
45
45
|
// For fullscreen align input in the center with fixed width
|
|
46
46
|
width: ${(props)=>props.$isExpandedMode ? '512px' : '100%'};
|
|
47
47
|
margin: auto;
|
|
48
|
+
font-size: 1.6rem;
|
|
48
49
|
|
|
50
|
+
${({ theme })=>theme.breakpoints.medium} {
|
|
51
|
+
font-size: 1.4rem;
|
|
52
|
+
}
|
|
49
53
|
> *:last-child {
|
|
50
54
|
padding-bottom: ${({ theme })=>theme.spaces[3]};
|
|
51
55
|
}
|
|
@@ -287,9 +291,8 @@ const baseRenderElement = ({ props, blocks, editor, setDragDirection, dragDirect
|
|
|
287
291
|
const blockMatch = Object.values(blocks).find((block)=>block.matchNode(element));
|
|
288
292
|
const block = blockMatch || blocks.paragraph;
|
|
289
293
|
const nodePath = slateReact.ReactEditor.findPath(editor, element);
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
if (types.isLinkNode(element) || types.isListNode(element) && element.indentLevel && element.indentLevel > 0 || element.type === 'list-item') {
|
|
294
|
+
const isDraggable = block.isDraggable?.(element) ?? true;
|
|
295
|
+
if (!isDraggable) {
|
|
293
296
|
return block.renderElement(props);
|
|
294
297
|
}
|
|
295
298
|
return /*#__PURE__*/ jsxRuntime.jsx(DragAndDropElement, {
|
|
@@ -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\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","isOverDropTarget","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","isExpandedMode","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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"}
|
|
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 } 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 font-size: 1.6rem;\n\n ${({ theme }) => theme.breakpoints.medium} {\n font-size: 1.4rem;\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 const isDraggable = block.isDraggable?.(element) ?? true;\n\n if (!isDraggable) {\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","breakpoints","medium","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","isOverDropTarget","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","isDraggable","renderElement","dragNoop","BlocksContent","placeholder","ariaLabelId","isExpandedMode","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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"}
|
|
@@ -12,7 +12,7 @@ import { getTranslation } from '../../../../../utils/translations.mjs';
|
|
|
12
12
|
import { decorateCode } from './Blocks/Code.mjs';
|
|
13
13
|
import { useBlocksEditorContext } from './BlocksEditor.mjs';
|
|
14
14
|
import { useConversionModal } from './BlocksToolbar.mjs';
|
|
15
|
-
import { getEntries
|
|
15
|
+
import { getEntries } from './utils/types.mjs';
|
|
16
16
|
|
|
17
17
|
const StyledEditable = styled(Editable)`
|
|
18
18
|
// The outline style is set on the wrapper with :focus-within
|
|
@@ -24,7 +24,11 @@ const StyledEditable = styled(Editable)`
|
|
|
24
24
|
// For fullscreen align input in the center with fixed width
|
|
25
25
|
width: ${(props)=>props.$isExpandedMode ? '512px' : '100%'};
|
|
26
26
|
margin: auto;
|
|
27
|
+
font-size: 1.6rem;
|
|
27
28
|
|
|
29
|
+
${({ theme })=>theme.breakpoints.medium} {
|
|
30
|
+
font-size: 1.4rem;
|
|
31
|
+
}
|
|
28
32
|
> *:last-child {
|
|
29
33
|
padding-bottom: ${({ theme })=>theme.spaces[3]};
|
|
30
34
|
}
|
|
@@ -266,9 +270,8 @@ const baseRenderElement = ({ props, blocks, editor, setDragDirection, dragDirect
|
|
|
266
270
|
const blockMatch = Object.values(blocks).find((block)=>block.matchNode(element));
|
|
267
271
|
const block = blockMatch || blocks.paragraph;
|
|
268
272
|
const nodePath = ReactEditor.findPath(editor, element);
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
if (isLinkNode(element) || isListNode(element) && element.indentLevel && element.indentLevel > 0 || element.type === 'list-item') {
|
|
273
|
+
const isDraggable = block.isDraggable?.(element) ?? true;
|
|
274
|
+
if (!isDraggable) {
|
|
272
275
|
return block.renderElement(props);
|
|
273
276
|
}
|
|
274
277
|
return /*#__PURE__*/ jsx(DragAndDropElement, {
|
|
@@ -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\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","isOverDropTarget","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","isExpandedMode","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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"}
|
|
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 } 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 font-size: 1.6rem;\n\n ${({ theme }) => theme.breakpoints.medium} {\n font-size: 1.4rem;\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 const isDraggable = block.isDraggable?.(element) ?? true;\n\n if (!isDraggable) {\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","breakpoints","medium","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","isOverDropTarget","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","isDraggable","renderElement","dragNoop","BlocksContent","placeholder","ariaLabelId","isExpandedMode","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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"}
|
|
@@ -22,9 +22,8 @@ var BlocksContent = require('./BlocksContent.js');
|
|
|
22
22
|
var BlocksToolbar = require('./BlocksToolbar.js');
|
|
23
23
|
var EditorLayout = require('./EditorLayout.js');
|
|
24
24
|
var Modifiers = require('./Modifiers.js');
|
|
25
|
-
var withImages = require('./plugins/withImages.js');
|
|
26
|
-
var withLinks = require('./plugins/withLinks.js');
|
|
27
25
|
var withStrapiSchema = require('./plugins/withStrapiSchema.js');
|
|
26
|
+
var types = require('./utils/types.js');
|
|
28
27
|
|
|
29
28
|
function _interopNamespaceDefault(e) {
|
|
30
29
|
var n = Object.create(null);
|
|
@@ -121,7 +120,17 @@ const pipe = (...fns)=>(value)=>fns.reduce((prev, fn)=>fn(prev), value);
|
|
|
121
120
|
};
|
|
122
121
|
const BlocksEditor = /*#__PURE__*/ React__namespace.forwardRef(({ disabled = false, name, onChange, value, error, ...contentProps }, forwardedRef)=>{
|
|
123
122
|
const { formatMessage } = reactIntl.useIntl();
|
|
124
|
-
const
|
|
123
|
+
const blocks = React__namespace.useMemo(()=>({
|
|
124
|
+
...Paragraph.paragraphBlocks,
|
|
125
|
+
...Heading.headingBlocks,
|
|
126
|
+
...List.listBlocks,
|
|
127
|
+
...Link.linkBlocks,
|
|
128
|
+
...Image.imageBlocks,
|
|
129
|
+
...Quote.quoteBlocks,
|
|
130
|
+
...Code.codeBlocks
|
|
131
|
+
}), []);
|
|
132
|
+
const blockRegisteredPlugins = Object.values(blocks).map((block)=>block.plugin).filter(types.isNonNullable);
|
|
133
|
+
const [editor] = React__namespace.useState(()=>pipe(slateHistory.withHistory, withStrapiSchema.withStrapiSchema, slateReact.withReact, ...blockRegisteredPlugins)(slate.createEditor()));
|
|
125
134
|
const [liveText, setLiveText] = React__namespace.useState('');
|
|
126
135
|
const ariaDescriptionId = React__namespace.useId();
|
|
127
136
|
const [isExpandedMode, handleToggleExpand] = React__namespace.useReducer((prev)=>!prev, false);
|
|
@@ -185,15 +194,6 @@ const BlocksEditor = /*#__PURE__*/ React__namespace.forwardRef(({ disabled = fal
|
|
|
185
194
|
editor,
|
|
186
195
|
value
|
|
187
196
|
]);
|
|
188
|
-
const blocks = React__namespace.useMemo(()=>({
|
|
189
|
-
...Paragraph.paragraphBlocks,
|
|
190
|
-
...Heading.headingBlocks,
|
|
191
|
-
...List.listBlocks,
|
|
192
|
-
...Link.linkBlocks,
|
|
193
|
-
...Image.imageBlocks,
|
|
194
|
-
...Quote.quoteBlocks,
|
|
195
|
-
...Code.codeBlocks
|
|
196
|
-
}), []);
|
|
197
197
|
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
198
198
|
children: [
|
|
199
199
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlocksEditor.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, type FieldValue } from '@strapi/admin/strapi-admin';\nimport { IconButton, Divider, VisuallyHidden } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, type Descendant, createEditor, Transforms } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { type RenderElementProps, Slate, withReact, ReactEditor, useSlate } from 'slate-react';\nimport { styled, type CSSProperties } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { codeBlocks } from './Blocks/Code';\nimport { headingBlocks } from './Blocks/Heading';\nimport { imageBlocks } from './Blocks/Image';\nimport { linkBlocks } from './Blocks/Link';\nimport { listBlocks } from './Blocks/List';\nimport { paragraphBlocks } from './Blocks/Paragraph';\nimport { quoteBlocks } from './Blocks/Quote';\nimport { BlocksContent, type BlocksContentProps } from './BlocksContent';\nimport { BlocksToolbar } from './BlocksToolbar';\nimport { EditorLayout } from './EditorLayout';\nimport { type ModifiersStore, modifiers } from './Modifiers';\nimport { withImages } from './plugins/withImages';\nimport { withLinks } from './plugins/withLinks';\nimport { withStrapiSchema } from './plugins/withStrapiSchema';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditorProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseBlock {\n renderElement: (props: RenderElementProps) => React.JSX.Element;\n matchNode: (node: Schema.Attribute.BlocksNode) => boolean;\n handleConvert?: (editor: Editor) => void | (() => React.JSX.Element);\n handleEnterKey?: (editor: Editor) => void;\n handleBackspaceKey?: (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => void;\n handleTab?: (editor: Editor) => void;\n snippets?: string[];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\ninterface NonSelectorBlock extends BaseBlock {\n isInBlocksSelector: false;\n}\n\ninterface SelectorBlock extends BaseBlock {\n isInBlocksSelector: true;\n icon: React.ComponentType;\n label: MessageDescriptor;\n}\n\ntype NonSelectorBlockKey = 'list-item' | 'link';\n\nconst selectorBlockKeys = [\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'heading-four',\n 'heading-five',\n 'heading-six',\n 'list-ordered',\n 'list-unordered',\n 'image',\n 'quote',\n 'code',\n] as const;\n\ntype SelectorBlockKey = (typeof selectorBlockKeys)[number];\n\nconst isSelectorBlockKey = (key: unknown): key is SelectorBlockKey => {\n return typeof key === 'string' && selectorBlockKeys.includes(key as SelectorBlockKey);\n};\n\ntype BlocksStore = {\n [K in SelectorBlockKey]: SelectorBlock;\n} & {\n [K in NonSelectorBlockKey]: NonSelectorBlock;\n};\n\ninterface BlocksEditorContextValue {\n blocks: BlocksStore;\n modifiers: ModifiersStore;\n disabled: boolean;\n name: string;\n setLiveText: (text: string) => void;\n isExpandedMode: boolean;\n}\n\nconst [BlocksEditorProvider, usePartialBlocksEditorContext] =\n createContext<BlocksEditorContextValue>('BlocksEditor');\n\nfunction useBlocksEditorContext(\n consumerName: string\n): BlocksEditorContextValue & { editor: Editor } {\n const context = usePartialBlocksEditorContext(consumerName, (state) => state);\n const editor = useSlate();\n\n return {\n ...context,\n editor,\n };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditor\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\n/**\n * Forces an update of the Slate editor when the value prop changes from outside of Slate.\n * The root cause is that Slate is not a controlled component: https://github.com/ianstormtaylor/slate/issues/4612\n * Why not use JSON.stringify(value) as the key?\n * Because it would force a rerender of the entire editor every time the user types a character.\n * Why not use the entity id as the key, since it's unique for each locale?\n * Because it would not solve the problem when using the \"fill in from other locale\" feature\n */\nfunction useResetKey(value?: Schema.Attribute.BlocksValue): {\n key: number;\n incrementSlateUpdatesCount: () => void;\n} {\n // Keep track how many times Slate detected a change from a user interaction in the editor\n const slateUpdatesCount = React.useRef(0);\n // Keep track of how many times the value prop was updated, whether from within editor or from outside\n const valueUpdatesCount = React.useRef(0);\n // Use a key to force a rerender of the Slate editor when needed\n const [key, setKey] = React.useState(0);\n\n React.useEffect(() => {\n valueUpdatesCount.current += 1;\n\n // If the 2 refs are not equal, it means the value was updated from outside\n if (valueUpdatesCount.current !== slateUpdatesCount.current) {\n // So we change the key to force a rerender of the Slate editor,\n // which will pick up the new value through its initialValue prop\n setKey((previousKey) => previousKey + 1);\n\n // Then bring the 2 refs back in sync\n slateUpdatesCount.current = valueUpdatesCount.current;\n }\n }, [value]);\n\n const incrementSlateUpdatesCount = React.useCallback(() => {\n slateUpdatesCount.current += 1;\n }, []);\n\n return { key, incrementSlateUpdatesCount };\n}\n\nconst pipe =\n (...fns: ((baseEditor: Editor) => Editor)[]) =>\n (value: Editor) =>\n fns.reduce<Editor>((prev, fn) => fn(prev), value);\n\n/**\n * Normalize the blocks state to null if the editor state is considered empty,\n * otherwise return the state\n */\nconst normalizeBlocksState = (\n editor: Editor,\n value: Schema.Attribute.BlocksValue | Descendant[]\n): Schema.Attribute.BlocksValue | Descendant[] | null => {\n const isEmpty =\n value.length === 1 && Editor.isEmpty(editor, value[0] as Schema.Attribute.BlocksNode);\n\n return isEmpty ? null : value;\n};\n\ninterface BlocksEditorProps\n extends Pick<FieldValue<Schema.Attribute.BlocksValue>, 'onChange' | 'value' | 'error'>,\n BlocksContentProps {\n disabled?: boolean;\n name: string;\n}\n\nconst BlocksEditor = React.forwardRef<{ focus: () => void }, BlocksEditorProps>(\n ({ disabled = false, name, onChange, value, error, ...contentProps }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const [editor] = React.useState(() =>\n pipe(withHistory, withImages, withStrapiSchema, withReact, withLinks)(createEditor())\n );\n const [liveText, setLiveText] = React.useState('');\n const ariaDescriptionId = React.useId();\n const [isExpandedMode, handleToggleExpand] = React.useReducer((prev) => !prev, false);\n\n /**\n * Editable is not able to hold the ref, https://github.com/ianstormtaylor/slate/issues/4082\n * so with \"useImperativeHandle\" we can use ReactEditor methods to expose to the parent above\n * also not passing forwarded ref here, gives console warning.\n */\n React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const debounceTimeout = React.useRef<NodeJS.Timeout | null>(null);\n\n const handleSlateChange = React.useCallback(\n (state: Descendant[]) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n /**\n * Slate handles the state of the editor internally. We just need to keep Strapi's form\n * state in sync with it in order to make sure that things like the \"modified\" state\n * isn't broken. Updating the whole state on every change is very expensive however,\n * so we debounce calls to onChange to mitigate input lag.\n */\n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n\n // Set a new debounce timeout\n debounceTimeout.current = setTimeout(() => {\n incrementSlateUpdatesCount();\n\n // Normalize the state (empty editor becomes null)\n onChange(name, normalizeBlocksState(editor, state) as Schema.Attribute.BlocksValue);\n debounceTimeout.current = null;\n }, 300);\n }\n },\n [editor, incrementSlateUpdatesCount, name, onChange]\n );\n\n // Clean up the timeout on unmount\n React.useEffect(() => {\n return () => {\n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n };\n }, []);\n\n // Ensure the editor is in sync after discard\n React.useEffect(() => {\n // Normalize empty states for comparison to avoid losing focus on the editor when content is deleted\n const normalizedValue = value?.length ? value : null;\n const normalizedEditorState = normalizeBlocksState(editor, editor.children);\n\n // Compare the field value with the editor state to check for a stale selection\n if (\n normalizedValue &&\n normalizedEditorState &&\n JSON.stringify(normalizedEditorState) !== JSON.stringify(normalizedValue)\n ) {\n // When there is a diff, unset selection to avoid an invalid state\n Transforms.deselect(editor);\n }\n }, [editor, value]);\n\n const blocks = React.useMemo(\n () => ({\n ...paragraphBlocks,\n ...headingBlocks,\n ...listBlocks,\n ...linkBlocks,\n ...imageBlocks,\n ...quoteBlocks,\n ...codeBlocks,\n }),\n []\n ) satisfies BlocksStore;\n\n return (\n <>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('components.Blocks.dnd.instruction'),\n defaultMessage: `To reorder blocks, press Command or Control along with Shift and the Up or Down arrow keys`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Slate\n editor={editor}\n initialValue={\n value?.length ? value : [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]\n }\n onChange={handleSlateChange}\n key={key}\n >\n <BlocksEditorProvider\n blocks={blocks}\n modifiers={modifiers}\n disabled={disabled}\n name={name}\n setLiveText={setLiveText}\n isExpandedMode={isExpandedMode}\n >\n <EditorLayout\n error={error}\n disabled={disabled}\n onToggleExpand={handleToggleExpand}\n ariaDescriptionId={ariaDescriptionId}\n >\n <BlocksToolbar />\n <EditorDivider width=\"100%\" />\n <BlocksContent {...contentProps} />\n {!isExpandedMode && (\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.expand'),\n defaultMessage: 'Expand',\n })}\n onClick={handleToggleExpand}\n >\n <Expand />\n </IconButton>\n )}\n </EditorLayout>\n </BlocksEditorProvider>\n </Slate>\n </>\n );\n }\n);\n\nexport {\n type BlocksStore,\n type SelectorBlockKey,\n BlocksEditor,\n BlocksEditorProvider,\n useBlocksEditorContext,\n isSelectorBlockKey,\n normalizeBlocksState,\n};\n"],"names":["selectorBlockKeys","isSelectorBlockKey","key","includes","BlocksEditorProvider","usePartialBlocksEditorContext","createContext","useBlocksEditorContext","consumerName","context","state","editor","useSlate","EditorDivider","styled","Divider","theme","colors","neutral200","useResetKey","value","slateUpdatesCount","React","useRef","valueUpdatesCount","setKey","useState","useEffect","current","previousKey","incrementSlateUpdatesCount","useCallback","pipe","fns","reduce","prev","fn","normalizeBlocksState","isEmpty","length","Editor","BlocksEditor","forwardRef","disabled","name","onChange","error","contentProps","forwardedRef","formatMessage","useIntl","withHistory","withImages","withStrapiSchema","withReact","withLinks","createEditor","liveText","setLiveText","ariaDescriptionId","useId","isExpandedMode","handleToggleExpand","useReducer","useImperativeHandle","focus","ReactEditor","debounceTimeout","handleSlateChange","isAstChange","operations","some","op","type","clearTimeout","setTimeout","normalizedValue","normalizedEditorState","children","JSON","stringify","Transforms","deselect","blocks","useMemo","paragraphBlocks","headingBlocks","listBlocks","linkBlocks","imageBlocks","quoteBlocks","codeBlocks","_jsxs","_Fragment","_jsx","VisuallyHidden","id","getTranslation","defaultMessage","aria-live","Slate","initialValue","text","modifiers","EditorLayout","onToggleExpand","BlocksToolbar","width","BlocksContent","IconButton","position","bottom","right","shadow","label","onClick","Expand"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BlocksEditor.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, type FieldValue } from '@strapi/admin/strapi-admin';\nimport { IconButton, Divider, VisuallyHidden } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, type Descendant, createEditor, Transforms, Element } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { type RenderElementProps, Slate, withReact, ReactEditor, useSlate } from 'slate-react';\nimport { styled, type CSSProperties } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { codeBlocks } from './Blocks/Code';\nimport { headingBlocks } from './Blocks/Heading';\nimport { imageBlocks } from './Blocks/Image';\nimport { linkBlocks } from './Blocks/Link';\nimport { listBlocks } from './Blocks/List';\nimport { paragraphBlocks } from './Blocks/Paragraph';\nimport { quoteBlocks } from './Blocks/Quote';\nimport { BlocksContent, type BlocksContentProps } from './BlocksContent';\nimport { BlocksToolbar } from './BlocksToolbar';\nimport { EditorLayout } from './EditorLayout';\nimport { type ModifiersStore, modifiers } from './Modifiers';\nimport { withStrapiSchema } from './plugins/withStrapiSchema';\nimport { isNonNullable } from './utils/types';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditorProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseBlock {\n renderElement: (props: RenderElementProps) => React.JSX.Element;\n /** Function to check if a given node is of this type of block */\n matchNode: (node: Schema.Attribute.BlocksNode) => boolean;\n handleConvert?: (editor: Editor) => void | (() => React.JSX.Element);\n handleEnterKey?: (editor: Editor) => void;\n handleBackspaceKey?: (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => void;\n handleTab?: (editor: Editor) => void;\n snippets?: string[];\n /** Adjust the vertical positioning of the drag-to-reorder grip icon */\n dragHandleTopMargin?: CSSProperties['marginTop'];\n /** A Slate plugin: function that will wrap the editor creation */\n plugin?: (editor: Editor) => Editor;\n /**\n * Function that checks if an element should be draggable\n * @default () => true */\n isDraggable?: (element: Element) => boolean;\n}\n\ninterface NonSelectorBlock extends BaseBlock {\n isInBlocksSelector: false;\n}\n\ninterface SelectorBlock extends BaseBlock {\n isInBlocksSelector: true;\n icon: React.ComponentType;\n label: MessageDescriptor;\n}\n\ntype NonSelectorBlockKey = 'list-item' | 'link';\n\nconst selectorBlockKeys = [\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'heading-four',\n 'heading-five',\n 'heading-six',\n 'list-ordered',\n 'list-unordered',\n 'image',\n 'quote',\n 'code',\n] as const;\n\ntype SelectorBlockKey = (typeof selectorBlockKeys)[number];\n\nconst isSelectorBlockKey = (key: unknown): key is SelectorBlockKey => {\n return typeof key === 'string' && selectorBlockKeys.includes(key as SelectorBlockKey);\n};\n\ntype BlocksStore = {\n [K in SelectorBlockKey]: SelectorBlock;\n} & {\n [K in NonSelectorBlockKey]: NonSelectorBlock;\n};\n\ninterface BlocksEditorContextValue {\n blocks: BlocksStore;\n modifiers: ModifiersStore;\n disabled: boolean;\n name: string;\n setLiveText: (text: string) => void;\n isExpandedMode: boolean;\n}\n\nconst [BlocksEditorProvider, usePartialBlocksEditorContext] =\n createContext<BlocksEditorContextValue>('BlocksEditor');\n\nfunction useBlocksEditorContext(\n consumerName: string\n): BlocksEditorContextValue & { editor: Editor } {\n const context = usePartialBlocksEditorContext(consumerName, (state) => state);\n const editor = useSlate();\n\n return {\n ...context,\n editor,\n };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditor\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\n/**\n * Forces an update of the Slate editor when the value prop changes from outside of Slate.\n * The root cause is that Slate is not a controlled component: https://github.com/ianstormtaylor/slate/issues/4612\n * Why not use JSON.stringify(value) as the key?\n * Because it would force a rerender of the entire editor every time the user types a character.\n * Why not use the entity id as the key, since it's unique for each locale?\n * Because it would not solve the problem when using the \"fill in from other locale\" feature\n */\nfunction useResetKey(value?: Schema.Attribute.BlocksValue): {\n key: number;\n incrementSlateUpdatesCount: () => void;\n} {\n // Keep track how many times Slate detected a change from a user interaction in the editor\n const slateUpdatesCount = React.useRef(0);\n // Keep track of how many times the value prop was updated, whether from within editor or from outside\n const valueUpdatesCount = React.useRef(0);\n // Use a key to force a rerender of the Slate editor when needed\n const [key, setKey] = React.useState(0);\n\n React.useEffect(() => {\n valueUpdatesCount.current += 1;\n\n // If the 2 refs are not equal, it means the value was updated from outside\n if (valueUpdatesCount.current !== slateUpdatesCount.current) {\n // So we change the key to force a rerender of the Slate editor,\n // which will pick up the new value through its initialValue prop\n setKey((previousKey) => previousKey + 1);\n\n // Then bring the 2 refs back in sync\n slateUpdatesCount.current = valueUpdatesCount.current;\n }\n }, [value]);\n\n const incrementSlateUpdatesCount = React.useCallback(() => {\n slateUpdatesCount.current += 1;\n }, []);\n\n return { key, incrementSlateUpdatesCount };\n}\n\nconst pipe =\n (...fns: ((baseEditor: Editor) => Editor)[]) =>\n (value: Editor) =>\n fns.reduce<Editor>((prev, fn) => fn(prev), value);\n\n/**\n * Normalize the blocks state to null if the editor state is considered empty,\n * otherwise return the state\n */\nconst normalizeBlocksState = (\n editor: Editor,\n value: Schema.Attribute.BlocksValue | Descendant[]\n): Schema.Attribute.BlocksValue | Descendant[] | null => {\n const isEmpty =\n value.length === 1 && Editor.isEmpty(editor, value[0] as Schema.Attribute.BlocksNode);\n\n return isEmpty ? null : value;\n};\n\ninterface BlocksEditorProps\n extends Pick<FieldValue<Schema.Attribute.BlocksValue>, 'onChange' | 'value' | 'error'>,\n BlocksContentProps {\n disabled?: boolean;\n name: string;\n}\n\nconst BlocksEditor = React.forwardRef<{ focus: () => void }, BlocksEditorProps>(\n ({ disabled = false, name, onChange, value, error, ...contentProps }, forwardedRef) => {\n const { formatMessage } = useIntl();\n\n const blocks = React.useMemo(\n () => ({\n ...paragraphBlocks,\n ...headingBlocks,\n ...listBlocks,\n ...linkBlocks,\n ...imageBlocks,\n ...quoteBlocks,\n ...codeBlocks,\n }),\n []\n ) satisfies BlocksStore;\n\n const blockRegisteredPlugins = Object.values(blocks)\n .map((block) => block.plugin)\n .filter(isNonNullable);\n\n const [editor] = React.useState(() =>\n pipe(withHistory, withStrapiSchema, withReact, ...blockRegisteredPlugins)(createEditor())\n );\n const [liveText, setLiveText] = React.useState('');\n const ariaDescriptionId = React.useId();\n const [isExpandedMode, handleToggleExpand] = React.useReducer((prev) => !prev, false);\n\n /**\n * Editable is not able to hold the ref, https://github.com/ianstormtaylor/slate/issues/4082\n * so with \"useImperativeHandle\" we can use ReactEditor methods to expose to the parent above\n * also not passing forwarded ref here, gives console warning.\n */\n React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const debounceTimeout = React.useRef<NodeJS.Timeout | null>(null);\n\n const handleSlateChange = React.useCallback(\n (state: Descendant[]) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n /**\n * Slate handles the state of the editor internally. We just need to keep Strapi's form\n * state in sync with it in order to make sure that things like the \"modified\" state\n * isn't broken. Updating the whole state on every change is very expensive however,\n * so we debounce calls to onChange to mitigate input lag.\n */\n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n\n // Set a new debounce timeout\n debounceTimeout.current = setTimeout(() => {\n incrementSlateUpdatesCount();\n\n // Normalize the state (empty editor becomes null)\n onChange(name, normalizeBlocksState(editor, state) as Schema.Attribute.BlocksValue);\n debounceTimeout.current = null;\n }, 300);\n }\n },\n [editor, incrementSlateUpdatesCount, name, onChange]\n );\n\n // Clean up the timeout on unmount\n React.useEffect(() => {\n return () => {\n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n };\n }, []);\n\n // Ensure the editor is in sync after discard\n React.useEffect(() => {\n // Normalize empty states for comparison to avoid losing focus on the editor when content is deleted\n const normalizedValue = value?.length ? value : null;\n const normalizedEditorState = normalizeBlocksState(editor, editor.children);\n\n // Compare the field value with the editor state to check for a stale selection\n if (\n normalizedValue &&\n normalizedEditorState &&\n JSON.stringify(normalizedEditorState) !== JSON.stringify(normalizedValue)\n ) {\n // When there is a diff, unset selection to avoid an invalid state\n Transforms.deselect(editor);\n }\n }, [editor, value]);\n\n return (\n <>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('components.Blocks.dnd.instruction'),\n defaultMessage: `To reorder blocks, press Command or Control along with Shift and the Up or Down arrow keys`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Slate\n editor={editor}\n initialValue={\n value?.length ? value : [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]\n }\n onChange={handleSlateChange}\n key={key}\n >\n <BlocksEditorProvider\n blocks={blocks}\n modifiers={modifiers}\n disabled={disabled}\n name={name}\n setLiveText={setLiveText}\n isExpandedMode={isExpandedMode}\n >\n <EditorLayout\n error={error}\n disabled={disabled}\n onToggleExpand={handleToggleExpand}\n ariaDescriptionId={ariaDescriptionId}\n >\n <BlocksToolbar />\n <EditorDivider width=\"100%\" />\n <BlocksContent {...contentProps} />\n {!isExpandedMode && (\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.expand'),\n defaultMessage: 'Expand',\n })}\n onClick={handleToggleExpand}\n >\n <Expand />\n </IconButton>\n )}\n </EditorLayout>\n </BlocksEditorProvider>\n </Slate>\n </>\n );\n }\n);\n\nexport {\n type BlocksStore,\n type SelectorBlockKey,\n BlocksEditor,\n BlocksEditorProvider,\n useBlocksEditorContext,\n isSelectorBlockKey,\n normalizeBlocksState,\n};\n"],"names":["selectorBlockKeys","isSelectorBlockKey","key","includes","BlocksEditorProvider","usePartialBlocksEditorContext","createContext","useBlocksEditorContext","consumerName","context","state","editor","useSlate","EditorDivider","styled","Divider","theme","colors","neutral200","useResetKey","value","slateUpdatesCount","React","useRef","valueUpdatesCount","setKey","useState","useEffect","current","previousKey","incrementSlateUpdatesCount","useCallback","pipe","fns","reduce","prev","fn","normalizeBlocksState","isEmpty","length","Editor","BlocksEditor","forwardRef","disabled","name","onChange","error","contentProps","forwardedRef","formatMessage","useIntl","blocks","useMemo","paragraphBlocks","headingBlocks","listBlocks","linkBlocks","imageBlocks","quoteBlocks","codeBlocks","blockRegisteredPlugins","Object","values","map","block","plugin","filter","isNonNullable","withHistory","withStrapiSchema","withReact","createEditor","liveText","setLiveText","ariaDescriptionId","useId","isExpandedMode","handleToggleExpand","useReducer","useImperativeHandle","focus","ReactEditor","debounceTimeout","handleSlateChange","isAstChange","operations","some","op","type","clearTimeout","setTimeout","normalizedValue","normalizedEditorState","children","JSON","stringify","Transforms","deselect","_jsxs","_Fragment","_jsx","VisuallyHidden","id","getTranslation","defaultMessage","aria-live","Slate","initialValue","text","modifiers","EditorLayout","onToggleExpand","BlocksToolbar","width","BlocksContent","IconButton","position","bottom","right","shadow","label","onClick","Expand"],"mappings":"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"}
|