@strapi/content-manager 5.53.0 → 5.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/admin/components/ActionsDrawer.js +17 -6
  2. package/dist/admin/components/ActionsDrawer.js.map +1 -1
  3. package/dist/admin/components/ActionsDrawer.mjs +19 -8
  4. package/dist/admin/components/ActionsDrawer.mjs.map +1 -1
  5. package/dist/admin/components/LeftMenu.js +131 -52
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +133 -54
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/history/components/VersionsList.js +37 -43
  10. package/dist/admin/history/components/VersionsList.js.map +1 -1
  11. package/dist/admin/history/components/VersionsList.mjs +37 -43
  12. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  13. package/dist/admin/hooks/useContentManagerInitData.js +3 -2
  14. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  15. package/dist/admin/hooks/useContentManagerInitData.mjs +3 -2
  16. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocumentActions.js +3 -1
  18. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  19. package/dist/admin/hooks/useDocumentActions.mjs +4 -2
  20. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  21. package/dist/admin/layout.js +2 -4
  22. package/dist/admin/layout.js.map +1 -1
  23. package/dist/admin/layout.mjs +2 -4
  24. package/dist/admin/layout.mjs.map +1 -1
  25. package/dist/admin/modules/app.js +3 -1
  26. package/dist/admin/modules/app.js.map +1 -1
  27. package/dist/admin/modules/app.mjs +3 -1
  28. package/dist/admin/modules/app.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/EditViewPage.js +15 -20
  30. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  31. package/dist/admin/pages/EditView/EditViewPage.mjs +15 -20
  32. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.js +2 -0
  34. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/DocumentActions.mjs +2 -0
  36. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js +74 -7
  38. package/dist/admin/pages/EditView/components/EditorToolbarObserver.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs +74 -7
  40. package/dist/admin/pages/EditView/components/EditorToolbarObserver.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +7 -2
  42. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +7 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +59 -2
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +60 -3
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js +4 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs +4 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +4 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +4 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -1
  60. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +58 -1
  62. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +58 -2
  64. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +25 -2
  66. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +5 -2
  68. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/InputRenderer.js +5 -1
  70. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/InputRenderer.mjs +6 -2
  72. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  73. package/dist/admin/pages/ListView/ListViewPage.js +1 -0
  74. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  75. package/dist/admin/pages/ListView/ListViewPage.mjs +1 -0
  76. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  77. package/dist/admin/preview/components/InputPopover.js +64 -46
  78. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  79. package/dist/admin/preview/components/InputPopover.mjs +66 -49
  80. package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
  81. package/dist/admin/preview/hooks/usePreviewInputManager.js +23 -7
  82. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -1
  83. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +25 -9
  84. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -1
  85. package/dist/admin/preview/pages/Preview.js +19 -0
  86. package/dist/admin/preview/pages/Preview.js.map +1 -1
  87. package/dist/admin/preview/pages/Preview.mjs +20 -1
  88. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  89. package/dist/admin/preview/utils/constants.js +9 -3
  90. package/dist/admin/preview/utils/constants.js.map +1 -1
  91. package/dist/admin/preview/utils/constants.mjs +9 -3
  92. package/dist/admin/preview/utils/constants.mjs.map +1 -1
  93. package/dist/admin/src/components/ActionsDrawer.d.ts +1 -0
  94. package/dist/admin/src/modules/app.d.ts +2 -0
  95. package/dist/admin/src/pages/EditView/components/EditorToolbarObserver.d.ts +2 -1
  96. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.d.ts +5 -1
  97. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +5 -0
  98. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.d.ts +5 -0
  99. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.d.ts +2 -1
  100. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +14 -1
  101. package/dist/admin/src/preview/components/InputPopover.d.ts +2 -1
  102. package/dist/admin/src/preview/pages/Preview.d.ts +1 -0
  103. package/dist/admin/src/preview/utils/constants.d.ts +8 -1
  104. package/dist/admin/src/services/init.d.ts +1 -0
  105. package/dist/admin/src/utils/contentStructure.d.ts +59 -0
  106. package/dist/admin/utils/contentStructure.js +136 -0
  107. package/dist/admin/utils/contentStructure.js.map +1 -0
  108. package/dist/admin/utils/contentStructure.mjs +130 -0
  109. package/dist/admin/utils/contentStructure.mjs.map +1 -0
  110. package/dist/server/controllers/init.js +7 -2
  111. package/dist/server/controllers/init.js.map +1 -1
  112. package/dist/server/controllers/init.mjs +7 -2
  113. package/dist/server/controllers/init.mjs.map +1 -1
  114. package/dist/server/preview/controllers/previewScript.js +548 -22
  115. package/dist/server/services/content-structure.js +53 -0
  116. package/dist/server/services/content-structure.js.map +1 -0
  117. package/dist/server/services/content-structure.mjs +51 -0
  118. package/dist/server/services/content-structure.mjs.map +1 -0
  119. package/dist/server/services/index.js +2 -0
  120. package/dist/server/services/index.js.map +1 -1
  121. package/dist/server/services/index.mjs +2 -0
  122. package/dist/server/services/index.mjs.map +1 -1
  123. package/dist/server/src/controllers/index.d.ts +1 -1
  124. package/dist/server/src/controllers/init.d.ts +1 -1
  125. package/dist/server/src/controllers/init.d.ts.map +1 -1
  126. package/dist/server/src/index.d.ts +6 -1
  127. package/dist/server/src/index.d.ts.map +1 -1
  128. package/dist/server/src/services/content-structure.d.ts +8 -0
  129. package/dist/server/src/services/content-structure.d.ts.map +1 -0
  130. package/dist/server/src/services/index.d.ts +5 -0
  131. package/dist/server/src/services/index.d.ts.map +1 -1
  132. package/dist/server/src/utils/index.d.ts +2 -0
  133. package/dist/server/src/utils/index.d.ts.map +1 -1
  134. package/dist/server/utils/index.js.map +1 -1
  135. package/dist/server/utils/index.mjs.map +1 -1
  136. package/dist/shared/contracts/init.d.ts +2 -0
  137. package/dist/shared/contracts/init.d.ts.map +1 -1
  138. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"BlocksToolbar.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n Tooltip,\n SingleSelect,\n SingleSelectOption,\n Box,\n FlexComponent,\n BoxComponent,\n Menu,\n} from '@strapi/design-system';\nimport { Link, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { css, styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\nimport { EditorToolbarObserver, type ObservedComponent } from '../../EditorToolbarObserver';\n\nimport { insertLink } from './Blocks/Link';\nimport { type BlocksStore, type SelectorBlock, useBlocksEditorContext } from './BlocksEditor';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled<FlexComponent>(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst ToolbarSeparator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: 2.4rem;\n margin-left: ${({ theme }) => theme.spaces[1]};\n margin-right: ${({ theme }) => theme.spaces[1]};\n\n ${({ theme }) => theme.breakpoints.medium} {\n margin-left: ${({ theme }) => theme.spaces[2]};\n margin-right: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\nconst FlexButton = styled<FlexComponent<'button'>>(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: not-allowed;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled on desktop\n ${({ theme }) => theme.breakpoints.medium} {\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n }\n`;\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n padding-left: ${({ theme }) => theme.spaces[4]};\n padding-right: ${({ theme }) => theme.spaces[4]};\n gap: ${({ theme }) => theme.spaces[2]};\n \n ${({ theme }) => theme.breakpoints.medium} {\n padding-top: ${({ theme }) => theme.spaces[1]};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n gap: ${({ theme }) => theme.spaces[4]};\n }\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n\n & > span:first-child {\n gap: ${({ theme }) => theme.spaces[0]};\n\n ${({ theme }) => theme.breakpoints.medium} {\n gap: ${({ theme }) => theme.spaces[3]};\n }\n }\n`;\n\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon: Icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip label={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onPointerDown={(e) => {\n e.preventDefault();\n handleClick();\n ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n tag=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n {Icon && <Icon fill={disabled ? 'neutral300' : enabledColor} />}\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n const isMobile = useIsMobile();\n\n const blockKeysToInclude: string[] = getEntries(blocks).reduce<string[]>(\n (currentKeys, [key, block]) => {\n return block?.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n },\n []\n );\n\n const [blockSelected, setBlockSelected] = React.useState<string>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (typeof optionKey !== 'string' || !blocks[optionKey]) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // Toolbar buttons steal focus in Playwright (and sometimes in real browsers), clearing\n // selection. Convert the last existing block — do not insert a new empty block, which\n // would leave the user's content behind and convert a blank node instead.\n const [, lastPath] = Editor.last(editor, []);\n Transforms.select(editor, Editor.range(editor, lastPath));\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey]?.handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey]?.matchNode(selectedNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n React.useEffect(() => {\n // If the selected block is not in the list of blocks to include, change the selected block to the first one\n if (blockKeysToInclude.length > 0 && !blockKeysToInclude.includes(blockSelected)) {\n setBlockSelected(blockKeysToInclude[0]);\n }\n }, [blockKeysToInclude, blockSelected]);\n\n if (!blocks[blockSelected]) {\n return null;\n }\n\n const selectedBlock = blocks[blockSelected] as SelectorBlock;\n const Icon = selectedBlock.icon;\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={Icon && <Icon />}\n onChange={handleSelect}\n customizeContent={() => (isMobile ? '' : formatMessage(selectedBlock.label))}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => {\n const selectorBlock = blocks[key] as SelectorBlock;\n return (\n <BlockOption\n key={key}\n value={key}\n label={selectorBlock.label}\n icon={selectorBlock.icon}\n blockSelected={blockSelected}\n />\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon?: React.ComponentType<React.SVGProps<SVGElement>>;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon: Icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={Icon && <Icon fill={isSelected ? 'primary600' : 'neutral500'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n location?: 'toolbar' | 'menu';\n}\n\nconst ListButton = ({ block, format, location = 'toolbar' }: ListButtonProps) => {\n const { formatMessage } = useIntl();\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n\n return false;\n };\n\n /**\n * @TODO: Currently, applying list while multiple blocks are selected is not supported.\n * We should implement this feature in the future.\n */\n const isListDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`]?.handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph']?.handleConvert!(editor);\n }\n }\n };\n\n if (location === 'menu') {\n const Icon = block.icon;\n\n return (\n <StyledMenuItem\n startIcon={Icon && <Icon />}\n onSelect={() => toggleList(format)}\n isActive={isListActive()}\n disabled={isListDisabled()}\n >\n {formatMessage(block.label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={isListDisabled()}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({\n disabled,\n location = 'toolbar',\n}: {\n disabled: boolean;\n location?: 'toolbar' | 'menu';\n}) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n const { formatMessage } = useIntl();\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n editor.shouldSaveLinkPath = true;\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n const label = {\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n } as MessageDescriptor;\n\n if (location === 'menu') {\n return (\n <StyledMenuItem\n startIcon={<Link />}\n onSelect={addLink}\n isActive={isLinkActive()}\n disabled={isLinkDisabled()}\n >\n {formatMessage(label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={label}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\nconst StyledMenuItem = styled(Menu.Item)<{ isActive: boolean }>`\n ${(props) =>\n props.isActive &&\n css`\n color: ${({ theme }) => theme.colors.primary600};\n font-weight: 600;\n `}\n\n svg {\n fill: ${({ theme, isActive }) =>\n isActive ? theme.colors.primary600 : theme.colors.neutral500};\n }\n`;\n\nconst ReorderToolbarButtons = () => {\n const { editor, disabled, blocks, name, setLiveText } =\n useBlocksEditorContext('ReorderToolbarButtons');\n const { formatMessage } = useIntl();\n\n const selection = editor.selection;\n const totalBlocks = editor.children.length;\n\n const anchorIndex = selection ? selection.anchor.path[0] : null;\n const focusIndex = selection ? selection.focus.path[0] : null;\n const isSingleBlockSelection =\n anchorIndex !== null && focusIndex !== null && anchorIndex === focusIndex;\n\n const selectedTopLevelNode =\n isSingleBlockSelection && anchorIndex !== null ? editor.children[anchorIndex] : null;\n const selectedBlock =\n selectedTopLevelNode &&\n Object.values(blocks).find((block) => block.matchNode(selectedTopLevelNode));\n\n const isSelectedBlockDraggable =\n selectedTopLevelNode && selectedBlock\n ? (selectedBlock.isDraggable?.(selectedTopLevelNode) ?? true)\n : false;\n\n const canMoveUp =\n !disabled &&\n isSingleBlockSelection &&\n isSelectedBlockDraggable &&\n anchorIndex !== null &&\n anchorIndex > 0;\n const canMoveDown =\n !disabled &&\n isSingleBlockSelection &&\n isSelectedBlockDraggable &&\n anchorIndex !== null &&\n anchorIndex < totalBlocks - 1;\n\n const moveBlock = (direction: 'up' | 'down') => {\n if (!selection || anchorIndex === null) return;\n\n const currentIndex = [anchorIndex];\n const newIndex = [direction === 'up' ? anchorIndex - 1 : anchorIndex + 1];\n\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Keep the moved block focused so disabled states update immediately.\n Transforms.select(editor, Editor.start(editor, newIndex));\n ReactEditor.focus(editor);\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n };\n\n return (\n <Flex direction=\"row\" gap={1}>\n <Tooltip\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <Toolbar.Button\n onPointerDown={(e) => {\n e.preventDefault();\n if (canMoveUp) moveBlock('up');\n }}\n aria-disabled={!canMoveUp}\n disabled={!canMoveUp}\n aria-label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n asChild\n >\n <FlexButton\n tag=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <ArrowUp fill={!canMoveUp ? 'neutral300' : 'neutral600'} />\n </FlexButton>\n </Toolbar.Button>\n </Tooltip>\n\n <Tooltip\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <Toolbar.Button\n onPointerDown={(e) => {\n e.preventDefault();\n if (canMoveDown) moveBlock('down');\n }}\n aria-disabled={!canMoveDown}\n disabled={!canMoveDown}\n aria-label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n asChild\n >\n <FlexButton\n tag=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <ArrowDown fill={!canMoveDown ? 'neutral300' : 'neutral600'} />\n </FlexButton>\n </Toolbar.Button>\n </Tooltip>\n </Flex>\n );\n};\n\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n const { formatMessage } = useIntl();\n const isMobile = useIsMobile();\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n if (!selectedNode) return true;\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n /**\n * Observed components are ones that may or may not be visible in the toolbar, depending on the\n * available space. They provide two render props:\n * - renderInToolbar: for when we try to render the component in the toolbar (may be hidden)\n * - renderInMenu: for when the component didn't fit in the toolbar and is relegated\n * to the \"more\" menu\n */\n const observedComponents: ObservedComponent[] = [\n ...Object.entries(modifiers).map(([name, modifier]) => {\n const Icon = modifier.icon;\n const isActive = modifier.checkIsActive(editor);\n const handleSelect = () => modifier.handleToggle(editor);\n\n return {\n toolbar: (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive(editor)}\n handleClick={handleSelect}\n disabled={isButtonDisabled}\n />\n ),\n menu: (\n <StyledMenuItem startIcon={<Icon />} onSelect={handleSelect} isActive={isActive}>\n {formatMessage(modifier.label)}\n </StyledMenuItem>\n ),\n key: `modifier.${name}`,\n };\n }),\n {\n toolbar: <LinkButton disabled={isButtonDisabled} location=\"toolbar\" />,\n menu: <LinkButton disabled={isButtonDisabled} location=\"menu\" />,\n key: 'block.link',\n },\n {\n // List buttons can only be rendered together when in the toolbar\n toolbar: (\n <Flex direction=\"row\">\n <ToolbarSeparator style={{ marginLeft: '0.4rem' }} />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']!} format=\"unordered\" location=\"toolbar\" />\n <ListButton block={blocks['list-ordered']!} format=\"ordered\" location=\"toolbar\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </Flex>\n ),\n menu: (\n <>\n <Menu.Separator />\n <ListButton block={blocks['list-unordered']!} format=\"unordered\" location=\"menu\" />\n <ListButton block={blocks['list-ordered']!} format=\"ordered\" location=\"menu\" />\n </>\n ),\n key: 'block.list',\n },\n ];\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper padding={{ initial: 1, medium: 2 }} width=\"100%\">\n <BlocksDropdown />\n {isMobile && (\n <>\n <ToolbarSeparator />\n <ReorderToolbarButtons />\n </>\n )}\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex direction=\"row\" gap={1} grow={1} overflow=\"hidden\">\n <EditorToolbarObserver observedComponents={observedComponents} />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n"],"names":["ToolbarWrapper","styled","Flex","theme","colors","neutral150","ToolbarSeparator","Toolbar","Separator","spaces","breakpoints","medium","FlexButton","primary100","SelectWrapper","Box","neutral600","useConversionModal","modalElement","setModalComponent","React","useState","handleConversionResult","renderModal","cloneElement","key","Date","now","ToolbarButton","icon","Icon","name","label","isActive","disabled","handleClick","editor","useBlocksEditorContext","formatMessage","useIntl","labelMessage","enabledColor","_jsx","Tooltip","ToggleItem","value","data-state","onPointerDown","e","preventDefault","ReactEditor","focus","aria-disabled","aria-label","asChild","tag","background","alignItems","justifyContent","width","height","hasRadius","type","fill","BlocksDropdown","blocks","isMobile","useIsMobile","blockKeysToInclude","getEntries","reduce","currentKeys","block","isInBlocksSelector","blockSelected","setBlockSelected","handleSelect","optionKey","editorIsEmpty","children","length","Editor","isEmpty","selection","lastPath","last","Transforms","select","range","start","currentListEntry","above","match","node","isEditor","includes","currentList","currentListPath","format","isListNode","setNodes","at","maybeRenderModal","handleConvert","preventSelectFocus","useEffect","selectedNode","anchor","anchorNode","parent","edge","depth","anchorBlockKey","getKeys","find","blockKey","matchNode","selectedBlock","_jsxs","_Fragment","SingleSelect","startIcon","onChange","customizeContent","onCloseAutoFocus","id","defaultMessage","map","selectorBlock","BlockOption","isSelected","SingleSelectOption","Node","isNode","ListButton","location","isListActive","isListDisabled","anchorNodeEntry","focusNodeEntry","toggleList","_","lastNodePath","StyledMenuItem","onSelect","LinkButton","isLinkActive","Array","from","nodes","unhangRange","SlateElement","isElement","Boolean","isLinkDisabled","addLink","shouldSaveLinkPath","insertLink","url","Link","Menu","Item","props","css","primary600","neutral500","ReorderToolbarButtons","setLiveText","totalBlocks","anchorIndex","path","focusIndex","isSingleBlockSelection","selectedTopLevelNode","Object","values","isSelectedBlockDraggable","isDraggable","canMoveUp","canMoveDown","moveBlock","direction","currentIndex","newIndex","moveNodes","to","getTranslation","item","position","gap","Button","ArrowUp","ArrowDown","BlocksToolbar","modifiers","checkButtonDisabled","isButtonDisabled","observedComponents","entries","modifier","checkIsActive","handleToggle","toolbar","menu","style","marginLeft","ToggleGroup","Root","padding","initial","grow","overflow","EditorToolbarObserver"],"mappings":"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"}
1
+ {"version":3,"file":"BlocksToolbar.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n Tooltip,\n SingleSelect,\n SingleSelectOption,\n Box,\n FlexComponent,\n BoxComponent,\n Menu,\n} from '@strapi/design-system';\nimport { Link, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { css, styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\nimport { EditorToolbarObserver, type ObservedComponent } from '../../EditorToolbarObserver';\n\nimport { insertLink } from './Blocks/Link';\nimport { type BlocksStore, type SelectorBlock, useBlocksEditorContext } from './BlocksEditor';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled<FlexComponent>(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst ToolbarSeparator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: 2.4rem;\n margin-left: ${({ theme }) => theme.spaces[1]};\n margin-right: ${({ theme }) => theme.spaces[1]};\n\n ${({ theme }) => theme.breakpoints.medium} {\n margin-left: ${({ theme }) => theme.spaces[2]};\n margin-right: ${({ theme }) => theme.spaces[2]};\n }\n`;\n\nconst FlexButton = styled<FlexComponent<'button'>>(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: not-allowed;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled on desktop\n ${({ theme }) => theme.breakpoints.medium} {\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n }\n`;\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: ${({ theme }) => theme.spaces[2]};\n padding-bottom: ${({ theme }) => theme.spaces[2]};\n padding-left: ${({ theme }) => theme.spaces[4]};\n padding-right: ${({ theme }) => theme.spaces[4]};\n gap: ${({ theme }) => theme.spaces[2]};\n \n ${({ theme }) => theme.breakpoints.medium} {\n padding-top: ${({ theme }) => theme.spaces[1]};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n gap: ${({ theme }) => theme.spaces[4]};\n }\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n\n & > span:first-child {\n gap: ${({ theme }) => theme.spaces[0]};\n\n ${({ theme }) => theme.breakpoints.medium} {\n gap: ${({ theme }) => theme.spaces[3]};\n }\n }\n`;\n\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon: Icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip label={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onPointerDown={(e) => {\n e.preventDefault();\n handleClick();\n ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n tag=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n {Icon && <Icon fill={disabled ? 'neutral300' : enabledColor} />}\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n const isMobile = useIsMobile();\n\n const blockKeysToInclude: string[] = getEntries(blocks).reduce<string[]>(\n (currentKeys, [key, block]) => {\n return block?.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n },\n []\n );\n\n const [blockSelected, setBlockSelected] = React.useState<string>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (typeof optionKey !== 'string' || !blocks[optionKey]) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // Toolbar buttons steal focus in Playwright (and sometimes in real browsers), clearing\n // selection. Convert the last existing block — do not insert a new empty block, which\n // would leave the user's content behind and convert a blank node instead.\n const [, lastPath] = Editor.last(editor, []);\n Transforms.select(editor, Editor.range(editor, lastPath));\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey]?.handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey]?.matchNode(selectedNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n React.useEffect(() => {\n // If the selected block is not in the list of blocks to include, change the selected block to the first one\n if (blockKeysToInclude.length > 0 && !blockKeysToInclude.includes(blockSelected)) {\n setBlockSelected(blockKeysToInclude[0]);\n }\n }, [blockKeysToInclude, blockSelected]);\n\n if (!blocks[blockSelected]) {\n return null;\n }\n\n const selectedBlock = blocks[blockSelected] as SelectorBlock;\n const Icon = selectedBlock.icon;\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={Icon && <Icon />}\n onChange={handleSelect}\n customizeContent={() => (isMobile ? '' : formatMessage(selectedBlock.label))}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => {\n const selectorBlock = blocks[key] as SelectorBlock;\n return (\n <BlockOption\n key={key}\n value={key}\n label={selectorBlock.label}\n icon={selectorBlock.icon}\n blockSelected={blockSelected}\n />\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon?: React.ComponentType<React.SVGProps<SVGElement>>;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon: Icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={Icon && <Icon fill={isSelected ? 'primary600' : 'neutral500'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n location?: 'toolbar' | 'menu';\n}\n\nconst ListButton = ({ block, format, location = 'toolbar' }: ListButtonProps) => {\n const { formatMessage } = useIntl();\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n\n return false;\n };\n\n /**\n * @TODO: Currently, applying list while multiple blocks are selected is not supported.\n * We should implement this feature in the future.\n */\n const isListDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`]?.handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph']?.handleConvert!(editor);\n }\n }\n };\n\n if (location === 'menu') {\n const Icon = block.icon;\n\n return (\n <StyledMenuItem\n startIcon={Icon && <Icon />}\n onSelect={() => toggleList(format)}\n isActive={isListActive()}\n disabled={isListDisabled()}\n >\n {formatMessage(block.label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={isListDisabled()}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({\n disabled,\n location = 'toolbar',\n}: {\n disabled: boolean;\n location?: 'toolbar' | 'menu';\n}) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n const { formatMessage } = useIntl();\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n editor.shouldSaveLinkPath = true;\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n const label = {\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n } as MessageDescriptor;\n\n if (location === 'menu') {\n return (\n <StyledMenuItem\n startIcon={<Link />}\n onSelect={addLink}\n isActive={isLinkActive()}\n disabled={isLinkDisabled()}\n >\n {formatMessage(label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={label}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\nconst StyledMenuItem = styled(Menu.Item)<{ isActive: boolean }>`\n ${(props) =>\n props.isActive &&\n css`\n color: ${({ theme }) => theme.colors.primary600};\n font-weight: 600;\n `}\n\n svg {\n fill: ${({ theme, isActive }) =>\n isActive ? theme.colors.primary600 : theme.colors.neutral500};\n }\n`;\n\nconst ReorderToolbarButtons = () => {\n const { editor, disabled, blocks, name, setLiveText } =\n useBlocksEditorContext('ReorderToolbarButtons');\n const { formatMessage } = useIntl();\n\n const selection = editor.selection;\n const totalBlocks = editor.children.length;\n\n const anchorIndex = selection ? selection.anchor.path[0] : null;\n const focusIndex = selection ? selection.focus.path[0] : null;\n const isSingleBlockSelection =\n anchorIndex !== null && focusIndex !== null && anchorIndex === focusIndex;\n\n const selectedTopLevelNode =\n isSingleBlockSelection && anchorIndex !== null ? editor.children[anchorIndex] : null;\n const selectedBlock =\n selectedTopLevelNode &&\n Object.values(blocks).find((block) => block.matchNode(selectedTopLevelNode));\n\n const isSelectedBlockDraggable =\n selectedTopLevelNode && selectedBlock\n ? (selectedBlock.isDraggable?.(selectedTopLevelNode) ?? true)\n : false;\n\n const canMoveUp =\n !disabled &&\n isSingleBlockSelection &&\n isSelectedBlockDraggable &&\n anchorIndex !== null &&\n anchorIndex > 0;\n const canMoveDown =\n !disabled &&\n isSingleBlockSelection &&\n isSelectedBlockDraggable &&\n anchorIndex !== null &&\n anchorIndex < totalBlocks - 1;\n\n const moveBlock = (direction: 'up' | 'down') => {\n if (!selection || anchorIndex === null) return;\n\n const currentIndex = [anchorIndex];\n const newIndex = [direction === 'up' ? anchorIndex - 1 : anchorIndex + 1];\n\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Keep the moved block focused so disabled states update immediately.\n Transforms.select(editor, Editor.start(editor, newIndex));\n ReactEditor.focus(editor);\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n };\n\n return (\n <Flex direction=\"row\" gap={1}>\n <Tooltip\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <Toolbar.Button\n onPointerDown={(e) => {\n e.preventDefault();\n if (canMoveUp) moveBlock('up');\n }}\n aria-disabled={!canMoveUp}\n disabled={!canMoveUp}\n aria-label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n asChild\n >\n <FlexButton\n tag=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <ArrowUp fill={!canMoveUp ? 'neutral300' : 'neutral600'} />\n </FlexButton>\n </Toolbar.Button>\n </Tooltip>\n\n <Tooltip\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <Toolbar.Button\n onPointerDown={(e) => {\n e.preventDefault();\n if (canMoveDown) moveBlock('down');\n }}\n aria-disabled={!canMoveDown}\n disabled={!canMoveDown}\n aria-label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n asChild\n >\n <FlexButton\n tag=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <ArrowDown fill={!canMoveDown ? 'neutral300' : 'neutral600'} />\n </FlexButton>\n </Toolbar.Button>\n </Tooltip>\n </Flex>\n );\n};\n\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n const { formatMessage } = useIntl();\n const isMobile = useIsMobile();\n const toolbarContainerRef = React.useRef<HTMLElement>(null);\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n if (!selectedNode) return true;\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n /**\n * Observed components are ones that may or may not be visible in the toolbar, depending on the\n * available space. They provide two render props:\n * - renderInToolbar: for when we try to render the component in the toolbar (may be hidden)\n * - renderInMenu: for when the component didn't fit in the toolbar and is relegated\n * to the \"more\" menu\n */\n const observedComponents: ObservedComponent[] = [\n ...Object.entries(modifiers).map(([name, modifier]) => {\n const Icon = modifier.icon;\n const isActive = modifier.checkIsActive(editor);\n const handleSelect = () => modifier.handleToggle(editor);\n\n return {\n toolbar: (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive(editor)}\n handleClick={handleSelect}\n disabled={isButtonDisabled}\n />\n ),\n menu: (\n <StyledMenuItem startIcon={<Icon />} onSelect={handleSelect} isActive={isActive}>\n {formatMessage(modifier.label)}\n </StyledMenuItem>\n ),\n key: `modifier.${name}`,\n };\n }),\n {\n toolbar: <LinkButton disabled={isButtonDisabled} location=\"toolbar\" />,\n menu: <LinkButton disabled={isButtonDisabled} location=\"menu\" />,\n key: 'block.link',\n },\n {\n // List buttons can only be rendered together when in the toolbar\n toolbar: (\n <Flex direction=\"row\">\n <ToolbarSeparator style={{ marginLeft: '0.4rem' }} />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']!} format=\"unordered\" location=\"toolbar\" />\n <ListButton block={blocks['list-ordered']!} format=\"ordered\" location=\"toolbar\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </Flex>\n ),\n menu: (\n <>\n <Menu.Separator />\n <ListButton block={blocks['list-unordered']!} format=\"unordered\" location=\"menu\" />\n <ListButton block={blocks['list-ordered']!} format=\"ordered\" location=\"menu\" />\n </>\n ),\n key: 'block.list',\n },\n ];\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper padding={{ initial: 1, medium: 2 }} width=\"100%\">\n <BlocksDropdown />\n {isMobile && (\n <>\n <ToolbarSeparator />\n <ReorderToolbarButtons />\n </>\n )}\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex ref={toolbarContainerRef} direction=\"row\" gap={1} grow={1} overflow=\"hidden\">\n <EditorToolbarObserver\n observedComponents={observedComponents}\n containerRef={toolbarContainerRef}\n />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n"],"names":["ToolbarWrapper","styled","Flex","theme","colors","neutral150","ToolbarSeparator","Toolbar","Separator","spaces","breakpoints","medium","FlexButton","primary100","SelectWrapper","Box","neutral600","useConversionModal","modalElement","setModalComponent","React","useState","handleConversionResult","renderModal","cloneElement","key","Date","now","ToolbarButton","icon","Icon","name","label","isActive","disabled","handleClick","editor","useBlocksEditorContext","formatMessage","useIntl","labelMessage","enabledColor","_jsx","Tooltip","ToggleItem","value","data-state","onPointerDown","e","preventDefault","ReactEditor","focus","aria-disabled","aria-label","asChild","tag","background","alignItems","justifyContent","width","height","hasRadius","type","fill","BlocksDropdown","blocks","isMobile","useIsMobile","blockKeysToInclude","getEntries","reduce","currentKeys","block","isInBlocksSelector","blockSelected","setBlockSelected","handleSelect","optionKey","editorIsEmpty","children","length","Editor","isEmpty","selection","lastPath","last","Transforms","select","range","start","currentListEntry","above","match","node","isEditor","includes","currentList","currentListPath","format","isListNode","setNodes","at","maybeRenderModal","handleConvert","preventSelectFocus","useEffect","selectedNode","anchor","anchorNode","parent","edge","depth","anchorBlockKey","getKeys","find","blockKey","matchNode","selectedBlock","_jsxs","_Fragment","SingleSelect","startIcon","onChange","customizeContent","onCloseAutoFocus","id","defaultMessage","map","selectorBlock","BlockOption","isSelected","SingleSelectOption","Node","isNode","ListButton","location","isListActive","isListDisabled","anchorNodeEntry","focusNodeEntry","toggleList","_","lastNodePath","StyledMenuItem","onSelect","LinkButton","isLinkActive","Array","from","nodes","unhangRange","SlateElement","isElement","Boolean","isLinkDisabled","addLink","shouldSaveLinkPath","insertLink","url","Link","Menu","Item","props","css","primary600","neutral500","ReorderToolbarButtons","setLiveText","totalBlocks","anchorIndex","path","focusIndex","isSingleBlockSelection","selectedTopLevelNode","Object","values","isSelectedBlockDraggable","isDraggable","canMoveUp","canMoveDown","moveBlock","direction","currentIndex","newIndex","moveNodes","to","getTranslation","item","position","gap","Button","ArrowUp","ArrowDown","BlocksToolbar","modifiers","toolbarContainerRef","useRef","checkButtonDisabled","isButtonDisabled","observedComponents","entries","modifier","checkIsActive","handleToggle","toolbar","menu","style","marginLeft","ToggleGroup","Root","padding","initial","ref","grow","overflow","EditorToolbarObserver","containerRef"],"mappings":"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"}
@@ -9,7 +9,7 @@ var styledComponents = require('styled-components');
9
9
  var translations = require('../../../../../utils/translations.js');
10
10
  var BlocksEditor = require('./BlocksEditor.js');
11
11
 
12
- const EditorLayout = ({ children, error, disabled, onToggleExpand, ariaDescriptionId })=>{
12
+ const EditorLayout = ({ children, error, disabled, onToggleExpand, ariaDescriptionId, livePreviewSync = false })=>{
13
13
  const { formatMessage } = reactIntl.useIntl();
14
14
  const { isExpandedMode } = BlocksEditor.useBlocksEditorContext('editorLayout');
15
15
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
@@ -51,6 +51,7 @@ const EditorLayout = ({ children, error, disabled, onToggleExpand, ariaDescripti
51
51
  height: "512px",
52
52
  $disabled: disabled,
53
53
  $hasError: Boolean(error),
54
+ minHeight: livePreviewSync ? 0 : undefined,
54
55
  style: {
55
56
  overflow: 'hidden'
56
57
  },
@@ -1 +1 @@
1
- {"version":3,"file":"EditorLayout.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, IconButton, FlexComponent, Modal } from '@strapi/design-system';\nimport { Collapse } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { css, styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { useBlocksEditorContext } from './BlocksEditor';\n\ninterface EditorLayoutProps {\n children: React.ReactNode;\n error?: string;\n onToggleExpand: () => void;\n disabled: boolean;\n ariaDescriptionId: string;\n}\n\nconst EditorLayout = ({\n children,\n error,\n disabled,\n onToggleExpand,\n ariaDescriptionId,\n}: EditorLayoutProps) => {\n const { formatMessage } = useIntl();\n const { isExpandedMode } = useBlocksEditorContext('editorLayout');\n\n return (\n <>\n {isExpandedMode && (\n <Modal.Root open={isExpandedMode} onOpenChange={onToggleExpand}>\n <Modal.Content style={{ maxWidth: 'unset', width: 'unset' }}>\n <Flex height=\"90dvh\" width=\"90dvw\" alignItems=\"flex-start\" direction=\"column\">\n {children}\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.collapse'),\n defaultMessage: 'Collapse',\n })}\n onClick={onToggleExpand}\n >\n <Collapse />\n </IconButton>\n </Flex>\n </Modal.Content>\n </Modal.Root>\n )}\n <InputWrapper\n direction=\"column\"\n alignItems=\"flex-start\"\n height=\"512px\"\n $disabled={disabled}\n $hasError={Boolean(error)}\n style={{ overflow: 'hidden' }}\n aria-describedby={ariaDescriptionId}\n position=\"relative\"\n >\n {!isExpandedMode && children}\n </InputWrapper>\n </>\n );\n};\n\nconst InputWrapper = styled<FlexComponent>(Flex)<{ $disabled?: boolean; $hasError?: boolean }>`\n border: 1px solid\n ${({ theme, $hasError }) => ($hasError ? theme.colors.danger600 : theme.colors.neutral200)};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n\n ${({ theme, $hasError = false }) => css`\n outline: none;\n box-shadow: 0;\n transition-property: border-color, box-shadow, fill;\n transition-duration: 0.2s;\n\n &:focus-within {\n border: 1px solid ${$hasError ? theme.colors.danger600 : theme.colors.primary600};\n box-shadow: ${$hasError ? theme.colors.danger600 : theme.colors.primary600} 0px 0px 0px 2px;\n }\n `}\n\n ${({ theme, $disabled }) =>\n $disabled\n ? css`\n color: ${theme.colors.neutral600};\n background: ${theme.colors.neutral150};\n `\n : undefined}\n`;\n\nexport { EditorLayout };\n"],"names":["EditorLayout","children","error","disabled","onToggleExpand","ariaDescriptionId","formatMessage","useIntl","isExpandedMode","useBlocksEditorContext","_jsxs","_Fragment","_jsx","Modal","Root","open","onOpenChange","Content","style","maxWidth","width","Flex","height","alignItems","direction","IconButton","position","bottom","right","shadow","label","id","getTranslation","defaultMessage","onClick","Collapse","InputWrapper","$disabled","$hasError","Boolean","overflow","aria-describedby","styled","theme","colors","danger600","neutral200","borderRadius","neutral0","css","primary600","neutral600","neutral150","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"EditorLayout.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, IconButton, FlexComponent, Modal } from '@strapi/design-system';\nimport { Collapse } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { css, styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { useBlocksEditorContext } from './BlocksEditor';\n\ninterface EditorLayoutProps {\n children: React.ReactNode;\n error?: string;\n onToggleExpand: () => void;\n disabled: boolean;\n ariaDescriptionId: string;\n livePreviewSync?: boolean;\n}\n\nconst EditorLayout = ({\n children,\n error,\n disabled,\n onToggleExpand,\n ariaDescriptionId,\n livePreviewSync = false,\n}: EditorLayoutProps) => {\n const { formatMessage } = useIntl();\n const { isExpandedMode } = useBlocksEditorContext('editorLayout');\n\n return (\n <>\n {isExpandedMode && (\n <Modal.Root open={isExpandedMode} onOpenChange={onToggleExpand}>\n <Modal.Content style={{ maxWidth: 'unset', width: 'unset' }}>\n <Flex height=\"90dvh\" width=\"90dvw\" alignItems=\"flex-start\" direction=\"column\">\n {children}\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.collapse'),\n defaultMessage: 'Collapse',\n })}\n onClick={onToggleExpand}\n >\n <Collapse />\n </IconButton>\n </Flex>\n </Modal.Content>\n </Modal.Root>\n )}\n <InputWrapper\n direction=\"column\"\n alignItems=\"flex-start\"\n height=\"512px\"\n $disabled={disabled}\n $hasError={Boolean(error)}\n minHeight={livePreviewSync ? 0 : undefined}\n style={{ overflow: 'hidden' }}\n aria-describedby={ariaDescriptionId}\n position=\"relative\"\n >\n {!isExpandedMode && children}\n </InputWrapper>\n </>\n );\n};\n\nconst InputWrapper = styled<FlexComponent>(Flex)<{ $disabled?: boolean; $hasError?: boolean }>`\n border: 1px solid\n ${({ theme, $hasError }) => ($hasError ? theme.colors.danger600 : theme.colors.neutral200)};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n\n ${({ theme, $hasError = false }) => css`\n outline: none;\n box-shadow: 0;\n transition-property: border-color, box-shadow, fill;\n transition-duration: 0.2s;\n\n &:focus-within {\n border: 1px solid ${$hasError ? theme.colors.danger600 : theme.colors.primary600};\n box-shadow: ${$hasError ? theme.colors.danger600 : theme.colors.primary600} 0px 0px 0px 2px;\n }\n `}\n\n ${({ theme, $disabled }) =>\n $disabled\n ? css`\n color: ${theme.colors.neutral600};\n background: ${theme.colors.neutral150};\n `\n : undefined}\n`;\n\nexport { EditorLayout };\n"],"names":["EditorLayout","children","error","disabled","onToggleExpand","ariaDescriptionId","livePreviewSync","formatMessage","useIntl","isExpandedMode","useBlocksEditorContext","_jsxs","_Fragment","_jsx","Modal","Root","open","onOpenChange","Content","style","maxWidth","width","Flex","height","alignItems","direction","IconButton","position","bottom","right","shadow","label","id","getTranslation","defaultMessage","onClick","Collapse","InputWrapper","$disabled","$hasError","Boolean","minHeight","undefined","overflow","aria-describedby","styled","theme","colors","danger600","neutral200","borderRadius","neutral0","css","primary600","neutral600","neutral150"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { css, styled } from 'styled-components';
7
7
  import { getTranslation } from '../../../../../utils/translations.mjs';
8
8
  import { useBlocksEditorContext } from './BlocksEditor.mjs';
9
9
 
10
- const EditorLayout = ({ children, error, disabled, onToggleExpand, ariaDescriptionId })=>{
10
+ const EditorLayout = ({ children, error, disabled, onToggleExpand, ariaDescriptionId, livePreviewSync = false })=>{
11
11
  const { formatMessage } = useIntl();
12
12
  const { isExpandedMode } = useBlocksEditorContext('editorLayout');
13
13
  return /*#__PURE__*/ jsxs(Fragment, {
@@ -49,6 +49,7 @@ const EditorLayout = ({ children, error, disabled, onToggleExpand, ariaDescripti
49
49
  height: "512px",
50
50
  $disabled: disabled,
51
51
  $hasError: Boolean(error),
52
+ minHeight: livePreviewSync ? 0 : undefined,
52
53
  style: {
53
54
  overflow: 'hidden'
54
55
  },
@@ -1 +1 @@
1
- {"version":3,"file":"EditorLayout.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, IconButton, FlexComponent, Modal } from '@strapi/design-system';\nimport { Collapse } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { css, styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { useBlocksEditorContext } from './BlocksEditor';\n\ninterface EditorLayoutProps {\n children: React.ReactNode;\n error?: string;\n onToggleExpand: () => void;\n disabled: boolean;\n ariaDescriptionId: string;\n}\n\nconst EditorLayout = ({\n children,\n error,\n disabled,\n onToggleExpand,\n ariaDescriptionId,\n}: EditorLayoutProps) => {\n const { formatMessage } = useIntl();\n const { isExpandedMode } = useBlocksEditorContext('editorLayout');\n\n return (\n <>\n {isExpandedMode && (\n <Modal.Root open={isExpandedMode} onOpenChange={onToggleExpand}>\n <Modal.Content style={{ maxWidth: 'unset', width: 'unset' }}>\n <Flex height=\"90dvh\" width=\"90dvw\" alignItems=\"flex-start\" direction=\"column\">\n {children}\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.collapse'),\n defaultMessage: 'Collapse',\n })}\n onClick={onToggleExpand}\n >\n <Collapse />\n </IconButton>\n </Flex>\n </Modal.Content>\n </Modal.Root>\n )}\n <InputWrapper\n direction=\"column\"\n alignItems=\"flex-start\"\n height=\"512px\"\n $disabled={disabled}\n $hasError={Boolean(error)}\n style={{ overflow: 'hidden' }}\n aria-describedby={ariaDescriptionId}\n position=\"relative\"\n >\n {!isExpandedMode && children}\n </InputWrapper>\n </>\n );\n};\n\nconst InputWrapper = styled<FlexComponent>(Flex)<{ $disabled?: boolean; $hasError?: boolean }>`\n border: 1px solid\n ${({ theme, $hasError }) => ($hasError ? theme.colors.danger600 : theme.colors.neutral200)};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n\n ${({ theme, $hasError = false }) => css`\n outline: none;\n box-shadow: 0;\n transition-property: border-color, box-shadow, fill;\n transition-duration: 0.2s;\n\n &:focus-within {\n border: 1px solid ${$hasError ? theme.colors.danger600 : theme.colors.primary600};\n box-shadow: ${$hasError ? theme.colors.danger600 : theme.colors.primary600} 0px 0px 0px 2px;\n }\n `}\n\n ${({ theme, $disabled }) =>\n $disabled\n ? css`\n color: ${theme.colors.neutral600};\n background: ${theme.colors.neutral150};\n `\n : undefined}\n`;\n\nexport { EditorLayout };\n"],"names":["EditorLayout","children","error","disabled","onToggleExpand","ariaDescriptionId","formatMessage","useIntl","isExpandedMode","useBlocksEditorContext","_jsxs","_Fragment","_jsx","Modal","Root","open","onOpenChange","Content","style","maxWidth","width","Flex","height","alignItems","direction","IconButton","position","bottom","right","shadow","label","id","getTranslation","defaultMessage","onClick","Collapse","InputWrapper","$disabled","$hasError","Boolean","overflow","aria-describedby","styled","theme","colors","danger600","neutral200","borderRadius","neutral0","css","primary600","neutral600","neutral150","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"EditorLayout.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, IconButton, FlexComponent, Modal } from '@strapi/design-system';\nimport { Collapse } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { css, styled } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { useBlocksEditorContext } from './BlocksEditor';\n\ninterface EditorLayoutProps {\n children: React.ReactNode;\n error?: string;\n onToggleExpand: () => void;\n disabled: boolean;\n ariaDescriptionId: string;\n livePreviewSync?: boolean;\n}\n\nconst EditorLayout = ({\n children,\n error,\n disabled,\n onToggleExpand,\n ariaDescriptionId,\n livePreviewSync = false,\n}: EditorLayoutProps) => {\n const { formatMessage } = useIntl();\n const { isExpandedMode } = useBlocksEditorContext('editorLayout');\n\n return (\n <>\n {isExpandedMode && (\n <Modal.Root open={isExpandedMode} onOpenChange={onToggleExpand}>\n <Modal.Content style={{ maxWidth: 'unset', width: 'unset' }}>\n <Flex height=\"90dvh\" width=\"90dvw\" alignItems=\"flex-start\" direction=\"column\">\n {children}\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.collapse'),\n defaultMessage: 'Collapse',\n })}\n onClick={onToggleExpand}\n >\n <Collapse />\n </IconButton>\n </Flex>\n </Modal.Content>\n </Modal.Root>\n )}\n <InputWrapper\n direction=\"column\"\n alignItems=\"flex-start\"\n height=\"512px\"\n $disabled={disabled}\n $hasError={Boolean(error)}\n minHeight={livePreviewSync ? 0 : undefined}\n style={{ overflow: 'hidden' }}\n aria-describedby={ariaDescriptionId}\n position=\"relative\"\n >\n {!isExpandedMode && children}\n </InputWrapper>\n </>\n );\n};\n\nconst InputWrapper = styled<FlexComponent>(Flex)<{ $disabled?: boolean; $hasError?: boolean }>`\n border: 1px solid\n ${({ theme, $hasError }) => ($hasError ? theme.colors.danger600 : theme.colors.neutral200)};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n\n ${({ theme, $hasError = false }) => css`\n outline: none;\n box-shadow: 0;\n transition-property: border-color, box-shadow, fill;\n transition-duration: 0.2s;\n\n &:focus-within {\n border: 1px solid ${$hasError ? theme.colors.danger600 : theme.colors.primary600};\n box-shadow: ${$hasError ? theme.colors.danger600 : theme.colors.primary600} 0px 0px 0px 2px;\n }\n `}\n\n ${({ theme, $disabled }) =>\n $disabled\n ? css`\n color: ${theme.colors.neutral600};\n background: ${theme.colors.neutral150};\n `\n : undefined}\n`;\n\nexport { EditorLayout };\n"],"names":["EditorLayout","children","error","disabled","onToggleExpand","ariaDescriptionId","livePreviewSync","formatMessage","useIntl","isExpandedMode","useBlocksEditorContext","_jsxs","_Fragment","_jsx","Modal","Root","open","onOpenChange","Content","style","maxWidth","width","Flex","height","alignItems","direction","IconButton","position","bottom","right","shadow","label","id","getTranslation","defaultMessage","onClick","Collapse","InputWrapper","$disabled","$hasError","Boolean","minHeight","undefined","overflow","aria-describedby","styled","theme","colors","danger600","neutral200","borderRadius","neutral0","css","primary600","neutral600","neutral150"],"mappings":"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"}
@@ -5,6 +5,7 @@ var React = require('react');
5
5
  var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
7
  var Icons = require('@strapi/icons');
8
+ var fractionalIndexing = require('fractional-indexing');
8
9
  var reactIntl = require('react-intl');
9
10
  var reactRouterDom = require('react-router-dom');
10
11
  var styledComponents = require('styled-components');
@@ -244,6 +245,49 @@ const NestedRelationRenderer = (props)=>{
244
245
  * -----------------------------------------------------------------------------------------------*/ const generateCreateUrl = (currentDocumentMeta)=>{
245
246
  return `/content-manager/${currentDocumentMeta.collectionType}/${currentDocumentMeta.model}/create${currentDocumentMeta.params?.locale ? `?plugins[i18n][locale]=${currentDocumentMeta.params.locale}` : ''}`;
246
247
  };
248
+ /**
249
+ * Pre-fill the inverse relation with the parent that opened create-on-the-fly.
250
+ * One-way relations have no inverse; unsaved parents have no documentId.
251
+ */ const prefillParentRelation = ({ initialValues, fieldToConnect, childSchema, parentDocument, parentModel })=>{
252
+ const documentId = parentDocument?.documentId;
253
+ // mappedBy/inversedBy names a top-level attribute, not a component path.
254
+ const parentFieldName = fieldToConnect;
255
+ if (!initialValues || typeof documentId !== 'string' || !documentId || !parentFieldName) {
256
+ return initialValues;
257
+ }
258
+ const inverseField = Object.entries(childSchema?.attributes ?? {}).find(([, attribute])=>{
259
+ const relation = attribute;
260
+ return relation.type === 'relation' && relation.target === parentModel && (relation.inversedBy === parentFieldName || relation.mappedBy === parentFieldName);
261
+ })?.[0];
262
+ if (!inverseField) {
263
+ return initialValues;
264
+ }
265
+ const id = parentDocument.id ?? documentId;
266
+ return {
267
+ ...initialValues,
268
+ [inverseField]: {
269
+ connect: [
270
+ {
271
+ ...Object.fromEntries(Object.entries(parentDocument).filter(([, value])=>value === null || [
272
+ 'string',
273
+ 'number',
274
+ 'boolean'
275
+ ].includes(typeof value))),
276
+ id,
277
+ documentId,
278
+ apiData: {
279
+ id,
280
+ documentId,
281
+ locale: parentDocument.locale,
282
+ isTemporary: true
283
+ },
284
+ __temp_key__: fractionalIndexing.generateNKeysBetween(null, null, 1)[0]
285
+ }
286
+ ],
287
+ disconnect: []
288
+ }
289
+ };
290
+ };
247
291
  const RelationModal = ({ children })=>{
248
292
  const { formatMessage } = reactIntl.useIntl();
249
293
  const navigate = reactRouterDom.useNavigate();
@@ -252,6 +296,18 @@ const RelationModal = ({ children })=>{
252
296
  const currentDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.currentDocumentMeta);
253
297
  const currentDocument = useRelationModal('RelationModalForm', (state)=>state.currentDocument);
254
298
  const isCreating = useRelationModal('RelationModalForm', (state)=>state.isCreating);
299
+ const rootDocumentMeta = useRelationModal('RelationModalForm', (state)=>state.rootDocumentMeta);
300
+ const parentDocumentMeta = state.documentHistory.at(-2) ?? rootDocumentMeta;
301
+ const parentDocument = useDocument.useDocument(parentDocumentMeta, {
302
+ skip: !isCreating || !state.fieldToConnect
303
+ });
304
+ const initialValues = prefillParentRelation({
305
+ initialValues: currentDocument.getInitialFormValues(isCreating),
306
+ fieldToConnect: isCreating ? state.fieldToConnect : undefined,
307
+ childSchema: currentDocument.schema,
308
+ parentDocument: parentDocument.document,
309
+ parentModel: parentDocumentMeta.model
310
+ });
255
311
  /*
256
312
  * We must wrap the modal window with Component Provider with reset values
257
313
  * to avoid inheriting id and uid from the root document and having weird
@@ -345,7 +401,7 @@ const RelationModal = ({ children })=>{
345
401
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
346
402
  children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Form, {
347
403
  method: isCreating ? 'POST' : 'PUT',
348
- initialValues: currentDocument.getInitialFormValues(isCreating),
404
+ initialValues: initialValues,
349
405
  validate: (values, options)=>{
350
406
  const yupSchema = validation.createYupSchema(currentDocument.schema?.attributes, currentDocument.components, {
351
407
  status: currentDocument.document?.status,
@@ -667,6 +723,7 @@ exports.RelationModalRenderer = RelationModalRenderer;
667
723
  exports.generateCreateUrl = generateCreateUrl;
668
724
  exports.getCollectionType = getCollectionType;
669
725
  exports.getFullPageUrl = getFullPageUrl;
726
+ exports.prefillParentRelation = prefillParentRelation;
670
727
  exports.reducer = reducer;
671
728
  exports.useRelationModal = useRelationModal;
672
729
  //# sourceMappingURL=RelationModal.js.map