@strapi/content-manager 5.61.0 → 5.62.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 (260) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +1 -1
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +3 -3
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/features/I18nSharedFieldsLock.js +54 -0
  6. package/dist/admin/features/I18nSharedFieldsLock.js.map +1 -0
  7. package/dist/admin/features/I18nSharedFieldsLock.mjs +31 -0
  8. package/dist/admin/features/I18nSharedFieldsLock.mjs.map +1 -0
  9. package/dist/admin/history/components/VersionInputRenderer.js +7 -2
  10. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  11. package/dist/admin/history/components/VersionInputRenderer.mjs +7 -3
  12. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  13. package/dist/admin/hooks/useContentManagerInitData.js +27 -8
  14. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  15. package/dist/admin/hooks/useContentManagerInitData.mjs +29 -10
  16. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocument.js +11 -13
  18. package/dist/admin/hooks/useDocument.js.map +1 -1
  19. package/dist/admin/hooks/useDocument.mjs +11 -13
  20. package/dist/admin/hooks/useDocument.mjs.map +1 -1
  21. package/dist/admin/hooks/useI18nFieldLock.js +169 -0
  22. package/dist/admin/hooks/useI18nFieldLock.js.map +1 -0
  23. package/dist/admin/hooks/useI18nFieldLock.mjs +140 -0
  24. package/dist/admin/hooks/useI18nFieldLock.mjs.map +1 -0
  25. package/dist/admin/hooks/usePersistentQueryParams.js +16 -3
  26. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  27. package/dist/admin/hooks/usePersistentQueryParams.mjs +16 -3
  28. package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
  29. package/dist/admin/index.js +5 -0
  30. package/dist/admin/index.js.map +1 -1
  31. package/dist/admin/index.mjs +2 -0
  32. package/dist/admin/index.mjs.map +1 -1
  33. package/dist/admin/modules/app.js +8 -1
  34. package/dist/admin/modules/app.js.map +1 -1
  35. package/dist/admin/modules/app.mjs +8 -2
  36. package/dist/admin/modules/app.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/EditViewPage.js +129 -127
  38. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  39. package/dist/admin/pages/EditView/EditViewPage.mjs +129 -127
  40. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/DocumentActions.js +11 -4
  42. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/DocumentActions.mjs +12 -5
  44. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +31 -21
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +32 -22
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.js +98 -0
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.js.map +1 -0
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.mjs +96 -0
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.mjs.map +1 -0
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.js +1103 -0
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.js.map +1 -0
  55. package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.mjs +1077 -0
  56. package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.mjs.map +1 -0
  57. package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.js +211 -0
  58. package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.js.map +1 -0
  59. package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.mjs +183 -0
  60. package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.mjs.map +1 -0
  61. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js +84 -41
  62. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs +86 -43
  64. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +86 -20
  66. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +89 -23
  68. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +5 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +5 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +142 -22
  74. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +143 -23
  76. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.js +402 -0
  78. package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.js.map +1 -0
  79. package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.mjs +389 -0
  80. package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.mjs.map +1 -0
  81. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +84 -33
  82. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +85 -34
  84. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js +5 -1
  86. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs +5 -1
  88. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +17 -4
  90. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +18 -5
  92. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +54 -6
  94. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +54 -6
  96. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +11 -9
  98. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +12 -10
  100. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +9 -4
  102. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +9 -4
  104. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormLayout.js +66 -63
  106. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormLayout.mjs +66 -63
  108. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  109. package/dist/admin/pages/EditView/components/InputRenderer.js +7 -1
  110. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  111. package/dist/admin/pages/EditView/components/InputRenderer.mjs +7 -1
  112. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  113. package/dist/admin/pages/EditView/utils/data.js +14 -9
  114. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  115. package/dist/admin/pages/EditView/utils/data.mjs +14 -9
  116. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  117. package/dist/admin/pages/EditView/utils/forms.js +34 -0
  118. package/dist/admin/pages/EditView/utils/forms.js.map +1 -1
  119. package/dist/admin/pages/EditView/utils/forms.mjs +34 -1
  120. package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -1
  121. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +2 -1
  122. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  123. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +2 -1
  124. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
  125. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +7 -6
  126. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  127. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +7 -6
  128. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -1
  129. package/dist/admin/pages/ListView/ListViewPage.js +11 -2
  130. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  131. package/dist/admin/pages/ListView/ListViewPage.mjs +13 -4
  132. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  133. package/dist/admin/pages/ListView/components/Filters.js +15 -5
  134. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  135. package/dist/admin/pages/ListView/components/Filters.mjs +16 -7
  136. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  137. package/dist/admin/preview/components/InputPopover.js +18 -8
  138. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  139. package/dist/admin/preview/components/InputPopover.mjs +19 -9
  140. package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
  141. package/dist/admin/preview/pages/Preview.js +5 -16
  142. package/dist/admin/preview/pages/Preview.js.map +1 -1
  143. package/dist/admin/preview/pages/Preview.mjs +5 -16
  144. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  145. package/dist/admin/preview/utils/fieldUtils.js +2 -0
  146. package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
  147. package/dist/admin/preview/utils/fieldUtils.mjs +2 -1
  148. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
  149. package/dist/admin/services/api.js +2 -1
  150. package/dist/admin/services/api.js.map +1 -1
  151. package/dist/admin/services/api.mjs +2 -1
  152. package/dist/admin/services/api.mjs.map +1 -1
  153. package/dist/admin/services/documents.js +21 -1
  154. package/dist/admin/services/documents.js.map +1 -1
  155. package/dist/admin/services/documents.mjs +21 -2
  156. package/dist/admin/services/documents.mjs.map +1 -1
  157. package/dist/admin/services/relations.js +47 -1
  158. package/dist/admin/services/relations.js.map +1 -1
  159. package/dist/admin/services/relations.mjs +47 -2
  160. package/dist/admin/services/relations.mjs.map +1 -1
  161. package/dist/admin/src/exports.d.ts +2 -0
  162. package/dist/admin/src/features/I18nSharedFieldsLock.d.ts +22 -0
  163. package/dist/admin/src/history/components/VersionInputRenderer.d.ts +7 -1
  164. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  165. package/dist/admin/src/hooks/useI18nFieldLock.d.ts +61 -0
  166. package/dist/admin/src/modules/app.d.ts +4 -1
  167. package/dist/admin/src/pages/EditView/components/FormInputs/Component/AddComponentMenu.d.ts +15 -0
  168. package/dist/admin/src/pages/EditView/components/FormInputs/Component/ComponentCopyModal.d.ts +58 -0
  169. package/dist/admin/src/pages/EditView/components/FormInputs/Component/CopiedComponents.d.ts +41 -0
  170. package/dist/admin/src/pages/EditView/components/FormInputs/Component/Initializer.d.ts +7 -3
  171. package/dist/admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +1 -1
  172. package/dist/admin/src/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +2 -2
  173. package/dist/admin/src/pages/EditView/components/FormInputs/Component/utils/componentCopy.d.ts +115 -0
  174. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +6 -3
  175. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.d.ts +2 -1
  176. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +5 -1
  177. package/dist/admin/src/pages/EditView/utils/forms.d.ts +13 -2
  178. package/dist/admin/src/pages/ListView/components/Filters.d.ts +12 -3
  179. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  180. package/dist/admin/src/preview/utils/fieldUtils.d.ts +1 -0
  181. package/dist/admin/src/services/api.d.ts +1 -1
  182. package/dist/admin/src/services/components.d.ts +2 -2
  183. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  184. package/dist/admin/src/services/documents.d.ts +25 -21
  185. package/dist/admin/src/services/homepage.d.ts +1 -1
  186. package/dist/admin/src/services/init.d.ts +1 -1
  187. package/dist/admin/src/services/relations.d.ts +5 -3
  188. package/dist/admin/src/services/uid.d.ts +3 -3
  189. package/dist/admin/translations/en.json.js +41 -0
  190. package/dist/admin/translations/en.json.js.map +1 -1
  191. package/dist/admin/translations/en.json.mjs +41 -0
  192. package/dist/admin/translations/en.json.mjs.map +1 -1
  193. package/dist/server/controllers/relations.js +4 -2
  194. package/dist/server/controllers/relations.js.map +1 -1
  195. package/dist/server/controllers/relations.mjs +4 -2
  196. package/dist/server/controllers/relations.mjs.map +1 -1
  197. package/dist/server/controllers/utils/metadata.js +3 -1
  198. package/dist/server/controllers/utils/metadata.js.map +1 -1
  199. package/dist/server/controllers/utils/metadata.mjs +3 -1
  200. package/dist/server/controllers/utils/metadata.mjs.map +1 -1
  201. package/dist/server/history/services/utils.js +3 -1
  202. package/dist/server/history/services/utils.js.map +1 -1
  203. package/dist/server/history/services/utils.mjs +3 -1
  204. package/dist/server/history/services/utils.mjs.map +1 -1
  205. package/dist/server/homepage/services/homepage-query-utils.js +14 -0
  206. package/dist/server/homepage/services/homepage-query-utils.js.map +1 -1
  207. package/dist/server/homepage/services/homepage-query-utils.mjs +14 -1
  208. package/dist/server/homepage/services/homepage-query-utils.mjs.map +1 -1
  209. package/dist/server/homepage/services/homepage.js +1 -1
  210. package/dist/server/homepage/services/homepage.js.map +1 -1
  211. package/dist/server/homepage/services/homepage.mjs +2 -2
  212. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  213. package/dist/server/mcp/sanitizers/shape-relations.js +1 -3
  214. package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -1
  215. package/dist/server/mcp/sanitizers/shape-relations.mjs +1 -3
  216. package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -1
  217. package/dist/server/mcp/schemas/output-schemas.js +2 -1
  218. package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
  219. package/dist/server/mcp/schemas/output-schemas.mjs +2 -1
  220. package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
  221. package/dist/server/services/document-manager.js +3 -2
  222. package/dist/server/services/document-manager.js.map +1 -1
  223. package/dist/server/services/document-manager.mjs +3 -2
  224. package/dist/server/services/document-manager.mjs.map +1 -1
  225. package/dist/server/services/document-metadata.js +92 -4
  226. package/dist/server/services/document-metadata.js.map +1 -1
  227. package/dist/server/services/document-metadata.mjs +92 -4
  228. package/dist/server/services/document-metadata.mjs.map +1 -1
  229. package/dist/server/services/permission-checker.js +20 -8
  230. package/dist/server/services/permission-checker.js.map +1 -1
  231. package/dist/server/services/permission-checker.mjs +20 -8
  232. package/dist/server/services/permission-checker.mjs.map +1 -1
  233. package/dist/server/services/uid.js +2 -1
  234. package/dist/server/services/uid.js.map +1 -1
  235. package/dist/server/services/uid.mjs +2 -1
  236. package/dist/server/services/uid.mjs.map +1 -1
  237. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  238. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  239. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  240. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  241. package/dist/server/src/homepage/services/homepage-query-utils.d.ts +6 -0
  242. package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
  243. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  244. package/dist/server/src/index.d.ts +21 -7
  245. package/dist/server/src/index.d.ts.map +1 -1
  246. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -1
  247. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  248. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  249. package/dist/server/src/services/document-metadata.d.ts +5 -1
  250. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  251. package/dist/server/src/services/index.d.ts +21 -7
  252. package/dist/server/src/services/index.d.ts.map +1 -1
  253. package/dist/server/src/services/permission-checker.d.ts +6 -5
  254. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  255. package/dist/server/src/services/uid.d.ts.map +1 -1
  256. package/dist/shared/contracts/collection-types.d.ts +7 -0
  257. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  258. package/dist/shared/contracts/single-types.d.ts +4 -0
  259. package/dist/shared/contracts/single-types.d.ts.map +1 -1
  260. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"Field.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n createContext,\n InputProps,\n useField,\n useForm,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n 'DynamicZone',\n {\n isInDynamicZone: false,\n }\n);\n\ninterface DynamicZoneProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'>,\n Pick<DynamicZoneLabelProps, 'labelAction'> {\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n attribute,\n disabled: disabledProp,\n hint,\n label,\n labelAction,\n name,\n required = false,\n children,\n}: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [liveText, setLiveText] = React.useState('');\n const [openComponentKey, setOpenComponentKey] = React.useState<string | null>(null);\n\n const {\n currentDocument: { components, isLoading },\n } = useDocumentContext('DynamicZone');\n\n const disabled = disabledProp || isLoading;\n const addFieldRow = useForm('DynamicZone', (state) => state.addFieldRow);\n const removeFieldRow = useForm('DynamicZone', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('DynamicZone', (state) => state.moveFieldRow);\n\n type DzWithTempKey =\n Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n __temp_key__: string;\n };\n\n const { value: rawValue, error } = useField<Array<DzWithTempKey>>(name);\n // `value` can be `null` (for example after closing a relation modal). Match\n // RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n /**\n * Track the previous value array to detect when a new component is added.\n * When the array grows, we find the newly added item and force its accordion open.\n * This mirrors the same pattern used in RepeatableComponent.\n */\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n if (prevValue && prevValue.length < value.length) {\n const prevKeys = new Set(prevValue.map((v) => v.__temp_key__));\n const newItem = value.find((v) => !prevKeys.has(v.__temp_key__));\n if (newItem) {\n setOpenComponentKey(newItem.__temp_key__);\n }\n } else if (openComponentKey !== null) {\n // Component was removed before forceOpen was handled — clear stale key\n const currentKeys = new Set(value.map((v) => v.__temp_key__));\n if (!currentKeys.has(openComponentKey)) {\n setOpenComponentKey(null);\n }\n }\n }, [value, prevValue, openComponentKey]);\n\n const handleForceOpenHandled = React.useCallback(() => {\n setOpenComponentKey(null);\n }, []);\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return attribute.components.reduce<\n NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n >((acc, componentUid) => {\n const componentSchema = components[componentUid];\n\n if (!componentSchema) {\n return acc;\n }\n\n const { category, info } = componentSchema;\n\n const component = {\n uid: componentUid,\n displayName: info.displayName,\n icon: info.icon,\n preview: info.preview,\n };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [attribute.components, components]);\n\n const { formatMessage } = useIntl();\n\n const { toggleNotification } = useNotification();\n\n const dynamicDisplayedComponentsLength = value.length;\n\n const handleAddComponent = React.useCallback(\n (uid: string, position?: number) => {\n const schema = components[uid];\n\n if (!schema) {\n return;\n }\n\n setAddComponentIsOpen(false);\n\n const form = createDefaultForm(schema, components);\n const transformations = flow(transformDocument(schema, components), (data) => ({\n ...data,\n __component: uid,\n }));\n\n const data = transformations(form);\n\n addFieldRow(name, data, position);\n },\n [addFieldRow, components, name]\n );\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponent = React.useCallback(\n (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: `${newIndex + 1} of ${value.length}`,\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n },\n [formatMessage, moveFieldRow, name, value.length]\n );\n\n const handleCancel = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n },\n [formatMessage, name]\n );\n\n const handleGrabItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDropItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleRemoveComponent = React.useCallback(\n (currentIndex: number) => {\n removeFieldRow(name, currentIndex);\n },\n [name, removeFieldRow]\n );\n\n const hasError = error !== undefined;\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicDisplayedComponentsLength > max) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.extra-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n },\n {\n number: dynamicDisplayedComponentsLength - max,\n }\n );\n }\n\n if (hasError && dynamicDisplayedComponentsLength < min) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: min - dynamicDisplayedComponentsLength }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: label || name }\n );\n };\n\n const level = useComponent('DynamicZone', (state) => state.level);\n\n const ariaDescriptionId = React.useId();\n\n return (\n <DynamicZoneProvider isInDynamicZone>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={{ initial: 4, medium: 6 }}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {value.map((field, index) => (\n <ComponentProvider\n key={field.__temp_key__}\n level={level + 1}\n uid={field.__component}\n // id is always a number in a dynamic zone.\n id={field.id as number}\n type=\"dynamiczone\"\n >\n <DynamicComponent\n disabled={disabled}\n name={name}\n index={index}\n componentUid={field.__component}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n totalLength={dynamicDisplayedComponentsLength}\n forceOpen={openComponentKey === field.__temp_key__}\n onForceOpenHandled={handleForceOpenHandled}\n >\n {children}\n </DynamicComponent>\n </ComponentProvider>\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={disabled}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n />\n </Flex>\n </DynamicZoneProvider>\n );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n"],"names":["DynamicZoneProvider","useDynamicZone","createContext","isInDynamicZone","DynamicZone","attribute","disabled","disabledProp","hint","label","labelAction","name","required","children","max","Infinity","min","addComponentIsOpen","setAddComponentIsOpen","React","useState","liveText","setLiveText","openComponentKey","setOpenComponentKey","currentDocument","components","isLoading","useDocumentContext","addFieldRow","useForm","state","removeFieldRow","moveFieldRow","value","rawValue","error","useField","useMemo","Array","isArray","prevValue","usePrev","useEffect","length","prevKeys","Set","map","v","__temp_key__","newItem","find","has","currentKeys","handleForceOpenHandled","useCallback","dynamicComponentsByCategory","reduce","acc","componentUid","componentSchema","category","info","component","uid","displayName","icon","preview","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","flow","transformDocument","data","__component","handleClickOpenPicker","prev","type","message","id","getTranslation","handleMoveComponent","newIndex","currentIndex","defaultMessage","item","handleCancel","index","handleGrabItem","handleDropItem","handleRemoveComponent","hasError","undefined","renderButtonLabel","number","componentName","level","useComponent","ariaDescriptionId","useId","_jsx","_jsxs","Flex","direction","alignItems","gap","initial","medium","Box","DynamicZoneLabel","numberOfComponents","VisuallyHidden","aria-live","ol","aria-describedby","field","ComponentProvider","DynamicComponent","onMoveComponent","onRemoveComponentClick","onCancel","onDropItem","onGrabItem","onAddComponent","totalLength","forceOpen","onForceOpenHandled","justifyContent","AddComponentButton","isDisabled","isOpen","onClick","ComponentPicker","onClickAddComponent"],"mappings":"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"}
1
+ {"version":3,"file":"Field.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n createContext,\n InputProps,\n useField,\n useForm,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { type AnyData, transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentCopyModal } from '../Component/ComponentCopyModal';\nimport { useCopiedComponents } from '../Component/CopiedComponents';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n 'DynamicZone',\n {\n isInDynamicZone: false,\n }\n);\n\ninterface DynamicZoneProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'>,\n Pick<DynamicZoneLabelProps, 'labelAction'> {\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n attribute,\n disabled: disabledProp,\n hint,\n label,\n labelAction,\n name,\n required = false,\n children,\n}: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [componentUidToCopy, setComponentUidToCopy] = React.useState<string | null>(null);\n const [liveText, setLiveText] = React.useState('');\n const [openComponentKey, setOpenComponentKey] = React.useState<string | null>(null);\n // The components copied from another entry are flagged until the form is saved.\n const { isCopied, insertCopies } = useCopiedComponents(name);\n\n const {\n currentDocumentMeta,\n currentDocument: { components, isLoading },\n } = useDocumentContext('DynamicZone');\n const canCopyFromExisting = currentDocumentMeta.collectionType === COLLECTION_TYPES;\n\n const disabled = disabledProp || isLoading;\n const addFieldRow = useForm('DynamicZone', (state) => state.addFieldRow);\n const removeFieldRow = useForm('DynamicZone', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('DynamicZone', (state) => state.moveFieldRow);\n\n type DzWithTempKey =\n Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n __temp_key__: string;\n };\n\n const { value: rawValue, error } = useField<Array<DzWithTempKey>>(name);\n // `value` can be `null` (for example after closing a relation modal). Match\n // RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n /**\n * Track the previous value array to detect when a new component is added.\n * When the array grows, we find the newly added item and force its accordion open.\n * This mirrors the same pattern used in RepeatableComponent.\n */\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n if (prevValue && prevValue.length < value.length) {\n const prevKeys = new Set(prevValue.map((v) => v.__temp_key__));\n const newItems = value.filter((v) => !prevKeys.has(v.__temp_key__));\n\n /**\n * Copied components come in filled: they aren't scrolled into view. Like any new block\n * they open expanded, see `DynamicComponent`.\n */\n if (newItems[0] && !newItems.every((item) => isCopied(item.__temp_key__))) {\n setOpenComponentKey(newItems[0].__temp_key__);\n }\n } else if (openComponentKey !== null) {\n // Component was removed before forceOpen was handled — clear stale key\n const currentKeys = new Set(value.map((v) => v.__temp_key__));\n if (!currentKeys.has(openComponentKey)) {\n setOpenComponentKey(null);\n }\n }\n }, [value, prevValue, openComponentKey, isCopied]);\n\n const handleForceOpenHandled = React.useCallback(() => {\n setOpenComponentKey(null);\n }, []);\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return attribute.components.reduce<\n NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n >((acc, componentUid) => {\n const componentSchema = components[componentUid];\n\n if (!componentSchema) {\n return acc;\n }\n\n const { category, info } = componentSchema;\n\n const component = {\n uid: componentUid,\n displayName: info.displayName,\n icon: info.icon,\n preview: info.preview,\n };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [attribute.components, components]);\n\n const { formatMessage } = useIntl();\n\n const { toggleNotification } = useNotification();\n\n const dynamicDisplayedComponentsLength = value.length;\n\n const handleAddComponent = React.useCallback(\n (uid: string, position?: number) => {\n const schema = components[uid];\n\n if (!schema) {\n return;\n }\n\n setAddComponentIsOpen(false);\n\n const form = createDefaultForm(schema, components);\n const transformations = flow(transformDocument(schema, components), (data) => ({\n ...data,\n __component: uid,\n }));\n\n const data = transformations(form);\n\n addFieldRow(name, data, position);\n },\n [addFieldRow, components, name]\n );\n\n const handleCopyComponents = React.useCallback(\n (items: AnyData[]) => {\n // The modal doesn't let more items than there's room for be selected, this is a safety net.\n if (dynamicDisplayedComponentsLength + items.length > max) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n defaultMessage: 'You have already reached the maximum number of fields',\n }),\n });\n\n return false;\n }\n\n setAddComponentIsOpen(false);\n insertCopies(items);\n\n return true;\n },\n [dynamicDisplayedComponentsLength, formatMessage, insertCopies, max, toggleNotification]\n );\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponent = React.useCallback(\n (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: `${newIndex + 1} of ${value.length}`,\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n },\n [formatMessage, moveFieldRow, name, value.length]\n );\n\n const handleCancel = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n },\n [formatMessage, name]\n );\n\n const handleGrabItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDropItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleRemoveComponent = React.useCallback(\n (currentIndex: number) => {\n removeFieldRow(name, currentIndex);\n },\n [name, removeFieldRow]\n );\n\n const hasError = error !== undefined;\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicDisplayedComponentsLength > max) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.extra-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n },\n {\n number: dynamicDisplayedComponentsLength - max,\n }\n );\n }\n\n if (hasError && dynamicDisplayedComponentsLength < min) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: min - dynamicDisplayedComponentsLength }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: label || name }\n );\n };\n\n const level = useComponent('DynamicZone', (state) => state.level);\n\n const ariaDescriptionId = React.useId();\n\n return (\n <DynamicZoneProvider isInDynamicZone>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={{ initial: 4, medium: 6 }}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {value.map((field, index) => (\n <ComponentProvider\n key={field.__temp_key__}\n level={level + 1}\n uid={field.__component}\n // id is always a number in a dynamic zone.\n id={field.id as number}\n type=\"dynamiczone\"\n >\n <DynamicComponent\n disabled={disabled}\n name={name}\n index={index}\n componentUid={field.__component}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n totalLength={dynamicDisplayedComponentsLength}\n forceOpen={openComponentKey === field.__temp_key__}\n onForceOpenHandled={handleForceOpenHandled}\n isCopied={isCopied(field.__temp_key__)}\n >\n {children}\n </DynamicComponent>\n </ComponentProvider>\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={disabled}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n onClickCopyComponent={canCopyFromExisting ? setComponentUidToCopy : undefined}\n />\n {componentUidToCopy && (\n <ComponentCopyModal\n componentUid={componentUidToCopy}\n fieldLabel={formatMessage({\n id: componentUidToCopy,\n defaultMessage:\n components[componentUidToCopy]?.info.displayName ?? componentUidToCopy,\n })}\n maxSelection={max - dynamicDisplayedComponentsLength}\n mode=\"dynamiczone\"\n onClose={() => setComponentUidToCopy(null)}\n onInsert={handleCopyComponents}\n selection=\"multiple\"\n sourceFieldName={name}\n />\n )}\n </Flex>\n </DynamicZoneProvider>\n );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n"],"names":["DynamicZoneProvider","useDynamicZone","createContext","isInDynamicZone","DynamicZone","attribute","disabled","disabledProp","hint","label","labelAction","name","required","children","max","Infinity","min","addComponentIsOpen","setAddComponentIsOpen","React","useState","componentUidToCopy","setComponentUidToCopy","liveText","setLiveText","openComponentKey","setOpenComponentKey","isCopied","insertCopies","useCopiedComponents","currentDocumentMeta","currentDocument","components","isLoading","useDocumentContext","canCopyFromExisting","collectionType","COLLECTION_TYPES","addFieldRow","useForm","state","removeFieldRow","moveFieldRow","value","rawValue","error","useField","useMemo","Array","isArray","prevValue","usePrev","useEffect","length","prevKeys","Set","map","v","__temp_key__","newItems","filter","has","every","item","currentKeys","handleForceOpenHandled","useCallback","dynamicComponentsByCategory","reduce","acc","componentUid","componentSchema","category","info","component","uid","displayName","icon","preview","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","flow","transformDocument","data","__component","handleCopyComponents","items","type","message","id","getTranslation","defaultMessage","handleClickOpenPicker","prev","handleMoveComponent","newIndex","currentIndex","handleCancel","index","handleGrabItem","handleDropItem","handleRemoveComponent","hasError","undefined","renderButtonLabel","number","componentName","level","useComponent","ariaDescriptionId","useId","_jsx","_jsxs","Flex","direction","alignItems","gap","initial","medium","Box","DynamicZoneLabel","numberOfComponents","VisuallyHidden","aria-live","ol","aria-describedby","field","ComponentProvider","DynamicComponent","onMoveComponent","onRemoveComponentClick","onCancel","onDropItem","onGrabItem","onAddComponent","totalLength","forceOpen","onForceOpenHandled","justifyContent","AddComponentButton","isDisabled","isOpen","onClick","ComponentPicker","onClickAddComponent","onClickCopyComponent","ComponentCopyModal","fieldLabel","maxSelection","mode","onClose","onInsert","selection","sourceFieldName"],"mappings":"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"}
@@ -4,11 +4,14 @@ import { createContext, useForm, useField, useNotification } from '@strapi/admin
4
4
  import { Flex, Box, VisuallyHidden } from '@strapi/design-system';
5
5
  import flow from 'lodash/flow';
6
6
  import { useIntl } from 'react-intl';
7
+ import { COLLECTION_TYPES } from '../../../../../constants/collections.mjs';
7
8
  import { useDocumentContext } from '../../../../../hooks/useDocumentContext.mjs';
8
9
  import { usePrev } from '../../../../../hooks/usePrev.mjs';
9
10
  import { getTranslation } from '../../../../../utils/translations.mjs';
10
11
  import { transformDocument } from '../../../utils/data.mjs';
11
12
  import { createDefaultForm } from '../../../utils/forms.mjs';
13
+ import { ComponentCopyModal } from '../Component/ComponentCopyModal.mjs';
14
+ import { useCopiedComponents } from '../Component/CopiedComponents.mjs';
12
15
  import { useComponent, ComponentProvider } from '../ComponentContext.mjs';
13
16
  import { AddComponentButton } from './AddComponentButton.mjs';
14
17
  import { ComponentPicker } from './ComponentPicker.mjs';
@@ -22,9 +25,13 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
22
25
  // We cannot use the default props here
23
26
  const { max = Infinity, min = -Infinity } = attribute ?? {};
24
27
  const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);
28
+ const [componentUidToCopy, setComponentUidToCopy] = React.useState(null);
25
29
  const [liveText, setLiveText] = React.useState('');
26
30
  const [openComponentKey, setOpenComponentKey] = React.useState(null);
27
- const { currentDocument: { components, isLoading } } = useDocumentContext('DynamicZone');
31
+ // The components copied from another entry are flagged until the form is saved.
32
+ const { isCopied, insertCopies } = useCopiedComponents(name);
33
+ const { currentDocumentMeta, currentDocument: { components, isLoading } } = useDocumentContext('DynamicZone');
34
+ const canCopyFromExisting = currentDocumentMeta.collectionType === COLLECTION_TYPES;
28
35
  const disabled = disabledProp || isLoading;
29
36
  const addFieldRow = useForm('DynamicZone', (state)=>state.addFieldRow);
30
37
  const removeFieldRow = useForm('DynamicZone', (state)=>state.removeFieldRow);
@@ -43,9 +50,12 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
43
50
  React.useEffect(()=>{
44
51
  if (prevValue && prevValue.length < value.length) {
45
52
  const prevKeys = new Set(prevValue.map((v)=>v.__temp_key__));
46
- const newItem = value.find((v)=>!prevKeys.has(v.__temp_key__));
47
- if (newItem) {
48
- setOpenComponentKey(newItem.__temp_key__);
53
+ const newItems = value.filter((v)=>!prevKeys.has(v.__temp_key__));
54
+ /**
55
+ * Copied components come in filled: they aren't scrolled into view. Like any new block
56
+ * they open expanded, see `DynamicComponent`.
57
+ */ if (newItems[0] && !newItems.every((item)=>isCopied(item.__temp_key__))) {
58
+ setOpenComponentKey(newItems[0].__temp_key__);
49
59
  }
50
60
  } else if (openComponentKey !== null) {
51
61
  // Component was removed before forceOpen was handled — clear stale key
@@ -57,7 +67,8 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
57
67
  }, [
58
68
  value,
59
69
  prevValue,
60
- openComponentKey
70
+ openComponentKey,
71
+ isCopied
61
72
  ]);
62
73
  const handleForceOpenHandled = React.useCallback(()=>{
63
74
  setOpenComponentKey(null);
@@ -109,6 +120,28 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
109
120
  components,
110
121
  name
111
122
  ]);
123
+ const handleCopyComponents = React.useCallback((items)=>{
124
+ // The modal doesn't let more items than there's room for be selected, this is a safety net.
125
+ if (dynamicDisplayedComponentsLength + items.length > max) {
126
+ toggleNotification({
127
+ type: 'info',
128
+ message: formatMessage({
129
+ id: getTranslation('components.notification.info.maximum-requirement'),
130
+ defaultMessage: 'You have already reached the maximum number of fields'
131
+ })
132
+ });
133
+ return false;
134
+ }
135
+ setAddComponentIsOpen(false);
136
+ insertCopies(items);
137
+ return true;
138
+ }, [
139
+ dynamicDisplayedComponentsLength,
140
+ formatMessage,
141
+ insertCopies,
142
+ max,
143
+ toggleNotification
144
+ ]);
112
145
  const handleClickOpenPicker = ()=>{
113
146
  if (dynamicDisplayedComponentsLength < max) {
114
147
  setAddComponentIsOpen((prev)=>!prev);
@@ -266,6 +299,7 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
266
299
  totalLength: dynamicDisplayedComponentsLength,
267
300
  forceOpen: openComponentKey === field.__temp_key__,
268
301
  onForceOpenHandled: handleForceOpenHandled,
302
+ isCopied: isCopied(field.__temp_key__),
269
303
  children: children
270
304
  })
271
305
  }, field.__temp_key__))
@@ -285,7 +319,21 @@ const DynamicZone = ({ attribute, disabled: disabledProp, hint, label, labelActi
285
319
  /*#__PURE__*/ jsx(ComponentPicker, {
286
320
  dynamicComponentsByCategory: dynamicComponentsByCategory,
287
321
  isOpen: addComponentIsOpen,
288
- onClickAddComponent: handleAddComponent
322
+ onClickAddComponent: handleAddComponent,
323
+ onClickCopyComponent: canCopyFromExisting ? setComponentUidToCopy : undefined
324
+ }),
325
+ componentUidToCopy && /*#__PURE__*/ jsx(ComponentCopyModal, {
326
+ componentUid: componentUidToCopy,
327
+ fieldLabel: formatMessage({
328
+ id: componentUidToCopy,
329
+ defaultMessage: components[componentUidToCopy]?.info.displayName ?? componentUidToCopy
330
+ }),
331
+ maxSelection: max - dynamicDisplayedComponentsLength,
332
+ mode: "dynamiczone",
333
+ onClose: ()=>setComponentUidToCopy(null),
334
+ onInsert: handleCopyComponents,
335
+ selection: "multiple",
336
+ sourceFieldName: name
289
337
  })
290
338
  ]
291
339
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Field.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n createContext,\n InputProps,\n useField,\n useForm,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n 'DynamicZone',\n {\n isInDynamicZone: false,\n }\n);\n\ninterface DynamicZoneProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'>,\n Pick<DynamicZoneLabelProps, 'labelAction'> {\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n attribute,\n disabled: disabledProp,\n hint,\n label,\n labelAction,\n name,\n required = false,\n children,\n}: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [liveText, setLiveText] = React.useState('');\n const [openComponentKey, setOpenComponentKey] = React.useState<string | null>(null);\n\n const {\n currentDocument: { components, isLoading },\n } = useDocumentContext('DynamicZone');\n\n const disabled = disabledProp || isLoading;\n const addFieldRow = useForm('DynamicZone', (state) => state.addFieldRow);\n const removeFieldRow = useForm('DynamicZone', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('DynamicZone', (state) => state.moveFieldRow);\n\n type DzWithTempKey =\n Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n __temp_key__: string;\n };\n\n const { value: rawValue, error } = useField<Array<DzWithTempKey>>(name);\n // `value` can be `null` (for example after closing a relation modal). Match\n // RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n /**\n * Track the previous value array to detect when a new component is added.\n * When the array grows, we find the newly added item and force its accordion open.\n * This mirrors the same pattern used in RepeatableComponent.\n */\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n if (prevValue && prevValue.length < value.length) {\n const prevKeys = new Set(prevValue.map((v) => v.__temp_key__));\n const newItem = value.find((v) => !prevKeys.has(v.__temp_key__));\n if (newItem) {\n setOpenComponentKey(newItem.__temp_key__);\n }\n } else if (openComponentKey !== null) {\n // Component was removed before forceOpen was handled — clear stale key\n const currentKeys = new Set(value.map((v) => v.__temp_key__));\n if (!currentKeys.has(openComponentKey)) {\n setOpenComponentKey(null);\n }\n }\n }, [value, prevValue, openComponentKey]);\n\n const handleForceOpenHandled = React.useCallback(() => {\n setOpenComponentKey(null);\n }, []);\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return attribute.components.reduce<\n NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n >((acc, componentUid) => {\n const componentSchema = components[componentUid];\n\n if (!componentSchema) {\n return acc;\n }\n\n const { category, info } = componentSchema;\n\n const component = {\n uid: componentUid,\n displayName: info.displayName,\n icon: info.icon,\n preview: info.preview,\n };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [attribute.components, components]);\n\n const { formatMessage } = useIntl();\n\n const { toggleNotification } = useNotification();\n\n const dynamicDisplayedComponentsLength = value.length;\n\n const handleAddComponent = React.useCallback(\n (uid: string, position?: number) => {\n const schema = components[uid];\n\n if (!schema) {\n return;\n }\n\n setAddComponentIsOpen(false);\n\n const form = createDefaultForm(schema, components);\n const transformations = flow(transformDocument(schema, components), (data) => ({\n ...data,\n __component: uid,\n }));\n\n const data = transformations(form);\n\n addFieldRow(name, data, position);\n },\n [addFieldRow, components, name]\n );\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponent = React.useCallback(\n (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: `${newIndex + 1} of ${value.length}`,\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n },\n [formatMessage, moveFieldRow, name, value.length]\n );\n\n const handleCancel = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n },\n [formatMessage, name]\n );\n\n const handleGrabItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDropItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleRemoveComponent = React.useCallback(\n (currentIndex: number) => {\n removeFieldRow(name, currentIndex);\n },\n [name, removeFieldRow]\n );\n\n const hasError = error !== undefined;\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicDisplayedComponentsLength > max) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.extra-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n },\n {\n number: dynamicDisplayedComponentsLength - max,\n }\n );\n }\n\n if (hasError && dynamicDisplayedComponentsLength < min) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: min - dynamicDisplayedComponentsLength }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: label || name }\n );\n };\n\n const level = useComponent('DynamicZone', (state) => state.level);\n\n const ariaDescriptionId = React.useId();\n\n return (\n <DynamicZoneProvider isInDynamicZone>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={{ initial: 4, medium: 6 }}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {value.map((field, index) => (\n <ComponentProvider\n key={field.__temp_key__}\n level={level + 1}\n uid={field.__component}\n // id is always a number in a dynamic zone.\n id={field.id as number}\n type=\"dynamiczone\"\n >\n <DynamicComponent\n disabled={disabled}\n name={name}\n index={index}\n componentUid={field.__component}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n totalLength={dynamicDisplayedComponentsLength}\n forceOpen={openComponentKey === field.__temp_key__}\n onForceOpenHandled={handleForceOpenHandled}\n >\n {children}\n </DynamicComponent>\n </ComponentProvider>\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={disabled}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n />\n </Flex>\n </DynamicZoneProvider>\n );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n"],"names":["DynamicZoneProvider","useDynamicZone","createContext","isInDynamicZone","DynamicZone","attribute","disabled","disabledProp","hint","label","labelAction","name","required","children","max","Infinity","min","addComponentIsOpen","setAddComponentIsOpen","React","useState","liveText","setLiveText","openComponentKey","setOpenComponentKey","currentDocument","components","isLoading","useDocumentContext","addFieldRow","useForm","state","removeFieldRow","moveFieldRow","value","rawValue","error","useField","useMemo","Array","isArray","prevValue","usePrev","useEffect","length","prevKeys","Set","map","v","__temp_key__","newItem","find","has","currentKeys","handleForceOpenHandled","useCallback","dynamicComponentsByCategory","reduce","acc","componentUid","componentSchema","category","info","component","uid","displayName","icon","preview","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","flow","transformDocument","data","__component","handleClickOpenPicker","prev","type","message","id","getTranslation","handleMoveComponent","newIndex","currentIndex","defaultMessage","item","handleCancel","index","handleGrabItem","handleDropItem","handleRemoveComponent","hasError","undefined","renderButtonLabel","number","componentName","level","useComponent","ariaDescriptionId","useId","_jsx","_jsxs","Flex","direction","alignItems","gap","initial","medium","Box","DynamicZoneLabel","numberOfComponents","VisuallyHidden","aria-live","ol","aria-describedby","field","ComponentProvider","DynamicComponent","onMoveComponent","onRemoveComponentClick","onCancel","onDropItem","onGrabItem","onAddComponent","totalLength","forceOpen","onForceOpenHandled","justifyContent","AddComponentButton","isDisabled","isOpen","onClick","ComponentPicker","onClickAddComponent"],"mappings":"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"}
1
+ {"version":3,"file":"Field.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n createContext,\n InputProps,\n useField,\n useForm,\n useNotification,\n} from '@strapi/admin/strapi-admin';\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport flow from 'lodash/flow';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { type EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { type AnyData, transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ComponentCopyModal } from '../Component/ComponentCopyModal';\nimport { useCopiedComponents } from '../Component/CopiedComponents';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentButton } from './AddComponentButton';\nimport { ComponentPicker } from './ComponentPicker';\nimport { DynamicComponent, DynamicComponentProps } from './DynamicComponent';\nimport { DynamicZoneLabel, DynamicZoneLabelProps } from './DynamicZoneLabel';\n\nimport type { InputRendererProps } from '../../InputRenderer';\nimport type { Schema } from '@strapi/types';\n\ninterface DynamicZoneContextValue {\n isInDynamicZone: boolean;\n}\n\nconst [DynamicZoneProvider, useDynamicZone] = createContext<DynamicZoneContextValue>(\n 'DynamicZone',\n {\n isInDynamicZone: false,\n }\n);\n\ninterface DynamicZoneProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'dynamiczone' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'>,\n Pick<DynamicZoneLabelProps, 'labelAction'> {\n children?: (props: InputRendererProps) => React.ReactNode;\n}\n\nconst DynamicZone = ({\n attribute,\n disabled: disabledProp,\n hint,\n label,\n labelAction,\n name,\n required = false,\n children,\n}: DynamicZoneProps) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity } = attribute ?? {};\n\n const [addComponentIsOpen, setAddComponentIsOpen] = React.useState(false);\n const [componentUidToCopy, setComponentUidToCopy] = React.useState<string | null>(null);\n const [liveText, setLiveText] = React.useState('');\n const [openComponentKey, setOpenComponentKey] = React.useState<string | null>(null);\n // The components copied from another entry are flagged until the form is saved.\n const { isCopied, insertCopies } = useCopiedComponents(name);\n\n const {\n currentDocumentMeta,\n currentDocument: { components, isLoading },\n } = useDocumentContext('DynamicZone');\n const canCopyFromExisting = currentDocumentMeta.collectionType === COLLECTION_TYPES;\n\n const disabled = disabledProp || isLoading;\n const addFieldRow = useForm('DynamicZone', (state) => state.addFieldRow);\n const removeFieldRow = useForm('DynamicZone', (state) => state.removeFieldRow);\n const moveFieldRow = useForm('DynamicZone', (state) => state.moveFieldRow);\n\n type DzWithTempKey =\n Schema.Attribute.GetDynamicZoneValue<Schema.Attribute.DynamicZone>[number] & {\n __temp_key__: string;\n };\n\n const { value: rawValue, error } = useField<Array<DzWithTempKey>>(name);\n // `value` can be `null` (for example after closing a relation modal). Match\n // RepeatableComponent: only accept arrays, otherwise treat as empty. (#26815)\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n /**\n * Track the previous value array to detect when a new component is added.\n * When the array grows, we find the newly added item and force its accordion open.\n * This mirrors the same pattern used in RepeatableComponent.\n */\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n if (prevValue && prevValue.length < value.length) {\n const prevKeys = new Set(prevValue.map((v) => v.__temp_key__));\n const newItems = value.filter((v) => !prevKeys.has(v.__temp_key__));\n\n /**\n * Copied components come in filled: they aren't scrolled into view. Like any new block\n * they open expanded, see `DynamicComponent`.\n */\n if (newItems[0] && !newItems.every((item) => isCopied(item.__temp_key__))) {\n setOpenComponentKey(newItems[0].__temp_key__);\n }\n } else if (openComponentKey !== null) {\n // Component was removed before forceOpen was handled — clear stale key\n const currentKeys = new Set(value.map((v) => v.__temp_key__));\n if (!currentKeys.has(openComponentKey)) {\n setOpenComponentKey(null);\n }\n }\n }, [value, prevValue, openComponentKey, isCopied]);\n\n const handleForceOpenHandled = React.useCallback(() => {\n setOpenComponentKey(null);\n }, []);\n\n const dynamicComponentsByCategory = React.useMemo(() => {\n return attribute.components.reduce<\n NonNullable<DynamicComponentProps['dynamicComponentsByCategory']>\n >((acc, componentUid) => {\n const componentSchema = components[componentUid];\n\n if (!componentSchema) {\n return acc;\n }\n\n const { category, info } = componentSchema;\n\n const component = {\n uid: componentUid,\n displayName: info.displayName,\n icon: info.icon,\n preview: info.preview,\n };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [attribute.components, components]);\n\n const { formatMessage } = useIntl();\n\n const { toggleNotification } = useNotification();\n\n const dynamicDisplayedComponentsLength = value.length;\n\n const handleAddComponent = React.useCallback(\n (uid: string, position?: number) => {\n const schema = components[uid];\n\n if (!schema) {\n return;\n }\n\n setAddComponentIsOpen(false);\n\n const form = createDefaultForm(schema, components);\n const transformations = flow(transformDocument(schema, components), (data) => ({\n ...data,\n __component: uid,\n }));\n\n const data = transformations(form);\n\n addFieldRow(name, data, position);\n },\n [addFieldRow, components, name]\n );\n\n const handleCopyComponents = React.useCallback(\n (items: AnyData[]) => {\n // The modal doesn't let more items than there's room for be selected, this is a safety net.\n if (dynamicDisplayedComponentsLength + items.length > max) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n defaultMessage: 'You have already reached the maximum number of fields',\n }),\n });\n\n return false;\n }\n\n setAddComponentIsOpen(false);\n insertCopies(items);\n\n return true;\n },\n [dynamicDisplayedComponentsLength, formatMessage, insertCopies, max, toggleNotification]\n );\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponent = React.useCallback(\n (newIndex: number, currentIndex: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: `${newIndex + 1} of ${value.length}`,\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n },\n [formatMessage, moveFieldRow, name, value.length]\n );\n\n const handleCancel = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n },\n [formatMessage, name]\n );\n\n const handleGrabItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleDropItem = React.useCallback(\n (index: number) => {\n setLiveText(\n formatMessage(\n {\n id: getTranslation('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: `${index + 1} of ${value.length}`,\n }\n )\n );\n },\n [formatMessage, name, value.length]\n );\n\n const handleRemoveComponent = React.useCallback(\n (currentIndex: number) => {\n removeFieldRow(name, currentIndex);\n },\n [name, removeFieldRow]\n );\n\n const hasError = error !== undefined;\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicDisplayedComponentsLength > max) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.extra-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # extra components} one {is # extra component} other {are # extra components}}',\n },\n {\n number: dynamicDisplayedComponentsLength - max,\n }\n );\n }\n\n if (hasError && dynamicDisplayedComponentsLength < min) {\n return formatMessage(\n {\n id: getTranslation(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: min - dynamicDisplayedComponentsLength }\n );\n }\n\n return formatMessage(\n {\n id: getTranslation('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: label || name }\n );\n };\n\n const level = useComponent('DynamicZone', (state) => state.level);\n\n const ariaDescriptionId = React.useId();\n\n return (\n <DynamicZoneProvider isInDynamicZone>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={{ initial: 4, medium: 6 }}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {value.map((field, index) => (\n <ComponentProvider\n key={field.__temp_key__}\n level={level + 1}\n uid={field.__component}\n // id is always a number in a dynamic zone.\n id={field.id as number}\n type=\"dynamiczone\"\n >\n <DynamicComponent\n disabled={disabled}\n name={name}\n index={index}\n componentUid={field.__component}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n totalLength={dynamicDisplayedComponentsLength}\n forceOpen={openComponentKey === field.__temp_key__}\n onForceOpenHandled={handleForceOpenHandled}\n isCopied={isCopied(field.__temp_key__)}\n >\n {children}\n </DynamicComponent>\n </ComponentProvider>\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={disabled}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n onClickCopyComponent={canCopyFromExisting ? setComponentUidToCopy : undefined}\n />\n {componentUidToCopy && (\n <ComponentCopyModal\n componentUid={componentUidToCopy}\n fieldLabel={formatMessage({\n id: componentUidToCopy,\n defaultMessage:\n components[componentUidToCopy]?.info.displayName ?? componentUidToCopy,\n })}\n maxSelection={max - dynamicDisplayedComponentsLength}\n mode=\"dynamiczone\"\n onClose={() => setComponentUidToCopy(null)}\n onInsert={handleCopyComponents}\n selection=\"multiple\"\n sourceFieldName={name}\n />\n )}\n </Flex>\n </DynamicZoneProvider>\n );\n};\n\nexport { DynamicZone, useDynamicZone };\nexport type { DynamicZoneProps };\n"],"names":["DynamicZoneProvider","useDynamicZone","createContext","isInDynamicZone","DynamicZone","attribute","disabled","disabledProp","hint","label","labelAction","name","required","children","max","Infinity","min","addComponentIsOpen","setAddComponentIsOpen","React","useState","componentUidToCopy","setComponentUidToCopy","liveText","setLiveText","openComponentKey","setOpenComponentKey","isCopied","insertCopies","useCopiedComponents","currentDocumentMeta","currentDocument","components","isLoading","useDocumentContext","canCopyFromExisting","collectionType","COLLECTION_TYPES","addFieldRow","useForm","state","removeFieldRow","moveFieldRow","value","rawValue","error","useField","useMemo","Array","isArray","prevValue","usePrev","useEffect","length","prevKeys","Set","map","v","__temp_key__","newItems","filter","has","every","item","currentKeys","handleForceOpenHandled","useCallback","dynamicComponentsByCategory","reduce","acc","componentUid","componentSchema","category","info","component","uid","displayName","icon","preview","formatMessage","useIntl","toggleNotification","useNotification","dynamicDisplayedComponentsLength","handleAddComponent","position","schema","form","createDefaultForm","transformations","flow","transformDocument","data","__component","handleCopyComponents","items","type","message","id","getTranslation","defaultMessage","handleClickOpenPicker","prev","handleMoveComponent","newIndex","currentIndex","handleCancel","index","handleGrabItem","handleDropItem","handleRemoveComponent","hasError","undefined","renderButtonLabel","number","componentName","level","useComponent","ariaDescriptionId","useId","_jsx","_jsxs","Flex","direction","alignItems","gap","initial","medium","Box","DynamicZoneLabel","numberOfComponents","VisuallyHidden","aria-live","ol","aria-describedby","field","ComponentProvider","DynamicComponent","onMoveComponent","onRemoveComponentClick","onCancel","onDropItem","onGrabItem","onAddComponent","totalLength","forceOpen","onForceOpenHandled","justifyContent","AddComponentButton","isDisabled","isOpen","onClick","ComponentPicker","onClickAddComponent","onClickCopyComponent","ComponentCopyModal","fieldLabel","maxSelection","mode","onClose","onInsert","selection","sourceFieldName"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoCA,MAAM,CAACA,mBAAAA,EAAqBC,cAAAA,CAAe,GAAGC,cAC5C,aAAA,EACA;IACEC,eAAAA,EAAiB;AACnB,CAAA;AAWF,MAAMC,WAAAA,GAAc,CAAC,EACnBC,SAAS,EACTC,QAAAA,EAAUC,YAAY,EACtBC,IAAI,EACJC,KAAK,EACLC,WAAW,EACXC,IAAI,EACJC,WAAW,KAAK,EAChBC,QAAQ,EACS,GAAA;;IAEjB,MAAM,EAAEC,GAAAA,GAAMC,QAAQ,EAAEC,GAAAA,GAAM,CAACD,QAAQ,EAAE,GAAGV,SAAAA,IAAa,EAAC;AAE1D,IAAA,MAAM,CAACY,kBAAAA,EAAoBC,qBAAAA,CAAsB,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AACnE,IAAA,MAAM,CAACC,kBAAAA,EAAoBC,qBAAAA,CAAsB,GAAGH,KAAAA,CAAMC,QAAQ,CAAgB,IAAA,CAAA;AAClF,IAAA,MAAM,CAACG,QAAAA,EAAUC,WAAAA,CAAY,GAAGL,KAAAA,CAAMC,QAAQ,CAAC,EAAA,CAAA;AAC/C,IAAA,MAAM,CAACK,gBAAAA,EAAkBC,mBAAAA,CAAoB,GAAGP,KAAAA,CAAMC,QAAQ,CAAgB,IAAA,CAAA;;AAE9E,IAAA,MAAM,EAAEO,QAAQ,EAAEC,YAAY,EAAE,GAAGC,mBAAAA,CAAoBlB,IAAAA,CAAAA;IAEvD,MAAM,EACJmB,mBAAmB,EACnBC,eAAAA,EAAiB,EAAEC,UAAU,EAAEC,SAAS,EAAE,EAC3C,GAAGC,kBAAAA,CAAmB,aAAA,CAAA;IACvB,MAAMC,mBAAAA,GAAsBL,mBAAAA,CAAoBM,cAAc,KAAKC,gBAAAA;AAEnE,IAAA,MAAM/B,WAAWC,YAAAA,IAAgB0B,SAAAA;AACjC,IAAA,MAAMK,cAAcC,OAAAA,CAAQ,aAAA,EAAe,CAACC,KAAAA,GAAUA,MAAMF,WAAW,CAAA;AACvE,IAAA,MAAMG,iBAAiBF,OAAAA,CAAQ,aAAA,EAAe,CAACC,KAAAA,GAAUA,MAAMC,cAAc,CAAA;AAC7E,IAAA,MAAMC,eAAeH,OAAAA,CAAQ,aAAA,EAAe,CAACC,KAAAA,GAAUA,MAAME,YAAY,CAAA;AAOzE,IAAA,MAAM,EAAEC,KAAAA,EAAOC,QAAQ,EAAEC,KAAK,EAAE,GAAGC,QAAAA,CAA+BnC,IAAAA,CAAAA;;;IAGlE,MAAMgC,KAAAA,GAAQxB,KAAAA,CAAM4B,OAAO,CAAC,IAAOC,KAAAA,CAAMC,OAAO,CAACL,QAAAA,CAAAA,GAAYA,QAAAA,GAAW,EAAE,EAAG;AAACA,QAAAA;AAAS,KAAA,CAAA;AAEvF;;;;MAKA,MAAMM,YAAYC,OAAAA,CAAQR,KAAAA,CAAAA;AAE1BxB,IAAAA,KAAAA,CAAMiC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIF,aAAaA,SAAAA,CAAUG,MAAM,GAAGV,KAAAA,CAAMU,MAAM,EAAE;YAChD,MAAMC,QAAAA,GAAW,IAAIC,GAAAA,CAAIL,SAAAA,CAAUM,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,YAAY,CAAA,CAAA;YAC5D,MAAMC,QAAAA,GAAWhB,KAAAA,CAAMiB,MAAM,CAAC,CAACH,CAAAA,GAAM,CAACH,QAAAA,CAASO,GAAG,CAACJ,CAAAA,CAAEC,YAAY,CAAA,CAAA;AAEjE;;;AAGC,UACD,IAAIC,QAAQ,CAAC,CAAA,CAAE,IAAI,CAACA,QAAAA,CAASG,KAAK,CAAC,CAACC,IAAAA,GAASpC,QAAAA,CAASoC,IAAAA,CAAKL,YAAY,CAAA,CAAA,EAAI;AACzEhC,gBAAAA,mBAAAA,CAAoBiC,QAAQ,CAAC,CAAA,CAAE,CAACD,YAAY,CAAA;AAC9C,YAAA;QACF,CAAA,MAAO,IAAIjC,qBAAqB,IAAA,EAAM;;YAEpC,MAAMuC,WAAAA,GAAc,IAAIT,GAAAA,CAAIZ,KAAAA,CAAMa,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEC,YAAY,CAAA,CAAA;AAC3D,YAAA,IAAI,CAACM,WAAAA,CAAYH,GAAG,CAACpC,gBAAAA,CAAAA,EAAmB;gBACtCC,mBAAAA,CAAoB,IAAA,CAAA;AACtB,YAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACiB,QAAAA,KAAAA;AAAOO,QAAAA,SAAAA;AAAWzB,QAAAA,gBAAAA;AAAkBE,QAAAA;AAAS,KAAA,CAAA;IAEjD,MAAMsC,sBAAAA,GAAyB9C,KAAAA,CAAM+C,WAAW,CAAC,IAAA;QAC/CxC,mBAAAA,CAAoB,IAAA,CAAA;AACtB,IAAA,CAAA,EAAG,EAAE,CAAA;IAEL,MAAMyC,2BAAAA,GAA8BhD,KAAAA,CAAM4B,OAAO,CAAC,IAAA;AAChD,QAAA,OAAO1C,UAAU2B,UAAU,CAACoC,MAAM,CAEhC,CAACC,GAAAA,EAAKC,YAAAA,GAAAA;YACN,MAAMC,eAAAA,GAAkBvC,UAAU,CAACsC,YAAAA,CAAa;AAEhD,YAAA,IAAI,CAACC,eAAAA,EAAiB;gBACpB,OAAOF,GAAAA;AACT,YAAA;AAEA,YAAA,MAAM,EAAEG,QAAQ,EAAEC,IAAI,EAAE,GAAGF,eAAAA;AAE3B,YAAA,MAAMG,SAAAA,GAAY;gBAChBC,GAAAA,EAAKL,YAAAA;AACLM,gBAAAA,WAAAA,EAAaH,KAAKG,WAAW;AAC7BC,gBAAAA,IAAAA,EAAMJ,KAAKI,IAAI;AACfC,gBAAAA,OAAAA,EAASL,KAAKK;AAChB,aAAA;AAEA,YAAA,IAAI,CAACT,GAAG,CAACG,QAAAA,CAAS,EAAE;gBAClBH,GAAG,CAACG,QAAAA,CAAS,GAAG,EAAE;AACpB,YAAA;YAEAH,GAAG,CAACG,SAAS,GAAG;AAAIH,gBAAAA,GAAAA,GAAG,CAACG,QAAAA,CAAS;AAAEE,gBAAAA;AAAU,aAAA;YAE7C,OAAOL,GAAAA;AACT,QAAA,CAAA,EAAG,EAAC,CAAA;IACN,CAAA,EAAG;AAAChE,QAAAA,SAAAA,CAAU2B,UAAU;AAAEA,QAAAA;AAAW,KAAA,CAAA;IAErC,MAAM,EAAE+C,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAE/B,MAAMC,gCAAAA,GAAmCxC,MAAMU,MAAM;AAErD,IAAA,MAAM+B,kBAAAA,GAAqBjE,KAAAA,CAAM+C,WAAW,CAC1C,CAACS,GAAAA,EAAaU,QAAAA,GAAAA;QACZ,MAAMC,MAAAA,GAAStD,UAAU,CAAC2C,GAAAA,CAAI;AAE9B,QAAA,IAAI,CAACW,MAAAA,EAAQ;AACX,YAAA;AACF,QAAA;QAEApE,qBAAAA,CAAsB,KAAA,CAAA;QAEtB,MAAMqE,IAAAA,GAAOC,kBAAkBF,MAAAA,EAAQtD,UAAAA,CAAAA;AACvC,QAAA,MAAMyD,kBAAkBC,IAAAA,CAAKC,iBAAAA,CAAkBL,QAAQtD,UAAAA,CAAAA,EAAa,CAAC4D,QAAU;AAC7E,gBAAA,GAAGA,IAAI;gBACPC,WAAAA,EAAalB;aACf,CAAA,CAAA;AAEA,QAAA,MAAMiB,OAAOH,eAAAA,CAAgBF,IAAAA,CAAAA;AAE7BjD,QAAAA,WAAAA,CAAY3B,MAAMiF,IAAAA,EAAMP,QAAAA,CAAAA;IAC1B,CAAA,EACA;AAAC/C,QAAAA,WAAAA;AAAaN,QAAAA,UAAAA;AAAYrB,QAAAA;AAAK,KAAA,CAAA;AAGjC,IAAA,MAAMmF,oBAAAA,GAAuB3E,KAAAA,CAAM+C,WAAW,CAC5C,CAAC6B,KAAAA,GAAAA;;AAEC,QAAA,IAAIZ,gCAAAA,GAAmCY,KAAAA,CAAM1C,MAAM,GAAGvC,GAAAA,EAAK;YACzDmE,kBAAAA,CAAmB;gBACjBe,IAAAA,EAAM,MAAA;AACNC,gBAAAA,OAAAA,EAASlB,aAAAA,CAAc;AACrBmB,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,kDAAA,CAAA;oBACnBC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;YAEA,OAAO,KAAA;AACT,QAAA;QAEAlF,qBAAAA,CAAsB,KAAA,CAAA;QACtBU,YAAAA,CAAamE,KAAAA,CAAAA;QAEb,OAAO,IAAA;IACT,CAAA,EACA;AAACZ,QAAAA,gCAAAA;AAAkCJ,QAAAA,aAAAA;AAAenD,QAAAA,YAAAA;AAAcd,QAAAA,GAAAA;AAAKmE,QAAAA;AAAmB,KAAA,CAAA;AAG1F,IAAA,MAAMoB,qBAAAA,GAAwB,IAAA;AAC5B,QAAA,IAAIlB,mCAAmCrE,GAAAA,EAAK;YAC1CI,qBAAAA,CAAsB,CAACoF,OAAS,CAACA,IAAAA,CAAAA;QACnC,CAAA,MAAO;YACLrB,kBAAAA,CAAmB;gBACjBe,IAAAA,EAAM,MAAA;AACNC,gBAAAA,OAAAA,EAASlB,aAAAA,CAAc;AACrBmB,oBAAAA,EAAAA,EAAIC,cAAAA,CAAe,kDAAA;AACrB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMI,mBAAAA,GAAsBpF,KAAAA,CAAM+C,WAAW,CAC3C,CAACsC,QAAAA,EAAkBC,YAAAA,GAAAA;AACjBjF,QAAAA,WAAAA,CACEuD,aAAAA,CACE;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,aAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;AACErC,YAAAA,IAAAA,EAAM,CAAA,EAAGpD,IAAAA,CAAK,CAAC,EAAE8F,YAAAA,CAAAA,CAAc;AAC/BpB,YAAAA,QAAAA,EAAU,GAAGmB,QAAAA,GAAW,CAAA,CAAE,IAAI,EAAE7D,KAAAA,CAAMU,MAAM,CAAA;AAC9C,SAAA,CAAA,CAAA;AAIJX,QAAAA,YAAAA,CAAa/B,MAAM8F,YAAAA,EAAcD,QAAAA,CAAAA;IACnC,CAAA,EACA;AAACzB,QAAAA,aAAAA;AAAerC,QAAAA,YAAAA;AAAc/B,QAAAA,IAAAA;AAAMgC,QAAAA,KAAAA,CAAMU;AAAO,KAAA,CAAA;AAGnD,IAAA,MAAMqD,YAAAA,GAAevF,KAAAA,CAAM+C,WAAW,CACpC,CAACyC,KAAAA,GAAAA;AACCnF,QAAAA,WAAAA,CACEuD,aAAAA,CACE;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,iBAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;AACErC,YAAAA,IAAAA,EAAM,CAAA,EAAGpD,IAAAA,CAAK,CAAC,EAAEgG,KAAAA,CAAAA;AACnB,SAAA,CAAA,CAAA;IAGN,CAAA,EACA;AAAC5B,QAAAA,aAAAA;AAAepE,QAAAA;AAAK,KAAA,CAAA;AAGvB,IAAA,MAAMiG,cAAAA,GAAiBzF,KAAAA,CAAM+C,WAAW,CACtC,CAACyC,KAAAA,GAAAA;AACCnF,QAAAA,WAAAA,CACEuD,aAAAA,CACE;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,eAAA,CAAA;YACnBC,cAAAA,EAAgB,CAAC,sIAAsI;SACzJ,EACA;AACErC,YAAAA,IAAAA,EAAM,CAAA,EAAGpD,IAAAA,CAAK,CAAC,EAAEgG,KAAAA,CAAAA,CAAO;AACxBtB,YAAAA,QAAAA,EAAU,GAAGsB,KAAAA,GAAQ,CAAA,CAAE,IAAI,EAAEhE,KAAAA,CAAMU,MAAM,CAAA;AAC3C,SAAA,CAAA,CAAA;IAGN,CAAA,EACA;AAAC0B,QAAAA,aAAAA;AAAepE,QAAAA,IAAAA;AAAMgC,QAAAA,KAAAA,CAAMU;AAAO,KAAA,CAAA;AAGrC,IAAA,MAAMwD,cAAAA,GAAiB1F,KAAAA,CAAM+C,WAAW,CACtC,CAACyC,KAAAA,GAAAA;AACCnF,QAAAA,WAAAA,CACEuD,aAAAA,CACE;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,eAAA,CAAA;YACnBC,cAAAA,EAAgB,CAAC,oDAAoD;SACvE,EACA;AACErC,YAAAA,IAAAA,EAAM,CAAA,EAAGpD,IAAAA,CAAK,CAAC,EAAEgG,KAAAA,CAAAA,CAAO;AACxBtB,YAAAA,QAAAA,EAAU,GAAGsB,KAAAA,GAAQ,CAAA,CAAE,IAAI,EAAEhE,KAAAA,CAAMU,MAAM,CAAA;AAC3C,SAAA,CAAA,CAAA;IAGN,CAAA,EACA;AAAC0B,QAAAA,aAAAA;AAAepE,QAAAA,IAAAA;AAAMgC,QAAAA,KAAAA,CAAMU;AAAO,KAAA,CAAA;AAGrC,IAAA,MAAMyD,qBAAAA,GAAwB3F,KAAAA,CAAM+C,WAAW,CAC7C,CAACuC,YAAAA,GAAAA;AACChE,QAAAA,cAAAA,CAAe9B,IAAAA,EAAM8F,YAAAA,CAAAA;IACvB,CAAA,EACA;AAAC9F,QAAAA,IAAAA;AAAM8B,QAAAA;AAAe,KAAA,CAAA;AAGxB,IAAA,MAAMsE,WAAWlE,KAAAA,KAAUmE,SAAAA;AAE3B,IAAA,MAAMC,iBAAAA,GAAoB,IAAA;AACxB,QAAA,IAAIhG,kBAAAA,EAAoB;AACtB,YAAA,OAAO8D,aAAAA,CAAc;gBAAEmB,EAAAA,EAAI,uBAAA;gBAAyBE,cAAAA,EAAgB;AAAQ,aAAA,CAAA;AAC9E,QAAA;QAEA,IAAIW,QAAAA,IAAY5B,mCAAmCrE,GAAAA,EAAK;AACtD,YAAA,OAAOiE,aAAAA,CACL;gBACEmB,EAAAA,EAAIC,cAAAA,CAAe,CAAC,uCAAuC,CAAC,CAAA;gBAC5DC,cAAAA,EACE;aACJ,EACA;AACEc,gBAAAA,MAAAA,EAAQ/B,gCAAAA,GAAmCrE;AAC7C,aAAA,CAAA;AAEJ,QAAA;QAEA,IAAIiG,QAAAA,IAAY5B,mCAAmCnE,GAAAA,EAAK;AACtD,YAAA,OAAO+D,aAAAA,CACL;gBACEmB,EAAAA,EAAIC,cAAAA,CAAe,CAAC,yCAAyC,CAAC,CAAA;gBAC9DC,cAAAA,EACE;aACJ,EACA;AAAEc,gBAAAA,MAAAA,EAAQlG,GAAAA,GAAMmE;AAAiC,aAAA,CAAA;AAErD,QAAA;AAEA,QAAA,OAAOJ,aAAAA,CACL;AACEmB,YAAAA,EAAAA,EAAIC,cAAAA,CAAe,sCAAA,CAAA;YACnBC,cAAAA,EAAgB;SAClB,EACA;AAAEe,YAAAA,aAAAA,EAAe1G,KAAAA,IAASE;AAAK,SAAA,CAAA;AAEnC,IAAA,CAAA;AAEA,IAAA,MAAMyG,QAAQC,YAAAA,CAAa,aAAA,EAAe,CAAC7E,KAAAA,GAAUA,MAAM4E,KAAK,CAAA;IAEhE,MAAME,iBAAAA,GAAoBnG,MAAMoG,KAAK,EAAA;AAErC,IAAA,qBACEC,GAAA,CAACxH,mBAAAA,EAAAA;QAAoBG,eAAe,EAAA,IAAA;AAClC,QAAA,QAAA,gBAAAsH,IAAA,CAACC,IAAAA,EAAAA;YAAKC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,SAAA;YAAUC,GAAAA,EAAK;gBAAEC,OAAAA,EAAS,CAAA;gBAAGC,MAAAA,EAAQ;AAAE,aAAA;;AACxE5C,gBAAAA,gCAAAA,GAAmC,mBAClCsC,IAAA,CAACO,GAAAA,EAAAA;;sCACCR,GAAA,CAACS,gBAAAA,EAAAA;4BACCzH,IAAAA,EAAMA,IAAAA;4BACNC,KAAAA,EAAOA,KAAAA;4BACPC,WAAAA,EAAaA,WAAAA;4BACbC,IAAAA,EAAMA,IAAAA;4BACNuH,kBAAAA,EAAoB/C,gCAAAA;4BACpBvE,QAAAA,EAAUA;;sCAEZ4G,GAAA,CAACW,cAAAA,EAAAA;4BAAejC,EAAAA,EAAIoB,iBAAAA;sCACjBvC,aAAAA,CAAc;AACbmB,gCAAAA,EAAAA,EAAIC,cAAAA,CAAe,kBAAA,CAAA;gCACnBC,cAAAA,EAAgB,CAAC,mCAAmC;AACtD,6BAAA;;sCAEFoB,GAAA,CAACW,cAAAA,EAAAA;4BAAeC,WAAAA,EAAU,WAAA;AAAa7G,4BAAAA,QAAAA,EAAAA;;sCACvCiG,GAAA,CAACa,IAAAA,EAAAA;4BAAGC,kBAAAA,EAAkBhB,iBAAAA;AACnB3E,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMa,GAAG,CAAC,CAAC+E,KAAAA,EAAO5B,sBACjBa,GAAA,CAACgB,iBAAAA,EAAAA;AAECpB,oCAAAA,KAAAA,EAAOA,KAAAA,GAAQ,CAAA;AACfzC,oCAAAA,GAAAA,EAAK4D,MAAM1C,WAAW;;AAEtBK,oCAAAA,EAAAA,EAAIqC,MAAMrC,EAAE;oCACZF,IAAAA,EAAK,aAAA;AAEL,oCAAA,QAAA,gBAAAwB,GAAA,CAACiB,wBAAAA,EAAAA;wCACCnI,QAAAA,EAAUA,QAAAA;wCACVK,IAAAA,EAAMA,IAAAA;wCACNgG,KAAAA,EAAOA,KAAAA;AACPrC,wCAAAA,YAAAA,EAAciE,MAAM1C,WAAW;wCAC/B6C,eAAAA,EAAiBnC,mBAAAA;wCACjBoC,sBAAAA,EAAwB7B,qBAAAA;wCACxB8B,QAAAA,EAAUlC,YAAAA;wCACVmC,UAAAA,EAAYhC,cAAAA;wCACZiC,UAAAA,EAAYlC,cAAAA;wCACZmC,cAAAA,EAAgB3D,kBAAAA;wCAChBjB,2BAAAA,EAA6BA,2BAAAA;wCAC7B6E,WAAAA,EAAa7D,gCAAAA;wCACb8D,SAAAA,EAAWxH,gBAAAA,KAAqB8G,MAAM7E,YAAY;wCAClDwF,kBAAAA,EAAoBjF,sBAAAA;wCACpBtC,QAAAA,EAAUA,QAAAA,CAAS4G,MAAM7E,YAAY,CAAA;AAEpC7C,wCAAAA,QAAAA,EAAAA;;AAxBE0H,iCAAAA,EAAAA,KAAAA,CAAM7E,YAAY,CAAA;;;;8BA+BjC8D,GAAA,CAACE,IAAAA,EAAAA;oBAAKyB,cAAAA,EAAe,QAAA;AACnB,oBAAA,QAAA,gBAAA3B,GAAA,CAAC4B,kBAAAA,EAAAA;wBACCrC,QAAAA,EAAUA,QAAAA;wBACVsC,UAAAA,EAAY/I,QAAAA;wBACZgJ,MAAAA,EAAQrI,kBAAAA;wBACRsI,OAAAA,EAASlD,qBAAAA;AAERY,wBAAAA,QAAAA,EAAAA,iBAAAA;;;8BAGLO,GAAA,CAACgC,eAAAA,EAAAA;oBACCrF,2BAAAA,EAA6BA,2BAAAA;oBAC7BmF,MAAAA,EAAQrI,kBAAAA;oBACRwI,mBAAAA,EAAqBrE,kBAAAA;AACrBsE,oBAAAA,oBAAAA,EAAsBvH,sBAAsBb,qBAAAA,GAAwB0F;;AAErE3F,gBAAAA,kBAAAA,kBACCmG,GAAA,CAACmC,kBAAAA,EAAAA;oBACCrF,YAAAA,EAAcjD,kBAAAA;AACduI,oBAAAA,UAAAA,EAAY7E,aAAAA,CAAc;wBACxBmB,EAAAA,EAAI7E,kBAAAA;AACJ+E,wBAAAA,cAAAA,EACEpE,UAAU,CAACX,kBAAAA,CAAmB,EAAEoD,KAAKG,WAAAA,IAAevD;AACxD,qBAAA,CAAA;AACAwI,oBAAAA,YAAAA,EAAc/I,GAAAA,GAAMqE,gCAAAA;oBACpB2E,IAAAA,EAAK,aAAA;AACLC,oBAAAA,OAAAA,EAAS,IAAMzI,qBAAAA,CAAsB,IAAA,CAAA;oBACrC0I,QAAAA,EAAUlE,oBAAAA;oBACVmE,SAAAA,EAAU,UAAA;oBACVC,eAAAA,EAAiBvJ;;;;;AAM7B;;;;"}
@@ -12,6 +12,7 @@ var styledComponents = require('styled-components');
12
12
  var collections = require('../../../../../constants/collections.js');
13
13
  var plugin = require('../../../../../constants/plugin.js');
14
14
  var DocumentRBAC = require('../../../../../features/DocumentRBAC.js');
15
+ var I18nSharedFieldsLock = require('../../../../../features/I18nSharedFieldsLock.js');
15
16
  var useDocument = require('../../../../../hooks/useDocument.js');
16
17
  var useDocumentLayout = require('../../../../../hooks/useDocumentLayout.js');
17
18
  var documents = require('../../../../../services/documents.js');
@@ -442,8 +443,7 @@ const RelationModal = ({ children })=>{
442
443
  marginRight: 1,
443
444
  children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowLeft, {})
444
445
  }),
445
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
446
- tag: "span",
446
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Title, {
447
447
  fontWeight: 600,
448
448
  children: isCreating ? formatMessage({
449
449
  id: 'content-manager.relation.create',
@@ -720,13 +720,15 @@ const StyledRelationLink = styledComponents.styled(reactRouterDom.Link)`
720
720
  return /*#__PURE__*/ jsxRuntime.jsx(DocumentRBAC.DocumentRBAC, {
721
721
  permissions: permissions,
722
722
  model: currentDocumentMeta.model,
723
- children: /*#__PURE__*/ jsxRuntime.jsx(RelationModalFormBody, {
724
- currentDocument: currentDocument,
725
- documentTitle: documentTitle,
726
- hasDraftAndPublished: hasDraftAndPublished,
727
- layout: documentLayoutResponse.edit.layout,
728
- plugins: plugins,
729
- props: props
723
+ children: /*#__PURE__*/ jsxRuntime.jsx(I18nSharedFieldsLock.I18nSharedFieldsLock, {
724
+ children: /*#__PURE__*/ jsxRuntime.jsx(RelationModalFormBody, {
725
+ currentDocument: currentDocument,
726
+ documentTitle: documentTitle,
727
+ hasDraftAndPublished: hasDraftAndPublished,
728
+ layout: documentLayoutResponse.edit.layout,
729
+ plugins: plugins,
730
+ props: props
731
+ })
730
732
  })
731
733
  });
732
734
  };