@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.
Files changed (86) hide show
  1. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +23 -1
  2. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  3. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +23 -1
  4. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  5. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +14 -1
  6. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  7. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +14 -1
  8. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +157 -7
  10. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  11. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +154 -5
  12. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +28 -20
  14. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  15. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +25 -17
  16. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +6 -3
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +7 -4
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +12 -12
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +13 -13
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +2 -2
  26. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +1 -1
  28. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js +4 -8
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs +4 -7
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -12
  34. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -12
  36. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +48 -1
  38. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +49 -2
  40. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +47 -13
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +49 -15
  44. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +1 -0
  46. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +1 -0
  48. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +10 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +10 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +5 -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 +5 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/InputRenderer.js +6 -2
  58. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/InputRenderer.mjs +6 -2
  60. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/utils/data.js +22 -0
  62. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  63. package/dist/admin/pages/EditView/utils/data.mjs +22 -1
  64. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  65. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.d.ts +9 -1
  66. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +9 -1
  67. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.d.ts +1 -1
  68. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/types.d.ts +2 -4
  69. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +2 -1
  70. package/dist/admin/src/pages/EditView/utils/data.d.ts +6 -1
  71. package/package.json +7 -7
  72. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js +0 -17
  73. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js.map +0 -1
  74. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs +0 -15
  75. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs.map +0 -1
  76. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js +0 -75
  77. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js.map +0 -1
  78. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs +0 -73
  79. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs.map +0 -1
  80. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +0 -88
  81. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +0 -1
  82. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +0 -84
  83. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +0 -1
  84. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.d.ts +0 -11
  85. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.d.ts +0 -9
  86. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +0 -12
@@ -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, useComposedRefs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { Editor, Path, Range, Transforms } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled } from 'styled-components';\n\nimport { type BlocksStore, useBlocksEditorContext } from '../BlocksEditor';\nimport { editLink, removeLink } from '../utils/links';\nimport { isLinkNode, type Block } from '../utils/types';\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 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 },\n};\n\nexport { linkBlocks };\n"],"names":["StyledLink","styled","Box","RemoveButton","Button","props","$visible","LinkContent","React","forwardRef","link","children","attributes","forwardedRef","formatMessage","useIntl","editor","useBlocksEditorContext","path","ReactEditor","findPath","popoverOpen","setPopoverOpen","useState","lastInsertedLinkPath","Path","equals","elementText","map","child","text","join","linkText","setLinkText","linkUrl","setLinkUrl","url","linkRel","setLinRel","rel","linkTarget","setLinkTarget","target","linkInputRef","useRef","isLastInsertedLink","isSaveDisabled","setIsSaveDisabled","onLinkChange","e","value","URL","startsWith","error","onLinkRelChange","onLinkTargetChange","handleSave","stopPropagation","selection","Range","isCollapsed","parentPath","Editor","parent","focus","Transforms","select","editLink","handleClose","removeLink","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","isLinkNode","element","linkBlocks","renderElement","matchNode","node","type","isInBlocksSelector"],"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=\"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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"}
@@ -8,7 +8,6 @@ var slate = require('slate');
8
8
  var slateReact = require('slate-react');
9
9
  var styledComponents = require('styled-components');
10
10
  var conversions = require('../utils/conversions.js');
11
- var types = require('../utils/types.js');
12
11
 
13
12
  const listStyle = styledComponents.css`
14
13
  display: flex;
@@ -46,8 +45,11 @@ const unorderedStyles = [
46
45
  'circle',
47
46
  'square'
48
47
  ];
48
+ const isListNode = (element)=>{
49
+ return element.type === 'list';
50
+ };
49
51
  const List = ({ attributes, children, element })=>{
50
- if (!types.isListNode(element)) {
52
+ if (!isListNode(element)) {
51
53
  return null;
52
54
  }
53
55
  // Decide the subsequent style by referencing the given styles according to the format,
@@ -134,7 +136,7 @@ const isText = (node)=>{
134
136
  // If previous and next nodes are lists with same format and indent Levels, then merge the nodes
135
137
  const [previousList] = previousEntry;
136
138
  const [nextList] = nextEntry;
137
- if (!slate.Editor.isEditor(previousList) && !isText(previousList) && types.isListNode(previousList) && !slate.Editor.isEditor(nextList) && !isText(nextList) && types.isListNode(nextList)) {
139
+ if (!slate.Editor.isEditor(previousList) && !isText(previousList) && isListNode(previousList) && !slate.Editor.isEditor(nextList) && !isText(nextList) && isListNode(nextList)) {
138
140
  if (previousList.type === 'list' && nextList.type === 'list' && previousList.format === nextList.format && previousList.indentLevel === nextList.indentLevel) {
139
141
  slate.Transforms.mergeNodes(editor, {
140
142
  at: currentListItemPath
@@ -193,7 +195,7 @@ const isText = (node)=>{
193
195
  }
194
196
  } else if (isListItemEmpty) {
195
197
  // Check if there is a list above the current list and shift list-item under it
196
- if (!slate.Editor.isEditor(currentList) && types.isListNode(currentList) && currentList?.indentLevel && currentList.indentLevel > 0) {
198
+ if (!slate.Editor.isEditor(currentList) && isListNode(currentList) && currentList?.indentLevel && currentList.indentLevel > 0) {
197
199
  const previousIndentLevel = currentList.indentLevel - 1;
198
200
  const parentListNodeEntry = slate.Editor.above(editor, {
199
201
  match: (node)=>!slate.Editor.isEditor(node) && node.type === 'list' && (node.indentLevel || 0) === previousIndentLevel
@@ -292,7 +294,7 @@ const isText = (node)=>{
292
294
  });
293
295
  return;
294
296
  }
295
- if (!slate.Editor.isEditor(currentList) && types.isListNode(currentList)) {
297
+ if (!slate.Editor.isEditor(currentList) && isListNode(currentList)) {
296
298
  // Wrap list-item with list block on tab
297
299
  slate.Transforms.wrapNodes(editor, {
298
300
  type: 'list',
@@ -302,41 +304,46 @@ const isText = (node)=>{
302
304
  });
303
305
  }
304
306
  };
307
+ // All that's in common between ordered and unordered list blocks
308
+ const baseListBlock = {
309
+ renderElement: (props)=>/*#__PURE__*/ jsxRuntime.jsx(List, {
310
+ ...props
311
+ }),
312
+ isInBlocksSelector: true,
313
+ handleEnterKey: handleEnterKeyOnList,
314
+ handleBackspaceKey: handleBackspaceKeyOnList,
315
+ handleTab: handleTabOnList,
316
+ isDraggable: (element)=>{
317
+ if (!isListNode(element)) {
318
+ throw Error();
319
+ }
320
+ const indentLevel = element.indentLevel ?? 0;
321
+ return indentLevel === 0;
322
+ }
323
+ };
305
324
  const listBlocks = {
306
325
  'list-ordered': {
307
- renderElement: (props)=>/*#__PURE__*/ jsxRuntime.jsx(List, {
308
- ...props
309
- }),
326
+ ...baseListBlock,
310
327
  label: {
311
328
  id: 'components.Blocks.blocks.orderedList',
312
329
  defaultMessage: 'Numbered list'
313
330
  },
314
331
  icon: Icons.NumberList,
315
332
  matchNode: (node)=>node.type === 'list' && node.format === 'ordered',
316
- isInBlocksSelector: true,
317
333
  handleConvert: (editor)=>handleConvertToList(editor, 'ordered'),
318
- handleEnterKey: handleEnterKeyOnList,
319
- handleBackspaceKey: handleBackspaceKeyOnList,
320
- handleTab: handleTabOnList,
321
334
  snippets: [
322
335
  '1.'
323
336
  ]
324
337
  },
325
338
  'list-unordered': {
326
- renderElement: (props)=>/*#__PURE__*/ jsxRuntime.jsx(List, {
327
- ...props
328
- }),
339
+ ...baseListBlock,
329
340
  label: {
330
341
  id: 'components.Blocks.blocks.unorderedList',
331
342
  defaultMessage: 'Bulleted list'
332
343
  },
333
344
  icon: Icons.BulletList,
334
345
  matchNode: (node)=>node.type === 'list' && node.format === 'unordered',
335
- isInBlocksSelector: true,
336
346
  handleConvert: (editor)=>handleConvertToList(editor, 'unordered'),
337
- handleEnterKey: handleEnterKeyOnList,
338
- handleBackspaceKey: handleBackspaceKeyOnList,
339
- handleTab: handleTabOnList,
340
347
  snippets: [
341
348
  '-',
342
349
  '*',
@@ -352,7 +359,8 @@ const listBlocks = {
352
359
  // No handleConvert, list items are created when converting to the parent list
353
360
  matchNode: (node)=>node.type === 'list-item',
354
361
  isInBlocksSelector: false,
355
- dragHandleTopMargin: '-2px'
362
+ dragHandleTopMargin: '-2px',
363
+ isDraggable: ()=>false
356
364
  }
357
365
  };
358
366
 
@@ -1 +1 @@
1
- {"version":3,"file":"List.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { BulletList, NumberList } from '@strapi/icons';\nimport { type Text, Editor, Node, Transforms, Path } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled, type CSSProperties, css } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { isListNode, type Block } from '../utils/types';\n\nconst listStyle = css`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[2]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n\n li {\n margin-inline-start: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Orderedlist = styled.ol<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst orderedStyles = ['decimal', 'lower-alpha', 'upper-roman'];\nconst unorderedStyles = ['disc', 'circle', 'square'];\n\nconst List = ({ attributes, children, element }: RenderElementProps) => {\n if (!isListNode(element)) {\n return null;\n }\n\n // Decide the subsequent style by referencing the given styles according to the format,\n // allowing for infinite nested lists\n const listStyles = element.format === 'ordered' ? orderedStyles : unorderedStyles;\n const nextIndex = (element.indentLevel || 0) % listStyles!.length;\n const listStyleType = listStyles![nextIndex];\n\n if (element.format === 'ordered') {\n return (\n <Orderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Orderedlist>\n );\n }\n\n return (\n <Unorderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Unorderedlist>\n );\n};\n\nconst replaceListWithEmptyBlock = (editor: Editor, currentListPath: Path) => {\n // Delete the empty list\n Transforms.removeNodes(editor, { at: currentListPath });\n\n if (currentListPath[0] === 0) {\n // If the list was the only (or first) block element then insert empty paragraph as editor needs default value\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: currentListPath }\n );\n Transforms.select(editor, currentListPath);\n }\n};\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n */\nconst handleBackspaceKeyOnList = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-2) === 0;\n\n if (isListEmpty) {\n const parentListEntry = Editor.above(editor, {\n at: currentListPath,\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n if (!parentListEntry) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n }\n } else if (isFocusAtTheBeginningOfAChild) {\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n Transforms.setNodes(editor, { type: 'paragraph' });\n } else if (isListItemEmpty) {\n const previousEntry = Editor.previous(editor, {\n at: currentListItemPath,\n });\n const nextEntry = Editor.next(editor, {\n at: currentListItemPath,\n });\n\n if (previousEntry && nextEntry) {\n // If previous and next nodes are lists or list-items, delete empty list item\n event.preventDefault();\n Transforms.removeNodes(editor, {\n at: currentListItemPath,\n });\n\n // If previous and next nodes are lists with same format and indent Levels, then merge the nodes\n const [previousList] = previousEntry;\n const [nextList] = nextEntry;\n if (\n !Editor.isEditor(previousList) &&\n !isText(previousList) &&\n isListNode(previousList) &&\n !Editor.isEditor(nextList) &&\n !isText(nextList) &&\n isListNode(nextList)\n ) {\n if (\n previousList.type === 'list' &&\n nextList.type === 'list' &&\n previousList.format === nextList.format &&\n previousList.indentLevel === nextList.indentLevel\n ) {\n Transforms.mergeNodes(editor, {\n at: currentListItemPath,\n });\n }\n }\n }\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n */\nconst handleEnterKeyOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isFocusAtTheBeginningOfAChild && !isListItemEmpty) {\n // If the focus is at the beginning of a child node, shift below the list item and create a new list-item\n const currentNode = Editor.above(editor, { at: editor.selection.anchor });\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n if (currentNode) {\n const path = currentNode[1];\n const updatedPath = [...path.slice(0, -1), path[path.length - 1] + 1];\n Transforms.select(editor, {\n anchor: { path: updatedPath.concat(0), offset: 0 },\n focus: { path: updatedPath.concat(0), offset: 0 },\n });\n }\n } else if (isListItemEmpty) {\n // Check if there is a list above the current list and shift list-item under it\n if (\n !Editor.isEditor(currentList) &&\n isListNode(currentList) &&\n currentList?.indentLevel &&\n currentList.indentLevel > 0\n ) {\n const previousIndentLevel = currentList.indentLevel - 1;\n\n const parentListNodeEntry = Editor.above(editor, {\n match: (node) =>\n !Editor.isEditor(node) &&\n node.type === 'list' &&\n (node.indentLevel || 0) === previousIndentLevel,\n });\n\n if (parentListNodeEntry) {\n // Get the parent list path and add 1 to it to exit from the current list\n const modifiedPath = currentListItemPath.slice(0, -1);\n if (modifiedPath.length > 0) {\n modifiedPath[modifiedPath.length - 1] += 1;\n }\n\n // Shift list-item under parent list\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: modifiedPath,\n });\n return;\n }\n }\n\n // Otherwise delete the empty list item and create a new paragraph below the parent list\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n const createdParagraphPath = Path.next(currentListPath);\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: createdParagraphPath }\n );\n\n // Move the selection to the newly created paragraph\n Transforms.select(editor, createdParagraphPath);\n } else {\n // Check if the cursor is at the end of the list item\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, currentListItemPath);\n\n if (isNodeEnd) {\n // If there was nothing after the cursor, create a fresh new list item,\n // in order to avoid carrying over the modifiers from the previous list item\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n } else {\n // If there is something after the cursor, split the current list item,\n // so that we keep the content and the modifiers\n Transforms.splitNodes(editor);\n }\n }\n};\n\n/**\n * Common handler for converting a node to a list\n */\nconst handleConvertToList = (editor: Editor, format: Block<'list'>['format']) => {\n const convertedPath = baseHandleConvert<Block<'list-item'>>(editor, { type: 'list-item' });\n\n if (!convertedPath) return;\n\n Transforms.wrapNodes(editor, { type: 'list', format, children: [] }, { at: convertedPath });\n};\n\n/**\n * Common handler for the tab key on ordered and unordered lists\n */\nconst handleTabOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList] = Editor.parent(editor, currentListItemPath);\n\n // Skip tabbing if list-item is the first item in the list\n if (currentListItem === currentList.children[0]) return;\n\n const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);\n const previousNode = currentList.children[currentListItemIndex - 1];\n\n // If previous node is a list block then move the list-item under it\n if (previousNode.type === 'list') {\n const nodePath = ReactEditor.findPath(editor, previousNode);\n const insertAtPath = previousNode.children.length;\n\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: nodePath.concat(insertAtPath),\n });\n return;\n }\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Wrap list-item with list block on tab\n Transforms.wrapNodes(editor, {\n type: 'list',\n format: currentList.format,\n indentLevel: (currentList.indentLevel || 0) + 1,\n children: [],\n });\n }\n};\n\nconst listBlocks: Pick<BlocksStore, 'list-ordered' | 'list-unordered' | 'list-item'> = {\n 'list-ordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n isInBlocksSelector: true,\n handleConvert: (editor) => handleConvertToList(editor, 'ordered'),\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n snippets: ['1.'],\n },\n 'list-unordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n isInBlocksSelector: true,\n handleConvert: (editor) => handleConvertToList(editor, 'unordered'),\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n snippets: ['-', '*', '+'],\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography tag=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n // No handleConvert, list items are created when converting to the parent list\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n dragHandleTopMargin: '-2px',\n },\n};\n\nexport { listBlocks };\n"],"names":["listStyle","css","theme","spaces","Orderedlist","styled","ol","props","$listStyleType","Unorderedlist","ul","orderedStyles","unorderedStyles","List","attributes","children","element","isListNode","listStyles","format","nextIndex","indentLevel","length","listStyleType","_jsx","replaceListWithEmptyBlock","editor","currentListPath","Transforms","removeNodes","at","insertNodes","type","text","select","isText","node","Node","isNode","Editor","isEditor","handleBackspaceKeyOnList","event","selection","currentListItem","currentListItemPath","parent","anchor","currentList","isListEmpty","isListItemEmpty","isFocusAtTheBeginningOfAChild","focus","offset","path","parentListEntry","above","match","preventDefault","liftNodes","setNodes","previousEntry","previous","nextEntry","next","previousList","nextList","mergeNodes","handleEnterKeyOnList","currentListItemEntry","currentNode","updatedPath","slice","concat","previousIndentLevel","parentListNodeEntry","modifiedPath","moveNodes","to","createdParagraphPath","Path","isNodeEnd","isEnd","splitNodes","handleConvertToList","convertedPath","baseHandleConvert","wrapNodes","handleTabOnList","currentListItemIndex","findIndex","item","previousNode","nodePath","ReactEditor","findPath","insertAtPath","listBlocks","renderElement","label","id","defaultMessage","icon","NumberList","matchNode","isInBlocksSelector","handleConvert","handleEnterKey","handleBackspaceKey","handleTab","snippets","BulletList","Typography","tag","dragHandleTopMargin"],"mappings":"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"}
1
+ {"version":3,"file":"List.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { BulletList, NumberList } from '@strapi/icons';\nimport { Schema } from '@strapi/types';\nimport { type Text, Editor, Node, Transforms, Path, Element } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled, type CSSProperties, css } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst listStyle = css`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[2]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n\n li {\n margin-inline-start: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Orderedlist = styled.ol<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst orderedStyles = ['decimal', 'lower-alpha', 'upper-roman'];\nconst unorderedStyles = ['disc', 'circle', 'square'];\n\nconst isListNode = (element: Element): element is Schema.Attribute.ListBlockNode => {\n return element.type === 'list';\n};\n\nconst List = ({ attributes, children, element }: RenderElementProps) => {\n if (!isListNode(element)) {\n return null;\n }\n\n // Decide the subsequent style by referencing the given styles according to the format,\n // allowing for infinite nested lists\n const listStyles = element.format === 'ordered' ? orderedStyles : unorderedStyles;\n const nextIndex = (element.indentLevel || 0) % listStyles!.length;\n const listStyleType = listStyles![nextIndex];\n\n if (element.format === 'ordered') {\n return (\n <Orderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Orderedlist>\n );\n }\n\n return (\n <Unorderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Unorderedlist>\n );\n};\n\nconst replaceListWithEmptyBlock = (editor: Editor, currentListPath: Path) => {\n // Delete the empty list\n Transforms.removeNodes(editor, { at: currentListPath });\n\n if (currentListPath[0] === 0) {\n // If the list was the only (or first) block element then insert empty paragraph as editor needs default value\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: currentListPath }\n );\n Transforms.select(editor, currentListPath);\n }\n};\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n */\nconst handleBackspaceKeyOnList = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-2) === 0;\n\n if (isListEmpty) {\n const parentListEntry = Editor.above(editor, {\n at: currentListPath,\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n if (!parentListEntry) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n }\n } else if (isFocusAtTheBeginningOfAChild) {\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n Transforms.setNodes(editor, { type: 'paragraph' });\n } else if (isListItemEmpty) {\n const previousEntry = Editor.previous(editor, {\n at: currentListItemPath,\n });\n const nextEntry = Editor.next(editor, {\n at: currentListItemPath,\n });\n\n if (previousEntry && nextEntry) {\n // If previous and next nodes are lists or list-items, delete empty list item\n event.preventDefault();\n Transforms.removeNodes(editor, {\n at: currentListItemPath,\n });\n\n // If previous and next nodes are lists with same format and indent Levels, then merge the nodes\n const [previousList] = previousEntry;\n const [nextList] = nextEntry;\n if (\n !Editor.isEditor(previousList) &&\n !isText(previousList) &&\n isListNode(previousList) &&\n !Editor.isEditor(nextList) &&\n !isText(nextList) &&\n isListNode(nextList)\n ) {\n if (\n previousList.type === 'list' &&\n nextList.type === 'list' &&\n previousList.format === nextList.format &&\n previousList.indentLevel === nextList.indentLevel\n ) {\n Transforms.mergeNodes(editor, {\n at: currentListItemPath,\n });\n }\n }\n }\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n */\nconst handleEnterKeyOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isFocusAtTheBeginningOfAChild && !isListItemEmpty) {\n // If the focus is at the beginning of a child node, shift below the list item and create a new list-item\n const currentNode = Editor.above(editor, { at: editor.selection.anchor });\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n if (currentNode) {\n const path = currentNode[1];\n const updatedPath = [...path.slice(0, -1), path[path.length - 1] + 1];\n Transforms.select(editor, {\n anchor: { path: updatedPath.concat(0), offset: 0 },\n focus: { path: updatedPath.concat(0), offset: 0 },\n });\n }\n } else if (isListItemEmpty) {\n // Check if there is a list above the current list and shift list-item under it\n if (\n !Editor.isEditor(currentList) &&\n isListNode(currentList) &&\n currentList?.indentLevel &&\n currentList.indentLevel > 0\n ) {\n const previousIndentLevel = currentList.indentLevel - 1;\n\n const parentListNodeEntry = Editor.above(editor, {\n match: (node) =>\n !Editor.isEditor(node) &&\n node.type === 'list' &&\n (node.indentLevel || 0) === previousIndentLevel,\n });\n\n if (parentListNodeEntry) {\n // Get the parent list path and add 1 to it to exit from the current list\n const modifiedPath = currentListItemPath.slice(0, -1);\n if (modifiedPath.length > 0) {\n modifiedPath[modifiedPath.length - 1] += 1;\n }\n\n // Shift list-item under parent list\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: modifiedPath,\n });\n return;\n }\n }\n\n // Otherwise delete the empty list item and create a new paragraph below the parent list\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n const createdParagraphPath = Path.next(currentListPath);\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: createdParagraphPath }\n );\n\n // Move the selection to the newly created paragraph\n Transforms.select(editor, createdParagraphPath);\n } else {\n // Check if the cursor is at the end of the list item\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, currentListItemPath);\n\n if (isNodeEnd) {\n // If there was nothing after the cursor, create a fresh new list item,\n // in order to avoid carrying over the modifiers from the previous list item\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n } else {\n // If there is something after the cursor, split the current list item,\n // so that we keep the content and the modifiers\n Transforms.splitNodes(editor);\n }\n }\n};\n\n/**\n * Common handler for converting a node to a list\n */\nconst handleConvertToList = (editor: Editor, format: Block<'list'>['format']) => {\n const convertedPath = baseHandleConvert<Block<'list-item'>>(editor, { type: 'list-item' });\n\n if (!convertedPath) return;\n\n Transforms.wrapNodes(editor, { type: 'list', format, children: [] }, { at: convertedPath });\n};\n\n/**\n * Common handler for the tab key on ordered and unordered lists\n */\nconst handleTabOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList] = Editor.parent(editor, currentListItemPath);\n\n // Skip tabbing if list-item is the first item in the list\n if (currentListItem === currentList.children[0]) return;\n\n const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);\n const previousNode = currentList.children[currentListItemIndex - 1];\n\n // If previous node is a list block then move the list-item under it\n if (previousNode.type === 'list') {\n const nodePath = ReactEditor.findPath(editor, previousNode);\n const insertAtPath = previousNode.children.length;\n\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: nodePath.concat(insertAtPath),\n });\n return;\n }\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Wrap list-item with list block on tab\n Transforms.wrapNodes(editor, {\n type: 'list',\n format: currentList.format,\n indentLevel: (currentList.indentLevel || 0) + 1,\n children: [],\n });\n }\n};\n\n// All that's in common between ordered and unordered list blocks\nconst baseListBlock = {\n renderElement: (props) => <List {...props} />,\n isInBlocksSelector: true,\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n isDraggable: (element) => {\n if (!isListNode(element)) {\n throw Error();\n }\n const indentLevel = element.indentLevel ?? 0;\n return indentLevel === 0;\n },\n} satisfies Partial<BlocksStore['list-ordered' | 'list-unordered']>;\n\nconst listBlocks: Pick<BlocksStore, 'list-ordered' | 'list-unordered' | 'list-item'> = {\n 'list-ordered': {\n ...baseListBlock,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n handleConvert: (editor) => handleConvertToList(editor, 'ordered'),\n snippets: ['1.'],\n },\n 'list-unordered': {\n ...baseListBlock,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n handleConvert: (editor) => handleConvertToList(editor, 'unordered'),\n snippets: ['-', '*', '+'],\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography tag=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n // No handleConvert, list items are created when converting to the parent list\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n dragHandleTopMargin: '-2px',\n isDraggable: () => false,\n },\n};\n\nexport { listBlocks };\n"],"names":["listStyle","css","theme","spaces","Orderedlist","styled","ol","props","$listStyleType","Unorderedlist","ul","orderedStyles","unorderedStyles","isListNode","element","type","List","attributes","children","listStyles","format","nextIndex","indentLevel","length","listStyleType","_jsx","replaceListWithEmptyBlock","editor","currentListPath","Transforms","removeNodes","at","insertNodes","text","select","isText","node","Node","isNode","Editor","isEditor","handleBackspaceKeyOnList","event","selection","currentListItem","currentListItemPath","parent","anchor","currentList","isListEmpty","isListItemEmpty","isFocusAtTheBeginningOfAChild","focus","offset","path","parentListEntry","above","match","preventDefault","liftNodes","setNodes","previousEntry","previous","nextEntry","next","previousList","nextList","mergeNodes","handleEnterKeyOnList","currentListItemEntry","currentNode","updatedPath","slice","concat","previousIndentLevel","parentListNodeEntry","modifiedPath","moveNodes","to","createdParagraphPath","Path","isNodeEnd","isEnd","splitNodes","handleConvertToList","convertedPath","baseHandleConvert","wrapNodes","handleTabOnList","currentListItemIndex","findIndex","item","previousNode","nodePath","ReactEditor","findPath","insertAtPath","baseListBlock","renderElement","isInBlocksSelector","handleEnterKey","handleBackspaceKey","handleTab","isDraggable","Error","listBlocks","label","id","defaultMessage","icon","NumberList","matchNode","handleConvert","snippets","BulletList","Typography","tag","dragHandleTopMargin"],"mappings":"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"}
@@ -2,11 +2,10 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import 'react';
3
3
  import { Typography } from '@strapi/design-system';
4
4
  import { NumberList, BulletList } from '@strapi/icons';
5
- import { Editor, Transforms, Path, Node } from 'slate';
5
+ import { Transforms, Editor, Path, Node } from 'slate';
6
6
  import { ReactEditor } from 'slate-react';
7
7
  import { css, styled } from 'styled-components';
8
8
  import { baseHandleConvert } from '../utils/conversions.mjs';
9
- import { isListNode } from '../utils/types.mjs';
10
9
 
11
10
  const listStyle = css`
12
11
  display: flex;
@@ -44,6 +43,9 @@ const unorderedStyles = [
44
43
  'circle',
45
44
  'square'
46
45
  ];
46
+ const isListNode = (element)=>{
47
+ return element.type === 'list';
48
+ };
47
49
  const List = ({ attributes, children, element })=>{
48
50
  if (!isListNode(element)) {
49
51
  return null;
@@ -300,41 +302,46 @@ const isText = (node)=>{
300
302
  });
301
303
  }
302
304
  };
305
+ // All that's in common between ordered and unordered list blocks
306
+ const baseListBlock = {
307
+ renderElement: (props)=>/*#__PURE__*/ jsx(List, {
308
+ ...props
309
+ }),
310
+ isInBlocksSelector: true,
311
+ handleEnterKey: handleEnterKeyOnList,
312
+ handleBackspaceKey: handleBackspaceKeyOnList,
313
+ handleTab: handleTabOnList,
314
+ isDraggable: (element)=>{
315
+ if (!isListNode(element)) {
316
+ throw Error();
317
+ }
318
+ const indentLevel = element.indentLevel ?? 0;
319
+ return indentLevel === 0;
320
+ }
321
+ };
303
322
  const listBlocks = {
304
323
  'list-ordered': {
305
- renderElement: (props)=>/*#__PURE__*/ jsx(List, {
306
- ...props
307
- }),
324
+ ...baseListBlock,
308
325
  label: {
309
326
  id: 'components.Blocks.blocks.orderedList',
310
327
  defaultMessage: 'Numbered list'
311
328
  },
312
329
  icon: NumberList,
313
330
  matchNode: (node)=>node.type === 'list' && node.format === 'ordered',
314
- isInBlocksSelector: true,
315
331
  handleConvert: (editor)=>handleConvertToList(editor, 'ordered'),
316
- handleEnterKey: handleEnterKeyOnList,
317
- handleBackspaceKey: handleBackspaceKeyOnList,
318
- handleTab: handleTabOnList,
319
332
  snippets: [
320
333
  '1.'
321
334
  ]
322
335
  },
323
336
  'list-unordered': {
324
- renderElement: (props)=>/*#__PURE__*/ jsx(List, {
325
- ...props
326
- }),
337
+ ...baseListBlock,
327
338
  label: {
328
339
  id: 'components.Blocks.blocks.unorderedList',
329
340
  defaultMessage: 'Bulleted list'
330
341
  },
331
342
  icon: BulletList,
332
343
  matchNode: (node)=>node.type === 'list' && node.format === 'unordered',
333
- isInBlocksSelector: true,
334
344
  handleConvert: (editor)=>handleConvertToList(editor, 'unordered'),
335
- handleEnterKey: handleEnterKeyOnList,
336
- handleBackspaceKey: handleBackspaceKeyOnList,
337
- handleTab: handleTabOnList,
338
345
  snippets: [
339
346
  '-',
340
347
  '*',
@@ -350,7 +357,8 @@ const listBlocks = {
350
357
  // No handleConvert, list items are created when converting to the parent list
351
358
  matchNode: (node)=>node.type === 'list-item',
352
359
  isInBlocksSelector: false,
353
- dragHandleTopMargin: '-2px'
360
+ dragHandleTopMargin: '-2px',
361
+ isDraggable: ()=>false
354
362
  }
355
363
  };
356
364
 
@@ -1 +1 @@
1
- {"version":3,"file":"List.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { BulletList, NumberList } from '@strapi/icons';\nimport { type Text, Editor, Node, Transforms, Path } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled, type CSSProperties, css } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { isListNode, type Block } from '../utils/types';\n\nconst listStyle = css`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[2]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n\n li {\n margin-inline-start: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Orderedlist = styled.ol<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst orderedStyles = ['decimal', 'lower-alpha', 'upper-roman'];\nconst unorderedStyles = ['disc', 'circle', 'square'];\n\nconst List = ({ attributes, children, element }: RenderElementProps) => {\n if (!isListNode(element)) {\n return null;\n }\n\n // Decide the subsequent style by referencing the given styles according to the format,\n // allowing for infinite nested lists\n const listStyles = element.format === 'ordered' ? orderedStyles : unorderedStyles;\n const nextIndex = (element.indentLevel || 0) % listStyles!.length;\n const listStyleType = listStyles![nextIndex];\n\n if (element.format === 'ordered') {\n return (\n <Orderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Orderedlist>\n );\n }\n\n return (\n <Unorderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Unorderedlist>\n );\n};\n\nconst replaceListWithEmptyBlock = (editor: Editor, currentListPath: Path) => {\n // Delete the empty list\n Transforms.removeNodes(editor, { at: currentListPath });\n\n if (currentListPath[0] === 0) {\n // If the list was the only (or first) block element then insert empty paragraph as editor needs default value\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: currentListPath }\n );\n Transforms.select(editor, currentListPath);\n }\n};\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n */\nconst handleBackspaceKeyOnList = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-2) === 0;\n\n if (isListEmpty) {\n const parentListEntry = Editor.above(editor, {\n at: currentListPath,\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n if (!parentListEntry) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n }\n } else if (isFocusAtTheBeginningOfAChild) {\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n Transforms.setNodes(editor, { type: 'paragraph' });\n } else if (isListItemEmpty) {\n const previousEntry = Editor.previous(editor, {\n at: currentListItemPath,\n });\n const nextEntry = Editor.next(editor, {\n at: currentListItemPath,\n });\n\n if (previousEntry && nextEntry) {\n // If previous and next nodes are lists or list-items, delete empty list item\n event.preventDefault();\n Transforms.removeNodes(editor, {\n at: currentListItemPath,\n });\n\n // If previous and next nodes are lists with same format and indent Levels, then merge the nodes\n const [previousList] = previousEntry;\n const [nextList] = nextEntry;\n if (\n !Editor.isEditor(previousList) &&\n !isText(previousList) &&\n isListNode(previousList) &&\n !Editor.isEditor(nextList) &&\n !isText(nextList) &&\n isListNode(nextList)\n ) {\n if (\n previousList.type === 'list' &&\n nextList.type === 'list' &&\n previousList.format === nextList.format &&\n previousList.indentLevel === nextList.indentLevel\n ) {\n Transforms.mergeNodes(editor, {\n at: currentListItemPath,\n });\n }\n }\n }\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n */\nconst handleEnterKeyOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isFocusAtTheBeginningOfAChild && !isListItemEmpty) {\n // If the focus is at the beginning of a child node, shift below the list item and create a new list-item\n const currentNode = Editor.above(editor, { at: editor.selection.anchor });\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n if (currentNode) {\n const path = currentNode[1];\n const updatedPath = [...path.slice(0, -1), path[path.length - 1] + 1];\n Transforms.select(editor, {\n anchor: { path: updatedPath.concat(0), offset: 0 },\n focus: { path: updatedPath.concat(0), offset: 0 },\n });\n }\n } else if (isListItemEmpty) {\n // Check if there is a list above the current list and shift list-item under it\n if (\n !Editor.isEditor(currentList) &&\n isListNode(currentList) &&\n currentList?.indentLevel &&\n currentList.indentLevel > 0\n ) {\n const previousIndentLevel = currentList.indentLevel - 1;\n\n const parentListNodeEntry = Editor.above(editor, {\n match: (node) =>\n !Editor.isEditor(node) &&\n node.type === 'list' &&\n (node.indentLevel || 0) === previousIndentLevel,\n });\n\n if (parentListNodeEntry) {\n // Get the parent list path and add 1 to it to exit from the current list\n const modifiedPath = currentListItemPath.slice(0, -1);\n if (modifiedPath.length > 0) {\n modifiedPath[modifiedPath.length - 1] += 1;\n }\n\n // Shift list-item under parent list\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: modifiedPath,\n });\n return;\n }\n }\n\n // Otherwise delete the empty list item and create a new paragraph below the parent list\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n const createdParagraphPath = Path.next(currentListPath);\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: createdParagraphPath }\n );\n\n // Move the selection to the newly created paragraph\n Transforms.select(editor, createdParagraphPath);\n } else {\n // Check if the cursor is at the end of the list item\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, currentListItemPath);\n\n if (isNodeEnd) {\n // If there was nothing after the cursor, create a fresh new list item,\n // in order to avoid carrying over the modifiers from the previous list item\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n } else {\n // If there is something after the cursor, split the current list item,\n // so that we keep the content and the modifiers\n Transforms.splitNodes(editor);\n }\n }\n};\n\n/**\n * Common handler for converting a node to a list\n */\nconst handleConvertToList = (editor: Editor, format: Block<'list'>['format']) => {\n const convertedPath = baseHandleConvert<Block<'list-item'>>(editor, { type: 'list-item' });\n\n if (!convertedPath) return;\n\n Transforms.wrapNodes(editor, { type: 'list', format, children: [] }, { at: convertedPath });\n};\n\n/**\n * Common handler for the tab key on ordered and unordered lists\n */\nconst handleTabOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList] = Editor.parent(editor, currentListItemPath);\n\n // Skip tabbing if list-item is the first item in the list\n if (currentListItem === currentList.children[0]) return;\n\n const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);\n const previousNode = currentList.children[currentListItemIndex - 1];\n\n // If previous node is a list block then move the list-item under it\n if (previousNode.type === 'list') {\n const nodePath = ReactEditor.findPath(editor, previousNode);\n const insertAtPath = previousNode.children.length;\n\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: nodePath.concat(insertAtPath),\n });\n return;\n }\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Wrap list-item with list block on tab\n Transforms.wrapNodes(editor, {\n type: 'list',\n format: currentList.format,\n indentLevel: (currentList.indentLevel || 0) + 1,\n children: [],\n });\n }\n};\n\nconst listBlocks: Pick<BlocksStore, 'list-ordered' | 'list-unordered' | 'list-item'> = {\n 'list-ordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n isInBlocksSelector: true,\n handleConvert: (editor) => handleConvertToList(editor, 'ordered'),\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n snippets: ['1.'],\n },\n 'list-unordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n isInBlocksSelector: true,\n handleConvert: (editor) => handleConvertToList(editor, 'unordered'),\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n snippets: ['-', '*', '+'],\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography tag=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n // No handleConvert, list items are created when converting to the parent list\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n dragHandleTopMargin: '-2px',\n },\n};\n\nexport { listBlocks };\n"],"names":["listStyle","css","theme","spaces","Orderedlist","styled","ol","props","$listStyleType","Unorderedlist","ul","orderedStyles","unorderedStyles","List","attributes","children","element","isListNode","listStyles","format","nextIndex","indentLevel","length","listStyleType","_jsx","replaceListWithEmptyBlock","editor","currentListPath","Transforms","removeNodes","at","insertNodes","type","text","select","isText","node","Node","isNode","Editor","isEditor","handleBackspaceKeyOnList","event","selection","currentListItem","currentListItemPath","parent","anchor","currentList","isListEmpty","isListItemEmpty","isFocusAtTheBeginningOfAChild","focus","offset","path","parentListEntry","above","match","preventDefault","liftNodes","setNodes","previousEntry","previous","nextEntry","next","previousList","nextList","mergeNodes","handleEnterKeyOnList","currentListItemEntry","currentNode","updatedPath","slice","concat","previousIndentLevel","parentListNodeEntry","modifiedPath","moveNodes","to","createdParagraphPath","Path","isNodeEnd","isEnd","splitNodes","handleConvertToList","convertedPath","baseHandleConvert","wrapNodes","handleTabOnList","currentListItemIndex","findIndex","item","previousNode","nodePath","ReactEditor","findPath","insertAtPath","listBlocks","renderElement","label","id","defaultMessage","icon","NumberList","matchNode","isInBlocksSelector","handleConvert","handleEnterKey","handleBackspaceKey","handleTab","snippets","BulletList","Typography","tag","dragHandleTopMargin"],"mappings":"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"}
1
+ {"version":3,"file":"List.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { BulletList, NumberList } from '@strapi/icons';\nimport { Schema } from '@strapi/types';\nimport { type Text, Editor, Node, Transforms, Path, Element } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport { styled, type CSSProperties, css } from 'styled-components';\n\nimport { type BlocksStore } from '../BlocksEditor';\nimport { baseHandleConvert } from '../utils/conversions';\nimport { type Block } from '../utils/types';\n\nconst listStyle = css`\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[2]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[2]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n\n li {\n margin-inline-start: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Orderedlist = styled.ol<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul<{ $listStyleType: CSSProperties['listStyleType'] }>`\n list-style-type: ${(props) => props.$listStyleType};\n ${listStyle}\n`;\n\nconst orderedStyles = ['decimal', 'lower-alpha', 'upper-roman'];\nconst unorderedStyles = ['disc', 'circle', 'square'];\n\nconst isListNode = (element: Element): element is Schema.Attribute.ListBlockNode => {\n return element.type === 'list';\n};\n\nconst List = ({ attributes, children, element }: RenderElementProps) => {\n if (!isListNode(element)) {\n return null;\n }\n\n // Decide the subsequent style by referencing the given styles according to the format,\n // allowing for infinite nested lists\n const listStyles = element.format === 'ordered' ? orderedStyles : unorderedStyles;\n const nextIndex = (element.indentLevel || 0) % listStyles!.length;\n const listStyleType = listStyles![nextIndex];\n\n if (element.format === 'ordered') {\n return (\n <Orderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Orderedlist>\n );\n }\n\n return (\n <Unorderedlist $listStyleType={listStyleType} {...attributes}>\n {children}\n </Unorderedlist>\n );\n};\n\nconst replaceListWithEmptyBlock = (editor: Editor, currentListPath: Path) => {\n // Delete the empty list\n Transforms.removeNodes(editor, { at: currentListPath });\n\n if (currentListPath[0] === 0) {\n // If the list was the only (or first) block element then insert empty paragraph as editor needs default value\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: currentListPath }\n );\n Transforms.select(editor, currentListPath);\n }\n};\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n */\nconst handleBackspaceKeyOnList = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-2) === 0;\n\n if (isListEmpty) {\n const parentListEntry = Editor.above(editor, {\n at: currentListPath,\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n if (!parentListEntry) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n }\n } else if (isFocusAtTheBeginningOfAChild) {\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n Transforms.setNodes(editor, { type: 'paragraph' });\n } else if (isListItemEmpty) {\n const previousEntry = Editor.previous(editor, {\n at: currentListItemPath,\n });\n const nextEntry = Editor.next(editor, {\n at: currentListItemPath,\n });\n\n if (previousEntry && nextEntry) {\n // If previous and next nodes are lists or list-items, delete empty list item\n event.preventDefault();\n Transforms.removeNodes(editor, {\n at: currentListItemPath,\n });\n\n // If previous and next nodes are lists with same format and indent Levels, then merge the nodes\n const [previousList] = previousEntry;\n const [nextList] = nextEntry;\n if (\n !Editor.isEditor(previousList) &&\n !isText(previousList) &&\n isListNode(previousList) &&\n !Editor.isEditor(nextList) &&\n !isText(nextList) &&\n isListNode(nextList)\n ) {\n if (\n previousList.type === 'list' &&\n nextList.type === 'list' &&\n previousList.format === nextList.format &&\n previousList.indentLevel === nextList.indentLevel\n ) {\n Transforms.mergeNodes(editor, {\n at: currentListItemPath,\n });\n }\n }\n }\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n */\nconst handleEnterKeyOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isFocusAtTheBeginningOfAChild && !isListItemEmpty) {\n // If the focus is at the beginning of a child node, shift below the list item and create a new list-item\n const currentNode = Editor.above(editor, { at: editor.selection.anchor });\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n if (currentNode) {\n const path = currentNode[1];\n const updatedPath = [...path.slice(0, -1), path[path.length - 1] + 1];\n Transforms.select(editor, {\n anchor: { path: updatedPath.concat(0), offset: 0 },\n focus: { path: updatedPath.concat(0), offset: 0 },\n });\n }\n } else if (isListItemEmpty) {\n // Check if there is a list above the current list and shift list-item under it\n if (\n !Editor.isEditor(currentList) &&\n isListNode(currentList) &&\n currentList?.indentLevel &&\n currentList.indentLevel > 0\n ) {\n const previousIndentLevel = currentList.indentLevel - 1;\n\n const parentListNodeEntry = Editor.above(editor, {\n match: (node) =>\n !Editor.isEditor(node) &&\n node.type === 'list' &&\n (node.indentLevel || 0) === previousIndentLevel,\n });\n\n if (parentListNodeEntry) {\n // Get the parent list path and add 1 to it to exit from the current list\n const modifiedPath = currentListItemPath.slice(0, -1);\n if (modifiedPath.length > 0) {\n modifiedPath[modifiedPath.length - 1] += 1;\n }\n\n // Shift list-item under parent list\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: modifiedPath,\n });\n return;\n }\n }\n\n // Otherwise delete the empty list item and create a new paragraph below the parent list\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n const createdParagraphPath = Path.next(currentListPath);\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: createdParagraphPath }\n );\n\n // Move the selection to the newly created paragraph\n Transforms.select(editor, createdParagraphPath);\n } else {\n // Check if the cursor is at the end of the list item\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, currentListItemPath);\n\n if (isNodeEnd) {\n // If there was nothing after the cursor, create a fresh new list item,\n // in order to avoid carrying over the modifiers from the previous list item\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n } else {\n // If there is something after the cursor, split the current list item,\n // so that we keep the content and the modifiers\n Transforms.splitNodes(editor);\n }\n }\n};\n\n/**\n * Common handler for converting a node to a list\n */\nconst handleConvertToList = (editor: Editor, format: Block<'list'>['format']) => {\n const convertedPath = baseHandleConvert<Block<'list-item'>>(editor, { type: 'list-item' });\n\n if (!convertedPath) return;\n\n Transforms.wrapNodes(editor, { type: 'list', format, children: [] }, { at: convertedPath });\n};\n\n/**\n * Common handler for the tab key on ordered and unordered lists\n */\nconst handleTabOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList] = Editor.parent(editor, currentListItemPath);\n\n // Skip tabbing if list-item is the first item in the list\n if (currentListItem === currentList.children[0]) return;\n\n const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);\n const previousNode = currentList.children[currentListItemIndex - 1];\n\n // If previous node is a list block then move the list-item under it\n if (previousNode.type === 'list') {\n const nodePath = ReactEditor.findPath(editor, previousNode);\n const insertAtPath = previousNode.children.length;\n\n Transforms.moveNodes(editor, {\n at: currentListItemPath,\n to: nodePath.concat(insertAtPath),\n });\n return;\n }\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Wrap list-item with list block on tab\n Transforms.wrapNodes(editor, {\n type: 'list',\n format: currentList.format,\n indentLevel: (currentList.indentLevel || 0) + 1,\n children: [],\n });\n }\n};\n\n// All that's in common between ordered and unordered list blocks\nconst baseListBlock = {\n renderElement: (props) => <List {...props} />,\n isInBlocksSelector: true,\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n handleTab: handleTabOnList,\n isDraggable: (element) => {\n if (!isListNode(element)) {\n throw Error();\n }\n const indentLevel = element.indentLevel ?? 0;\n return indentLevel === 0;\n },\n} satisfies Partial<BlocksStore['list-ordered' | 'list-unordered']>;\n\nconst listBlocks: Pick<BlocksStore, 'list-ordered' | 'list-unordered' | 'list-item'> = {\n 'list-ordered': {\n ...baseListBlock,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n handleConvert: (editor) => handleConvertToList(editor, 'ordered'),\n snippets: ['1.'],\n },\n 'list-unordered': {\n ...baseListBlock,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n handleConvert: (editor) => handleConvertToList(editor, 'unordered'),\n snippets: ['-', '*', '+'],\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography tag=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n // No handleConvert, list items are created when converting to the parent list\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n dragHandleTopMargin: '-2px',\n isDraggable: () => false,\n },\n};\n\nexport { listBlocks };\n"],"names":["listStyle","css","theme","spaces","Orderedlist","styled","ol","props","$listStyleType","Unorderedlist","ul","orderedStyles","unorderedStyles","isListNode","element","type","List","attributes","children","listStyles","format","nextIndex","indentLevel","length","listStyleType","_jsx","replaceListWithEmptyBlock","editor","currentListPath","Transforms","removeNodes","at","insertNodes","text","select","isText","node","Node","isNode","Editor","isEditor","handleBackspaceKeyOnList","event","selection","currentListItem","currentListItemPath","parent","anchor","currentList","isListEmpty","isListItemEmpty","isFocusAtTheBeginningOfAChild","focus","offset","path","parentListEntry","above","match","preventDefault","liftNodes","setNodes","previousEntry","previous","nextEntry","next","previousList","nextList","mergeNodes","handleEnterKeyOnList","currentListItemEntry","currentNode","updatedPath","slice","concat","previousIndentLevel","parentListNodeEntry","modifiedPath","moveNodes","to","createdParagraphPath","Path","isNodeEnd","isEnd","splitNodes","handleConvertToList","convertedPath","baseHandleConvert","wrapNodes","handleTabOnList","currentListItemIndex","findIndex","item","previousNode","nodePath","ReactEditor","findPath","insertAtPath","baseListBlock","renderElement","isInBlocksSelector","handleEnterKey","handleBackspaceKey","handleTab","isDraggable","Error","listBlocks","label","id","defaultMessage","icon","NumberList","matchNode","handleConvert","snippets","BulletList","Typography","tag","dragHandleTopMargin"],"mappings":"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"}