@strapi/content-manager 5.61.1 → 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
@@ -9,6 +9,7 @@ var reactDndHtml5Backend = require('react-dnd-html5-backend');
9
9
  var reactIntl = require('react-intl');
10
10
  var reactRouterDom = require('react-router-dom');
11
11
  var styledComponents = require('styled-components');
12
+ var collections = require('../../../../../constants/collections.js');
12
13
  var dragAndDrop = require('../../../../../constants/dragAndDrop.js');
13
14
  var useDocumentContext = require('../../../../../hooks/useDocumentContext.js');
14
15
  var useDragAndDrop = require('../../../../../hooks/useDragAndDrop.js');
@@ -19,6 +20,9 @@ var data = require('../../../utils/data.js');
19
20
  var forms = require('../../../utils/forms.js');
20
21
  var FormLayout = require('../../FormLayout.js');
21
22
  var ComponentContext = require('../ComponentContext.js');
23
+ var AddComponentMenu = require('./AddComponentMenu.js');
24
+ var ComponentCopyModal = require('./ComponentCopyModal.js');
25
+ var CopiedComponents = require('./CopiedComponents.js');
22
26
  var Initializer = require('./Initializer.js');
23
27
 
24
28
  function _interopNamespace(e) {
@@ -45,15 +49,16 @@ const DEFAULT_MAIN_FIELD = {
45
49
  name: 'id',
46
50
  type: 'integer'
47
51
  };
48
- const RepeatableComponent = ({ attribute, disabled, name, mainField, children, layout })=>{
52
+ const RepeatableComponent = ({ attribute, disabled, label, name, mainField, children, layout })=>{
49
53
  const { toggleNotification } = strapiAdmin.useNotification();
50
54
  const { formatMessage } = reactIntl.useIntl();
51
55
  const { search: searchString } = reactRouterDom.useLocation();
52
56
  const search = React__namespace.useMemo(()=>new URLSearchParams(searchString), [
53
57
  searchString
54
58
  ]);
55
- const { currentDocument } = useDocumentContext.useDocumentContext('RepeatableComponent');
59
+ const { currentDocument, currentDocumentMeta } = useDocumentContext.useDocumentContext('RepeatableComponent');
56
60
  const components = currentDocument.components;
61
+ const canCopyFromExisting = currentDocumentMeta.collectionType === collections.COLLECTION_TYPES;
57
62
  const { value: rawValue, error, rawError } = strapiAdmin.useField(name);
58
63
  const addFieldRow = strapiAdmin.useForm('RepeatableComponent', (state)=>state.addFieldRow);
59
64
  const moveFieldRow = strapiAdmin.useForm('RepeatableComponent', (state)=>state.moveFieldRow);
@@ -64,6 +69,9 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
64
69
  ]);
65
70
  const [collapseToOpen, setCollapseToOpen] = React__namespace.useState('');
66
71
  const [liveText, setLiveText] = React__namespace.useState('');
72
+ const [isCopyModalOpen, setIsCopyModalOpen] = React__namespace.useState(false);
73
+ // The entries copied from another entry are flagged until the form is saved.
74
+ const { isCopied, insertCopies } = CopiedComponents.useCopiedComponents(name);
67
75
  React__namespace.useEffect(()=>{
68
76
  const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;
69
77
  const hasNestedValue = value && Array.isArray(value) && value.length > 0;
@@ -108,14 +116,22 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
108
116
  ]);
109
117
  const prevValue = usePrev.usePrev(value);
110
118
  React__namespace.useEffect(()=>{
111
- /**
112
- * When we add a new item to the array, we want to open the collapse.
113
- */ if (prevValue && prevValue.length < value.length) {
114
- setCollapseToOpen(value[value.length - 1].__temp_key__);
119
+ if (prevValue && prevValue.length < value.length) {
120
+ const prevKeys = new Set(prevValue.map((item)=>item.__temp_key__));
121
+ const newKeys = value.filter((item)=>!prevKeys.has(item.__temp_key__)).map((item)=>item.__temp_key__);
122
+ /**
123
+ * Copied entries come in filled: they stay collapsed.
124
+ */ if (newKeys.length > 0 && newKeys.every(isCopied)) {
125
+ return;
126
+ }
127
+ /**
128
+ * When we add a new item to the array, we want to open the collapse.
129
+ */ setCollapseToOpen(value[value.length - 1].__temp_key__);
115
130
  }
116
131
  }, [
117
132
  value,
118
- prevValue
133
+ prevValue,
134
+ isCopied
119
135
  ]);
120
136
  React__namespace.useEffect(()=>{
121
137
  if (typeof componentTmpKeyWithFocussedField === 'string') {
@@ -127,6 +143,15 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
127
143
  const toggleCollapses = React__namespace.useCallback(()=>{
128
144
  setCollapseToOpen('');
129
145
  }, []);
146
+ const notifyMaximumReached = ()=>{
147
+ toggleNotification({
148
+ type: 'info',
149
+ message: formatMessage({
150
+ id: translations.getTranslation('components.notification.info.maximum-requirement'),
151
+ defaultMessage: 'You have already reached the maximum number of fields'
152
+ })
153
+ });
154
+ };
130
155
  const handleClick = ()=>{
131
156
  if (value.length < max) {
132
157
  const schema = components[attribute.component];
@@ -135,13 +160,27 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
135
160
  addFieldRow(name, data$1);
136
161
  // setCollapseToOpen(nextTempKey);
137
162
  } else if (value.length >= max) {
138
- toggleNotification({
139
- type: 'info',
140
- message: formatMessage({
141
- id: translations.getTranslation('components.notification.info.maximum-requirement')
142
- })
143
- });
163
+ notifyMaximumReached();
164
+ }
165
+ };
166
+ /**
167
+ * Like adding an empty entry, copying into a full field is refused right away rather than
168
+ * opening a modal where nothing can be inserted.
169
+ */ const handleCopyClick = ()=>{
170
+ if (value.length >= max) {
171
+ notifyMaximumReached();
172
+ return;
173
+ }
174
+ setIsCopyModalOpen(true);
175
+ };
176
+ const handleCopyComponents = (items)=>{
177
+ // The modal doesn't let more items than there's room for be selected, this is a safety net.
178
+ if (value.length + items.length > max) {
179
+ notifyMaximumReached();
180
+ return false;
144
181
  }
182
+ insertCopies(items);
183
+ return true;
145
184
  };
146
185
  const handleMoveComponentField = React__namespace.useCallback((newIndex, currentIndex)=>{
147
186
  setLiveText(formatMessage({
@@ -208,11 +247,27 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
208
247
  ]);
209
248
  const ariaDescriptionId = React__namespace.useId();
210
249
  const level = ComponentContext.useComponent('RepeatableComponent', (state)=>state.level);
250
+ const copyModal = isCopyModalOpen && /*#__PURE__*/ jsxRuntime.jsx(ComponentCopyModal.ComponentCopyModal, {
251
+ componentUid: attribute.component,
252
+ fieldLabel: label,
253
+ maxSelection: max - value.length,
254
+ mode: "component",
255
+ onClose: ()=>setIsCopyModalOpen(false),
256
+ onInsert: handleCopyComponents,
257
+ selection: "multiple",
258
+ sourceFieldName: name
259
+ });
211
260
  if (value.length === 0) {
212
- return /*#__PURE__*/ jsxRuntime.jsx(Initializer.Initializer, {
213
- disabled: disabled,
214
- name: name,
215
- onClick: handleClick
261
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
262
+ children: [
263
+ /*#__PURE__*/ jsxRuntime.jsx(Initializer.Initializer, {
264
+ disabled: disabled,
265
+ name: name,
266
+ onClick: handleClick,
267
+ onCopyClick: canCopyFromExisting ? handleCopyClick : undefined
268
+ }),
269
+ copyModal
270
+ ]
216
271
  });
217
272
  }
218
273
  return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
@@ -260,11 +315,29 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
260
315
  __temp_key__: key,
261
316
  totalLength: value.length,
262
317
  layout: layout,
263
- renderField: children
318
+ renderField: children,
319
+ isCopied: isCopied(key)
264
320
  })
265
321
  }, key);
266
322
  }),
267
- /*#__PURE__*/ jsxRuntime.jsx(TextButtonCustom, {
323
+ canCopyFromExisting ? /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Menu.Root, {
324
+ children: [
325
+ /*#__PURE__*/ jsxRuntime.jsx(AddEntryMenuTrigger, {
326
+ disabled: disabled,
327
+ endIcon: null,
328
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icons.Plus, {}),
329
+ children: formatMessage({
330
+ id: translations.getTranslation('containers.EditView.add.new-entry'),
331
+ defaultMessage: 'Add an entry'
332
+ })
333
+ }),
334
+ /*#__PURE__*/ jsxRuntime.jsx(AddComponentMenu.AddComponentMenuContent, {
335
+ kind: "entry",
336
+ onAddEmpty: handleClick,
337
+ onCopy: handleCopyClick
338
+ })
339
+ ]
340
+ }) : /*#__PURE__*/ jsxRuntime.jsx(TextButtonCustom, {
268
341
  disabled: disabled,
269
342
  onClick: handleClick,
270
343
  startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icons.Plus, {}),
@@ -274,7 +347,8 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
274
347
  })
275
348
  })
276
349
  ]
277
- })
350
+ }),
351
+ copyModal
278
352
  ]
279
353
  });
280
354
  };
@@ -308,7 +382,43 @@ const TextButtonCustom = styledComponents.styled(designSystem.TextButton)`
308
382
  transition: background-color 120ms ${(props)=>props.theme.motion.easings.easeOutQuad};
309
383
  }
310
384
  `;
311
- const RepeatableComponentFields = /*#__PURE__*/ React__namespace.memo(({ attributeComponent, children, layout, nameWithIndex })=>{
385
+ /**
386
+ * Same look as `TextButtonCustom`, as the trigger of the menu offering to add an empty entry or
387
+ * to copy existing content.
388
+ */ const AddEntryMenuTrigger = styledComponents.styled(designSystem.Menu.Trigger)`
389
+ && {
390
+ width: 100%;
391
+ height: auto;
392
+ justify-content: center;
393
+ border: 0;
394
+ border-top: 1px solid ${({ theme })=>theme.colors.neutral200};
395
+ border-radius: 0;
396
+ background: transparent;
397
+ color: ${({ theme })=>theme.colors.primary600};
398
+ padding-inline: ${(props)=>props.theme.spaces[6]};
399
+ padding-block: ${(props)=>props.theme.spaces[3]};
400
+ }
401
+
402
+ &&:not([disabled]):hover,
403
+ &&[data-state='open'] {
404
+ background-color: ${(props)=>props.theme.colors.primary100};
405
+ }
406
+
407
+ &&[disabled] {
408
+ color: ${({ theme })=>theme.colors.neutral600};
409
+ }
410
+
411
+ && span {
412
+ font-weight: 600;
413
+ font-size: 1.4rem;
414
+ line-height: 2.4rem;
415
+ }
416
+
417
+ @media (prefers-reduced-motion: no-preference) {
418
+ transition: background-color 120ms ${(props)=>props.theme.motion.easings.easeOutQuad};
419
+ }
420
+ `;
421
+ const RepeatableComponentFields = /*#__PURE__*/ React__namespace.memo(({ attributeComponent, children, layout, nameWithIndex, disabled })=>{
312
422
  const { formatMessage } = reactIntl.useIntl();
313
423
  return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
314
424
  children: layout.map((row)=>{
@@ -333,6 +443,7 @@ const RepeatableComponentFields = /*#__PURE__*/ React__namespace.memo(({ attribu
333
443
  alignItems: "stretch",
334
444
  children: children({
335
445
  ...field,
446
+ disabled: field.disabled || disabled,
336
447
  size,
337
448
  label: translatedLabel,
338
449
  name: completeFieldName
@@ -344,7 +455,7 @@ const RepeatableComponentFields = /*#__PURE__*/ React__namespace.memo(({ attribu
344
455
  });
345
456
  });
346
457
  RepeatableComponentFields.displayName = 'RepeatableComponentFields';
347
- const Component = ({ attributeComponent, disabled, index, name, mainField = DEFAULT_MAIN_FIELD, layout, onDeleteComponent, renderField, toggleCollapses, __temp_key__, totalLength, onMoveItem, ...dragProps })=>{
458
+ const Component = ({ attributeComponent, disabled, index, isCopied, name, mainField = DEFAULT_MAIN_FIELD, layout, onDeleteComponent, renderField, toggleCollapses, __temp_key__, totalLength, onMoveItem, ...dragProps })=>{
348
459
  const { formatMessage } = reactIntl.useIntl();
349
460
  const isDesktop = strapiAdmin.useIsDesktop();
350
461
  const displayValue = strapiAdmin.useForm('RepeatableComponent', (state)=>{
@@ -403,6 +514,14 @@ const Component = ({ attributeComponent, disabled, index, name, mainField = DEFA
403
514
  }),
404
515
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Accordion.Actions, {
405
516
  children: [
517
+ isCopied && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Badge, {
518
+ variant: "success",
519
+ size: "S",
520
+ children: formatMessage({
521
+ id: translations.getTranslation('components.Component.copied'),
522
+ defaultMessage: 'Copied'
523
+ })
524
+ }),
406
525
  /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
407
526
  disabled: disabled,
408
527
  variant: "ghost",
@@ -481,6 +600,7 @@ const Component = ({ attributeComponent, disabled, index, name, mainField = DEFA
481
600
  attributeComponent: attributeComponent,
482
601
  layout: layout,
483
602
  nameWithIndex: name,
603
+ disabled: disabled,
484
604
  children: renderField
485
605
  })
486
606
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Repeatable.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/Repeatable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useField, useNotification, useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n TextButton,\n VisuallyHidden,\n Accordion,\n IconButton,\n useComposedRefs,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Plus, Drag, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { useDragAndDrop, type UseDragAndDropOptions } from '../../../../../hooks/useDragAndDrop';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { Initializer } from './Initializer';\n\nimport type { ComponentInputProps } from './Input';\nimport type { Schema } from '@strapi/types';\n\nconst DEFAULT_MAIN_FIELD: NonNullable<ComponentProps['mainField']> = {\n name: 'id',\n type: 'integer',\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ntype RepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst RepeatableComponent = ({\n attribute,\n disabled,\n name,\n mainField,\n children,\n layout,\n}: RepeatableComponentProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const search = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const { currentDocument } = useDocumentContext('RepeatableComponent');\n const components = currentDocument.components;\n\n const {\n value: rawValue,\n error,\n rawError,\n } = useField<Schema.Attribute.ComponentValue<`${string}.${string}`, true>>(name);\n const addFieldRow = useForm('RepeatableComponent', (state) => state.addFieldRow);\n const moveFieldRow = useForm('RepeatableComponent', (state) => state.moveFieldRow);\n const removeFieldRow = useForm('RepeatableComponent', (state) => state.removeFieldRow);\n const { max = Infinity } = attribute;\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n const [liveText, setLiveText] = React.useState('');\n\n React.useEffect(() => {\n const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;\n const hasNestedValue = value && Array.isArray(value) && value.length > 0;\n\n if (hasNestedErrors && hasNestedValue) {\n const errorOpenItems = rawError\n .map((_: unknown, idx: number) => {\n return value[idx] ? value[idx].__temp_key__ : null;\n })\n .filter((value) => !!value);\n\n if (errorOpenItems && errorOpenItems.length > 0) {\n setCollapseToOpen((collapseToOpen) => {\n if (!errorOpenItems.includes(collapseToOpen)) {\n return errorOpenItems[0];\n }\n\n return collapseToOpen;\n });\n }\n }\n }, [rawError, value]);\n\n /**\n * Get the temp key of the component that has the field that is currently focussed\n * as defined by the `field` query param. We can then force this specific component\n * to be in its \"open\" state.\n */\n const componentTmpKeyWithFocussedField = React.useMemo(() => {\n if (search.has('field')) {\n const fieldParam = search.get('field');\n\n if (!fieldParam) {\n return undefined;\n }\n\n const [, path] = fieldParam.split(`${name}.`);\n\n if (getIn(value, path, undefined) !== undefined) {\n const [subpath] = path.split('.');\n\n return getIn<\n Schema.Attribute.ComponentValue<`${string}.${string}`, true>[number] & {\n __temp_key__?: string;\n }\n >(value, subpath, undefined)?.__temp_key__;\n }\n }\n\n return undefined;\n }, [search, name, value]);\n\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n /**\n * When we add a new item to the array, we want to open the collapse.\n */\n if (prevValue && prevValue.length < value.length) {\n setCollapseToOpen(value[value.length - 1].__temp_key__);\n }\n }, [value, prevValue]);\n\n React.useEffect(() => {\n if (typeof componentTmpKeyWithFocussedField === 'string') {\n setCollapseToOpen(componentTmpKeyWithFocussedField);\n }\n }, [componentTmpKeyWithFocussedField]);\n\n const toggleCollapses = React.useCallback(() => {\n setCollapseToOpen('');\n }, []);\n\n const handleClick = () => {\n if (value.length < max) {\n const schema = components[attribute.component];\n const form = createDefaultForm(schema, components);\n const data = transformDocument(schema, components)(form);\n\n addFieldRow(name, data);\n // setCollapseToOpen(nextTempKey);\n } else if (value.length >= max) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: getTranslation('components.notification.info.maximum-requirement'),\n }),\n });\n }\n };\n\n const handleMoveComponentField = 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 handleValueChange = (key: string) => {\n setCollapseToOpen(key);\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 handleDeleteComponent = React.useCallback(\n (index: number) => {\n removeFieldRow(name, index);\n toggleCollapses();\n },\n [name, removeFieldRow, toggleCollapses]\n );\n\n const ariaDescriptionId = React.useId();\n\n const level = useComponent('RepeatableComponent', (state) => state.level);\n\n if (value.length === 0) {\n return <Initializer disabled={disabled} name={name} onClick={handleClick} />;\n }\n\n return (\n <Box hasRadius>\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 <AccordionRoot\n $error={error}\n value={collapseToOpen}\n onValueChange={handleValueChange}\n aria-describedby={ariaDescriptionId}\n >\n {value.map((componentValue, index) => {\n const key = componentValue.__temp_key__;\n const id = componentValue.id;\n const nameWithIndex = `${name}.${index}`;\n\n return (\n <ComponentProvider\n key={key}\n // id is always a number in a component\n id={id as number}\n uid={attribute.component}\n level={level + 1}\n type=\"repeatable\"\n >\n <MemoizedComponent\n disabled={disabled}\n name={nameWithIndex}\n attributeComponent={attribute.component}\n index={index}\n mainField={mainField}\n onMoveItem={handleMoveComponentField}\n onDeleteComponent={handleDeleteComponent}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n __temp_key__={key}\n totalLength={value.length}\n layout={layout}\n renderField={children}\n />\n </ComponentProvider>\n );\n })}\n <TextButtonCustom disabled={disabled} onClick={handleClick} startIcon={<Plus />}>\n {formatMessage({\n id: getTranslation('containers.EditView.add.new-entry'),\n defaultMessage: 'Add an entry',\n })}\n </TextButtonCustom>\n </AccordionRoot>\n </Box>\n );\n};\n\nconst AccordionRoot = styled(Accordion.Root)<{ $error?: string }>`\n border: 1px solid\n ${({ theme, $error }) => ($error ? theme.colors.danger600 : theme.colors.neutral200)};\n`;\n\nconst TextButtonCustom = styled(TextButton)`\n width: 100%;\n display: flex;\n justify-content: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral200};\n padding-inline: ${(props) => props.theme.spaces[6]};\n padding-block: ${(props) => props.theme.spaces[3]};\n\n &:not([disabled]) {\n cursor: pointer;\n\n &:hover {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n }\n\n span {\n font-weight: 600;\n font-size: 1.4rem;\n line-height: 2.4rem;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n transition: background-color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};\n }\n`;\n\ninterface RepeatableComponentFieldsProps extends Pick<\n RepeatableComponentProps,\n 'children' | 'layout'\n> {\n attributeComponent: string;\n nameWithIndex: string;\n}\n\nconst RepeatableComponentFields = React.memo(\n ({ attributeComponent, children, layout, nameWithIndex }: RepeatableComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n {layout.map((row) => {\n return (\n <ResponsiveGridRoot gap={4} key={row.map((field) => field.name).join('.')}>\n {row.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${nameWithIndex}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attributeComponent}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({\n ...field,\n size,\n label: translatedLabel,\n name: completeFieldName,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </>\n );\n }\n);\n\nRepeatableComponentFields.displayName = 'RepeatableComponentFields';\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ComponentProps\n extends\n Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel' | 'onMoveItem'>,\n Pick<RepeatableComponentProps, 'mainField' | 'layout'> {\n attributeComponent: string;\n disabled?: boolean;\n index: number;\n name: string;\n onDeleteComponent?: (index: number) => void;\n renderField: RepeatableComponentProps['children'];\n toggleCollapses: () => void;\n __temp_key__: string;\n totalLength: number;\n}\n\nconst Component = ({\n attributeComponent,\n disabled,\n index,\n name,\n mainField = DEFAULT_MAIN_FIELD,\n layout,\n onDeleteComponent,\n renderField,\n toggleCollapses,\n __temp_key__,\n totalLength,\n onMoveItem,\n ...dragProps\n}: ComponentProps) => {\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n const displayValue = useForm<string | undefined>('RepeatableComponent', (state) => {\n return getIn<string>(state.values, [...name.split('.'), mainField.name]);\n });\n const displayedValue = typeof displayValue === 'string' ? displayValue : '';\n\n const accordionRef = React.useRef<HTMLButtonElement>(null!);\n\n /**\n * The last item in the fieldName array will be the index of this component.\n * Drag and drop should be isolated to the parent component so nested repeatable\n * components are not affected by the drag and drop of the parent component in\n * their own re-ordering context.\n */\n const componentKey = name.split('.').slice(0, -1).join('.');\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.COMPONENT}_${componentKey}`,\n index,\n item: {\n index,\n id: __temp_key__,\n displayedValue,\n },\n onStart() {\n // Close all collapses\n toggleCollapses();\n },\n onMoveItem,\n ...dragProps,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedAccordionRefs = useComposedRefs<HTMLButtonElement>(accordionRef, dragRef);\n const composedBoxRefs = useComposedRefs<HTMLDivElement>(\n boxRef as React.RefObject<HTMLDivElement>,\n dropRef\n );\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n const handleDeleteClick = () => {\n onDeleteComponent?.(index);\n };\n\n return (\n <>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Item ref={composedBoxRefs} value={__temp_key__}>\n <Accordion.Header>\n <Accordion.Trigger>{displayValue}</Accordion.Trigger>\n <Accordion.Actions>\n <IconButton\n disabled={disabled}\n variant=\"ghost\"\n onClick={handleDeleteClick}\n label={formatMessage({\n id: getTranslation('containers.Edit.delete'),\n defaultMessage: 'Delete',\n })}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n disabled={disabled}\n ref={composedAccordionRefs}\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n disabled={disabled || !canMoveUp}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onMoveItem) {\n onMoveItem(index - 1, index);\n }\n }}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n disabled={disabled || !canMoveDown}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onMoveItem) {\n onMoveItem(index + 1, index);\n }\n }}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n </Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral100\"\n padding={{ initial: 4, medium: 6 }}\n gap={{ initial: 3, medium: 4 }}\n >\n <RepeatableComponentFields\n attributeComponent={attributeComponent}\n layout={layout}\n nameWithIndex={name}\n >\n {renderField}\n </RepeatableComponentFields>\n </Flex>\n </Accordion.Content>\n </Accordion.Item>\n )}\n </>\n );\n};\n\nconst Preview = () => {\n return <StyledSpan tag=\"span\" padding={6} background=\"primary100\" />;\n};\n\nconst StyledSpan = styled<BoxComponent<'span'>>(Box)`\n display: block;\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n`;\n\nconst MemoizedComponent = React.memo(Component);\nconst MemoizedRepeatableComponent = React.memo(RepeatableComponent);\n\nexport { MemoizedRepeatableComponent as RepeatableComponent };\nexport type { RepeatableComponentProps };\n"],"names":["DEFAULT_MAIN_FIELD","name","type","RepeatableComponent","attribute","disabled","mainField","children","layout","toggleNotification","useNotification","formatMessage","useIntl","search","searchString","useLocation","React","useMemo","URLSearchParams","currentDocument","useDocumentContext","components","value","rawValue","error","rawError","useField","addFieldRow","useForm","state","moveFieldRow","removeFieldRow","max","Infinity","Array","isArray","collapseToOpen","setCollapseToOpen","useState","liveText","setLiveText","useEffect","hasNestedErrors","length","hasNestedValue","errorOpenItems","map","_","idx","__temp_key__","filter","includes","componentTmpKeyWithFocussedField","has","fieldParam","get","undefined","path","split","getIn","subpath","prevValue","usePrev","toggleCollapses","useCallback","handleClick","schema","component","form","createDefaultForm","data","transformDocument","message","id","getTranslation","handleMoveComponentField","newIndex","currentIndex","defaultMessage","item","position","handleValueChange","key","handleCancel","index","handleGrabItem","handleDropItem","handleDeleteComponent","ariaDescriptionId","useId","level","useComponent","_jsx","Initializer","onClick","_jsxs","Box","hasRadius","VisuallyHidden","aria-live","AccordionRoot","$error","onValueChange","aria-describedby","componentValue","nameWithIndex","ComponentProvider","uid","MemoizedComponent","attributeComponent","onMoveItem","onDeleteComponent","onCancel","onDropItem","onGrabItem","totalLength","renderField","TextButtonCustom","startIcon","Plus","styled","Accordion","Root","theme","colors","danger600","neutral200","TextButton","props","spaces","primary100","motion","easings","easeOutQuad","RepeatableComponentFields","memo","_Fragment","row","ResponsiveGridRoot","gap","size","field","completeFieldName","translatedLabel","label","ResponsiveGridItem","col","s","xs","direction","alignItems","join","displayName","Component","dragProps","isDesktop","useIsDesktop","displayValue","values","displayedValue","accordionRef","useRef","componentKey","slice","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","COMPONENT","onStart","getEmptyImage","captureDraggingState","composedAccordionRefs","useComposedRefs","composedBoxRefs","canMoveUp","canMoveDown","handleDeleteClick","Preview","Item","ref","Header","Trigger","Actions","IconButton","variant","Trash","e","stopPropagation","data-handler-id","onKeyDown","Drag","ArrowUp","ArrowDown","Content","Flex","background","padding","initial","medium","StyledSpan","tag","primary500","MemoizedRepeatableComponent"],"mappings":"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"}
1
+ {"version":3,"file":"Repeatable.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/Repeatable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useField, useNotification, useForm, useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Badge,\n Box,\n Flex,\n Menu,\n TextButton,\n VisuallyHidden,\n Accordion,\n IconButton,\n useComposedRefs,\n BoxComponent,\n} from '@strapi/design-system';\nimport { Plus, Drag, Trash, ArrowUp, ArrowDown } from '@strapi/icons';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { ItemTypes } from '../../../../../constants/dragAndDrop';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { useDragAndDrop, type UseDragAndDropOptions } from '../../../../../hooks/useDragAndDrop';\nimport { usePrev } from '../../../../../hooks/usePrev';\nimport { getIn } from '../../../../../utils/objects';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { type AnyData, transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport { AddComponentMenuContent } from './AddComponentMenu';\nimport { ComponentCopyModal } from './ComponentCopyModal';\nimport { useCopiedComponents } from './CopiedComponents';\nimport { Initializer } from './Initializer';\n\nimport type { ComponentInputProps } from './Input';\nimport type { Schema } from '@strapi/types';\n\nconst DEFAULT_MAIN_FIELD: NonNullable<ComponentProps['mainField']> = {\n name: 'id',\n type: 'integer',\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RepeatableComponent\n * -----------------------------------------------------------------------------------------------*/\n\ntype RepeatableComponentProps = Omit<ComponentInputProps, 'required'>;\n\nconst RepeatableComponent = ({\n attribute,\n disabled,\n label,\n name,\n mainField,\n children,\n layout,\n}: RepeatableComponentProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search: searchString } = useLocation();\n const search = React.useMemo(() => new URLSearchParams(searchString), [searchString]);\n const { currentDocument, currentDocumentMeta } = useDocumentContext('RepeatableComponent');\n const components = currentDocument.components;\n const canCopyFromExisting = currentDocumentMeta.collectionType === COLLECTION_TYPES;\n\n const {\n value: rawValue,\n error,\n rawError,\n } = useField<Schema.Attribute.ComponentValue<`${string}.${string}`, true>>(name);\n const addFieldRow = useForm('RepeatableComponent', (state) => state.addFieldRow);\n const moveFieldRow = useForm('RepeatableComponent', (state) => state.moveFieldRow);\n const removeFieldRow = useForm('RepeatableComponent', (state) => state.removeFieldRow);\n const { max = Infinity } = attribute;\n const value = React.useMemo(() => (Array.isArray(rawValue) ? rawValue : []), [rawValue]);\n\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n const [liveText, setLiveText] = React.useState('');\n const [isCopyModalOpen, setIsCopyModalOpen] = React.useState(false);\n // The entries copied from another entry are flagged until the form is saved.\n const { isCopied, insertCopies } = useCopiedComponents(name);\n\n React.useEffect(() => {\n const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;\n const hasNestedValue = value && Array.isArray(value) && value.length > 0;\n\n if (hasNestedErrors && hasNestedValue) {\n const errorOpenItems = rawError\n .map((_: unknown, idx: number) => {\n return value[idx] ? value[idx].__temp_key__ : null;\n })\n .filter((value) => !!value);\n\n if (errorOpenItems && errorOpenItems.length > 0) {\n setCollapseToOpen((collapseToOpen) => {\n if (!errorOpenItems.includes(collapseToOpen)) {\n return errorOpenItems[0];\n }\n\n return collapseToOpen;\n });\n }\n }\n }, [rawError, value]);\n\n /**\n * Get the temp key of the component that has the field that is currently focussed\n * as defined by the `field` query param. We can then force this specific component\n * to be in its \"open\" state.\n */\n const componentTmpKeyWithFocussedField = React.useMemo(() => {\n if (search.has('field')) {\n const fieldParam = search.get('field');\n\n if (!fieldParam) {\n return undefined;\n }\n\n const [, path] = fieldParam.split(`${name}.`);\n\n if (getIn(value, path, undefined) !== undefined) {\n const [subpath] = path.split('.');\n\n return getIn<\n Schema.Attribute.ComponentValue<`${string}.${string}`, true>[number] & {\n __temp_key__?: string;\n }\n >(value, subpath, undefined)?.__temp_key__;\n }\n }\n\n return undefined;\n }, [search, name, value]);\n\n const prevValue = usePrev(value);\n\n React.useEffect(() => {\n if (prevValue && prevValue.length < value.length) {\n const prevKeys = new Set(prevValue.map((item) => item.__temp_key__));\n const newKeys = value\n .filter((item) => !prevKeys.has(item.__temp_key__))\n .map((item) => item.__temp_key__);\n\n /**\n * Copied entries come in filled: they stay collapsed.\n */\n if (newKeys.length > 0 && newKeys.every(isCopied)) {\n return;\n }\n\n /**\n * When we add a new item to the array, we want to open the collapse.\n */\n setCollapseToOpen(value[value.length - 1].__temp_key__);\n }\n }, [value, prevValue, isCopied]);\n\n React.useEffect(() => {\n if (typeof componentTmpKeyWithFocussedField === 'string') {\n setCollapseToOpen(componentTmpKeyWithFocussedField);\n }\n }, [componentTmpKeyWithFocussedField]);\n\n const toggleCollapses = React.useCallback(() => {\n setCollapseToOpen('');\n }, []);\n\n const notifyMaximumReached = () => {\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\n const handleClick = () => {\n if (value.length < max) {\n const schema = components[attribute.component];\n const form = createDefaultForm(schema, components);\n const data = transformDocument(schema, components)(form);\n\n addFieldRow(name, data);\n // setCollapseToOpen(nextTempKey);\n } else if (value.length >= max) {\n notifyMaximumReached();\n }\n };\n\n /**\n * Like adding an empty entry, copying into a full field is refused right away rather than\n * opening a modal where nothing can be inserted.\n */\n const handleCopyClick = () => {\n if (value.length >= max) {\n notifyMaximumReached();\n\n return;\n }\n\n setIsCopyModalOpen(true);\n };\n\n const handleCopyComponents = (items: AnyData[]) => {\n // The modal doesn't let more items than there's room for be selected, this is a safety net.\n if (value.length + items.length > max) {\n notifyMaximumReached();\n\n return false;\n }\n\n insertCopies(items);\n\n return true;\n };\n\n const handleMoveComponentField = 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 handleValueChange = (key: string) => {\n setCollapseToOpen(key);\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 handleDeleteComponent = React.useCallback(\n (index: number) => {\n removeFieldRow(name, index);\n toggleCollapses();\n },\n [name, removeFieldRow, toggleCollapses]\n );\n\n const ariaDescriptionId = React.useId();\n\n const level = useComponent('RepeatableComponent', (state) => state.level);\n\n const copyModal = isCopyModalOpen && (\n <ComponentCopyModal\n componentUid={attribute.component}\n fieldLabel={label}\n maxSelection={max - value.length}\n mode=\"component\"\n onClose={() => setIsCopyModalOpen(false)}\n onInsert={handleCopyComponents}\n selection=\"multiple\"\n sourceFieldName={name}\n />\n );\n\n if (value.length === 0) {\n return (\n <>\n <Initializer\n disabled={disabled}\n name={name}\n onClick={handleClick}\n onCopyClick={canCopyFromExisting ? handleCopyClick : undefined}\n />\n {copyModal}\n </>\n );\n }\n\n return (\n <Box hasRadius>\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 <AccordionRoot\n $error={error}\n value={collapseToOpen}\n onValueChange={handleValueChange}\n aria-describedby={ariaDescriptionId}\n >\n {value.map((componentValue, index) => {\n const key = componentValue.__temp_key__;\n const id = componentValue.id;\n const nameWithIndex = `${name}.${index}`;\n\n return (\n <ComponentProvider\n key={key}\n // id is always a number in a component\n id={id as number}\n uid={attribute.component}\n level={level + 1}\n type=\"repeatable\"\n >\n <MemoizedComponent\n disabled={disabled}\n name={nameWithIndex}\n attributeComponent={attribute.component}\n index={index}\n mainField={mainField}\n onMoveItem={handleMoveComponentField}\n onDeleteComponent={handleDeleteComponent}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n __temp_key__={key}\n totalLength={value.length}\n layout={layout}\n renderField={children}\n isCopied={isCopied(key)}\n />\n </ComponentProvider>\n );\n })}\n {canCopyFromExisting ? (\n <Menu.Root>\n <AddEntryMenuTrigger disabled={disabled} endIcon={null} startIcon={<Plus />}>\n {formatMessage({\n id: getTranslation('containers.EditView.add.new-entry'),\n defaultMessage: 'Add an entry',\n })}\n </AddEntryMenuTrigger>\n <AddComponentMenuContent\n kind=\"entry\"\n onAddEmpty={handleClick}\n onCopy={handleCopyClick}\n />\n </Menu.Root>\n ) : (\n <TextButtonCustom disabled={disabled} onClick={handleClick} startIcon={<Plus />}>\n {formatMessage({\n id: getTranslation('containers.EditView.add.new-entry'),\n defaultMessage: 'Add an entry',\n })}\n </TextButtonCustom>\n )}\n </AccordionRoot>\n {copyModal}\n </Box>\n );\n};\n\nconst AccordionRoot = styled(Accordion.Root)<{ $error?: string }>`\n border: 1px solid\n ${({ theme, $error }) => ($error ? theme.colors.danger600 : theme.colors.neutral200)};\n`;\n\nconst TextButtonCustom = styled(TextButton)`\n width: 100%;\n display: flex;\n justify-content: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral200};\n padding-inline: ${(props) => props.theme.spaces[6]};\n padding-block: ${(props) => props.theme.spaces[3]};\n\n &:not([disabled]) {\n cursor: pointer;\n\n &:hover {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n }\n\n span {\n font-weight: 600;\n font-size: 1.4rem;\n line-height: 2.4rem;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n transition: background-color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};\n }\n`;\n\n/**\n * Same look as `TextButtonCustom`, as the trigger of the menu offering to add an empty entry or\n * to copy existing content.\n */\nconst AddEntryMenuTrigger = styled(Menu.Trigger)`\n && {\n width: 100%;\n height: auto;\n justify-content: center;\n border: 0;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: 0;\n background: transparent;\n color: ${({ theme }) => theme.colors.primary600};\n padding-inline: ${(props) => props.theme.spaces[6]};\n padding-block: ${(props) => props.theme.spaces[3]};\n }\n\n &&:not([disabled]):hover,\n &&[data-state='open'] {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n\n &&[disabled] {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n\n && span {\n font-weight: 600;\n font-size: 1.4rem;\n line-height: 2.4rem;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n transition: background-color 120ms ${(props) => props.theme.motion.easings.easeOutQuad};\n }\n`;\n\ninterface RepeatableComponentFieldsProps extends Pick<\n RepeatableComponentProps,\n 'children' | 'layout' | 'disabled'\n> {\n attributeComponent: string;\n nameWithIndex: string;\n}\n\nconst RepeatableComponentFields = React.memo(\n ({\n attributeComponent,\n children,\n layout,\n nameWithIndex,\n disabled,\n }: RepeatableComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n {layout.map((row) => {\n return (\n <ResponsiveGridRoot gap={4} key={row.map((field) => field.name).join('.')}>\n {row.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${nameWithIndex}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attributeComponent}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({\n ...field,\n disabled: field.disabled || disabled,\n size,\n label: translatedLabel,\n name: completeFieldName,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </>\n );\n }\n);\n\nRepeatableComponentFields.displayName = 'RepeatableComponentFields';\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ComponentProps\n extends\n Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel' | 'onMoveItem'>,\n Pick<RepeatableComponentProps, 'mainField' | 'layout'> {\n attributeComponent: string;\n disabled?: boolean;\n index: number;\n /**\n * Whether the entry was copied from another entry and not saved yet.\n */\n isCopied?: boolean;\n name: string;\n onDeleteComponent?: (index: number) => void;\n renderField: RepeatableComponentProps['children'];\n toggleCollapses: () => void;\n __temp_key__: string;\n totalLength: number;\n}\n\nconst Component = ({\n attributeComponent,\n disabled,\n index,\n isCopied,\n name,\n mainField = DEFAULT_MAIN_FIELD,\n layout,\n onDeleteComponent,\n renderField,\n toggleCollapses,\n __temp_key__,\n totalLength,\n onMoveItem,\n ...dragProps\n}: ComponentProps) => {\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n const displayValue = useForm<string | undefined>('RepeatableComponent', (state) => {\n return getIn<string>(state.values, [...name.split('.'), mainField.name]);\n });\n const displayedValue = typeof displayValue === 'string' ? displayValue : '';\n\n const accordionRef = React.useRef<HTMLButtonElement>(null!);\n\n /**\n * The last item in the fieldName array will be the index of this component.\n * Drag and drop should be isolated to the parent component so nested repeatable\n * components are not affected by the drag and drop of the parent component in\n * their own re-ordering context.\n */\n const componentKey = name.split('.').slice(0, -1).join('.');\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!disabled, {\n type: `${ItemTypes.COMPONENT}_${componentKey}`,\n index,\n item: {\n index,\n id: __temp_key__,\n displayedValue,\n },\n onStart() {\n // Close all collapses\n toggleCollapses();\n },\n onMoveItem,\n ...dragProps,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedAccordionRefs = useComposedRefs<HTMLButtonElement>(accordionRef, dragRef);\n const composedBoxRefs = useComposedRefs<HTMLDivElement>(\n boxRef as React.RefObject<HTMLDivElement>,\n dropRef\n );\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\n const handleDeleteClick = () => {\n onDeleteComponent?.(index);\n };\n\n return (\n <>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion.Item ref={composedBoxRefs} value={__temp_key__}>\n <Accordion.Header>\n <Accordion.Trigger>{displayValue}</Accordion.Trigger>\n <Accordion.Actions>\n {isCopied && (\n <Badge variant=\"success\" size=\"S\">\n {formatMessage({\n id: getTranslation('components.Component.copied'),\n defaultMessage: 'Copied',\n })}\n </Badge>\n )}\n <IconButton\n disabled={disabled}\n variant=\"ghost\"\n onClick={handleDeleteClick}\n label={formatMessage({\n id: getTranslation('containers.Edit.delete'),\n defaultMessage: 'Delete',\n })}\n >\n <Trash />\n </IconButton>\n {isDesktop && (\n <IconButton\n disabled={disabled}\n ref={composedAccordionRefs}\n variant=\"ghost\"\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n label={formatMessage({\n id: getTranslation('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n )}\n {!isDesktop && (\n <>\n {canMoveUp && (\n <IconButton\n disabled={disabled || !canMoveUp}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onMoveItem) {\n onMoveItem(index - 1, index);\n }\n }}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-up'),\n defaultMessage: 'Move up',\n })}\n >\n <ArrowUp />\n </IconButton>\n )}\n {canMoveDown && (\n <IconButton\n disabled={disabled || !canMoveDown}\n variant=\"ghost\"\n onClick={(e) => {\n e.stopPropagation();\n if (onMoveItem) {\n onMoveItem(index + 1, index);\n }\n }}\n label={formatMessage({\n id: getTranslation('components.DynamicZone.move-down'),\n defaultMessage: 'Move down',\n })}\n >\n <ArrowDown />\n </IconButton>\n )}\n </>\n )}\n </Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral100\"\n padding={{ initial: 4, medium: 6 }}\n gap={{ initial: 3, medium: 4 }}\n >\n <RepeatableComponentFields\n attributeComponent={attributeComponent}\n layout={layout}\n nameWithIndex={name}\n disabled={disabled}\n >\n {renderField}\n </RepeatableComponentFields>\n </Flex>\n </Accordion.Content>\n </Accordion.Item>\n )}\n </>\n );\n};\n\nconst Preview = () => {\n return <StyledSpan tag=\"span\" padding={6} background=\"primary100\" />;\n};\n\nconst StyledSpan = styled<BoxComponent<'span'>>(Box)`\n display: block;\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n`;\n\nconst MemoizedComponent = React.memo(Component);\nconst MemoizedRepeatableComponent = React.memo(RepeatableComponent);\n\nexport { MemoizedRepeatableComponent as RepeatableComponent };\nexport type { RepeatableComponentProps };\n"],"names":["DEFAULT_MAIN_FIELD","name","type","RepeatableComponent","attribute","disabled","label","mainField","children","layout","toggleNotification","useNotification","formatMessage","useIntl","search","searchString","useLocation","React","useMemo","URLSearchParams","currentDocument","currentDocumentMeta","useDocumentContext","components","canCopyFromExisting","collectionType","COLLECTION_TYPES","value","rawValue","error","rawError","useField","addFieldRow","useForm","state","moveFieldRow","removeFieldRow","max","Infinity","Array","isArray","collapseToOpen","setCollapseToOpen","useState","liveText","setLiveText","isCopyModalOpen","setIsCopyModalOpen","isCopied","insertCopies","useCopiedComponents","useEffect","hasNestedErrors","length","hasNestedValue","errorOpenItems","map","_","idx","__temp_key__","filter","includes","componentTmpKeyWithFocussedField","has","fieldParam","get","undefined","path","split","getIn","subpath","prevValue","usePrev","prevKeys","Set","item","newKeys","every","toggleCollapses","useCallback","notifyMaximumReached","message","id","getTranslation","defaultMessage","handleClick","schema","component","form","createDefaultForm","data","transformDocument","handleCopyClick","handleCopyComponents","items","handleMoveComponentField","newIndex","currentIndex","position","handleValueChange","key","handleCancel","index","handleGrabItem","handleDropItem","handleDeleteComponent","ariaDescriptionId","useId","level","useComponent","copyModal","_jsx","ComponentCopyModal","componentUid","fieldLabel","maxSelection","mode","onClose","onInsert","selection","sourceFieldName","_jsxs","_Fragment","Initializer","onClick","onCopyClick","Box","hasRadius","VisuallyHidden","aria-live","AccordionRoot","$error","onValueChange","aria-describedby","componentValue","nameWithIndex","ComponentProvider","uid","MemoizedComponent","attributeComponent","onMoveItem","onDeleteComponent","onCancel","onDropItem","onGrabItem","totalLength","renderField","Menu","Root","AddEntryMenuTrigger","endIcon","startIcon","Plus","AddComponentMenuContent","kind","onAddEmpty","onCopy","TextButtonCustom","styled","Accordion","theme","colors","danger600","neutral200","TextButton","props","spaces","primary100","motion","easings","easeOutQuad","Trigger","primary600","neutral600","RepeatableComponentFields","memo","row","ResponsiveGridRoot","gap","size","field","completeFieldName","translatedLabel","ResponsiveGridItem","col","s","xs","direction","alignItems","join","displayName","Component","dragProps","isDesktop","useIsDesktop","displayValue","values","displayedValue","accordionRef","useRef","componentKey","slice","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","COMPONENT","onStart","getEmptyImage","captureDraggingState","composedAccordionRefs","useComposedRefs","composedBoxRefs","canMoveUp","canMoveDown","handleDeleteClick","Preview","Item","ref","Header","Actions","Badge","variant","IconButton","Trash","e","stopPropagation","data-handler-id","onKeyDown","Drag","ArrowUp","ArrowDown","Content","Flex","background","padding","initial","medium","StyledSpan","tag","primary500","MemoizedRepeatableComponent"],"mappings":"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"}