@strapi/content-manager 5.33.4 → 5.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/admin/components/ActionsDrawer.js +204 -0
  2. package/dist/admin/components/ActionsDrawer.js.map +1 -0
  3. package/dist/admin/components/ActionsDrawer.mjs +183 -0
  4. package/dist/admin/components/ActionsDrawer.mjs.map +1 -0
  5. package/dist/admin/components/LeftMenu.js +13 -8
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +13 -8
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/history/components/VersionContent.js +22 -9
  10. package/dist/admin/history/components/VersionContent.js.map +1 -1
  11. package/dist/admin/history/components/VersionContent.mjs +23 -10
  12. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  13. package/dist/admin/history/components/VersionHeader.js +1 -0
  14. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  15. package/dist/admin/history/components/VersionHeader.mjs +1 -0
  16. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/EditViewPage.js +92 -63
  18. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  19. package/dist/admin/pages/EditView/EditViewPage.mjs +95 -66
  20. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/DocumentActions.js +64 -48
  22. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/DocumentActions.mjs +67 -51
  24. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +63 -31
  26. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs +64 -32
  28. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js +30 -6
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs +30 -6
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Heading.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +20 -5
  34. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +20 -5
  36. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +22 -12
  38. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +22 -12
  40. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +6 -1
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +7 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +151 -10
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +152 -11
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js +52 -5
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs +53 -6
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +6 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +6 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +1 -0
  58. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +1 -0
  60. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js +21 -1
  62. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs +24 -4
  64. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Field.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js +21 -9
  66. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs +21 -9
  68. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js +4 -0
  70. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs +4 -0
  72. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygFooter.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +30 -13
  74. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +32 -16
  76. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/Header.js +91 -44
  78. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/Header.mjs +92 -45
  80. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/Panels.js +67 -15
  82. package/dist/admin/pages/EditView/components/Panels.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/Panels.mjs +67 -18
  84. package/dist/admin/pages/EditView/components/Panels.mjs.map +1 -1
  85. package/dist/admin/pages/ListView/ListViewPage.js +8 -6
  86. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  87. package/dist/admin/pages/ListView/ListViewPage.mjs +8 -6
  88. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  89. package/dist/admin/preview/index.js +9 -3
  90. package/dist/admin/preview/index.js.map +1 -1
  91. package/dist/admin/preview/index.mjs +9 -3
  92. package/dist/admin/preview/index.mjs.map +1 -1
  93. package/dist/admin/src/components/ActionsDrawer.d.ts +19 -0
  94. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.d.ts +7 -2
  95. package/dist/admin/src/pages/EditView/components/Panels.d.ts +14 -2
  96. package/dist/admin/translations/de.json.js +165 -32
  97. package/dist/admin/translations/de.json.js.map +1 -1
  98. package/dist/admin/translations/de.json.mjs +165 -32
  99. package/dist/admin/translations/de.json.mjs.map +1 -1
  100. package/dist/admin/translations/en.json.js +5 -1
  101. package/dist/admin/translations/en.json.js.map +1 -1
  102. package/dist/admin/translations/en.json.mjs +5 -1
  103. package/dist/admin/translations/en.json.mjs.map +1 -1
  104. package/dist/admin/translations/es.json.js +3 -1
  105. package/dist/admin/translations/es.json.js.map +1 -1
  106. package/dist/admin/translations/es.json.mjs +3 -1
  107. package/dist/admin/translations/es.json.mjs.map +1 -1
  108. package/dist/admin/translations/fr.json.js +3 -1
  109. package/dist/admin/translations/fr.json.js.map +1 -1
  110. package/dist/admin/translations/fr.json.mjs +3 -1
  111. package/dist/admin/translations/fr.json.mjs.map +1 -1
  112. package/dist/admin/translations/zh-Hans.json.js +0 -44
  113. package/dist/admin/translations/zh-Hans.json.js.map +1 -1
  114. package/dist/admin/translations/zh-Hans.json.mjs +0 -44
  115. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
  116. package/dist/server/controllers/collection-types.js +16 -13
  117. package/dist/server/controllers/collection-types.js.map +1 -1
  118. package/dist/server/controllers/collection-types.mjs +16 -13
  119. package/dist/server/controllers/collection-types.mjs.map +1 -1
  120. package/dist/server/controllers/relations.js +5 -2
  121. package/dist/server/controllers/relations.js.map +1 -1
  122. package/dist/server/controllers/relations.mjs +5 -2
  123. package/dist/server/controllers/relations.mjs.map +1 -1
  124. package/dist/server/controllers/utils/document-status.js +28 -0
  125. package/dist/server/controllers/utils/document-status.js.map +1 -0
  126. package/dist/server/controllers/utils/document-status.mjs +26 -0
  127. package/dist/server/controllers/utils/document-status.mjs.map +1 -0
  128. package/dist/server/services/components.js +68 -20
  129. package/dist/server/services/components.js.map +1 -1
  130. package/dist/server/services/components.mjs +69 -21
  131. package/dist/server/services/components.mjs.map +1 -1
  132. package/dist/server/services/permission-checker.js +23 -0
  133. package/dist/server/services/permission-checker.js.map +1 -1
  134. package/dist/server/services/permission-checker.mjs +23 -0
  135. package/dist/server/services/permission-checker.mjs.map +1 -1
  136. package/dist/server/services/utils/store.js +51 -4
  137. package/dist/server/services/utils/store.js.map +1 -1
  138. package/dist/server/services/utils/store.mjs +51 -4
  139. package/dist/server/services/utils/store.mjs.map +1 -1
  140. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  141. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  142. package/dist/server/src/controllers/utils/document-status.d.ts +10 -0
  143. package/dist/server/src/controllers/utils/document-status.d.ts.map +1 -0
  144. package/dist/server/src/index.d.ts +1 -0
  145. package/dist/server/src/index.d.ts.map +1 -1
  146. package/dist/server/src/services/components.d.ts +6 -0
  147. package/dist/server/src/services/components.d.ts.map +1 -1
  148. package/dist/server/src/services/index.d.ts +1 -0
  149. package/dist/server/src/services/index.d.ts.map +1 -1
  150. package/dist/server/src/services/permission-checker.d.ts +1 -0
  151. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  152. package/dist/server/src/services/utils/store.d.ts +5 -1
  153. package/dist/server/src/services/utils/store.d.ts.map +1 -1
  154. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"Link.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Field, Flex, Popover } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport {\n BaseEditor,\n Editor,\n Element,\n Path,\n Point,\n Range,\n Transforms,\n Element as SlateElement,\n Node,\n} from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { type Block } from '../utils/types';\n\nimport type { Schema } from '@strapi/types';\n\nconst isLinkNode = (element: Element): element is Schema.Attribute.LinkInlineNode => {\n return element.type === 'link';\n};\n\nconst removeLink = (editor: Editor) => {\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === 'link',\n });\n};\n\nconst insertLink = (editor: Editor, { url }: { url: string }) => {\n if (editor.selection) {\n // We want to remove all link on the selection\n const linkNodes = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n linkNodes.forEach(([, path]) => {\n Transforms.unwrapNodes(editor, { at: path });\n });\n\n if (Range.isCollapsed(editor.selection)) {\n const link: Block<'link'> = {\n type: 'link',\n url: url ?? '',\n children: [{ type: 'text', text: url }],\n rel: '',\n target: '',\n };\n\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(editor, { type: 'link', url: url ?? '' } as Block<'link'>, {\n split: true,\n });\n }\n }\n};\n\nconst editLink = (\n editor: Editor,\n link: { url: string; text: string; rel: string; target: string }\n) => {\n const { url, text, rel, target } = link;\n\n if (!editor.selection) {\n return;\n }\n\n const linkEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n });\n\n if (linkEntry) {\n const [, linkPath] = linkEntry;\n Transforms.setNodes(editor, { url, rel, target }, { at: linkPath });\n\n // If link text is different, we remove the old text and insert the new one\n if (text !== '' && text !== Editor.string(editor, linkPath)) {\n const linkNodeChildrens = Array.from(Node.children(editor, linkPath, { reverse: true }));\n\n linkNodeChildrens.forEach(([, childPath]) => {\n Transforms.removeNodes(editor, { at: childPath });\n });\n\n Transforms.insertNodes(editor, [{ type: 'text', text }], { at: linkPath.concat(0) });\n }\n }\n};\n\nconst StyledLink = styled(Box)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ $visible: boolean }>`\n visibility: ${(props) => (props.$visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const [linkRel, setLinRel] = React.useState(link.rel);\n const [linkTarget, setLinkTarget] = React.useState(link.target);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const isLastInsertedLink = editor.lastInsertedLinkPath\n ? !Path.equals(path, editor.lastInsertedLinkPath)\n : true;\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const onLinkRelChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinRel(e.target.value);\n };\n\n const onLinkTargetChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkTarget(e.target.value);\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText, rel: linkRel, target: linkTarget });\n setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n ReactEditor.focus(editor);\n };\n\n const handleClose = () => {\n if (link.url === '') {\n removeLink(editor);\n }\n\n setPopoverOpen(false);\n ReactEditor.focus(editor);\n };\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url &&\n link.url === linkUrl &&\n elementText &&\n elementText === linkText &&\n link.rel === linkRel &&\n link.target === linkTarget);\n\n return (\n <Popover.Root open={popoverOpen}>\n <Popover.Trigger>\n <StyledLink\n {...attributes}\n ref={forwardedRef}\n tag=\"a\"\n href={link.url}\n rel={link.rel}\n target={link.target}\n onClick={() => setPopoverOpen(true)}\n color=\"primary600\"\n >\n {children}\n </StyledLink>\n </Popover.Trigger>\n <Popover.Content onPointerDownOutside={handleClose}>\n <Flex padding={4} direction=\"column\" gap={4}>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </Field.Label>\n <Field.Input\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </Field.Label>\n <Field.Input\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.rel',\n defaultMessage: 'Rel (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"rel\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.rel.placeholder',\n defaultMessage: 'noopener, nofollow, noreferrer',\n })}\n value={linkRel}\n onChange={onLinkRelChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.target',\n defaultMessage: 'Target (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"target\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.target.placeholder',\n defaultMessage: '_blank, _self, _parent, _top',\n })}\n value={linkTarget}\n onChange={onLinkTargetChange}\n />\n </Flex>\n </Field.Root>\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n $visible={isLastInsertedLink}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'global.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button disabled={Boolean(inputNotDirty) || isSaveDisabled} onClick={handleSave}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst withLinks = (editor: Editor) => {\n const { isInline, apply, insertText, insertData } = editor;\n\n // Links are inline elements, so we need to override the isInline method for slate\n editor.isInline = (element) => {\n return element.type === 'link' ? true : isInline(element);\n };\n\n // We keep a track of the last inserted link path\n // So we can show the popover on the link component if that link is the last one inserted\n editor.lastInsertedLinkPath = null;\n\n // We intercept the apply method, so everytime we insert a new link, we save its path\n editor.apply = (operation) => {\n if (operation.type === 'insert_node') {\n if (\n !Editor.isEditor(operation.node) &&\n operation.node.type === 'link' &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = operation.path;\n }\n } else if (operation.type === 'move_node') {\n // We need to update the last inserted link path when link is moved\n // If link is the first word in the paragraph we dont need to update the path\n if (\n Path.hasPrevious(operation.path) &&\n editor.lastInsertedLinkPath &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = Path.transform(editor.lastInsertedLinkPath, operation);\n }\n }\n\n apply(operation);\n };\n\n editor.insertText = (text) => {\n // When selection is at the end of a link and user types a space, we want to break the link\n if (editor.selection && Range.isCollapsed(editor.selection) && text === ' ') {\n const linksInSelection = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n const selectionIsInLink = editor.selection && linksInSelection.length > 0;\n const selectionIsAtEndOfLink =\n selectionIsInLink &&\n Point.equals(editor.selection.anchor, Editor.end(editor, linksInSelection[0][1]));\n\n if (selectionIsAtEndOfLink) {\n Transforms.insertNodes(\n editor,\n { text: ' ', type: 'text' },\n { at: Path.next(linksInSelection[0][1]), select: true }\n );\n\n return;\n }\n }\n\n insertText(text);\n };\n\n // Add data as a clickable link if its a valid URL\n editor.insertData = (data) => {\n const pastedText = data.getData('text/plain');\n\n if (pastedText) {\n try {\n // eslint-disable-next-line no-new\n new URL(pastedText);\n // Do not show link popup on copy-paste a link, so do not save its path\n editor.shouldSaveLinkPath = false;\n insertLink(editor, { url: pastedText });\n return;\n } catch (error) {\n // continue normal data insertion\n }\n }\n\n insertData(data);\n };\n\n return editor;\n};\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n plugin: withLinks,\n isDraggable: () => false,\n },\n};\n\nexport interface LinkEditor extends BaseEditor {\n lastInsertedLinkPath: Path | null;\n shouldSaveLinkPath: boolean;\n}\n\nexport { linkBlocks, insertLink };\n"],"names":["isLinkNode","element","type","removeLink","editor","Transforms","unwrapNodes","match","node","Editor","isEditor","SlateElement","isElement","insertLink","url","selection","linkNodes","Array","from","nodes","at","forEach","path","Range","isCollapsed","link","children","text","rel","target","insertNodes","wrapNodes","split","editLink","linkEntry","above","linkPath","setNodes","string","linkNodeChildrens","Node","reverse","childPath","removeNodes","concat","StyledLink","styled","Box","RemoveButton","Button","props","$visible","LinkContent","React","forwardRef","attributes","forwardedRef","formatMessage","useIntl","useBlocksEditorContext","ReactEditor","findPath","popoverOpen","setPopoverOpen","useState","lastInsertedLinkPath","Path","equals","elementText","map","child","join","linkText","setLinkText","linkUrl","setLinkUrl","linkRel","setLinRel","linkTarget","setLinkTarget","linkInputRef","useRef","isLastInsertedLink","isSaveDisabled","setIsSaveDisabled","onLinkChange","e","value","URL","startsWith","error","onLinkRelChange","onLinkTargetChange","handleSave","stopPropagation","parentPath","parent","focus","select","handleClose","useEffect","current","inputNotDirty","_jsxs","Popover","Root","open","_jsx","Trigger","ref","tag","href","onClick","color","Content","onPointerDownOutside","Flex","padding","direction","gap","Field","width","alignItems","Label","id","defaultMessage","Input","name","placeholder","onChange","justifyContent","variant","disabled","Boolean","Link","withLinks","isInline","apply","insertText","insertData","operation","shouldSaveLinkPath","hasPrevious","transform","linksInSelection","selectionIsInLink","length","selectionIsAtEndOfLink","Point","anchor","end","next","data","pastedText","getData","linkBlocks","renderElement","matchNode","isInBlocksSelector","plugin","isDraggable"],"mappings":"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"}
1
+ {"version":3,"file":"Link.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Field, Flex, Popover } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport {\n BaseEditor,\n Editor,\n Element,\n Path,\n Point,\n Range,\n Transforms,\n Element as SlateElement,\n Node,\n} from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { type Block } from '../utils/types';\n\nimport type { Schema } from '@strapi/types';\n\nconst isLinkNode = (element: Element): element is Schema.Attribute.LinkInlineNode => {\n return element.type === 'link';\n};\n\nconst removeLink = (editor: Editor) => {\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === 'link',\n });\n};\n\nconst insertLink = (editor: Editor, { url }: { url: string }) => {\n if (editor.selection) {\n // We want to remove all link on the selection\n const linkNodes = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n linkNodes.forEach(([, path]) => {\n Transforms.unwrapNodes(editor, { at: path });\n });\n\n if (Range.isCollapsed(editor.selection)) {\n const link: Block<'link'> = {\n type: 'link',\n url: url ?? '',\n children: [{ type: 'text', text: url }],\n rel: '',\n target: '',\n };\n\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(editor, { type: 'link', url: url ?? '' } as Block<'link'>, {\n split: true,\n });\n }\n }\n};\n\nconst editLink = (\n editor: Editor,\n link: { url: string; text: string; rel: string; target: string }\n) => {\n const { url, text, rel, target } = link;\n\n if (!editor.selection) {\n return;\n }\n\n const linkEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n });\n\n if (linkEntry) {\n const [, linkPath] = linkEntry;\n Transforms.setNodes(editor, { url, rel, target }, { at: linkPath });\n\n // If link text is different, we remove the old text and insert the new one\n if (text !== '' && text !== Editor.string(editor, linkPath)) {\n const linkNodeChildrens = Array.from(Node.children(editor, linkPath, { reverse: true }));\n\n linkNodeChildrens.forEach(([, childPath]) => {\n Transforms.removeNodes(editor, { at: childPath });\n });\n\n Transforms.insertNodes(editor, [{ type: 'text', text }], { at: linkPath.concat(0) });\n }\n }\n};\n\nconst StyledLink = styled(Box)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ $visible: boolean }>`\n visibility: ${(props) => (props.$visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const [linkRel, setLinRel] = React.useState(link.rel);\n const [linkTarget, setLinkTarget] = React.useState(link.target);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const isLastInsertedLink = editor.lastInsertedLinkPath\n ? !Path.equals(path, editor.lastInsertedLinkPath)\n : true;\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const onLinkRelChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinRel(e.target.value);\n };\n\n const onLinkTargetChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkTarget(e.target.value);\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText, rel: linkRel, target: linkTarget });\n setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n ReactEditor.focus(editor);\n };\n\n const handleClose = () => {\n if (link.url === '') {\n removeLink(editor);\n }\n\n setPopoverOpen(false);\n ReactEditor.focus(editor);\n };\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url &&\n link.url === linkUrl &&\n elementText &&\n elementText === linkText &&\n link.rel === linkRel &&\n link.target === linkTarget);\n\n return (\n <Popover.Root open={popoverOpen}>\n <Popover.Trigger>\n <StyledLink\n {...attributes}\n ref={forwardedRef}\n tag=\"a\"\n href={link.url}\n rel={link.rel}\n target={link.target}\n onClick={() => setPopoverOpen(true)}\n color=\"primary600\"\n >\n {children}\n </StyledLink>\n </Popover.Trigger>\n <Popover.Content onPointerDownOutside={handleClose}>\n <Flex padding={4} direction=\"column\" gap={4}>\n <Field.Root width={{ initial: '100%', medium: '368px' }}>\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </Field.Label>\n <Field.Input\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field.Root>\n <Field.Root width={{ initial: '100%', medium: '368px' }}>\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </Field.Label>\n <Field.Input\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width={{ initial: '100%', medium: '368px' }}>\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.rel',\n defaultMessage: 'Rel (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"rel\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.rel.placeholder',\n defaultMessage: 'noopener, nofollow, noreferrer',\n })}\n value={linkRel}\n onChange={onLinkRelChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width={{ initial: '100%', medium: '368px' }}>\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.target',\n defaultMessage: 'Target (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"target\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.target.placeholder',\n defaultMessage: '_blank, _self, _parent, _top',\n })}\n value={linkTarget}\n onChange={onLinkTargetChange}\n />\n </Flex>\n </Field.Root>\n <Flex justifyContent=\"space-between\" width={{ initial: '100%', medium: '368px' }}>\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n $visible={isLastInsertedLink}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'global.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button disabled={Boolean(inputNotDirty) || isSaveDisabled} onClick={handleSave}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst withLinks = (editor: Editor) => {\n const { isInline, apply, insertText, insertData } = editor;\n\n // Links are inline elements, so we need to override the isInline method for slate\n editor.isInline = (element) => {\n return element.type === 'link' ? true : isInline(element);\n };\n\n // We keep a track of the last inserted link path\n // So we can show the popover on the link component if that link is the last one inserted\n editor.lastInsertedLinkPath = null;\n\n // We intercept the apply method, so everytime we insert a new link, we save its path\n editor.apply = (operation) => {\n if (operation.type === 'insert_node') {\n if (\n !Editor.isEditor(operation.node) &&\n operation.node.type === 'link' &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = operation.path;\n }\n } else if (operation.type === 'move_node') {\n // We need to update the last inserted link path when link is moved\n // If link is the first word in the paragraph we dont need to update the path\n if (\n Path.hasPrevious(operation.path) &&\n editor.lastInsertedLinkPath &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = Path.transform(editor.lastInsertedLinkPath, operation);\n }\n }\n\n apply(operation);\n };\n\n editor.insertText = (text) => {\n // When selection is at the end of a link and user types a space, we want to break the link\n if (editor.selection && Range.isCollapsed(editor.selection) && text === ' ') {\n const linksInSelection = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n const selectionIsInLink = editor.selection && linksInSelection.length > 0;\n const selectionIsAtEndOfLink =\n selectionIsInLink &&\n Point.equals(editor.selection.anchor, Editor.end(editor, linksInSelection[0][1]));\n\n if (selectionIsAtEndOfLink) {\n Transforms.insertNodes(\n editor,\n { text: ' ', type: 'text' },\n { at: Path.next(linksInSelection[0][1]), select: true }\n );\n\n return;\n }\n }\n\n insertText(text);\n };\n\n // Add data as a clickable link if its a valid URL\n editor.insertData = (data) => {\n const pastedText = data.getData('text/plain');\n\n if (pastedText) {\n try {\n // eslint-disable-next-line no-new\n new URL(pastedText);\n // Do not show link popup on copy-paste a link, so do not save its path\n editor.shouldSaveLinkPath = false;\n insertLink(editor, { url: pastedText });\n return;\n } catch (error) {\n // continue normal data insertion\n }\n }\n\n insertData(data);\n };\n\n return editor;\n};\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n plugin: withLinks,\n isDraggable: () => false,\n },\n};\n\nexport interface LinkEditor extends BaseEditor {\n lastInsertedLinkPath: Path | null;\n shouldSaveLinkPath: boolean;\n}\n\nexport { linkBlocks, insertLink };\n"],"names":["isLinkNode","element","type","removeLink","editor","Transforms","unwrapNodes","match","node","Editor","isEditor","SlateElement","isElement","insertLink","url","selection","linkNodes","Array","from","nodes","at","forEach","path","Range","isCollapsed","link","children","text","rel","target","insertNodes","wrapNodes","split","editLink","linkEntry","above","linkPath","setNodes","string","linkNodeChildrens","Node","reverse","childPath","removeNodes","concat","StyledLink","styled","Box","RemoveButton","Button","props","$visible","LinkContent","React","forwardRef","attributes","forwardedRef","formatMessage","useIntl","useBlocksEditorContext","ReactEditor","findPath","popoverOpen","setPopoverOpen","useState","lastInsertedLinkPath","Path","equals","elementText","map","child","join","linkText","setLinkText","linkUrl","setLinkUrl","linkRel","setLinRel","linkTarget","setLinkTarget","linkInputRef","useRef","isLastInsertedLink","isSaveDisabled","setIsSaveDisabled","onLinkChange","e","value","URL","startsWith","error","onLinkRelChange","onLinkTargetChange","handleSave","stopPropagation","parentPath","parent","focus","select","handleClose","useEffect","current","inputNotDirty","_jsxs","Popover","Root","open","_jsx","Trigger","ref","tag","href","onClick","color","Content","onPointerDownOutside","Flex","padding","direction","gap","Field","width","initial","medium","alignItems","Label","id","defaultMessage","Input","name","placeholder","onChange","justifyContent","variant","disabled","Boolean","Link","withLinks","isInline","apply","insertText","insertData","operation","shouldSaveLinkPath","hasPrevious","transform","linksInSelection","selectionIsInLink","length","selectionIsAtEndOfLink","Point","anchor","end","next","data","pastedText","getData","linkBlocks","renderElement","matchNode","isInBlocksSelector","plugin","isDraggable"],"mappings":"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"}
@@ -181,7 +181,10 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
181
181
  gap: 4,
182
182
  children: [
183
183
  /*#__PURE__*/ jsx(Field.Root, {
184
- width: "368px",
184
+ width: {
185
+ initial: '100%',
186
+ medium: '368px'
187
+ },
185
188
  children: /*#__PURE__*/ jsxs(Flex, {
186
189
  direction: "column",
187
190
  gap: 1,
@@ -208,7 +211,10 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
208
211
  })
209
212
  }),
210
213
  /*#__PURE__*/ jsx(Field.Root, {
211
- width: "368px",
214
+ width: {
215
+ initial: '100%',
216
+ medium: '368px'
217
+ },
212
218
  children: /*#__PURE__*/ jsxs(Flex, {
213
219
  direction: "column",
214
220
  gap: 1,
@@ -234,7 +240,10 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
234
240
  })
235
241
  }),
236
242
  /*#__PURE__*/ jsx(Field.Root, {
237
- width: "368px",
243
+ width: {
244
+ initial: '100%',
245
+ medium: '368px'
246
+ },
238
247
  children: /*#__PURE__*/ jsxs(Flex, {
239
248
  direction: "column",
240
249
  gap: 1,
@@ -259,7 +268,10 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
259
268
  })
260
269
  }),
261
270
  /*#__PURE__*/ jsx(Field.Root, {
262
- width: "368px",
271
+ width: {
272
+ initial: '100%',
273
+ medium: '368px'
274
+ },
263
275
  children: /*#__PURE__*/ jsxs(Flex, {
264
276
  direction: "column",
265
277
  gap: 1,
@@ -285,7 +297,10 @@ const LinkContent = /*#__PURE__*/ React.forwardRef(({ link, children, attributes
285
297
  }),
286
298
  /*#__PURE__*/ jsxs(Flex, {
287
299
  justifyContent: "space-between",
288
- width: "100%",
300
+ width: {
301
+ initial: '100%',
302
+ medium: '368px'
303
+ },
289
304
  children: [
290
305
  /*#__PURE__*/ jsx(RemoveButton, {
291
306
  variant: "danger-light",
@@ -1 +1 @@
1
- {"version":3,"file":"Link.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Field, Flex, Popover } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport {\n BaseEditor,\n Editor,\n Element,\n Path,\n Point,\n Range,\n Transforms,\n Element as SlateElement,\n Node,\n} from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { type Block } from '../utils/types';\n\nimport type { Schema } from '@strapi/types';\n\nconst isLinkNode = (element: Element): element is Schema.Attribute.LinkInlineNode => {\n return element.type === 'link';\n};\n\nconst removeLink = (editor: Editor) => {\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === 'link',\n });\n};\n\nconst insertLink = (editor: Editor, { url }: { url: string }) => {\n if (editor.selection) {\n // We want to remove all link on the selection\n const linkNodes = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n linkNodes.forEach(([, path]) => {\n Transforms.unwrapNodes(editor, { at: path });\n });\n\n if (Range.isCollapsed(editor.selection)) {\n const link: Block<'link'> = {\n type: 'link',\n url: url ?? '',\n children: [{ type: 'text', text: url }],\n rel: '',\n target: '',\n };\n\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(editor, { type: 'link', url: url ?? '' } as Block<'link'>, {\n split: true,\n });\n }\n }\n};\n\nconst editLink = (\n editor: Editor,\n link: { url: string; text: string; rel: string; target: string }\n) => {\n const { url, text, rel, target } = link;\n\n if (!editor.selection) {\n return;\n }\n\n const linkEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n });\n\n if (linkEntry) {\n const [, linkPath] = linkEntry;\n Transforms.setNodes(editor, { url, rel, target }, { at: linkPath });\n\n // If link text is different, we remove the old text and insert the new one\n if (text !== '' && text !== Editor.string(editor, linkPath)) {\n const linkNodeChildrens = Array.from(Node.children(editor, linkPath, { reverse: true }));\n\n linkNodeChildrens.forEach(([, childPath]) => {\n Transforms.removeNodes(editor, { at: childPath });\n });\n\n Transforms.insertNodes(editor, [{ type: 'text', text }], { at: linkPath.concat(0) });\n }\n }\n};\n\nconst StyledLink = styled(Box)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ $visible: boolean }>`\n visibility: ${(props) => (props.$visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const [linkRel, setLinRel] = React.useState(link.rel);\n const [linkTarget, setLinkTarget] = React.useState(link.target);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const isLastInsertedLink = editor.lastInsertedLinkPath\n ? !Path.equals(path, editor.lastInsertedLinkPath)\n : true;\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const onLinkRelChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinRel(e.target.value);\n };\n\n const onLinkTargetChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkTarget(e.target.value);\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText, rel: linkRel, target: linkTarget });\n setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n ReactEditor.focus(editor);\n };\n\n const handleClose = () => {\n if (link.url === '') {\n removeLink(editor);\n }\n\n setPopoverOpen(false);\n ReactEditor.focus(editor);\n };\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url &&\n link.url === linkUrl &&\n elementText &&\n elementText === linkText &&\n link.rel === linkRel &&\n link.target === linkTarget);\n\n return (\n <Popover.Root open={popoverOpen}>\n <Popover.Trigger>\n <StyledLink\n {...attributes}\n ref={forwardedRef}\n tag=\"a\"\n href={link.url}\n rel={link.rel}\n target={link.target}\n onClick={() => setPopoverOpen(true)}\n color=\"primary600\"\n >\n {children}\n </StyledLink>\n </Popover.Trigger>\n <Popover.Content onPointerDownOutside={handleClose}>\n <Flex padding={4} direction=\"column\" gap={4}>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </Field.Label>\n <Field.Input\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </Field.Label>\n <Field.Input\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.rel',\n defaultMessage: 'Rel (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"rel\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.rel.placeholder',\n defaultMessage: 'noopener, nofollow, noreferrer',\n })}\n value={linkRel}\n onChange={onLinkRelChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width=\"368px\">\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.target',\n defaultMessage: 'Target (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"target\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.target.placeholder',\n defaultMessage: '_blank, _self, _parent, _top',\n })}\n value={linkTarget}\n onChange={onLinkTargetChange}\n />\n </Flex>\n </Field.Root>\n <Flex justifyContent=\"space-between\" width=\"100%\">\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n $visible={isLastInsertedLink}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'global.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button disabled={Boolean(inputNotDirty) || isSaveDisabled} onClick={handleSave}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst withLinks = (editor: Editor) => {\n const { isInline, apply, insertText, insertData } = editor;\n\n // Links are inline elements, so we need to override the isInline method for slate\n editor.isInline = (element) => {\n return element.type === 'link' ? true : isInline(element);\n };\n\n // We keep a track of the last inserted link path\n // So we can show the popover on the link component if that link is the last one inserted\n editor.lastInsertedLinkPath = null;\n\n // We intercept the apply method, so everytime we insert a new link, we save its path\n editor.apply = (operation) => {\n if (operation.type === 'insert_node') {\n if (\n !Editor.isEditor(operation.node) &&\n operation.node.type === 'link' &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = operation.path;\n }\n } else if (operation.type === 'move_node') {\n // We need to update the last inserted link path when link is moved\n // If link is the first word in the paragraph we dont need to update the path\n if (\n Path.hasPrevious(operation.path) &&\n editor.lastInsertedLinkPath &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = Path.transform(editor.lastInsertedLinkPath, operation);\n }\n }\n\n apply(operation);\n };\n\n editor.insertText = (text) => {\n // When selection is at the end of a link and user types a space, we want to break the link\n if (editor.selection && Range.isCollapsed(editor.selection) && text === ' ') {\n const linksInSelection = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n const selectionIsInLink = editor.selection && linksInSelection.length > 0;\n const selectionIsAtEndOfLink =\n selectionIsInLink &&\n Point.equals(editor.selection.anchor, Editor.end(editor, linksInSelection[0][1]));\n\n if (selectionIsAtEndOfLink) {\n Transforms.insertNodes(\n editor,\n { text: ' ', type: 'text' },\n { at: Path.next(linksInSelection[0][1]), select: true }\n );\n\n return;\n }\n }\n\n insertText(text);\n };\n\n // Add data as a clickable link if its a valid URL\n editor.insertData = (data) => {\n const pastedText = data.getData('text/plain');\n\n if (pastedText) {\n try {\n // eslint-disable-next-line no-new\n new URL(pastedText);\n // Do not show link popup on copy-paste a link, so do not save its path\n editor.shouldSaveLinkPath = false;\n insertLink(editor, { url: pastedText });\n return;\n } catch (error) {\n // continue normal data insertion\n }\n }\n\n insertData(data);\n };\n\n return editor;\n};\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n plugin: withLinks,\n isDraggable: () => false,\n },\n};\n\nexport interface LinkEditor extends BaseEditor {\n lastInsertedLinkPath: Path | null;\n shouldSaveLinkPath: boolean;\n}\n\nexport { linkBlocks, insertLink };\n"],"names":["isLinkNode","element","type","removeLink","editor","Transforms","unwrapNodes","match","node","Editor","isEditor","SlateElement","isElement","insertLink","url","selection","linkNodes","Array","from","nodes","at","forEach","path","Range","isCollapsed","link","children","text","rel","target","insertNodes","wrapNodes","split","editLink","linkEntry","above","linkPath","setNodes","string","linkNodeChildrens","Node","reverse","childPath","removeNodes","concat","StyledLink","styled","Box","RemoveButton","Button","props","$visible","LinkContent","React","forwardRef","attributes","forwardedRef","formatMessage","useIntl","useBlocksEditorContext","ReactEditor","findPath","popoverOpen","setPopoverOpen","useState","lastInsertedLinkPath","Path","equals","elementText","map","child","join","linkText","setLinkText","linkUrl","setLinkUrl","linkRel","setLinRel","linkTarget","setLinkTarget","linkInputRef","useRef","isLastInsertedLink","isSaveDisabled","setIsSaveDisabled","onLinkChange","e","value","URL","startsWith","error","onLinkRelChange","onLinkTargetChange","handleSave","stopPropagation","parentPath","parent","focus","select","handleClose","useEffect","current","inputNotDirty","_jsxs","Popover","Root","open","_jsx","Trigger","ref","tag","href","onClick","color","Content","onPointerDownOutside","Flex","padding","direction","gap","Field","width","alignItems","Label","id","defaultMessage","Input","name","placeholder","onChange","justifyContent","variant","disabled","Boolean","Link","withLinks","isInline","apply","insertText","insertData","operation","shouldSaveLinkPath","hasPrevious","transform","linksInSelection","selectionIsInLink","length","selectionIsAtEndOfLink","Point","anchor","end","next","data","pastedText","getData","linkBlocks","renderElement","matchNode","isInBlocksSelector","plugin","isDraggable"],"mappings":"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"}
1
+ {"version":3,"file":"Link.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Field, Flex, Popover } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport {\n BaseEditor,\n Editor,\n Element,\n Path,\n Point,\n Range,\n Transforms,\n Element as SlateElement,\n Node,\n} from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { type Block } from '../utils/types';\n\nimport type { Schema } from '@strapi/types';\n\nconst isLinkNode = (element: Element): element is Schema.Attribute.LinkInlineNode => {\n return element.type === 'link';\n};\n\nconst removeLink = (editor: Editor) => {\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === 'link',\n });\n};\n\nconst insertLink = (editor: Editor, { url }: { url: string }) => {\n if (editor.selection) {\n // We want to remove all link on the selection\n const linkNodes = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n linkNodes.forEach(([, path]) => {\n Transforms.unwrapNodes(editor, { at: path });\n });\n\n if (Range.isCollapsed(editor.selection)) {\n const link: Block<'link'> = {\n type: 'link',\n url: url ?? '',\n children: [{ type: 'text', text: url }],\n rel: '',\n target: '',\n };\n\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(editor, { type: 'link', url: url ?? '' } as Block<'link'>, {\n split: true,\n });\n }\n }\n};\n\nconst editLink = (\n editor: Editor,\n link: { url: string; text: string; rel: string; target: string }\n) => {\n const { url, text, rel, target } = link;\n\n if (!editor.selection) {\n return;\n }\n\n const linkEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n });\n\n if (linkEntry) {\n const [, linkPath] = linkEntry;\n Transforms.setNodes(editor, { url, rel, target }, { at: linkPath });\n\n // If link text is different, we remove the old text and insert the new one\n if (text !== '' && text !== Editor.string(editor, linkPath)) {\n const linkNodeChildrens = Array.from(Node.children(editor, linkPath, { reverse: true }));\n\n linkNodeChildrens.forEach(([, childPath]) => {\n Transforms.removeNodes(editor, { at: childPath });\n });\n\n Transforms.insertNodes(editor, [{ type: 'text', text }], { at: linkPath.concat(0) });\n }\n }\n};\n\nconst StyledLink = styled(Box)`\n text-decoration: none;\n`;\n\nconst RemoveButton = styled(Button)<{ $visible: boolean }>`\n visibility: ${(props) => (props.$visible ? 'visible' : 'hidden')};\n`;\n\ninterface LinkContentProps extends RenderElementProps {\n link: Block<'link'>;\n}\n\nconst LinkContent = React.forwardRef<HTMLAnchorElement, LinkContentProps>(\n ({ link, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, link);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n const elementText = link.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(link.url);\n const [linkRel, setLinRel] = React.useState(link.rel);\n const [linkTarget, setLinkTarget] = React.useState(link.target);\n const linkInputRef = React.useRef<HTMLInputElement>(null);\n const isLastInsertedLink = editor.lastInsertedLinkPath\n ? !Path.equals(path, editor.lastInsertedLinkPath)\n : true;\n const [isSaveDisabled, setIsSaveDisabled] = React.useState(false);\n\n const onLinkChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkUrl(e.target.value);\n\n try {\n // eslint-disable-next-line no-new\n new URL(\n e.target.value?.startsWith('/') ? `https://strapi.io${e.target.value}` : e.target.value\n );\n } catch (error) {\n setIsSaveDisabled(true);\n }\n };\n\n const onLinkRelChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinRel(e.target.value);\n };\n\n const onLinkTargetChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setIsSaveDisabled(false);\n setLinkTarget(e.target.value);\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText, rel: linkRel, target: linkTarget });\n setPopoverOpen(false);\n editor.lastInsertedLinkPath = null;\n ReactEditor.focus(editor);\n };\n\n const handleClose = () => {\n if (link.url === '') {\n removeLink(editor);\n }\n\n setPopoverOpen(false);\n ReactEditor.focus(editor);\n };\n\n React.useEffect(() => {\n // Focus on the link input element when the popover opens\n if (popoverOpen) linkInputRef.current?.focus();\n }, [popoverOpen]);\n\n const inputNotDirty =\n !linkText ||\n !linkUrl ||\n (link.url &&\n link.url === linkUrl &&\n elementText &&\n elementText === linkText &&\n link.rel === linkRel &&\n link.target === linkTarget);\n\n return (\n <Popover.Root open={popoverOpen}>\n <Popover.Trigger>\n <StyledLink\n {...attributes}\n ref={forwardedRef}\n tag=\"a\"\n href={link.url}\n rel={link.rel}\n target={link.target}\n onClick={() => setPopoverOpen(true)}\n color=\"primary600\"\n >\n {children}\n </StyledLink>\n </Popover.Trigger>\n <Popover.Content onPointerDownOutside={handleClose}>\n <Flex padding={4} direction=\"column\" gap={4}>\n <Field.Root width={{ initial: '100%', medium: '368px' }}>\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </Field.Label>\n <Field.Input\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => {\n setLinkText(e.target.value);\n }}\n />\n </Flex>\n </Field.Root>\n <Field.Root width={{ initial: '100%', medium: '368px' }}>\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </Field.Label>\n <Field.Input\n ref={linkInputRef}\n name=\"url\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.placeholder',\n defaultMessage: 'Paste link',\n })}\n value={linkUrl}\n onChange={onLinkChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width={{ initial: '100%', medium: '368px' }}>\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.rel',\n defaultMessage: 'Rel (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"rel\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.rel.placeholder',\n defaultMessage: 'noopener, nofollow, noreferrer',\n })}\n value={linkRel}\n onChange={onLinkRelChange}\n />\n </Flex>\n </Field.Root>\n <Field.Root width={{ initial: '100%', medium: '368px' }}>\n <Flex direction=\"column\" gap={1} alignItems=\"stretch\">\n <Field.Label>\n {formatMessage({\n id: 'components.Blocks.popover.link.target',\n defaultMessage: 'Target (optional)',\n })}\n </Field.Label>\n <Field.Input\n name=\"target\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.link.target.placeholder',\n defaultMessage: '_blank, _self, _parent, _top',\n })}\n value={linkTarget}\n onChange={onLinkTargetChange}\n />\n </Flex>\n </Field.Root>\n <Flex justifyContent=\"space-between\" width={{ initial: '100%', medium: '368px' }}>\n <RemoveButton\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n $visible={isLastInsertedLink}\n >\n {formatMessage({\n id: 'components.Blocks.popover.remove',\n defaultMessage: 'Remove',\n })}\n </RemoveButton>\n <Flex gap={2}>\n <Button variant=\"tertiary\" onClick={handleClose}>\n {formatMessage({\n id: 'global.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button disabled={Boolean(inputNotDirty) || isSaveDisabled} onClick={handleSave}>\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n );\n }\n);\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>((props, forwardedRef) => {\n if (!isLinkNode(props.element)) {\n return null;\n }\n\n // LinkContent uses React hooks that rely on props.element being a link. If the type guard above\n // doesn't pass, those hooks would be called conditionnally, which is not allowed.\n // Hence the need for a separate component.\n return <LinkContent {...props} link={props.element} ref={forwardedRef} />;\n});\n\nconst withLinks = (editor: Editor) => {\n const { isInline, apply, insertText, insertData } = editor;\n\n // Links are inline elements, so we need to override the isInline method for slate\n editor.isInline = (element) => {\n return element.type === 'link' ? true : isInline(element);\n };\n\n // We keep a track of the last inserted link path\n // So we can show the popover on the link component if that link is the last one inserted\n editor.lastInsertedLinkPath = null;\n\n // We intercept the apply method, so everytime we insert a new link, we save its path\n editor.apply = (operation) => {\n if (operation.type === 'insert_node') {\n if (\n !Editor.isEditor(operation.node) &&\n operation.node.type === 'link' &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = operation.path;\n }\n } else if (operation.type === 'move_node') {\n // We need to update the last inserted link path when link is moved\n // If link is the first word in the paragraph we dont need to update the path\n if (\n Path.hasPrevious(operation.path) &&\n editor.lastInsertedLinkPath &&\n editor.shouldSaveLinkPath\n ) {\n editor.lastInsertedLinkPath = Path.transform(editor.lastInsertedLinkPath, operation);\n }\n }\n\n apply(operation);\n };\n\n editor.insertText = (text) => {\n // When selection is at the end of a link and user types a space, we want to break the link\n if (editor.selection && Range.isCollapsed(editor.selection) && text === ' ') {\n const linksInSelection = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n const selectionIsInLink = editor.selection && linksInSelection.length > 0;\n const selectionIsAtEndOfLink =\n selectionIsInLink &&\n Point.equals(editor.selection.anchor, Editor.end(editor, linksInSelection[0][1]));\n\n if (selectionIsAtEndOfLink) {\n Transforms.insertNodes(\n editor,\n { text: ' ', type: 'text' },\n { at: Path.next(linksInSelection[0][1]), select: true }\n );\n\n return;\n }\n }\n\n insertText(text);\n };\n\n // Add data as a clickable link if its a valid URL\n editor.insertData = (data) => {\n const pastedText = data.getData('text/plain');\n\n if (pastedText) {\n try {\n // eslint-disable-next-line no-new\n new URL(pastedText);\n // Do not show link popup on copy-paste a link, so do not save its path\n editor.shouldSaveLinkPath = false;\n insertLink(editor, { url: pastedText });\n return;\n } catch (error) {\n // continue normal data insertion\n }\n }\n\n insertData(data);\n };\n\n return editor;\n};\n\nconst linkBlocks: Pick<BlocksStore, 'link'> = {\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n // No handleConvert here, links are created via the link button in the toolbar\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n plugin: withLinks,\n isDraggable: () => false,\n },\n};\n\nexport interface LinkEditor extends BaseEditor {\n lastInsertedLinkPath: Path | null;\n shouldSaveLinkPath: boolean;\n}\n\nexport { linkBlocks, insertLink };\n"],"names":["isLinkNode","element","type","removeLink","editor","Transforms","unwrapNodes","match","node","Editor","isEditor","SlateElement","isElement","insertLink","url","selection","linkNodes","Array","from","nodes","at","forEach","path","Range","isCollapsed","link","children","text","rel","target","insertNodes","wrapNodes","split","editLink","linkEntry","above","linkPath","setNodes","string","linkNodeChildrens","Node","reverse","childPath","removeNodes","concat","StyledLink","styled","Box","RemoveButton","Button","props","$visible","LinkContent","React","forwardRef","attributes","forwardedRef","formatMessage","useIntl","useBlocksEditorContext","ReactEditor","findPath","popoverOpen","setPopoverOpen","useState","lastInsertedLinkPath","Path","equals","elementText","map","child","join","linkText","setLinkText","linkUrl","setLinkUrl","linkRel","setLinRel","linkTarget","setLinkTarget","linkInputRef","useRef","isLastInsertedLink","isSaveDisabled","setIsSaveDisabled","onLinkChange","e","value","URL","startsWith","error","onLinkRelChange","onLinkTargetChange","handleSave","stopPropagation","parentPath","parent","focus","select","handleClose","useEffect","current","inputNotDirty","_jsxs","Popover","Root","open","_jsx","Trigger","ref","tag","href","onClick","color","Content","onPointerDownOutside","Flex","padding","direction","gap","Field","width","initial","medium","alignItems","Label","id","defaultMessage","Input","name","placeholder","onChange","justifyContent","variant","disabled","Boolean","Link","withLinks","isInline","apply","insertText","insertData","operation","shouldSaveLinkPath","hasPrevious","transform","linksInSelection","selectionIsInLink","length","selectionIsAtEndOfLink","Point","anchor","end","next","data","pastedText","getData","linkBlocks","renderElement","matchNode","isInBlocksSelector","plugin","isDraggable"],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
5
6
  var designSystem = require('@strapi/design-system');
6
7
  var Icons = require('@strapi/icons');
7
8
  var reactIntl = require('react-intl');
@@ -118,9 +119,10 @@ const DragIconButton = styledComponents.styled(designSystem.IconButton)`
118
119
  }
119
120
  `;
120
121
  const DragAndDropElement = ({ children, index, setDragDirection, dragDirection, dragHandleTopMargin })=>{
121
- const { editor, disabled, name: name1, setLiveText } = BlocksEditor.useBlocksEditorContext('drag-and-drop');
122
+ const { editor, disabled, name: name1, setLiveText } = BlocksEditor.useBlocksEditorContext('DragAndDropElement');
122
123
  const { formatMessage } = reactIntl.useIntl();
123
124
  const [dragVisibility, setDragVisibility] = React__namespace.useState('hidden');
125
+ const isDragAndDropEnabled = !disabled;
124
126
  const handleMoveBlock = React__namespace.useCallback((newIndex, currentIndex)=>{
125
127
  slate.Transforms.moveNodes(editor, {
126
128
  at: currentIndex,
@@ -148,7 +150,7 @@ const DragAndDropElement = ({ children, index, setDragDirection, dragDirection,
148
150
  name1,
149
151
  setLiveText
150
152
  ]);
151
- const [{ handlerId, isDragging, isOverDropTarget, direction }, blockRef, dropRef, dragRef] = useDragAndDrop.useDragAndDrop(!disabled, {
153
+ const [{ handlerId, isDragging, isOverDropTarget, direction }, blockRef, dropRef, dragRef] = useDragAndDrop.useDragAndDrop(isDragAndDropEnabled, {
152
154
  type: `${dragAndDrop.ItemTypes.BLOCKS}_${name1}`,
153
155
  index,
154
156
  item: {
@@ -198,7 +200,7 @@ const DragAndDropElement = ({ children, index, setDragDirection, dragDirection,
198
200
  gap: 2,
199
201
  paddingLeft: 2,
200
202
  alignItems: "start",
201
- onDragStart: (event)=>{
203
+ onDragStart: isDragAndDropEnabled ? (event)=>{
202
204
  const target = event.target;
203
205
  const currentTarget = event.currentTarget;
204
206
  // Dragging action should only trigger drag event when button is dragged, however update styles on the whole dragItem.
@@ -208,13 +210,14 @@ const DragAndDropElement = ({ children, index, setDragDirection, dragDirection,
208
210
  // Setting styles using dragging state is not working, so set it on current target element as nodes get dragged
209
211
  currentTarget.style.opacity = '0.5';
210
212
  }
211
- },
212
- onDragEnd: (event)=>{
213
+ } : undefined,
214
+ onDragEnd: isDragAndDropEnabled ? (event)=>{
213
215
  const currentTarget = event.currentTarget;
214
216
  currentTarget.style.opacity = '1';
215
- },
216
- onMouseMove: ()=>setDragVisibility('visible'),
217
- onSelect: ()=>setDragVisibility('visible'),
217
+ } : undefined,
218
+ onMouseEnter: ()=>setDragVisibility('visible'),
219
+ onFocusCapture: ()=>setDragVisibility('visible'),
220
+ onBlurCapture: ()=>setDragVisibility('hidden'),
218
221
  onMouseLeave: ()=>setDragVisibility('hidden'),
219
222
  "aria-disabled": disabled,
220
223
  $dragVisibility: dragVisibility,
@@ -232,7 +235,7 @@ const DragAndDropElement = ({ children, index, setDragDirection, dragDirection,
232
235
  onClick: (e)=>e.stopPropagation(),
233
236
  "aria-disabled": disabled,
234
237
  disabled: disabled,
235
- draggable: true,
238
+ draggable: isDragAndDropEnabled,
236
239
  // For some blocks top margin added to drag handle to align at the text level
237
240
  $dragHandleTopMargin: dragHandleTopMargin,
238
241
  children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Drag, {
@@ -286,13 +289,13 @@ const baseRenderLeaf = (props, modifiers)=>{
286
289
  children: wrappedChildren
287
290
  });
288
291
  };
289
- const baseRenderElement = ({ props, blocks, editor, setDragDirection, dragDirection })=>{
292
+ const baseRenderElement = ({ props, blocks, editor, dragDirection, setDragDirection, isMobile })=>{
290
293
  const { element } = props;
291
294
  const blockMatch = Object.values(blocks).find((block)=>block.matchNode(element));
292
295
  const block = blockMatch || blocks.paragraph;
293
296
  const nodePath = slateReact.ReactEditor.findPath(editor, element);
294
297
  const isDraggable = block.isDraggable?.(element) ?? true;
295
- if (!isDraggable) {
298
+ if (!isDraggable || isMobile) {
296
299
  return block.renderElement(props);
297
300
  }
298
301
  return /*#__PURE__*/ jsxRuntime.jsx(DragAndDropElement, {
@@ -306,6 +309,7 @@ const baseRenderElement = ({ props, blocks, editor, setDragDirection, dragDirect
306
309
  const dragNoop = ()=>true;
307
310
  const BlocksContent = ({ placeholder, ariaLabelId })=>{
308
311
  const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode } = BlocksEditor.useBlocksEditorContext('BlocksContent');
312
+ const isMobile = strapiAdmin.useIsMobile();
309
313
  const blocksRef = React__namespace.useRef(null);
310
314
  const { formatMessage } = reactIntl.useIntl();
311
315
  const [dragDirection, setDragDirection] = React__namespace.useState(null);
@@ -350,11 +354,13 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
350
354
  blocks,
351
355
  editor,
352
356
  dragDirection,
353
- setDragDirection
357
+ setDragDirection,
358
+ isMobile
354
359
  }), [
355
360
  blocks,
356
361
  editor,
357
362
  dragDirection,
363
+ isMobile,
358
364
  setDragDirection
359
365
  ]);
360
366
  const checkSnippet = (event)=>{
@@ -505,6 +511,10 @@ const BlocksContent = ({ placeholder, ariaLabelId })=>{
505
511
  background: "neutral0",
506
512
  color: "neutral800",
507
513
  lineHeight: 6,
514
+ paddingLeft: {
515
+ initial: 4,
516
+ medium: 0
517
+ },
508
518
  paddingRight: 7,
509
519
  paddingTop: 6,
510
520
  paddingBottom: 3,