@strapi/content-manager 5.60.0 → 5.61.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/dist/admin/constants/customOrder.js +14 -0
  2. package/dist/admin/constants/customOrder.js.map +1 -0
  3. package/dist/admin/constants/customOrder.mjs +10 -0
  4. package/dist/admin/constants/customOrder.mjs.map +1 -0
  5. package/dist/admin/hooks/useDocument.js +22 -11
  6. package/dist/admin/hooks/useDocument.js.map +1 -1
  7. package/dist/admin/hooks/useDocument.mjs +22 -11
  8. package/dist/admin/hooks/useDocument.mjs.map +1 -1
  9. package/dist/admin/hooks/useDocumentLayout.js.map +1 -1
  10. package/dist/admin/hooks/useDocumentLayout.mjs.map +1 -1
  11. package/dist/admin/hooks/useHasBeenNearViewport.js +70 -0
  12. package/dist/admin/hooks/useHasBeenNearViewport.js.map +1 -0
  13. package/dist/admin/hooks/useHasBeenNearViewport.mjs +46 -0
  14. package/dist/admin/hooks/useHasBeenNearViewport.mjs.map +1 -0
  15. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +102 -32
  16. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +104 -35
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +20 -17
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +20 -17
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +15 -1
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +17 -3
  26. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js +21 -0
  28. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.js.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs +22 -1
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +4 -7
  32. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +4 -7
  34. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +46 -10
  36. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +47 -11
  38. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormLayout.js +201 -51
  40. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormLayout.mjs +202 -53
  42. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  43. package/dist/admin/pages/ListConfiguration/components/Settings.js +31 -2
  44. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  45. package/dist/admin/pages/ListConfiguration/components/Settings.mjs +31 -2
  46. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  47. package/dist/admin/pages/ListView/ListViewPage.js +196 -132
  48. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  49. package/dist/admin/pages/ListView/ListViewPage.mjs +196 -132
  50. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  51. package/dist/admin/pages/ListView/components/CustomOrder.js +571 -0
  52. package/dist/admin/pages/ListView/components/CustomOrder.js.map +1 -0
  53. package/dist/admin/pages/ListView/components/CustomOrder.mjs +546 -0
  54. package/dist/admin/pages/ListView/components/CustomOrder.mjs.map +1 -0
  55. package/dist/admin/pages/ListView/components/TableActions.js +4 -1
  56. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  57. package/dist/admin/pages/ListView/components/TableActions.mjs +4 -1
  58. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  59. package/dist/admin/services/documents.js +22 -1
  60. package/dist/admin/services/documents.js.map +1 -1
  61. package/dist/admin/services/documents.mjs +21 -2
  62. package/dist/admin/services/documents.mjs.map +1 -1
  63. package/dist/admin/src/constants/customOrder.d.ts +8 -0
  64. package/dist/admin/src/exports.d.ts +1 -1
  65. package/dist/admin/src/hooks/useDocument.d.ts +4 -0
  66. package/dist/admin/src/hooks/useDocumentLayout.d.ts +6 -2
  67. package/dist/admin/src/hooks/useHasBeenNearViewport.d.ts +13 -0
  68. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.d.ts +13 -1
  69. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +11 -1
  70. package/dist/admin/src/pages/ListView/components/CustomOrder.d.ts +72 -0
  71. package/dist/admin/src/services/documents.d.ts +10 -2
  72. package/dist/admin/translations/en.json.js +9 -0
  73. package/dist/admin/translations/en.json.js.map +1 -1
  74. package/dist/admin/translations/en.json.mjs +9 -0
  75. package/dist/admin/translations/en.json.mjs.map +1 -1
  76. package/dist/server/audit-logs.js +36 -0
  77. package/dist/server/audit-logs.js.map +1 -0
  78. package/dist/server/audit-logs.mjs +33 -0
  79. package/dist/server/audit-logs.mjs.map +1 -0
  80. package/dist/server/bootstrap.js +8 -0
  81. package/dist/server/bootstrap.js.map +1 -1
  82. package/dist/server/bootstrap.mjs +8 -0
  83. package/dist/server/bootstrap.mjs.map +1 -1
  84. package/dist/server/controllers/collection-types.js +8 -0
  85. package/dist/server/controllers/collection-types.js.map +1 -1
  86. package/dist/server/controllers/collection-types.mjs +8 -0
  87. package/dist/server/controllers/collection-types.mjs.map +1 -1
  88. package/dist/server/controllers/content-types.js +15 -0
  89. package/dist/server/controllers/content-types.js.map +1 -1
  90. package/dist/server/controllers/content-types.mjs +16 -1
  91. package/dist/server/controllers/content-types.mjs.map +1 -1
  92. package/dist/server/controllers/index.js +3 -1
  93. package/dist/server/controllers/index.js.map +1 -1
  94. package/dist/server/controllers/index.mjs +2 -0
  95. package/dist/server/controllers/index.mjs.map +1 -1
  96. package/dist/server/controllers/relations.js +5 -1
  97. package/dist/server/controllers/relations.js.map +1 -1
  98. package/dist/server/controllers/relations.mjs +5 -1
  99. package/dist/server/controllers/relations.mjs.map +1 -1
  100. package/dist/server/controllers/single-types.js +10 -1
  101. package/dist/server/controllers/single-types.js.map +1 -1
  102. package/dist/server/controllers/single-types.mjs +10 -1
  103. package/dist/server/controllers/single-types.mjs.map +1 -1
  104. package/dist/server/controllers/validation/model-configuration.js +2 -1
  105. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  106. package/dist/server/controllers/validation/model-configuration.mjs +2 -1
  107. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  108. package/dist/server/custom-order/constants.js +21 -0
  109. package/dist/server/custom-order/constants.js.map +1 -0
  110. package/dist/server/custom-order/constants.mjs +17 -0
  111. package/dist/server/custom-order/constants.mjs.map +1 -0
  112. package/dist/server/custom-order/controllers/custom-order.js +77 -0
  113. package/dist/server/custom-order/controllers/custom-order.js.map +1 -0
  114. package/dist/server/custom-order/controllers/custom-order.mjs +75 -0
  115. package/dist/server/custom-order/controllers/custom-order.mjs.map +1 -0
  116. package/dist/server/custom-order/controllers/index.js +10 -0
  117. package/dist/server/custom-order/controllers/index.js.map +1 -0
  118. package/dist/server/custom-order/controllers/index.mjs +8 -0
  119. package/dist/server/custom-order/controllers/index.mjs.map +1 -0
  120. package/dist/server/custom-order/index.js +71 -0
  121. package/dist/server/custom-order/index.js.map +1 -0
  122. package/dist/server/custom-order/index.mjs +69 -0
  123. package/dist/server/custom-order/index.mjs.map +1 -0
  124. package/dist/server/custom-order/routes/custom-order.js +38 -0
  125. package/dist/server/custom-order/routes/custom-order.js.map +1 -0
  126. package/dist/server/custom-order/routes/custom-order.mjs +36 -0
  127. package/dist/server/custom-order/routes/custom-order.mjs.map +1 -0
  128. package/dist/server/custom-order/routes/index.js +13 -0
  129. package/dist/server/custom-order/routes/index.js.map +1 -0
  130. package/dist/server/custom-order/routes/index.mjs +11 -0
  131. package/dist/server/custom-order/routes/index.mjs.map +1 -0
  132. package/dist/server/custom-order/services/custom-order.js +286 -0
  133. package/dist/server/custom-order/services/custom-order.js.map +1 -0
  134. package/dist/server/custom-order/services/custom-order.mjs +284 -0
  135. package/dist/server/custom-order/services/custom-order.mjs.map +1 -0
  136. package/dist/server/custom-order/services/document-middleware.js +83 -0
  137. package/dist/server/custom-order/services/document-middleware.js.map +1 -0
  138. package/dist/server/custom-order/services/document-middleware.mjs +81 -0
  139. package/dist/server/custom-order/services/document-middleware.mjs.map +1 -0
  140. package/dist/server/custom-order/services/index.js +10 -0
  141. package/dist/server/custom-order/services/index.js.map +1 -0
  142. package/dist/server/custom-order/services/index.mjs +8 -0
  143. package/dist/server/custom-order/services/index.mjs.map +1 -0
  144. package/dist/server/custom-order/services/utils.js +152 -0
  145. package/dist/server/custom-order/services/utils.js.map +1 -0
  146. package/dist/server/custom-order/services/utils.mjs +148 -0
  147. package/dist/server/custom-order/services/utils.mjs.map +1 -0
  148. package/dist/server/custom-order/utils.js +13 -0
  149. package/dist/server/custom-order/utils.js.map +1 -0
  150. package/dist/server/custom-order/utils.mjs +10 -0
  151. package/dist/server/custom-order/utils.mjs.map +1 -0
  152. package/dist/server/history/constants.js +2 -1
  153. package/dist/server/history/constants.js.map +1 -1
  154. package/dist/server/history/constants.mjs +2 -1
  155. package/dist/server/history/constants.mjs.map +1 -1
  156. package/dist/server/history/controllers/history-version.js +6 -2
  157. package/dist/server/history/controllers/history-version.js.map +1 -1
  158. package/dist/server/history/controllers/history-version.mjs +6 -2
  159. package/dist/server/history/controllers/history-version.mjs.map +1 -1
  160. package/dist/server/history/services/history.js +23 -6
  161. package/dist/server/history/services/history.js.map +1 -1
  162. package/dist/server/history/services/history.mjs +24 -7
  163. package/dist/server/history/services/history.mjs.map +1 -1
  164. package/dist/server/history/services/lifecycles.js +2 -16
  165. package/dist/server/history/services/lifecycles.js.map +1 -1
  166. package/dist/server/history/services/lifecycles.mjs +2 -16
  167. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  168. package/dist/server/register.js +4 -0
  169. package/dist/server/register.js.map +1 -1
  170. package/dist/server/register.mjs +4 -0
  171. package/dist/server/register.mjs.map +1 -1
  172. package/dist/server/routes/index.js +3 -1
  173. package/dist/server/routes/index.js.map +1 -1
  174. package/dist/server/routes/index.mjs +2 -0
  175. package/dist/server/routes/index.mjs.map +1 -1
  176. package/dist/server/services/content-types.js +2 -2
  177. package/dist/server/services/content-types.js.map +1 -1
  178. package/dist/server/services/content-types.mjs +2 -2
  179. package/dist/server/services/content-types.mjs.map +1 -1
  180. package/dist/server/services/document-manager.js +13 -0
  181. package/dist/server/services/document-manager.js.map +1 -1
  182. package/dist/server/services/document-manager.mjs +14 -1
  183. package/dist/server/services/document-manager.mjs.map +1 -1
  184. package/dist/server/services/index.js +3 -1
  185. package/dist/server/services/index.js.map +1 -1
  186. package/dist/server/services/index.mjs +2 -0
  187. package/dist/server/services/index.mjs.map +1 -1
  188. package/dist/server/services/utils/configuration/settings.js +2 -1
  189. package/dist/server/services/utils/configuration/settings.js.map +1 -1
  190. package/dist/server/services/utils/configuration/settings.mjs +2 -1
  191. package/dist/server/services/utils/configuration/settings.mjs.map +1 -1
  192. package/dist/server/src/audit-logs.d.ts +40 -0
  193. package/dist/server/src/audit-logs.d.ts.map +1 -0
  194. package/dist/server/src/bootstrap.d.ts.map +1 -1
  195. package/dist/server/src/controllers/collection-types.d.ts +1 -1
  196. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  197. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  198. package/dist/server/src/controllers/index.d.ts +21 -3
  199. package/dist/server/src/controllers/index.d.ts.map +1 -1
  200. package/dist/server/src/controllers/relations.d.ts +19 -1
  201. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  202. package/dist/server/src/controllers/single-types.d.ts +1 -1
  203. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  204. package/dist/server/src/custom-order/constants.d.ts +18 -0
  205. package/dist/server/src/custom-order/constants.d.ts.map +1 -0
  206. package/dist/server/src/custom-order/controllers/custom-order.d.ts +8 -0
  207. package/dist/server/src/custom-order/controllers/custom-order.d.ts.map +1 -0
  208. package/dist/server/src/custom-order/controllers/index.d.ts +3 -0
  209. package/dist/server/src/custom-order/controllers/index.d.ts.map +1 -0
  210. package/dist/server/src/custom-order/index.d.ts +8 -0
  211. package/dist/server/src/custom-order/index.d.ts.map +1 -0
  212. package/dist/server/src/custom-order/routes/custom-order.d.ts +4 -0
  213. package/dist/server/src/custom-order/routes/custom-order.d.ts.map +1 -0
  214. package/dist/server/src/custom-order/routes/index.d.ts +10 -0
  215. package/dist/server/src/custom-order/routes/index.d.ts.map +1 -0
  216. package/dist/server/src/custom-order/services/custom-order.d.ts +43 -0
  217. package/dist/server/src/custom-order/services/custom-order.d.ts.map +1 -0
  218. package/dist/server/src/custom-order/services/document-middleware.d.ts +16 -0
  219. package/dist/server/src/custom-order/services/document-middleware.d.ts.map +1 -0
  220. package/dist/server/src/custom-order/services/index.d.ts +24 -0
  221. package/dist/server/src/custom-order/services/index.d.ts.map +1 -0
  222. package/dist/server/src/custom-order/services/utils.d.ts +34 -0
  223. package/dist/server/src/custom-order/services/utils.d.ts.map +1 -0
  224. package/dist/server/src/custom-order/utils.d.ts +6 -0
  225. package/dist/server/src/custom-order/utils.d.ts.map +1 -0
  226. package/dist/server/src/history/constants.d.ts.map +1 -1
  227. package/dist/server/src/history/controllers/history-version.d.ts.map +1 -1
  228. package/dist/server/src/history/services/history.d.ts.map +1 -1
  229. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  230. package/dist/server/src/index.d.ts +22 -6
  231. package/dist/server/src/index.d.ts.map +1 -1
  232. package/dist/server/src/register.d.ts.map +1 -1
  233. package/dist/server/src/routes/index.d.ts.map +1 -1
  234. package/dist/server/src/services/content-types.d.ts +1 -3
  235. package/dist/server/src/services/content-types.d.ts.map +1 -1
  236. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  237. package/dist/server/src/services/index.d.ts +1 -3
  238. package/dist/server/src/services/index.d.ts.map +1 -1
  239. package/dist/server/src/services/utils/configuration/settings.d.ts.map +1 -1
  240. package/dist/shared/contracts/content-types.d.ts +5 -0
  241. package/dist/shared/contracts/content-types.d.ts.map +1 -1
  242. package/dist/shared/contracts/custom-order.d.ts +33 -0
  243. package/dist/shared/contracts/custom-order.d.ts.map +1 -0
  244. package/dist/shared/contracts/custom-order.js +3 -0
  245. package/dist/shared/contracts/custom-order.js.map +1 -0
  246. package/dist/shared/contracts/custom-order.mjs +2 -0
  247. package/dist/shared/contracts/custom-order.mjs.map +1 -0
  248. package/dist/shared/contracts/history-versions.d.ts +0 -1
  249. package/dist/shared/contracts/history-versions.d.ts.map +1 -1
  250. package/dist/shared/contracts/index.d.ts +1 -0
  251. package/dist/shared/contracts/index.d.ts.map +1 -1
  252. package/dist/shared/contracts/index.js +2 -0
  253. package/dist/shared/contracts/index.js.map +1 -1
  254. package/dist/shared/contracts/index.mjs +2 -0
  255. package/dist/shared/contracts/index.mjs.map +1 -1
  256. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"BlocksContent.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n BoxComponent,\n Flex,\n FlexComponent,\n IconButton,\n IconButtonComponent,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Editor, Range, Transforms } from 'slate';\nimport { ReactEditor, type RenderElementProps, type RenderLeafProps, Editable } from 'slate-react';\nimport { styled, CSSProperties, css } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDragAndDrop, DIRECTIONS } from '../../../../../hooks/useDragAndDrop';\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { decorateCode } from './Blocks/Code';\nimport { type BlocksStore, useBlocksEditorContext } from './BlocksEditor';\nimport { useConversionModal } from './BlocksToolbar';\nimport { type ModifiersStore } from './Modifiers';\nimport { getEntries } from './utils/types';\n\nconst StyledEditable = styled(Editable)<{ $isExpandedMode: boolean }>`\n // The outline style is set on the wrapper with :focus-within\n outline: none;\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[3]};\n height: 100%;\n // For fullscreen align input in the center with fixed width\n width: ${(props) => (props.$isExpandedMode ? '512px' : '100%')};\n margin: auto;\n font-size: 1.6rem;\n\n ${({ theme }) => theme.breakpoints.medium} {\n font-size: 1.4rem;\n }\n > *:last-child {\n padding-bottom: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Wrapper = styled<BoxComponent>(Box)<{ $isOverDropTarget: boolean }>`\n position: ${({ $isOverDropTarget }) => $isOverDropTarget && 'relative'};\n`;\n\ntype DragDirection = (typeof DIRECTIONS)[keyof typeof DIRECTIONS];\n\nconst DropPlaceholder = styled<BoxComponent>(Box)<{\n dragDirection: DragDirection | null;\n placeholderMargin: 1 | 2;\n}>`\n position: absolute;\n right: 0;\n\n // Show drop placeholder 8px above or below the drop target\n ${({ dragDirection, theme, placeholderMargin }) => css`\n top: ${dragDirection === DIRECTIONS.UPWARD && `-${theme.spaces[placeholderMargin]}`};\n bottom: ${dragDirection === DIRECTIONS.DOWNWARD && `-${theme.spaces[placeholderMargin]}`};\n `}\n`;\n\nconst DragItem = styled<FlexComponent>(Flex)<{ $dragVisibility: CSSProperties['visibility'] }>`\n // Style each block rendered using renderElement()\n & > [data-slate-node='element'] {\n width: 100%;\n opacity: inherit;\n }\n\n // Set the visibility of drag button\n [role='button'] {\n visibility: ${(props) => props.$dragVisibility};\n opacity: inherit;\n }\n &[aria-disabled='true'] {\n user-drag: none;\n }\n`;\n\nconst DragIconButton = styled<IconButtonComponent<'div'>>(IconButton)<{\n $dragHandleTopMargin?: CSSProperties['marginTop'];\n}>`\n user-select: none;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: ${({ theme }) => theme.borderRadius};\n padding-left: ${({ theme }) => theme.spaces[0]};\n padding-right: ${({ theme }) => theme.spaces[0]};\n padding-top: ${({ theme }) => theme.spaces[1]};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n visibility: hidden;\n cursor: grab;\n opacity: inherit;\n margin-top: ${(props) => props.$dragHandleTopMargin ?? 0};\n\n &:hover {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n &:active {\n cursor: grabbing;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n &[aria-disabled='true'] {\n visibility: hidden;\n }\n svg {\n min-width: ${({ theme }) => theme.spaces[3]};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\ntype Direction = {\n setDragDirection: (direction: DragDirection) => void;\n dragDirection: DragDirection | null;\n};\n\ntype DragAndDropElementProps = Direction & {\n children: RenderElementProps['children'];\n index: Array<number>;\n dragHandleTopMargin?: CSSProperties['marginTop'];\n};\n\nconst DragAndDropElement = ({\n children,\n index,\n setDragDirection,\n dragDirection,\n dragHandleTopMargin,\n}: DragAndDropElementProps) => {\n const { editor, disabled, name, setLiveText } = useBlocksEditorContext('DragAndDropElement');\n const { formatMessage } = useIntl();\n const [dragVisibility, setDragVisibility] = React.useState<CSSProperties['visibility']>('hidden');\n const isDragAndDropEnabled = !disabled;\n\n const handleMoveBlock = React.useCallback(\n (newIndex: Array<number>, currentIndex: Array<number>) => {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Add 1 to the index for the live text message\n const currentIndexPosition = [currentIndex[0] + 1, ...currentIndex.slice(1)];\n const newIndexPosition = [newIndex[0] + 1, ...newIndex.slice(1)];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndexPosition.join(',')}`,\n position: `${newIndexPosition.join(',')} of ${editor.children.length}`,\n }\n )\n );\n },\n [editor, formatMessage, name, setLiveText]\n );\n\n const [{ handlerId, isDragging, isOverDropTarget, direction }, blockRef, dropRef, dragRef] =\n useDragAndDrop(isDragAndDropEnabled, {\n type: `${ItemTypes.BLOCKS}_${name}`,\n index,\n item: {\n index,\n displayedValue: children,\n },\n onDropItem(currentIndex, newIndex) {\n if (newIndex) handleMoveBlock(newIndex, currentIndex);\n },\n });\n\n const composedBoxRefs = useComposedRefs(blockRef, dropRef);\n\n // Set Drag direction before loosing state while dragging\n React.useEffect(() => {\n if (direction) {\n setDragDirection(direction);\n }\n }, [direction, setDragDirection]);\n\n // On selection change hide drag handle\n React.useEffect(() => {\n setDragVisibility('hidden');\n }, [editor.selection]);\n\n return (\n <Wrapper ref={composedBoxRefs} $isOverDropTarget={isOverDropTarget}>\n {isOverDropTarget && (\n <DropPlaceholder\n borderStyle=\"solid\"\n borderColor=\"secondary200\"\n borderWidth=\"2px\"\n width=\"calc(100% - 24px)\"\n marginLeft=\"auto\"\n dragDirection={dragDirection}\n // For list items placeholder reduce the margin around\n placeholderMargin={children.props.as && children.props.as === 'li' ? 1 : 2}\n />\n )}\n {isDragging ? (\n <CloneDragItem dragHandleTopMargin={dragHandleTopMargin}>{children}</CloneDragItem>\n ) : (\n <DragItem\n ref={dragRef}\n data-handler-id={handlerId}\n gap={2}\n paddingLeft={2}\n alignItems=\"start\"\n onDragStart={\n isDragAndDropEnabled\n ? (event) => {\n const target = event.target as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n // Dragging action should only trigger drag event when button is dragged, however update styles on the whole dragItem.\n if (target.getAttribute('role') !== 'button') {\n event.preventDefault();\n } else {\n // Setting styles using dragging state is not working, so set it on current target element as nodes get dragged\n currentTarget.style.opacity = '0.5';\n }\n }\n : undefined\n }\n onDragEnd={\n isDragAndDropEnabled\n ? (event) => {\n const currentTarget = event.currentTarget as HTMLElement;\n currentTarget.style.opacity = '1';\n }\n : undefined\n }\n onMouseEnter={() => setDragVisibility('visible')}\n onFocusCapture={() => setDragVisibility('visible')}\n onBlurCapture={() => setDragVisibility('hidden')}\n onMouseLeave={() => setDragVisibility('hidden')}\n aria-disabled={disabled}\n $dragVisibility={dragVisibility}\n >\n <DragIconButton\n tag=\"div\"\n contentEditable={false}\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n aria-disabled={disabled}\n disabled={disabled}\n draggable={isDragAndDropEnabled}\n // For some blocks top margin added to drag handle to align at the text level\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"primary500\" />\n </DragIconButton>\n {children}\n </DragItem>\n )}\n </Wrapper>\n );\n};\n\ninterface CloneDragItemProps {\n children: RenderElementProps['children'];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\n// To prevent applying opacity to the original item being dragged, display a cloned element without opacity.\nconst CloneDragItem = ({ children, dragHandleTopMargin }: CloneDragItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <DragItem gap={2} paddingLeft={2} alignItems=\"start\" $dragVisibility=\"visible\">\n <DragIconButton\n tag=\"div\"\n role=\"button\"\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"neutral600\" />\n </DragIconButton>\n {children}\n </DragItem>\n );\n};\n\ninterface ExtendedRenderLeafProps extends RenderLeafProps {\n leaf: RenderLeafProps['leaf'] & { className?: string };\n}\n\nconst baseRenderLeaf = (props: ExtendedRenderLeafProps, modifiers: ModifiersStore) => {\n // Recursively wrap the children for each active modifier\n const wrappedChildren = getEntries(modifiers).reduce((currentChildren, modifierEntry) => {\n const [name, modifier] = modifierEntry;\n\n if (props.leaf[name]) {\n return modifier.renderLeaf(currentChildren);\n }\n\n return currentChildren;\n }, props.children);\n\n return (\n <span {...props.attributes} className={props.leaf.className}>\n {wrappedChildren}\n </span>\n );\n};\n\ntype BaseRenderElementProps = Direction & {\n props: RenderElementProps['children'];\n blocks: Partial<BlocksStore>;\n editor: Editor;\n isMobile: boolean;\n};\n\nconst baseRenderElement = ({\n props,\n blocks,\n editor,\n dragDirection,\n setDragDirection,\n isMobile,\n}: BaseRenderElementProps) => {\n const { element } = props;\n\n const blockMatch = Object.values(blocks).find((block) => block?.matchNode(element));\n const block = blockMatch || blocks.paragraph;\n\n if (!block) {\n return <></>;\n }\n\n const nodePath = ReactEditor.findPath(editor, element);\n\n const isDraggable = block.isDraggable?.(element) ?? true;\n\n if (!isDraggable || isMobile) {\n return block.renderElement(props);\n }\n\n return (\n <DragAndDropElement\n index={nodePath}\n setDragDirection={setDragDirection}\n dragDirection={dragDirection}\n dragHandleTopMargin={block.dragHandleTopMargin}\n >\n {block.renderElement(props)}\n </DragAndDropElement>\n );\n};\n\nconst dragNoop = () => true;\n\ninterface BlocksContentProps {\n placeholder?: string;\n ariaLabelId: string;\n autoFocus?: boolean;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nconst BlocksContent = ({\n placeholder,\n ariaLabelId,\n autoFocus,\n onFocus,\n onBlur,\n}: BlocksContentProps) => {\n const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode, flushPendingFormSync } =\n useBlocksEditorContext('BlocksContent');\n const isMobile = useIsMobile();\n const blocksRef = React.useRef<HTMLDivElement>(null);\n const { formatMessage } = useIntl();\n const [dragDirection, setDragDirection] = React.useState<DragDirection | null>(null);\n const { modalElement, handleConversionResult } = useConversionModal();\n\n // Create renderLeaf function based on the modifiers store\n const renderLeaf = React.useCallback(\n (props: ExtendedRenderLeafProps) => baseRenderLeaf(props, modifiers),\n [modifiers]\n );\n\n const handleMoveBlocks = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const start = Range.start(editor.selection);\n const currentIndex = [start.path[0]];\n let newIndexPosition = 0;\n\n if (event.key === 'ArrowUp') {\n newIndexPosition = currentIndex[0] > 0 ? currentIndex[0] - 1 : currentIndex[0];\n } else {\n newIndexPosition =\n currentIndex[0] < editor.children.length - 1 ? currentIndex[0] + 1 : currentIndex[0];\n }\n\n const newIndex = [newIndexPosition];\n\n if (newIndexPosition !== currentIndex[0]) {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n\n event.preventDefault();\n }\n };\n\n // Create renderElement function base on the blocks store\n const renderElement = React.useCallback(\n (props: RenderElementProps) =>\n baseRenderElement({ props, blocks, editor, dragDirection, setDragDirection, isMobile }),\n [blocks, editor, dragDirection, isMobile, setDragDirection]\n );\n\n const checkSnippet = (event: React.KeyboardEvent<HTMLElement>) => {\n // Get current text block\n if (!editor.selection) {\n return;\n }\n\n const [textNode, textNodePath] = Editor.node(editor, editor.selection.anchor.path);\n\n // Narrow the type to a text node\n if (Editor.isEditor(textNode) || textNode.type !== 'text') {\n return;\n }\n\n // Don't check for snippets if we're not at the start of a block\n if (textNodePath.at(-1) !== 0) {\n return;\n }\n\n // Check if the text node starts with a known snippet\n const blockMatchingSnippet = Object.values(blocks).find((block) => {\n return block?.snippets?.includes(textNode.text);\n });\n\n if (blockMatchingSnippet?.handleConvert) {\n // Prevent the space from being created and delete the snippet\n event.preventDefault();\n Transforms.delete(editor, {\n distance: textNode.text.length,\n unit: 'character',\n reverse: true,\n });\n\n // Convert the selected block\n const maybeRenderModal = blockMatchingSnippet.handleConvert(editor);\n handleConversionResult(maybeRenderModal);\n }\n };\n\n const handleEnter = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block?.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n // Allow forced line breaks when shift is pressed\n if (event.shiftKey && selectedNode.type !== 'image') {\n Transforms.insertText(editor, '\\n');\n return;\n }\n\n // Check if there's an enter handler for the selected block\n if (selectedBlock.handleEnterKey) {\n selectedBlock.handleEnterKey(editor);\n } else {\n blocks.paragraph?.handleEnterKey!(editor);\n }\n };\n\n const handleBackspaceEvent = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block?.matchNode(selectedNode));\n\n if (!selectedBlock) {\n return;\n }\n\n if (selectedBlock.handleBackspaceKey) {\n selectedBlock.handleBackspaceKey(editor, event);\n }\n };\n\n const handleTab = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block?.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n event.preventDefault();\n\n if (event.shiftKey && selectedBlock.handleShiftTab) {\n // Handle Shift+Tab (unindent)\n selectedBlock.handleShiftTab(editor);\n } else if (!event.shiftKey && selectedBlock.handleTab) {\n // Handle Tab (indent)\n selectedBlock.handleTab(editor);\n }\n };\n\n const handleKeyboardShortcuts = (event: React.KeyboardEvent<HTMLElement>) => {\n const isCtrlOrCmd = event.metaKey || event.ctrlKey;\n\n if (isCtrlOrCmd) {\n // Check if there's a modifier to toggle\n Object.values(modifiers).forEach((value) => {\n if (value.isValidEventKey(event)) {\n event.preventDefault();\n value.handleToggle(editor);\n return;\n }\n });\n if (event.shiftKey && ['ArrowUp', 'ArrowDown'].includes(event.key)) {\n handleMoveBlocks(editor, event);\n }\n }\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLElement> = (event) => {\n // Find the right block-specific handlers for enter and backspace key presses\n switch (event.key) {\n case 'Enter':\n if (!event.nativeEvent.isComposing) {\n event.preventDefault();\n return handleEnter(event);\n }\n break;\n case 'Backspace':\n return handleBackspaceEvent(event);\n case 'Tab':\n return handleTab(event);\n case 'Escape':\n return ReactEditor.blur(editor);\n }\n handleKeyboardShortcuts(event);\n // Check if a snippet was triggered\n if (event.key === ' ') {\n checkSnippet(event);\n }\n };\n\n /**\n * scrollSelectionIntoView : Slate's default method to scroll a DOM selection into the view,\n * thats shifting layout for us when there is a overflowY:scroll on the viewport.\n * We are overriding it to check if the selection is not fully within the visible area of the editor,\n * we use scrollBy one line to the bottom\n */\n\n const handleScrollSelectionIntoView = React.useCallback(() => {\n if (!editor.selection || !blocksRef.current) {\n return;\n }\n\n const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n const domRect = domRange.getBoundingClientRect();\n\n const editorRect = blocksRef.current.getBoundingClientRect();\n\n // Check if the selection is not fully within the visible area of the editor\n if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {\n // Scroll by one line to the bottom\n blocksRef.current.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n }, [editor]);\n\n return (\n <Box\n ref={blocksRef}\n grow={1}\n width=\"100%\"\n overflow=\"auto\"\n fontSize={2}\n background=\"neutral0\"\n color=\"neutral800\"\n lineHeight={6}\n paddingLeft={{ initial: 4, medium: 0 }}\n paddingRight={7}\n paddingTop={6}\n paddingBottom={3}\n >\n <StyledEditable\n aria-labelledby={ariaLabelId}\n readOnly={disabled}\n placeholder={placeholder}\n $isExpandedMode={isExpandedMode}\n decorate={decorateCode}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n onKeyDown={handleKeyDown}\n scrollSelectionIntoView={handleScrollSelectionIntoView}\n autoFocus={autoFocus}\n onFocus={onFocus}\n onBlur={(event) => {\n flushPendingFormSync();\n onBlur?.(event);\n }}\n // As we have our own handler to drag and drop the elements returing true will skip slate's own event handler\n onDrop={dragNoop}\n onDragStart={dragNoop}\n />\n {modalElement}\n </Box>\n );\n};\n\nexport { BlocksContent, BlocksContentProps };\n"],"names":["StyledEditable","styled","Editable","theme","spaces","props","$isExpandedMode","breakpoints","medium","Wrapper","Box","$isOverDropTarget","DropPlaceholder","dragDirection","placeholderMargin","css","DIRECTIONS","UPWARD","DOWNWARD","DragItem","Flex","$dragVisibility","DragIconButton","IconButton","borderRadius","$dragHandleTopMargin","colors","neutral100","neutral150","neutral500","DragAndDropElement","children","index","setDragDirection","dragHandleTopMargin","editor","disabled","name","setLiveText","useBlocksEditorContext","formatMessage","useIntl","dragVisibility","setDragVisibility","React","useState","isDragAndDropEnabled","handleMoveBlock","useCallback","newIndex","currentIndex","Transforms","moveNodes","at","to","currentIndexPosition","slice","newIndexPosition","id","getTranslation","defaultMessage","item","join","position","length","handlerId","isDragging","isOverDropTarget","direction","blockRef","dropRef","dragRef","useDragAndDrop","type","ItemTypes","BLOCKS","displayedValue","onDropItem","composedBoxRefs","useComposedRefs","useEffect","selection","_jsxs","ref","_jsx","borderStyle","borderColor","borderWidth","width","marginLeft","as","CloneDragItem","data-handler-id","gap","paddingLeft","alignItems","onDragStart","event","target","currentTarget","getAttribute","preventDefault","style","opacity","undefined","onDragEnd","onMouseEnter","onFocusCapture","onBlurCapture","onMouseLeave","aria-disabled","tag","contentEditable","role","tabIndex","withTooltip","label","onClick","e","stopPropagation","draggable","Drag","color","baseRenderLeaf","modifiers","wrappedChildren","getEntries","reduce","currentChildren","modifierEntry","modifier","leaf","renderLeaf","span","attributes","className","baseRenderElement","blocks","isMobile","element","blockMatch","Object","values","find","block","matchNode","paragraph","_Fragment","nodePath","ReactEditor","findPath","isDraggable","renderElement","dragNoop","BlocksContent","placeholder","ariaLabelId","autoFocus","onFocus","onBlur","isExpandedMode","flushPendingFormSync","useIsMobile","blocksRef","useRef","modalElement","handleConversionResult","useConversionModal","handleMoveBlocks","start","Range","path","key","checkSnippet","textNode","textNodePath","Editor","node","anchor","isEditor","blockMatchingSnippet","snippets","includes","text","handleConvert","delete","distance","unit","reverse","maybeRenderModal","handleEnter","selectedNode","selectedBlock","shiftKey","insertText","handleEnterKey","handleBackspaceEvent","handleBackspaceKey","handleTab","handleShiftTab","handleKeyboardShortcuts","isCtrlOrCmd","metaKey","ctrlKey","forEach","value","isValidEventKey","handleToggle","handleKeyDown","nativeEvent","isComposing","blur","handleScrollSelectionIntoView","current","domRange","toDOMRange","domRect","getBoundingClientRect","editorRect","top","bottom","scrollBy","behavior","grow","overflow","fontSize","background","lineHeight","initial","paddingRight","paddingTop","paddingBottom","aria-labelledby","readOnly","decorate","decorateCode","onKeyDown","scrollSelectionIntoView","onDrop"],"mappings":"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"}
1
+ {"version":3,"file":"BlocksContent.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useIsMobile, useStrapiApp } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n BoxComponent,\n Flex,\n FlexComponent,\n IconButton,\n IconButtonComponent,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Editor, Range, Transforms } from 'slate';\nimport { ReactEditor, type RenderElementProps, type RenderLeafProps, Editable } from 'slate-react';\nimport { styled, CSSProperties, css } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDragAndDrop, DIRECTIONS } from '../../../../../hooks/useDragAndDrop';\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { decorateCode } from './Blocks/Code';\nimport { createDroppedImagesInserter } from './Blocks/Image';\nimport { type BlocksStore, useBlocksEditorContext } from './BlocksEditor';\nimport { useConversionModal } from './BlocksToolbar';\nimport { type ModifiersStore } from './Modifiers';\nimport { getEntries } from './utils/types';\n\nimport type { Schema } from '@strapi/types';\n\nconst StyledEditable = styled(Editable)<{ $isExpandedMode: boolean }>`\n // The outline style is set on the wrapper with :focus-within\n outline: none;\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[3]};\n height: 100%;\n // For fullscreen align input in the center with fixed width\n width: ${(props) => (props.$isExpandedMode ? '512px' : '100%')};\n margin: auto;\n font-size: 1.6rem;\n\n ${({ theme }) => theme.breakpoints.medium} {\n font-size: 1.4rem;\n }\n > *:last-child {\n padding-bottom: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst Wrapper = styled<BoxComponent>(Box)<{ $isOverDropTarget: boolean }>`\n position: ${({ $isOverDropTarget }) => $isOverDropTarget && 'relative'};\n`;\n\ntype DragDirection = (typeof DIRECTIONS)[keyof typeof DIRECTIONS];\n\nconst DropPlaceholder = styled<BoxComponent>(Box)<{\n dragDirection: DragDirection | null;\n placeholderMargin: 1 | 2;\n}>`\n position: absolute;\n right: 0;\n\n // Show drop placeholder 8px above or below the drop target\n ${({ dragDirection, theme, placeholderMargin }) => css`\n top: ${dragDirection === DIRECTIONS.UPWARD && `-${theme.spaces[placeholderMargin]}`};\n bottom: ${dragDirection === DIRECTIONS.DOWNWARD && `-${theme.spaces[placeholderMargin]}`};\n `}\n`;\n\nconst DragItem = styled<FlexComponent>(Flex)<{ $dragVisibility: CSSProperties['visibility'] }>`\n // Style each block rendered using renderElement()\n & > [data-slate-node='element'] {\n width: 100%;\n opacity: inherit;\n }\n\n // Set the visibility of drag button\n [role='button'] {\n visibility: ${(props) => props.$dragVisibility};\n opacity: inherit;\n }\n &[aria-disabled='true'] {\n user-drag: none;\n }\n`;\n\nconst DragIconButton = styled<IconButtonComponent<'div'>>(IconButton)<{\n $dragHandleTopMargin?: CSSProperties['marginTop'];\n}>`\n user-select: none;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n border-radius: ${({ theme }) => theme.borderRadius};\n padding-left: ${({ theme }) => theme.spaces[0]};\n padding-right: ${({ theme }) => theme.spaces[0]};\n padding-top: ${({ theme }) => theme.spaces[1]};\n padding-bottom: ${({ theme }) => theme.spaces[1]};\n visibility: hidden;\n cursor: grab;\n opacity: inherit;\n margin-top: ${(props) => props.$dragHandleTopMargin ?? 0};\n\n &:hover {\n background: ${({ theme }) => theme.colors.neutral100};\n }\n &:active {\n cursor: grabbing;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n &[aria-disabled='true'] {\n visibility: hidden;\n }\n svg {\n min-width: ${({ theme }) => theme.spaces[3]};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n`;\n\ntype Direction = {\n setDragDirection: (direction: DragDirection) => void;\n dragDirection: DragDirection | null;\n};\n\ntype DragAndDropElementProps = Direction & {\n children: RenderElementProps['children'];\n index: Array<number>;\n dragHandleTopMargin?: CSSProperties['marginTop'];\n};\n\nconst DragAndDropElement = ({\n children,\n index,\n setDragDirection,\n dragDirection,\n dragHandleTopMargin,\n}: DragAndDropElementProps) => {\n const { editor, disabled, name, setLiveText } = useBlocksEditorContext('DragAndDropElement');\n const { formatMessage } = useIntl();\n const [dragVisibility, setDragVisibility] = React.useState<CSSProperties['visibility']>('hidden');\n const isDragAndDropEnabled = !disabled;\n\n const handleMoveBlock = React.useCallback(\n (newIndex: Array<number>, currentIndex: Array<number>) => {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n // Add 1 to the index for the live text message\n const currentIndexPosition = [currentIndex[0] + 1, ...currentIndex.slice(1)];\n const newIndexPosition = [newIndex[0] + 1, ...newIndex.slice(1)];\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndexPosition.join(',')}`,\n position: `${newIndexPosition.join(',')} of ${editor.children.length}`,\n }\n )\n );\n },\n [editor, formatMessage, name, setLiveText]\n );\n\n const [{ handlerId, isDragging, isOverDropTarget, direction }, blockRef, dropRef, dragRef] =\n useDragAndDrop(isDragAndDropEnabled, {\n type: `${ItemTypes.BLOCKS}_${name}`,\n index,\n item: {\n index,\n displayedValue: children,\n },\n onDropItem(currentIndex, newIndex) {\n if (newIndex) handleMoveBlock(newIndex, currentIndex);\n },\n });\n\n const composedBoxRefs = useComposedRefs(blockRef, dropRef);\n\n // Set Drag direction before loosing state while dragging\n React.useEffect(() => {\n if (direction) {\n setDragDirection(direction);\n }\n }, [direction, setDragDirection]);\n\n // On selection change hide drag handle\n React.useEffect(() => {\n setDragVisibility('hidden');\n }, [editor.selection]);\n\n return (\n <Wrapper ref={composedBoxRefs} $isOverDropTarget={isOverDropTarget}>\n {isOverDropTarget && (\n <DropPlaceholder\n borderStyle=\"solid\"\n borderColor=\"secondary200\"\n borderWidth=\"2px\"\n width=\"calc(100% - 24px)\"\n marginLeft=\"auto\"\n dragDirection={dragDirection}\n // For list items placeholder reduce the margin around\n placeholderMargin={children.props.as && children.props.as === 'li' ? 1 : 2}\n />\n )}\n {isDragging ? (\n <CloneDragItem dragHandleTopMargin={dragHandleTopMargin}>{children}</CloneDragItem>\n ) : (\n <DragItem\n ref={dragRef}\n data-handler-id={handlerId}\n gap={2}\n paddingLeft={2}\n alignItems=\"start\"\n onDragStart={\n isDragAndDropEnabled\n ? (event) => {\n const target = event.target as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n // Dragging action should only trigger drag event when button is dragged, however update styles on the whole dragItem.\n if (target.getAttribute('role') !== 'button') {\n event.preventDefault();\n } else {\n // Setting styles using dragging state is not working, so set it on current target element as nodes get dragged\n currentTarget.style.opacity = '0.5';\n }\n }\n : undefined\n }\n onDragEnd={\n isDragAndDropEnabled\n ? (event) => {\n const currentTarget = event.currentTarget as HTMLElement;\n currentTarget.style.opacity = '1';\n }\n : undefined\n }\n onMouseEnter={() => setDragVisibility('visible')}\n onFocusCapture={() => setDragVisibility('visible')}\n onBlurCapture={() => setDragVisibility('hidden')}\n onMouseLeave={() => setDragVisibility('hidden')}\n aria-disabled={disabled}\n $dragVisibility={dragVisibility}\n >\n <DragIconButton\n tag=\"div\"\n contentEditable={false}\n role=\"button\"\n tabIndex={0}\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n aria-disabled={disabled}\n disabled={disabled}\n draggable={isDragAndDropEnabled}\n // For some blocks top margin added to drag handle to align at the text level\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"primary500\" />\n </DragIconButton>\n {children}\n </DragItem>\n )}\n </Wrapper>\n );\n};\n\ninterface CloneDragItemProps {\n children: RenderElementProps['children'];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\n// To prevent applying opacity to the original item being dragged, display a cloned element without opacity.\nconst CloneDragItem = ({ children, dragHandleTopMargin }: CloneDragItemProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <DragItem gap={2} paddingLeft={2} alignItems=\"start\" $dragVisibility=\"visible\">\n <DragIconButton\n tag=\"div\"\n role=\"button\"\n withTooltip={false}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n $dragHandleTopMargin={dragHandleTopMargin}\n >\n <Drag color=\"neutral600\" />\n </DragIconButton>\n {children}\n </DragItem>\n );\n};\n\ninterface ExtendedRenderLeafProps extends RenderLeafProps {\n leaf: RenderLeafProps['leaf'] & { className?: string };\n}\n\nconst baseRenderLeaf = (props: ExtendedRenderLeafProps, modifiers: ModifiersStore) => {\n // Recursively wrap the children for each active modifier\n const wrappedChildren = getEntries(modifiers).reduce((currentChildren, modifierEntry) => {\n const [name, modifier] = modifierEntry;\n\n if (props.leaf[name]) {\n return modifier.renderLeaf(currentChildren);\n }\n\n return currentChildren;\n }, props.children);\n\n return (\n <span {...props.attributes} className={props.leaf.className}>\n {wrappedChildren}\n </span>\n );\n};\n\ntype BaseRenderElementProps = Direction & {\n props: RenderElementProps['children'];\n blocks: Partial<BlocksStore>;\n editor: Editor;\n isMobile: boolean;\n};\n\nconst baseRenderElement = ({\n props,\n blocks,\n editor,\n dragDirection,\n setDragDirection,\n isMobile,\n}: BaseRenderElementProps) => {\n const { element } = props;\n\n const blockMatch = Object.values(blocks).find((block) => block?.matchNode(element));\n const block = blockMatch || blocks.paragraph;\n\n if (!block) {\n return <></>;\n }\n\n const nodePath = ReactEditor.findPath(editor, element);\n\n const isDraggable = block.isDraggable?.(element) ?? true;\n\n if (!isDraggable || isMobile) {\n return block.renderElement(props);\n }\n\n return (\n <DragAndDropElement\n index={nodePath}\n setDragDirection={setDragDirection}\n dragDirection={dragDirection}\n dragHandleTopMargin={block.dragHandleTopMargin}\n >\n {block.renderElement(props)}\n </DragAndDropElement>\n );\n};\n\nconst dragNoop = () => true;\n\ninterface FileDropZoneProps {\n children: React.ReactNode;\n allowedTypes: Schema.Attribute.MediaKind[];\n onDropFiles: (\n event: React.DragEvent<HTMLElement>\n ) => (asset: Schema.Attribute.MediaValue<true>[number]) => void;\n}\n\ninterface BlocksContentProps {\n placeholder?: string;\n ariaLabelId: string;\n autoFocus?: boolean;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n}\n\nconst BlocksContent = ({\n placeholder,\n ariaLabelId,\n autoFocus,\n onFocus,\n onBlur,\n}: BlocksContentProps) => {\n const { editor, disabled, blocks, modifiers, setLiveText, isExpandedMode, flushPendingFormSync } =\n useBlocksEditorContext('BlocksContent');\n const isMobile = useIsMobile();\n const blocksRef = React.useRef<HTMLDivElement>(null);\n const { formatMessage } = useIntl();\n const [dragDirection, setDragDirection] = React.useState<DragDirection | null>(null);\n const { modalElement, handleConversionResult } = useConversionModal();\n // Registered by the Media Library: uploads files dropped onto the content\n // and hands them back to be inserted as image blocks.\n const FileDropZone = useStrapiApp(\n 'BlocksContent',\n (state) => state.components?.['media-library-file-drop-zone']\n ) as React.ComponentType<FileDropZoneProps> | undefined;\n\n // Create renderLeaf function based on the modifiers store\n const renderLeaf = React.useCallback(\n (props: ExtendedRenderLeafProps) => baseRenderLeaf(props, modifiers),\n [modifiers]\n );\n\n const handleMoveBlocks = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const start = Range.start(editor.selection);\n const currentIndex = [start.path[0]];\n let newIndexPosition = 0;\n\n if (event.key === 'ArrowUp') {\n newIndexPosition = currentIndex[0] > 0 ? currentIndex[0] - 1 : currentIndex[0];\n } else {\n newIndexPosition =\n currentIndex[0] < editor.children.length - 1 ? currentIndex[0] + 1 : currentIndex[0];\n }\n\n const newIndex = [newIndexPosition];\n\n if (newIndexPosition !== currentIndex[0]) {\n Transforms.moveNodes(editor, {\n at: currentIndex,\n to: newIndex,\n });\n\n setLiveText(\n formatMessage(\n {\n id: getTranslation('components.Blocks.dnd.reorder'),\n defaultMessage: '{item}, moved. New position in the editor: {position}.',\n },\n {\n item: `${name}.${currentIndex[0] + 1}`,\n position: `${newIndex[0] + 1} of ${editor.children.length}`,\n }\n )\n );\n\n event.preventDefault();\n }\n };\n\n // Create renderElement function base on the blocks store\n const renderElement = React.useCallback(\n (props: RenderElementProps) =>\n baseRenderElement({ props, blocks, editor, dragDirection, setDragDirection, isMobile }),\n [blocks, editor, dragDirection, isMobile, setDragDirection]\n );\n\n const checkSnippet = (event: React.KeyboardEvent<HTMLElement>) => {\n // Get current text block\n if (!editor.selection) {\n return;\n }\n\n const [textNode, textNodePath] = Editor.node(editor, editor.selection.anchor.path);\n\n // Narrow the type to a text node\n if (Editor.isEditor(textNode) || textNode.type !== 'text') {\n return;\n }\n\n // Don't check for snippets if we're not at the start of a block\n if (textNodePath.at(-1) !== 0) {\n return;\n }\n\n // Check if the text node starts with a known snippet\n const blockMatchingSnippet = Object.values(blocks).find((block) => {\n return block?.snippets?.includes(textNode.text);\n });\n\n if (blockMatchingSnippet?.handleConvert) {\n // Prevent the space from being created and delete the snippet\n event.preventDefault();\n Transforms.delete(editor, {\n distance: textNode.text.length,\n unit: 'character',\n reverse: true,\n });\n\n // Convert the selected block\n const maybeRenderModal = blockMatchingSnippet.handleConvert(editor);\n handleConversionResult(maybeRenderModal);\n }\n };\n\n const handleEnter = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block?.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n // Allow forced line breaks when shift is pressed\n if (event.shiftKey && selectedNode.type !== 'image') {\n Transforms.insertText(editor, '\\n');\n return;\n }\n\n // Check if there's an enter handler for the selected block\n if (selectedBlock.handleEnterKey) {\n selectedBlock.handleEnterKey(editor);\n } else {\n blocks.paragraph?.handleEnterKey!(editor);\n }\n };\n\n const handleBackspaceEvent = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block?.matchNode(selectedNode));\n\n if (!selectedBlock) {\n return;\n }\n\n if (selectedBlock.handleBackspaceKey) {\n selectedBlock.handleBackspaceKey(editor, event);\n }\n };\n\n const handleTab = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block?.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n event.preventDefault();\n\n if (event.shiftKey && selectedBlock.handleShiftTab) {\n // Handle Shift+Tab (unindent)\n selectedBlock.handleShiftTab(editor);\n } else if (!event.shiftKey && selectedBlock.handleTab) {\n // Handle Tab (indent)\n selectedBlock.handleTab(editor);\n }\n };\n\n const handleKeyboardShortcuts = (event: React.KeyboardEvent<HTMLElement>) => {\n const isCtrlOrCmd = event.metaKey || event.ctrlKey;\n\n if (isCtrlOrCmd) {\n // Check if there's a modifier to toggle\n Object.values(modifiers).forEach((value) => {\n if (value.isValidEventKey(event)) {\n event.preventDefault();\n value.handleToggle(editor);\n return;\n }\n });\n if (event.shiftKey && ['ArrowUp', 'ArrowDown'].includes(event.key)) {\n handleMoveBlocks(editor, event);\n }\n }\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLElement> = (event) => {\n // Find the right block-specific handlers for enter and backspace key presses\n switch (event.key) {\n case 'Enter':\n if (!event.nativeEvent.isComposing) {\n event.preventDefault();\n return handleEnter(event);\n }\n break;\n case 'Backspace':\n return handleBackspaceEvent(event);\n case 'Tab':\n return handleTab(event);\n case 'Escape':\n return ReactEditor.blur(editor);\n }\n handleKeyboardShortcuts(event);\n // Check if a snippet was triggered\n if (event.key === ' ') {\n checkSnippet(event);\n }\n };\n\n /**\n * scrollSelectionIntoView : Slate's default method to scroll a DOM selection into the view,\n * thats shifting layout for us when there is a overflowY:scroll on the viewport.\n * We are overriding it to check if the selection is not fully within the visible area of the editor,\n * we use scrollBy one line to the bottom\n */\n\n const handleScrollSelectionIntoView = React.useCallback(() => {\n if (!editor.selection || !blocksRef.current) {\n return;\n }\n\n const domRange = ReactEditor.toDOMRange(editor, editor.selection);\n const domRect = domRange.getBoundingClientRect();\n\n const editorRect = blocksRef.current.getBoundingClientRect();\n\n // Check if the selection is not fully within the visible area of the editor\n if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {\n // Scroll by one line to the bottom\n blocksRef.current.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n }, [editor]);\n\n const content = (\n <Box\n ref={blocksRef}\n grow={1}\n width=\"100%\"\n overflow=\"auto\"\n fontSize={2}\n background=\"neutral0\"\n color=\"neutral800\"\n lineHeight={6}\n paddingLeft={{ initial: 4, medium: 0 }}\n paddingRight={7}\n paddingTop={6}\n paddingBottom={3}\n >\n <StyledEditable\n aria-labelledby={ariaLabelId}\n readOnly={disabled}\n placeholder={placeholder}\n $isExpandedMode={isExpandedMode}\n decorate={decorateCode}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n onKeyDown={handleKeyDown}\n scrollSelectionIntoView={handleScrollSelectionIntoView}\n autoFocus={autoFocus}\n onFocus={onFocus}\n onBlur={(event) => {\n flushPendingFormSync();\n onBlur?.(event);\n }}\n // As we have our own handler to drag and drop the elements returing true will skip slate's own event handler\n onDrop={dragNoop}\n onDragStart={dragNoop}\n />\n {modalElement}\n </Box>\n );\n\n if (!FileDropZone || disabled) {\n return content;\n }\n\n return (\n <FileDropZone\n allowedTypes={['images']}\n onDropFiles={(event) => createDroppedImagesInserter(editor, event)}\n >\n {content}\n </FileDropZone>\n );\n};\n\nexport { BlocksContent, BlocksContentProps };\n"],"names":["StyledEditable","styled","Editable","theme","spaces","props","$isExpandedMode","breakpoints","medium","Wrapper","Box","$isOverDropTarget","DropPlaceholder","dragDirection","placeholderMargin","css","DIRECTIONS","UPWARD","DOWNWARD","DragItem","Flex","$dragVisibility","DragIconButton","IconButton","borderRadius","$dragHandleTopMargin","colors","neutral100","neutral150","neutral500","DragAndDropElement","children","index","setDragDirection","dragHandleTopMargin","editor","disabled","name","setLiveText","useBlocksEditorContext","formatMessage","useIntl","dragVisibility","setDragVisibility","React","useState","isDragAndDropEnabled","handleMoveBlock","useCallback","newIndex","currentIndex","Transforms","moveNodes","at","to","currentIndexPosition","slice","newIndexPosition","id","getTranslation","defaultMessage","item","join","position","length","handlerId","isDragging","isOverDropTarget","direction","blockRef","dropRef","dragRef","useDragAndDrop","type","ItemTypes","BLOCKS","displayedValue","onDropItem","composedBoxRefs","useComposedRefs","useEffect","selection","_jsxs","ref","_jsx","borderStyle","borderColor","borderWidth","width","marginLeft","as","CloneDragItem","data-handler-id","gap","paddingLeft","alignItems","onDragStart","event","target","currentTarget","getAttribute","preventDefault","style","opacity","undefined","onDragEnd","onMouseEnter","onFocusCapture","onBlurCapture","onMouseLeave","aria-disabled","tag","contentEditable","role","tabIndex","withTooltip","label","onClick","e","stopPropagation","draggable","Drag","color","baseRenderLeaf","modifiers","wrappedChildren","getEntries","reduce","currentChildren","modifierEntry","modifier","leaf","renderLeaf","span","attributes","className","baseRenderElement","blocks","isMobile","element","blockMatch","Object","values","find","block","matchNode","paragraph","_Fragment","nodePath","ReactEditor","findPath","isDraggable","renderElement","dragNoop","BlocksContent","placeholder","ariaLabelId","autoFocus","onFocus","onBlur","isExpandedMode","flushPendingFormSync","useIsMobile","blocksRef","useRef","modalElement","handleConversionResult","useConversionModal","FileDropZone","useStrapiApp","state","components","handleMoveBlocks","start","Range","path","key","checkSnippet","textNode","textNodePath","Editor","node","anchor","isEditor","blockMatchingSnippet","snippets","includes","text","handleConvert","delete","distance","unit","reverse","maybeRenderModal","handleEnter","selectedNode","selectedBlock","shiftKey","insertText","handleEnterKey","handleBackspaceEvent","handleBackspaceKey","handleTab","handleShiftTab","handleKeyboardShortcuts","isCtrlOrCmd","metaKey","ctrlKey","forEach","value","isValidEventKey","handleToggle","handleKeyDown","nativeEvent","isComposing","blur","handleScrollSelectionIntoView","current","domRange","toDOMRange","domRect","getBoundingClientRect","editorRect","top","bottom","scrollBy","behavior","content","grow","overflow","fontSize","background","lineHeight","initial","paddingRight","paddingTop","paddingBottom","aria-labelledby","readOnly","decorate","decorateCode","onKeyDown","scrollSelectionIntoView","onDrop","allowedTypes","onDropFiles","createDroppedImagesInserter"],"mappings":"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"}
@@ -15,6 +15,27 @@ const isText = (node)=>{
15
15
  * So we add this normalization for the cases when Slate add text nodes automatically
16
16
  */ editor.normalizeNode = (entry)=>{
17
17
  const [node, path] = entry;
18
+ /**
19
+ * A document with no block leaves nowhere to put the cursor, and every toolbar
20
+ * action and key handler acts on the selection. Deleting every block (e.g.
21
+ * several selected images) gets back the empty paragraph a new document starts with.
22
+ */ if (slate.Editor.isEditor(node) && node.children.length === 0) {
23
+ slate.Transforms.insertNodes(editor, {
24
+ type: 'paragraph',
25
+ children: [
26
+ {
27
+ type: 'text',
28
+ text: ''
29
+ }
30
+ ]
31
+ }, {
32
+ at: [
33
+ 0
34
+ ],
35
+ select: true
36
+ });
37
+ return;
38
+ }
18
39
  if (!slate.Element.isElement(node) && !isText(node)) {
19
40
  slate.Transforms.setNodes(editor, {
20
41
  type: 'text'
@@ -1 +1 @@
1
- {"version":3,"file":"withStrapiSchema.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.ts"],"sourcesContent":["import { type Text, Node, Editor, Element, Transforms } from 'slate';\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * This plugin is used to normalize the Slate document to match the Strapi schema.\n */\nconst withStrapiSchema = (editor: Editor) => {\n const { normalizeNode } = editor;\n\n /**\n * On the strapi schema, we want text nodes to have type: text\n * By default, Slate add text nodes without type: text\n * So we add this normalization for the cases when Slate add text nodes automatically\n */\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n if (!Element.isElement(node) && !isText(node)) {\n Transforms.setNodes(editor, { type: 'text' }, { at: path });\n\n return;\n }\n\n normalizeNode(entry);\n };\n\n return editor;\n};\n\nexport { withStrapiSchema };\n"],"names":["isText","node","Node","isNode","Editor","isEditor","type","withStrapiSchema","editor","normalizeNode","entry","path","Element","isElement","Transforms","setNodes","at"],"mappings":";;;;AAEA,MAAMA,SAAS,CAACC,IAAAA,GAAAA;IACd,OAAOC,UAAAA,CAAKC,MAAM,CAACF,IAAAA,CAAAA,IAAS,CAACG,YAAAA,CAAOC,QAAQ,CAACJ,IAAAA,CAAAA,IAASA,IAAAA,CAAKK,IAAI,KAAK,MAAA;AACtE,CAAA;AAEA;;IAGA,MAAMC,mBAAmB,CAACC,MAAAA,GAAAA;IACxB,MAAM,EAAEC,aAAa,EAAE,GAAGD,MAAAA;AAE1B;;;;MAKAA,MAAAA,CAAOC,aAAa,GAAG,CAACC,KAAAA,GAAAA;QACtB,MAAM,CAACT,IAAAA,EAAMU,IAAAA,CAAK,GAAGD,KAAAA;AAErB,QAAA,IAAI,CAACE,aAAAA,CAAQC,SAAS,CAACZ,IAAAA,CAAAA,IAAS,CAACD,OAAOC,IAAAA,CAAAA,EAAO;YAC7Ca,gBAAAA,CAAWC,QAAQ,CAACP,MAAAA,EAAQ;gBAAEF,IAAAA,EAAM;aAAO,EAAG;gBAAEU,EAAAA,EAAIL;AAAK,aAAA,CAAA;AAEzD,YAAA;AACF,QAAA;QAEAF,aAAAA,CAAcC,KAAAA,CAAAA;AAChB,IAAA,CAAA;IAEA,OAAOF,MAAAA;AACT;;;;"}
1
+ {"version":3,"file":"withStrapiSchema.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.ts"],"sourcesContent":["import { type Text, Node, Editor, Element, Transforms } from 'slate';\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * This plugin is used to normalize the Slate document to match the Strapi schema.\n */\nconst withStrapiSchema = (editor: Editor) => {\n const { normalizeNode } = editor;\n\n /**\n * On the strapi schema, we want text nodes to have type: text\n * By default, Slate add text nodes without type: text\n * So we add this normalization for the cases when Slate add text nodes automatically\n */\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n /**\n * A document with no block leaves nowhere to put the cursor, and every toolbar\n * action and key handler acts on the selection. Deleting every block (e.g.\n * several selected images) gets back the empty paragraph a new document starts with.\n */\n if (Editor.isEditor(node) && node.children.length === 0) {\n Transforms.insertNodes(\n editor,\n { type: 'paragraph', children: [{ type: 'text', text: '' }] },\n { at: [0], select: true }\n );\n\n return;\n }\n\n if (!Element.isElement(node) && !isText(node)) {\n Transforms.setNodes(editor, { type: 'text' }, { at: path });\n\n return;\n }\n\n normalizeNode(entry);\n };\n\n return editor;\n};\n\nexport { withStrapiSchema };\n"],"names":["isText","node","Node","isNode","Editor","isEditor","type","withStrapiSchema","editor","normalizeNode","entry","path","children","length","Transforms","insertNodes","text","at","select","Element","isElement","setNodes"],"mappings":";;;;AAEA,MAAMA,SAAS,CAACC,IAAAA,GAAAA;IACd,OAAOC,UAAAA,CAAKC,MAAM,CAACF,IAAAA,CAAAA,IAAS,CAACG,YAAAA,CAAOC,QAAQ,CAACJ,IAAAA,CAAAA,IAASA,IAAAA,CAAKK,IAAI,KAAK,MAAA;AACtE,CAAA;AAEA;;IAGA,MAAMC,mBAAmB,CAACC,MAAAA,GAAAA;IACxB,MAAM,EAAEC,aAAa,EAAE,GAAGD,MAAAA;AAE1B;;;;MAKAA,MAAAA,CAAOC,aAAa,GAAG,CAACC,KAAAA,GAAAA;QACtB,MAAM,CAACT,IAAAA,EAAMU,IAAAA,CAAK,GAAGD,KAAAA;AAErB;;;;QAKA,IAAIN,YAAAA,CAAOC,QAAQ,CAACJ,IAAAA,CAAAA,IAASA,KAAKW,QAAQ,CAACC,MAAM,KAAK,CAAA,EAAG;YACvDC,gBAAAA,CAAWC,WAAW,CACpBP,MAAAA,EACA;gBAAEF,IAAAA,EAAM,WAAA;gBAAaM,QAAAA,EAAU;AAAC,oBAAA;wBAAEN,IAAAA,EAAM,MAAA;wBAAQU,IAAAA,EAAM;AAAG;AAAE;aAAC,EAC5D;gBAAEC,EAAAA,EAAI;AAAC,oBAAA;AAAE,iBAAA;gBAAEC,MAAAA,EAAQ;AAAK,aAAA,CAAA;AAG1B,YAAA;AACF,QAAA;AAEA,QAAA,IAAI,CAACC,aAAAA,CAAQC,SAAS,CAACnB,IAAAA,CAAAA,IAAS,CAACD,OAAOC,IAAAA,CAAAA,EAAO;YAC7Ca,gBAAAA,CAAWO,QAAQ,CAACb,MAAAA,EAAQ;gBAAEF,IAAAA,EAAM;aAAO,EAAG;gBAAEW,EAAAA,EAAIN;AAAK,aAAA,CAAA;AAEzD,YAAA;AACF,QAAA;QAEAF,aAAAA,CAAcC,KAAAA,CAAAA;AAChB,IAAA,CAAA;IAEA,OAAOF,MAAAA;AACT;;;;"}
@@ -1,4 +1,4 @@
1
- import { Element, Transforms, Node, Editor } from 'slate';
1
+ import { Editor, Transforms, Element, Node } from 'slate';
2
2
 
3
3
  const isText = (node)=>{
4
4
  return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';
@@ -13,6 +13,27 @@ const isText = (node)=>{
13
13
  * So we add this normalization for the cases when Slate add text nodes automatically
14
14
  */ editor.normalizeNode = (entry)=>{
15
15
  const [node, path] = entry;
16
+ /**
17
+ * A document with no block leaves nowhere to put the cursor, and every toolbar
18
+ * action and key handler acts on the selection. Deleting every block (e.g.
19
+ * several selected images) gets back the empty paragraph a new document starts with.
20
+ */ if (Editor.isEditor(node) && node.children.length === 0) {
21
+ Transforms.insertNodes(editor, {
22
+ type: 'paragraph',
23
+ children: [
24
+ {
25
+ type: 'text',
26
+ text: ''
27
+ }
28
+ ]
29
+ }, {
30
+ at: [
31
+ 0
32
+ ],
33
+ select: true
34
+ });
35
+ return;
36
+ }
16
37
  if (!Element.isElement(node) && !isText(node)) {
17
38
  Transforms.setNodes(editor, {
18
39
  type: 'text'
@@ -1 +1 @@
1
- {"version":3,"file":"withStrapiSchema.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.ts"],"sourcesContent":["import { type Text, Node, Editor, Element, Transforms } from 'slate';\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * This plugin is used to normalize the Slate document to match the Strapi schema.\n */\nconst withStrapiSchema = (editor: Editor) => {\n const { normalizeNode } = editor;\n\n /**\n * On the strapi schema, we want text nodes to have type: text\n * By default, Slate add text nodes without type: text\n * So we add this normalization for the cases when Slate add text nodes automatically\n */\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n if (!Element.isElement(node) && !isText(node)) {\n Transforms.setNodes(editor, { type: 'text' }, { at: path });\n\n return;\n }\n\n normalizeNode(entry);\n };\n\n return editor;\n};\n\nexport { withStrapiSchema };\n"],"names":["isText","node","Node","isNode","Editor","isEditor","type","withStrapiSchema","editor","normalizeNode","entry","path","Element","isElement","Transforms","setNodes","at"],"mappings":";;AAEA,MAAMA,SAAS,CAACC,IAAAA,GAAAA;IACd,OAAOC,IAAAA,CAAKC,MAAM,CAACF,IAAAA,CAAAA,IAAS,CAACG,MAAAA,CAAOC,QAAQ,CAACJ,IAAAA,CAAAA,IAASA,IAAAA,CAAKK,IAAI,KAAK,MAAA;AACtE,CAAA;AAEA;;IAGA,MAAMC,mBAAmB,CAACC,MAAAA,GAAAA;IACxB,MAAM,EAAEC,aAAa,EAAE,GAAGD,MAAAA;AAE1B;;;;MAKAA,MAAAA,CAAOC,aAAa,GAAG,CAACC,KAAAA,GAAAA;QACtB,MAAM,CAACT,IAAAA,EAAMU,IAAAA,CAAK,GAAGD,KAAAA;AAErB,QAAA,IAAI,CAACE,OAAAA,CAAQC,SAAS,CAACZ,IAAAA,CAAAA,IAAS,CAACD,OAAOC,IAAAA,CAAAA,EAAO;YAC7Ca,UAAAA,CAAWC,QAAQ,CAACP,MAAAA,EAAQ;gBAAEF,IAAAA,EAAM;aAAO,EAAG;gBAAEU,EAAAA,EAAIL;AAAK,aAAA,CAAA;AAEzD,YAAA;AACF,QAAA;QAEAF,aAAAA,CAAcC,KAAAA,CAAAA;AAChB,IAAA,CAAA;IAEA,OAAOF,MAAAA;AACT;;;;"}
1
+ {"version":3,"file":"withStrapiSchema.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.ts"],"sourcesContent":["import { type Text, Node, Editor, Element, Transforms } from 'slate';\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * This plugin is used to normalize the Slate document to match the Strapi schema.\n */\nconst withStrapiSchema = (editor: Editor) => {\n const { normalizeNode } = editor;\n\n /**\n * On the strapi schema, we want text nodes to have type: text\n * By default, Slate add text nodes without type: text\n * So we add this normalization for the cases when Slate add text nodes automatically\n */\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n /**\n * A document with no block leaves nowhere to put the cursor, and every toolbar\n * action and key handler acts on the selection. Deleting every block (e.g.\n * several selected images) gets back the empty paragraph a new document starts with.\n */\n if (Editor.isEditor(node) && node.children.length === 0) {\n Transforms.insertNodes(\n editor,\n { type: 'paragraph', children: [{ type: 'text', text: '' }] },\n { at: [0], select: true }\n );\n\n return;\n }\n\n if (!Element.isElement(node) && !isText(node)) {\n Transforms.setNodes(editor, { type: 'text' }, { at: path });\n\n return;\n }\n\n normalizeNode(entry);\n };\n\n return editor;\n};\n\nexport { withStrapiSchema };\n"],"names":["isText","node","Node","isNode","Editor","isEditor","type","withStrapiSchema","editor","normalizeNode","entry","path","children","length","Transforms","insertNodes","text","at","select","Element","isElement","setNodes"],"mappings":";;AAEA,MAAMA,SAAS,CAACC,IAAAA,GAAAA;IACd,OAAOC,IAAAA,CAAKC,MAAM,CAACF,IAAAA,CAAAA,IAAS,CAACG,MAAAA,CAAOC,QAAQ,CAACJ,IAAAA,CAAAA,IAASA,IAAAA,CAAKK,IAAI,KAAK,MAAA;AACtE,CAAA;AAEA;;IAGA,MAAMC,mBAAmB,CAACC,MAAAA,GAAAA;IACxB,MAAM,EAAEC,aAAa,EAAE,GAAGD,MAAAA;AAE1B;;;;MAKAA,MAAAA,CAAOC,aAAa,GAAG,CAACC,KAAAA,GAAAA;QACtB,MAAM,CAACT,IAAAA,EAAMU,IAAAA,CAAK,GAAGD,KAAAA;AAErB;;;;QAKA,IAAIN,MAAAA,CAAOC,QAAQ,CAACJ,IAAAA,CAAAA,IAASA,KAAKW,QAAQ,CAACC,MAAM,KAAK,CAAA,EAAG;YACvDC,UAAAA,CAAWC,WAAW,CACpBP,MAAAA,EACA;gBAAEF,IAAAA,EAAM,WAAA;gBAAaM,QAAAA,EAAU;AAAC,oBAAA;wBAAEN,IAAAA,EAAM,MAAA;wBAAQU,IAAAA,EAAM;AAAG;AAAE;aAAC,EAC5D;gBAAEC,EAAAA,EAAI;AAAC,oBAAA;AAAE,iBAAA;gBAAEC,MAAAA,EAAQ;AAAK,aAAA,CAAA;AAG1B,YAAA;AACF,QAAA;AAEA,QAAA,IAAI,CAACC,OAAAA,CAAQC,SAAS,CAACnB,IAAAA,CAAAA,IAAS,CAACD,OAAOC,IAAAA,CAAAA,EAAO;YAC7Ca,UAAAA,CAAWO,QAAQ,CAACb,MAAAA,EAAQ;gBAAEF,IAAAA,EAAM;aAAO,EAAG;gBAAEW,EAAAA,EAAIN;AAAK,aAAA,CAAA;AAEzD,YAAA;AACF,QAAA;QAEAF,aAAAA,CAAcC,KAAAA,CAAAA;AAChB,IAAA,CAAA;IAEA,OAAOF,MAAAA;AACT;;;;"}
@@ -11,18 +11,15 @@ var reactRouterDom = require('react-router-dom');
11
11
  var styledComponents = require('styled-components');
12
12
  var collections = require('../../../../../constants/collections.js');
13
13
  var plugin = require('../../../../../constants/plugin.js');
14
- var api = require('../../../../../utils/api.js');
15
- require('date-fns');
16
- var DocumentStatus = require('../../DocumentStatus.js');
14
+ var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
17
15
  var useDocument = require('../../../../../hooks/useDocument.js');
18
- require('@strapi/admin/strapi-admin/ee');
19
- require('../../../../../preview/pages/Preview.js');
20
- var documents = require('../../../../../services/documents.js');
21
16
  var useDocumentLayout = require('../../../../../hooks/useDocumentLayout.js');
22
- var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
17
+ var documents = require('../../../../../services/documents.js');
18
+ var api = require('../../../../../utils/api.js');
23
19
  var objects = require('../../../../../utils/objects.js');
24
20
  var validation = require('../../../../../utils/validation.js');
25
21
  var DocumentActions = require('../../DocumentActions.js');
22
+ var DocumentStatus = require('../../DocumentStatus.js');
26
23
  var FormLayout = require('../../FormLayout.js');
27
24
  var ComponentContext = require('../ComponentContext.js');
28
25