@strapi/content-manager 5.33.3 → 5.33.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js +23 -1
  2. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  3. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs +23 -1
  4. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  5. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js +14 -1
  6. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.js.map +1 -1
  7. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs +14 -1
  8. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Image.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +157 -7
  10. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  11. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +154 -5
  12. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +28 -20
  14. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
  15. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +25 -17
  16. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +6 -3
  18. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +7 -4
  20. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +12 -12
  22. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +13 -13
  24. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +2 -2
  26. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +1 -1
  28. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js +4 -8
  30. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs +4 -7
  32. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/types.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -12
  34. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -12
  36. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +48 -1
  38. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +49 -2
  40. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +47 -13
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +49 -15
  44. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +1 -0
  46. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +1 -0
  48. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +10 -1
  50. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +10 -1
  52. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +5 -1
  54. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +5 -1
  56. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/InputRenderer.js +6 -2
  58. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/InputRenderer.mjs +6 -2
  60. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/utils/data.js +22 -0
  62. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  63. package/dist/admin/pages/EditView/utils/data.mjs +22 -1
  64. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  65. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.d.ts +9 -1
  66. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.d.ts +9 -1
  67. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withStrapiSchema.d.ts +1 -1
  68. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/types.d.ts +2 -4
  69. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +2 -1
  70. package/dist/admin/src/pages/EditView/utils/data.d.ts +6 -1
  71. package/package.json +7 -7
  72. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js +0 -17
  73. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.js.map +0 -1
  74. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs +0 -15
  75. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.mjs.map +0 -1
  76. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js +0 -75
  77. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.js.map +0 -1
  78. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs +0 -73
  79. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.mjs.map +0 -1
  80. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +0 -88
  81. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +0 -1
  82. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +0 -84
  83. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +0 -1
  84. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withImages.d.ts +0 -11
  85. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/plugins/withLinks.d.ts +0 -9
  86. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +0 -12
@@ -4,15 +4,11 @@
4
4
  const getEntries = (object)=>Object.entries(object);
5
5
  // Wrap Object.keys to get the correct types
6
6
  const getKeys = (object)=>Object.keys(object);
7
- const isLinkNode = (element)=>{
8
- return element.type === 'link';
9
- };
10
- const isListNode = (element)=>{
11
- return element.type === 'list';
12
- };
7
+ function isNonNullable(value) {
8
+ return value !== null && value !== undefined;
9
+ }
13
10
 
14
11
  exports.getEntries = getEntries;
15
12
  exports.getKeys = getKeys;
16
- exports.isLinkNode = isLinkNode;
17
- exports.isListNode = isListNode;
13
+ exports.isNonNullable = isNonNullable;
18
14
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/types.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\nimport type { Element, Node } from 'slate';\n\ntype Block<T extends Element['type']> = Extract<Node, { type: T }>;\n\n// Wrap Object.entries to get the correct types\nconst getEntries = <T extends object>(object: T) =>\n Object.entries(object) as [keyof T, T[keyof T]][];\n\n// Wrap Object.keys to get the correct types\nconst getKeys = <T extends object>(object: T) => Object.keys(object) as (keyof T)[];\n\nconst isLinkNode = (element: Element): element is Schema.Attribute.LinkInlineNode => {\n return element.type === 'link';\n};\n\nconst isListNode = (element: Element): element is Schema.Attribute.ListBlockNode => {\n return element.type === 'list';\n};\n\nexport { type Block, getEntries, getKeys, isLinkNode, isListNode };\n"],"names":["getEntries","object","Object","entries","getKeys","keys","isLinkNode","element","type","isListNode"],"mappings":";;AAKA;AACA,MAAMA,UAAa,GAAA,CAAmBC,MACpCC,GAAAA,MAAAA,CAAOC,OAAO,CAACF,MAAAA;AAEjB;AACA,MAAMG,OAAU,GAAA,CAAmBH,MAAcC,GAAAA,MAAAA,CAAOG,IAAI,CAACJ,MAAAA;AAE7D,MAAMK,aAAa,CAACC,OAAAA,GAAAA;IAClB,OAAOA,OAAAA,CAAQC,IAAI,KAAK,MAAA;AAC1B;AAEA,MAAMC,aAAa,CAACF,OAAAA,GAAAA;IAClB,OAAOA,OAAAA,CAAQC,IAAI,KAAK,MAAA;AAC1B;;;;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/types.ts"],"sourcesContent":["import type { Element, Node } from 'slate';\n\ntype Block<T extends Element['type']> = Extract<Node, { type: T }>;\n\n// Wrap Object.entries to get the correct types\nconst getEntries = <T extends object>(object: T) =>\n Object.entries(object) as [keyof T, T[keyof T]][];\n\n// Wrap Object.keys to get the correct types\nconst getKeys = <T extends object>(object: T) => Object.keys(object) as (keyof T)[];\n\nfunction isNonNullable<T>(value: T): value is NonNullable<T> {\n return value !== null && value !== undefined;\n}\n\nexport { type Block, getEntries, getKeys, isNonNullable };\n"],"names":["getEntries","object","Object","entries","getKeys","keys","isNonNullable","value","undefined"],"mappings":";;AAIA;AACA,MAAMA,UAAa,GAAA,CAAmBC,MACpCC,GAAAA,MAAAA,CAAOC,OAAO,CAACF,MAAAA;AAEjB;AACA,MAAMG,OAAU,GAAA,CAAmBH,MAAcC,GAAAA,MAAAA,CAAOG,IAAI,CAACJ,MAAAA;AAE7D,SAASK,cAAiBC,KAAQ,EAAA;IAChC,OAAOA,KAAAA,KAAU,QAAQA,KAAUC,KAAAA,SAAAA;AACrC;;;;;;"}
@@ -2,12 +2,9 @@
2
2
  const getEntries = (object)=>Object.entries(object);
3
3
  // Wrap Object.keys to get the correct types
4
4
  const getKeys = (object)=>Object.keys(object);
5
- const isLinkNode = (element)=>{
6
- return element.type === 'link';
7
- };
8
- const isListNode = (element)=>{
9
- return element.type === 'list';
10
- };
5
+ function isNonNullable(value) {
6
+ return value !== null && value !== undefined;
7
+ }
11
8
 
12
- export { getEntries, getKeys, isLinkNode, isListNode };
9
+ export { getEntries, getKeys, isNonNullable };
13
10
  //# sourceMappingURL=types.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/types.ts"],"sourcesContent":["import type { Schema } from '@strapi/types';\nimport type { Element, Node } from 'slate';\n\ntype Block<T extends Element['type']> = Extract<Node, { type: T }>;\n\n// Wrap Object.entries to get the correct types\nconst getEntries = <T extends object>(object: T) =>\n Object.entries(object) as [keyof T, T[keyof T]][];\n\n// Wrap Object.keys to get the correct types\nconst getKeys = <T extends object>(object: T) => Object.keys(object) as (keyof T)[];\n\nconst isLinkNode = (element: Element): element is Schema.Attribute.LinkInlineNode => {\n return element.type === 'link';\n};\n\nconst isListNode = (element: Element): element is Schema.Attribute.ListBlockNode => {\n return element.type === 'list';\n};\n\nexport { type Block, getEntries, getKeys, isLinkNode, isListNode };\n"],"names":["getEntries","object","Object","entries","getKeys","keys","isLinkNode","element","type","isListNode"],"mappings":"AAKA;AACA,MAAMA,UAAa,GAAA,CAAmBC,MACpCC,GAAAA,MAAAA,CAAOC,OAAO,CAACF,MAAAA;AAEjB;AACA,MAAMG,OAAU,GAAA,CAAmBH,MAAcC,GAAAA,MAAAA,CAAOG,IAAI,CAACJ,MAAAA;AAE7D,MAAMK,aAAa,CAACC,OAAAA,GAAAA;IAClB,OAAOA,OAAAA,CAAQC,IAAI,KAAK,MAAA;AAC1B;AAEA,MAAMC,aAAa,CAACF,OAAAA,GAAAA;IAClB,OAAOA,OAAAA,CAAQC,IAAI,KAAK,MAAA;AAC1B;;;;"}
1
+ {"version":3,"file":"types.mjs","sources":["../../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/types.ts"],"sourcesContent":["import type { Element, Node } from 'slate';\n\ntype Block<T extends Element['type']> = Extract<Node, { type: T }>;\n\n// Wrap Object.entries to get the correct types\nconst getEntries = <T extends object>(object: T) =>\n Object.entries(object) as [keyof T, T[keyof T]][];\n\n// Wrap Object.keys to get the correct types\nconst getKeys = <T extends object>(object: T) => Object.keys(object) as (keyof T)[];\n\nfunction isNonNullable<T>(value: T): value is NonNullable<T> {\n return value !== null && value !== undefined;\n}\n\nexport { type Block, getEntries, getKeys, isNonNullable };\n"],"names":["getEntries","object","Object","entries","getKeys","keys","isNonNullable","value","undefined"],"mappings":"AAIA;AACA,MAAMA,UAAa,GAAA,CAAmBC,MACpCC,GAAAA,MAAAA,CAAOC,OAAO,CAACF,MAAAA;AAEjB;AACA,MAAMG,OAAU,GAAA,CAAmBH,MAAcC,GAAAA,MAAAA,CAAOG,IAAI,CAACJ,MAAAA;AAE7D,SAASK,cAAiBC,KAAQ,EAAA;IAChC,OAAOA,KAAAA,KAAU,QAAQA,KAAUC,KAAAA,SAAAA;AACrC;;;;"}
@@ -14,7 +14,7 @@ const NonRepeatableComponent = ({ attribute, name, children, layout })=>{
14
14
  const level = ComponentContext.useComponent('NonRepeatableComponent', (state)=>state.level);
15
15
  const isNested = level > 0;
16
16
  const { currentDocument } = useDocumentContext.useDocumentContext('NonRepeatableComponent');
17
- const rulesEngine = strapiAdmin.createRulesEngine();
17
+ strapiAdmin.createRulesEngine();
18
18
  return /*#__PURE__*/ jsxRuntime.jsx(ComponentContext.ComponentProvider, {
19
19
  id: value?.id,
20
20
  uid: attribute.component,
@@ -33,19 +33,9 @@ const NonRepeatableComponent = ({ attribute, name, children, layout })=>{
33
33
  alignItems: "stretch",
34
34
  gap: 6,
35
35
  children: layout.map((row, index)=>{
36
- const visibleFields = row.filter(({ ...field })=>{
37
- const condition = field.attribute.conditions?.visible;
38
- if (condition) {
39
- return rulesEngine.evaluate(condition, value);
40
- }
41
- return true;
42
- });
43
- if (visibleFields.length === 0) {
44
- return null; // Skip rendering the entire grid row
45
- }
46
36
  return /*#__PURE__*/ jsxRuntime.jsx(FormLayout.ResponsiveGridRoot, {
47
37
  gap: 4,
48
- children: visibleFields.map(({ size, ...field })=>{
38
+ children: row.map(({ size, ...field })=>{
49
39
  /**
50
40
  * Layouts are built from schemas so they don't understand the complete
51
41
  * schema tree, for components we append the parent name to the field name
@@ -1 +1 @@
1
- {"version":3,"file":"NonRepeatable.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.tsx"],"sourcesContent":["import { useField, createRulesEngine } from '@strapi/admin/strapi-admin';\nimport { Box, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport type { ComponentInputProps } from './Input';\n\ntype NonRepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst NonRepeatableComponent = ({\n attribute,\n name,\n children,\n layout,\n}: NonRepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n const { value } = useField(name);\n const level = useComponent('NonRepeatableComponent', (state) => state.level);\n const isNested = level > 0;\n const { currentDocument } = useDocumentContext('NonRepeatableComponent');\n const rulesEngine = createRulesEngine();\n\n return (\n <ComponentProvider id={value?.id} uid={attribute.component} level={level + 1} type=\"component\">\n <Box\n background={'neutral100'}\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n hasRadius={isNested}\n borderColor={isNested ? 'neutral200' : undefined}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((row, index) => {\n const visibleFields = row.filter(({ ...field }) => {\n const condition = field.attribute.conditions?.visible;\n if (condition) {\n return rulesEngine.evaluate(condition, value);\n }\n\n return true;\n });\n\n if (visibleFields.length === 0) {\n return null; // Skip rendering the entire grid row\n }\n return (\n <ResponsiveGridRoot gap={4} key={index}>\n {visibleFields.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 = `${name}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${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 label: translatedLabel,\n name: completeFieldName,\n document: currentDocument,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n </Box>\n </ComponentProvider>\n );\n};\n\nexport { NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n"],"names":["NonRepeatableComponent","attribute","name","children","layout","formatMessage","useIntl","value","useField","level","useComponent","state","isNested","currentDocument","useDocumentContext","rulesEngine","createRulesEngine","_jsx","ComponentProvider","id","uid","component","type","Box","background","paddingLeft","paddingRight","paddingTop","paddingBottom","hasRadius","borderColor","undefined","Flex","direction","alignItems","gap","map","row","index","visibleFields","filter","field","condition","conditions","visible","evaluate","length","ResponsiveGridRoot","size","completeFieldName","translatedLabel","defaultMessage","label","ResponsiveGridItem","col","s","xs","document"],"mappings":"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"}
1
+ {"version":3,"file":"NonRepeatable.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.tsx"],"sourcesContent":["import { useField, createRulesEngine } from '@strapi/admin/strapi-admin';\nimport { Box, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport type { ComponentInputProps } from './Input';\n\ntype NonRepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst NonRepeatableComponent = ({\n attribute,\n name,\n children,\n layout,\n}: NonRepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n const { value } = useField(name);\n const level = useComponent('NonRepeatableComponent', (state) => state.level);\n const isNested = level > 0;\n const { currentDocument } = useDocumentContext('NonRepeatableComponent');\n const rulesEngine = createRulesEngine();\n\n return (\n <ComponentProvider id={value?.id} uid={attribute.component} level={level + 1} type=\"component\">\n <Box\n background={'neutral100'}\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n hasRadius={isNested}\n borderColor={isNested ? 'neutral200' : undefined}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((row, index) => {\n return (\n <ResponsiveGridRoot gap={4} key={index}>\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 = `${name}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${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 label: translatedLabel,\n name: completeFieldName,\n document: currentDocument,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n </Box>\n </ComponentProvider>\n );\n};\n\nexport { NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n"],"names":["NonRepeatableComponent","attribute","name","children","layout","formatMessage","useIntl","value","useField","level","useComponent","state","isNested","currentDocument","useDocumentContext","createRulesEngine","_jsx","ComponentProvider","id","uid","component","type","Box","background","paddingLeft","paddingRight","paddingTop","paddingBottom","hasRadius","borderColor","undefined","Flex","direction","alignItems","gap","map","row","index","ResponsiveGridRoot","size","field","completeFieldName","translatedLabel","defaultMessage","label","ResponsiveGridItem","col","s","xs","document"],"mappings":";;;;;;;;;;AAYMA,MAAAA,sBAAAA,GAAyB,CAAC,EAC9BC,SAAS,EACTC,IAAI,EACJC,QAAQ,EACRC,MAAM,EACsB,GAAA;IAC5B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,oBAASN,CAAAA,IAAAA,CAAAA;AAC3B,IAAA,MAAMO,QAAQC,6BAAa,CAAA,wBAAA,EAA0B,CAACC,KAAAA,GAAUA,MAAMF,KAAK,CAAA;AAC3E,IAAA,MAAMG,WAAWH,KAAQ,GAAA,CAAA;AACzB,IAAA,MAAM,EAAEI,eAAe,EAAE,GAAGC,qCAAmB,CAAA,wBAAA,CAAA;AAC/C,IAAoBC,6BAAAA;AAEpB,IAAA,qBACEC,cAACC,CAAAA,kCAAAA,EAAAA;AAAkBC,QAAAA,EAAAA,EAAIX,KAAOW,EAAAA,EAAAA;AAAIC,QAAAA,GAAAA,EAAKlB,UAAUmB,SAAS;AAAEX,QAAAA,KAAAA,EAAOA,KAAQ,GAAA,CAAA;QAAGY,IAAK,EAAA,WAAA;AACjF,QAAA,QAAA,gBAAAL,cAACM,CAAAA,gBAAAA,EAAAA;YACCC,UAAY,EAAA,YAAA;YACZC,WAAa,EAAA,CAAA;YACbC,YAAc,EAAA,CAAA;YACdC,UAAY,EAAA,CAAA;YACZC,aAAe,EAAA,CAAA;YACfC,SAAWhB,EAAAA,QAAAA;AACXiB,YAAAA,WAAAA,EAAajB,WAAW,YAAekB,GAAAA,SAAAA;AAEvC,YAAA,QAAA,gBAAAd,cAACe,CAAAA,iBAAAA,EAAAA;gBAAKC,SAAU,EAAA,QAAA;gBAASC,UAAW,EAAA,SAAA;gBAAUC,GAAK,EAAA,CAAA;0BAChD9B,MAAO+B,CAAAA,GAAG,CAAC,CAACC,GAAKC,EAAAA,KAAAA,GAAAA;AAChB,oBAAA,qBACErB,cAACsB,CAAAA,6BAAAA,EAAAA;wBAAmBJ,GAAK,EAAA,CAAA;AACtBE,wBAAAA,QAAAA,EAAAA,GAAAA,CAAID,GAAG,CAAC,CAAC,EAAEI,IAAI,EAAE,GAAGC,KAAO,EAAA,GAAA;AAC1B;;;;;sBAMA,MAAMC,oBAAoB,CAAGvC,EAAAA,IAAAA,CAAK,CAAC,EAAEsC,KAAAA,CAAMtC,IAAI,CAAE,CAAA;AAEjD,4BAAA,MAAMwC,kBAAkBrC,aAAc,CAAA;gCACpCa,EAAI,EAAA,CAAC,2BAA2B,EAAEjB,SAAUmB,CAAAA,SAAS,CAAC,CAAC,EAAEoB,KAAMtC,CAAAA,IAAI,CAAE,CAAA;AACrEyC,gCAAAA,cAAAA,EAAgBH,MAAMI;AACxB,6BAAA,CAAA;AAEA,4BAAA,qBACE5B,cAAC6B,CAAAA,6BAAAA,EAAAA;gCACCC,GAAKP,EAAAA,IAAAA;gCAELQ,CAAG,EAAA,EAAA;gCACHC,EAAI,EAAA,EAAA;gCACJhB,SAAU,EAAA,QAAA;gCACVC,UAAW,EAAA,SAAA;0CAEV9B,QAAS,CAAA;AACR,oCAAA,GAAGqC,KAAK;oCACRI,KAAOF,EAAAA,eAAAA;oCACPxC,IAAMuC,EAAAA,iBAAAA;oCACNQ,QAAUpC,EAAAA;AACZ,iCAAA;AAXK4B,6BAAAA,EAAAA,iBAAAA,CAAAA;AAcX,yBAAA;AAhC+BJ,qBAAAA,EAAAA,KAAAA,CAAAA;AAmCrC,iBAAA;;;;AAKV;;;;"}
@@ -12,7 +12,7 @@ const NonRepeatableComponent = ({ attribute, name, children, layout })=>{
12
12
  const level = useComponent('NonRepeatableComponent', (state)=>state.level);
13
13
  const isNested = level > 0;
14
14
  const { currentDocument } = useDocumentContext('NonRepeatableComponent');
15
- const rulesEngine = createRulesEngine();
15
+ createRulesEngine();
16
16
  return /*#__PURE__*/ jsx(ComponentProvider, {
17
17
  id: value?.id,
18
18
  uid: attribute.component,
@@ -31,19 +31,9 @@ const NonRepeatableComponent = ({ attribute, name, children, layout })=>{
31
31
  alignItems: "stretch",
32
32
  gap: 6,
33
33
  children: layout.map((row, index)=>{
34
- const visibleFields = row.filter(({ ...field })=>{
35
- const condition = field.attribute.conditions?.visible;
36
- if (condition) {
37
- return rulesEngine.evaluate(condition, value);
38
- }
39
- return true;
40
- });
41
- if (visibleFields.length === 0) {
42
- return null; // Skip rendering the entire grid row
43
- }
44
34
  return /*#__PURE__*/ jsx(ResponsiveGridRoot, {
45
35
  gap: 4,
46
- children: visibleFields.map(({ size, ...field })=>{
36
+ children: row.map(({ size, ...field })=>{
47
37
  /**
48
38
  * Layouts are built from schemas so they don't understand the complete
49
39
  * schema tree, for components we append the parent name to the field name
@@ -1 +1 @@
1
- {"version":3,"file":"NonRepeatable.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.tsx"],"sourcesContent":["import { useField, createRulesEngine } from '@strapi/admin/strapi-admin';\nimport { Box, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport type { ComponentInputProps } from './Input';\n\ntype NonRepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst NonRepeatableComponent = ({\n attribute,\n name,\n children,\n layout,\n}: NonRepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n const { value } = useField(name);\n const level = useComponent('NonRepeatableComponent', (state) => state.level);\n const isNested = level > 0;\n const { currentDocument } = useDocumentContext('NonRepeatableComponent');\n const rulesEngine = createRulesEngine();\n\n return (\n <ComponentProvider id={value?.id} uid={attribute.component} level={level + 1} type=\"component\">\n <Box\n background={'neutral100'}\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n hasRadius={isNested}\n borderColor={isNested ? 'neutral200' : undefined}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((row, index) => {\n const visibleFields = row.filter(({ ...field }) => {\n const condition = field.attribute.conditions?.visible;\n if (condition) {\n return rulesEngine.evaluate(condition, value);\n }\n\n return true;\n });\n\n if (visibleFields.length === 0) {\n return null; // Skip rendering the entire grid row\n }\n return (\n <ResponsiveGridRoot gap={4} key={index}>\n {visibleFields.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 = `${name}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${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 label: translatedLabel,\n name: completeFieldName,\n document: currentDocument,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n </Box>\n </ComponentProvider>\n );\n};\n\nexport { NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n"],"names":["NonRepeatableComponent","attribute","name","children","layout","formatMessage","useIntl","value","useField","level","useComponent","state","isNested","currentDocument","useDocumentContext","rulesEngine","createRulesEngine","_jsx","ComponentProvider","id","uid","component","type","Box","background","paddingLeft","paddingRight","paddingTop","paddingBottom","hasRadius","borderColor","undefined","Flex","direction","alignItems","gap","map","row","index","visibleFields","filter","field","condition","conditions","visible","evaluate","length","ResponsiveGridRoot","size","completeFieldName","translatedLabel","defaultMessage","label","ResponsiveGridItem","col","s","xs","document"],"mappings":"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"}
1
+ {"version":3,"file":"NonRepeatable.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.tsx"],"sourcesContent":["import { useField, createRulesEngine } from '@strapi/admin/strapi-admin';\nimport { Box, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport type { ComponentInputProps } from './Input';\n\ntype NonRepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst NonRepeatableComponent = ({\n attribute,\n name,\n children,\n layout,\n}: NonRepeatableComponentProps) => {\n const { formatMessage } = useIntl();\n const { value } = useField(name);\n const level = useComponent('NonRepeatableComponent', (state) => state.level);\n const isNested = level > 0;\n const { currentDocument } = useDocumentContext('NonRepeatableComponent');\n const rulesEngine = createRulesEngine();\n\n return (\n <ComponentProvider id={value?.id} uid={attribute.component} level={level + 1} type=\"component\">\n <Box\n background={'neutral100'}\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n hasRadius={isNested}\n borderColor={isNested ? 'neutral200' : undefined}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((row, index) => {\n return (\n <ResponsiveGridRoot gap={4} key={index}>\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 = `${name}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${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 label: translatedLabel,\n name: completeFieldName,\n document: currentDocument,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n </Box>\n </ComponentProvider>\n );\n};\n\nexport { NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n"],"names":["NonRepeatableComponent","attribute","name","children","layout","formatMessage","useIntl","value","useField","level","useComponent","state","isNested","currentDocument","useDocumentContext","createRulesEngine","_jsx","ComponentProvider","id","uid","component","type","Box","background","paddingLeft","paddingRight","paddingTop","paddingBottom","hasRadius","borderColor","undefined","Flex","direction","alignItems","gap","map","row","index","ResponsiveGridRoot","size","field","completeFieldName","translatedLabel","defaultMessage","label","ResponsiveGridItem","col","s","xs","document"],"mappings":";;;;;;;;AAYMA,MAAAA,sBAAAA,GAAyB,CAAC,EAC9BC,SAAS,EACTC,IAAI,EACJC,QAAQ,EACRC,MAAM,EACsB,GAAA;IAC5B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,KAAK,EAAE,GAAGC,QAASN,CAAAA,IAAAA,CAAAA;AAC3B,IAAA,MAAMO,QAAQC,YAAa,CAAA,wBAAA,EAA0B,CAACC,KAAAA,GAAUA,MAAMF,KAAK,CAAA;AAC3E,IAAA,MAAMG,WAAWH,KAAQ,GAAA,CAAA;AACzB,IAAA,MAAM,EAAEI,eAAe,EAAE,GAAGC,kBAAmB,CAAA,wBAAA,CAAA;AAC/C,IAAoBC,iBAAAA;AAEpB,IAAA,qBACEC,GAACC,CAAAA,iBAAAA,EAAAA;AAAkBC,QAAAA,EAAAA,EAAIX,KAAOW,EAAAA,EAAAA;AAAIC,QAAAA,GAAAA,EAAKlB,UAAUmB,SAAS;AAAEX,QAAAA,KAAAA,EAAOA,KAAQ,GAAA,CAAA;QAAGY,IAAK,EAAA,WAAA;AACjF,QAAA,QAAA,gBAAAL,GAACM,CAAAA,GAAAA,EAAAA;YACCC,UAAY,EAAA,YAAA;YACZC,WAAa,EAAA,CAAA;YACbC,YAAc,EAAA,CAAA;YACdC,UAAY,EAAA,CAAA;YACZC,aAAe,EAAA,CAAA;YACfC,SAAWhB,EAAAA,QAAAA;AACXiB,YAAAA,WAAAA,EAAajB,WAAW,YAAekB,GAAAA,SAAAA;AAEvC,YAAA,QAAA,gBAAAd,GAACe,CAAAA,IAAAA,EAAAA;gBAAKC,SAAU,EAAA,QAAA;gBAASC,UAAW,EAAA,SAAA;gBAAUC,GAAK,EAAA,CAAA;0BAChD9B,MAAO+B,CAAAA,GAAG,CAAC,CAACC,GAAKC,EAAAA,KAAAA,GAAAA;AAChB,oBAAA,qBACErB,GAACsB,CAAAA,kBAAAA,EAAAA;wBAAmBJ,GAAK,EAAA,CAAA;AACtBE,wBAAAA,QAAAA,EAAAA,GAAAA,CAAID,GAAG,CAAC,CAAC,EAAEI,IAAI,EAAE,GAAGC,KAAO,EAAA,GAAA;AAC1B;;;;;sBAMA,MAAMC,oBAAoB,CAAGvC,EAAAA,IAAAA,CAAK,CAAC,EAAEsC,KAAAA,CAAMtC,IAAI,CAAE,CAAA;AAEjD,4BAAA,MAAMwC,kBAAkBrC,aAAc,CAAA;gCACpCa,EAAI,EAAA,CAAC,2BAA2B,EAAEjB,SAAUmB,CAAAA,SAAS,CAAC,CAAC,EAAEoB,KAAMtC,CAAAA,IAAI,CAAE,CAAA;AACrEyC,gCAAAA,cAAAA,EAAgBH,MAAMI;AACxB,6BAAA,CAAA;AAEA,4BAAA,qBACE5B,GAAC6B,CAAAA,kBAAAA,EAAAA;gCACCC,GAAKP,EAAAA,IAAAA;gCAELQ,CAAG,EAAA,EAAA;gCACHC,EAAI,EAAA,EAAA;gCACJhB,SAAU,EAAA,QAAA;gCACVC,UAAW,EAAA,SAAA;0CAEV9B,QAAS,CAAA;AACR,oCAAA,GAAGqC,KAAK;oCACRI,KAAOF,EAAAA,eAAAA;oCACPxC,IAAMuC,EAAAA,iBAAAA;oCACNQ,QAAUpC,EAAAA;AACZ,iCAAA;AAXK4B,6BAAAA,EAAAA,iBAAAA,CAAAA;AAcX,yBAAA;AAhC+BJ,qBAAAA,EAAAA,KAAAA,CAAAA;AAmCrC,iBAAA;;;;AAKV;;;;"}
@@ -229,6 +229,7 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
229
229
  onDropItem: handleDropItem,
230
230
  onGrabItem: handleGrabItem,
231
231
  __temp_key__: key,
232
+ totalLength: value.length,
232
233
  children: layout.map((row, index)=>{
233
234
  const visibleFields = row.filter(({ ...field })=>{
234
235
  const condition = field.attribute.conditions?.visible;
@@ -319,7 +320,7 @@ const TextButtonCustom = styledComponents.styled(designSystem.TextButton)`
319
320
  const Component = ({ disabled, index, name, mainField = {
320
321
  name: 'id',
321
322
  type: 'integer'
322
- }, children, onDeleteComponent, toggleCollapses, __temp_key__, ...dragProps })=>{
323
+ }, children, onDeleteComponent, toggleCollapses, __temp_key__, totalLength, onMoveItem, ...dragProps })=>{
323
324
  const { formatMessage } = reactIntl.useIntl();
324
325
  const isDesktop = strapiAdmin.useIsDesktop();
325
326
  const displayValue = strapiAdmin.useForm('RepeatableComponent', (state)=>{
@@ -346,6 +347,7 @@ const Component = ({ disabled, index, name, mainField = {
346
347
  // Close all collapses
347
348
  toggleCollapses();
348
349
  },
350
+ onMoveItem,
349
351
  ...dragProps
350
352
  });
351
353
  React__namespace.useEffect(()=>{
@@ -358,6 +360,27 @@ const Component = ({ disabled, index, name, mainField = {
358
360
  ]);
359
361
  const composedAccordionRefs = designSystem.useComposedRefs(accordionRef, dragRef);
360
362
  const composedBoxRefs = designSystem.useComposedRefs(boxRef, dropRef);
363
+ const handleMoveUp = React__namespace.useCallback((e)=>{
364
+ e.stopPropagation();
365
+ if (index > 0 && onMoveItem) {
366
+ onMoveItem(index - 1, index);
367
+ }
368
+ }, [
369
+ index,
370
+ onMoveItem
371
+ ]);
372
+ const handleMoveDown = React__namespace.useCallback((e)=>{
373
+ e.stopPropagation();
374
+ if (index < totalLength - 1 && onMoveItem) {
375
+ onMoveItem(index + 1, index);
376
+ }
377
+ }, [
378
+ index,
379
+ totalLength,
380
+ onMoveItem
381
+ ]);
382
+ const canMoveUp = index > 0;
383
+ const canMoveDown = index < totalLength - 1;
361
384
  return /*#__PURE__*/ jsxRuntime.jsx(jsxRuntime.Fragment, {
362
385
  children: isDragging ? /*#__PURE__*/ jsxRuntime.jsx(Preview, {}) : /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Accordion.Item, {
363
386
  ref: composedBoxRefs,
@@ -392,6 +415,30 @@ const Component = ({ disabled, index, name, mainField = {
392
415
  }),
393
416
  onKeyDown: handleKeyDown,
394
417
  children: /*#__PURE__*/ jsxRuntime.jsx(Icons.Drag, {})
418
+ }),
419
+ !isDesktop && /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
420
+ children: [
421
+ canMoveUp && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
422
+ disabled: disabled || !canMoveUp,
423
+ variant: "ghost",
424
+ onClick: handleMoveUp,
425
+ label: formatMessage({
426
+ id: translations.getTranslation('components.DynamicZone.move-up'),
427
+ defaultMessage: 'Move up'
428
+ }),
429
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowUp, {})
430
+ }),
431
+ canMoveDown && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
432
+ disabled: disabled || !canMoveDown,
433
+ variant: "ghost",
434
+ onClick: handleMoveDown,
435
+ label: formatMessage({
436
+ id: translations.getTranslation('components.DynamicZone.move-down'),
437
+ defaultMessage: 'Move down'
438
+ }),
439
+ children: /*#__PURE__*/ jsxRuntime.jsx(Icons.ArrowDown, {})
440
+ })
441
+ ]
395
442
  })
396
443
  ]
397
444
  })
@@ -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 {\n useField,\n useNotification,\n useForm,\n createRulesEngine,\n useIsDesktop,\n} 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 } 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\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 = [],\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\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n const [liveText, setLiveText] = React.useState('');\n\n const rulesEngine = createRulesEngine();\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(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 = () => {\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: ComponentProps['onMoveItem'] = (newIndex, currentIndex) => {\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: getItemPos(newIndex),\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n };\n\n const handleValueChange = (key: string) => {\n setCollapseToOpen(key);\n };\n\n const getItemPos = (index: number) => `${index + 1} of ${value.length}`;\n\n const handleCancel = (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\n const handleGrabItem = (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: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (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: getItemPos(index),\n }\n )\n );\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(({ __temp_key__: key, id, ...currentComponentValues }, index) => {\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 <Component\n disabled={disabled}\n name={nameWithIndex}\n attribute={attribute}\n index={index}\n mainField={mainField}\n onMoveItem={handleMoveComponentField}\n onDeleteComponent={() => {\n removeFieldRow(name, index);\n toggleCollapses();\n }}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n __temp_key__={key}\n >\n {layout.map((row, index) => {\n const visibleFields = row.filter(({ ...field }) => {\n const condition = field.attribute.conditions?.visible;\n if (condition) {\n return rulesEngine.evaluate(condition, currentComponentValues);\n }\n\n return true;\n });\n\n if (visibleFields.length === 0) {\n return null; // Skip rendering the entire grid row\n }\n return (\n <ResponsiveGridRoot gap={4} key={index}>\n {visibleFields.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.${attribute.component}.${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 label: translatedLabel,\n name: completeFieldName,\n document: currentDocument,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Component>\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\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel' | 'onMoveItem'>,\n Pick<RepeatableComponentProps, 'mainField'> {\n attribute: Schema.Attribute.Component<`${string}.${string}`, boolean>;\n disabled?: boolean;\n index: number;\n name: string;\n onDeleteComponent?: React.MouseEventHandler<HTMLButtonElement>;\n toggleCollapses: () => void;\n children: React.ReactNode;\n __temp_key__: string;\n}\n\nconst Component = ({\n disabled,\n index,\n name,\n mainField = {\n name: 'id',\n type: 'integer',\n },\n children,\n onDeleteComponent,\n toggleCollapses,\n __temp_key__,\n ...dragProps\n}: ComponentProps) => {\n const { formatMessage } = useIntl();\n const isDesktop = useIsDesktop();\n\n const displayValue = useForm('RepeatableComponent', (state) => {\n return getIn(state.values, [...name.split('.'), mainField.name]);\n });\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 displayedValue: displayValue,\n },\n onStart() {\n // Close all collapses\n toggleCollapses();\n },\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 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={onDeleteComponent}\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 </Accordion.Actions>\n </Accordion.Header>\n <Accordion.Content>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral100\"\n padding={6}\n gap={6}\n >\n {children}\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\nexport { RepeatableComponent };\nexport type { RepeatableComponentProps };\n"],"names":["RepeatableComponent","attribute","disabled","name","mainField","children","layout","toggleNotification","useNotification","formatMessage","useIntl","search","searchString","useLocation","React","useMemo","URLSearchParams","currentDocument","useDocumentContext","components","value","error","rawError","useField","addFieldRow","useForm","state","moveFieldRow","removeFieldRow","max","Infinity","collapseToOpen","setCollapseToOpen","useState","liveText","setLiveText","rulesEngine","createRulesEngine","useEffect","hasNestedErrors","Array","isArray","length","hasNestedValue","errorOpenItems","map","_","idx","__temp_key__","filter","includes","componentTmpKeyWithFocussedField","has","fieldParam","get","undefined","path","split","getIn","subpath","prevValue","usePrev","toggleCollapses","handleClick","schema","component","form","createDefaultForm","data","transformDocument","type","message","id","getTranslation","handleMoveComponentField","newIndex","currentIndex","defaultMessage","item","position","getItemPos","handleValueChange","key","index","handleCancel","handleGrabItem","handleDropItem","ariaDescriptionId","useId","level","useComponent","_jsx","Initializer","onClick","_jsxs","Box","hasRadius","VisuallyHidden","aria-live","AccordionRoot","$error","onValueChange","aria-describedby","currentComponentValues","nameWithIndex","ComponentProvider","uid","Component","onMoveItem","onDeleteComponent","onCancel","onDropItem","onGrabItem","row","visibleFields","field","condition","conditions","visible","evaluate","ResponsiveGridRoot","gap","size","completeFieldName","translatedLabel","label","ResponsiveGridItem","col","s","xs","direction","alignItems","document","TextButtonCustom","startIcon","Plus","styled","Accordion","Root","theme","colors","danger600","neutral200","TextButton","props","spaces","primary100","motion","easings","easeOutQuad","dragProps","isDesktop","useIsDesktop","displayValue","values","accordionRef","useRef","componentKey","slice","join","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","COMPONENT","displayedValue","onStart","getEmptyImage","captureDraggingState","composedAccordionRefs","useComposedRefs","composedBoxRefs","_Fragment","Preview","Item","ref","Header","Trigger","Actions","IconButton","variant","Trash","e","stopPropagation","data-handler-id","onKeyDown","Drag","Content","Flex","background","padding","StyledSpan","tag","primary500"],"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 {\n useField,\n useNotification,\n useForm,\n createRulesEngine,\n useIsDesktop,\n} 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\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 = [],\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\n const [collapseToOpen, setCollapseToOpen] = React.useState<string>('');\n const [liveText, setLiveText] = React.useState('');\n\n const rulesEngine = createRulesEngine();\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(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 = () => {\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: ComponentProps['onMoveItem'] = (newIndex, currentIndex) => {\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: getItemPos(newIndex),\n }\n )\n );\n\n moveFieldRow(name, currentIndex, newIndex);\n };\n\n const handleValueChange = (key: string) => {\n setCollapseToOpen(key);\n };\n\n const getItemPos = (index: number) => `${index + 1} of ${value.length}`;\n\n const handleCancel = (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\n const handleGrabItem = (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: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (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: getItemPos(index),\n }\n )\n );\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(({ __temp_key__: key, id, ...currentComponentValues }, index) => {\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 <Component\n disabled={disabled}\n name={nameWithIndex}\n attribute={attribute}\n index={index}\n mainField={mainField}\n onMoveItem={handleMoveComponentField}\n onDeleteComponent={() => {\n removeFieldRow(name, index);\n toggleCollapses();\n }}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n __temp_key__={key}\n totalLength={value.length}\n >\n {layout.map((row, index) => {\n const visibleFields = row.filter(({ ...field }) => {\n const condition = field.attribute.conditions?.visible;\n if (condition) {\n return rulesEngine.evaluate(condition, currentComponentValues);\n }\n\n return true;\n });\n\n if (visibleFields.length === 0) {\n return null; // Skip rendering the entire grid row\n }\n return (\n <ResponsiveGridRoot gap={4} key={index}>\n {visibleFields.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.${attribute.component}.${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 label: translatedLabel,\n name: completeFieldName,\n document: currentDocument,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Component>\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\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ComponentProps\n extends Pick<UseDragAndDropOptions, 'onGrabItem' | 'onDropItem' | 'onCancel' | 'onMoveItem'>,\n Pick<RepeatableComponentProps, 'mainField'> {\n attribute: Schema.Attribute.Component<`${string}.${string}`, boolean>;\n disabled?: boolean;\n index: number;\n name: string;\n onDeleteComponent?: React.MouseEventHandler<HTMLButtonElement>;\n toggleCollapses: () => void;\n children: React.ReactNode;\n __temp_key__: string;\n totalLength: number;\n}\n\nconst Component = ({\n disabled,\n index,\n name,\n mainField = {\n name: 'id',\n type: 'integer',\n },\n children,\n onDeleteComponent,\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('RepeatableComponent', (state) => {\n return getIn(state.values, [...name.split('.'), mainField.name]);\n });\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 displayedValue: displayValue,\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 handleMoveUp = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (index > 0 && onMoveItem) {\n onMoveItem(index - 1, index);\n }\n },\n [index, onMoveItem]\n );\n\n const handleMoveDown = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (index < totalLength - 1 && onMoveItem) {\n onMoveItem(index + 1, index);\n }\n },\n [index, totalLength, onMoveItem]\n );\n\n const canMoveUp = index > 0;\n const canMoveDown = index < totalLength - 1;\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={onDeleteComponent}\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={handleMoveUp}\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={handleMoveDown}\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={6}\n gap={6}\n >\n {children}\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\nexport { RepeatableComponent };\nexport type { RepeatableComponentProps };\n"],"names":["RepeatableComponent","attribute","disabled","name","mainField","children","layout","toggleNotification","useNotification","formatMessage","useIntl","search","searchString","useLocation","React","useMemo","URLSearchParams","currentDocument","useDocumentContext","components","value","error","rawError","useField","addFieldRow","useForm","state","moveFieldRow","removeFieldRow","max","Infinity","collapseToOpen","setCollapseToOpen","useState","liveText","setLiveText","rulesEngine","createRulesEngine","useEffect","hasNestedErrors","Array","isArray","length","hasNestedValue","errorOpenItems","map","_","idx","__temp_key__","filter","includes","componentTmpKeyWithFocussedField","has","fieldParam","get","undefined","path","split","getIn","subpath","prevValue","usePrev","toggleCollapses","handleClick","schema","component","form","createDefaultForm","data","transformDocument","type","message","id","getTranslation","handleMoveComponentField","newIndex","currentIndex","defaultMessage","item","position","getItemPos","handleValueChange","key","index","handleCancel","handleGrabItem","handleDropItem","ariaDescriptionId","useId","level","useComponent","_jsx","Initializer","onClick","_jsxs","Box","hasRadius","VisuallyHidden","aria-live","AccordionRoot","$error","onValueChange","aria-describedby","currentComponentValues","nameWithIndex","ComponentProvider","uid","Component","onMoveItem","onDeleteComponent","onCancel","onDropItem","onGrabItem","totalLength","row","visibleFields","field","condition","conditions","visible","evaluate","ResponsiveGridRoot","gap","size","completeFieldName","translatedLabel","label","ResponsiveGridItem","col","s","xs","direction","alignItems","document","TextButtonCustom","startIcon","Plus","styled","Accordion","Root","theme","colors","danger600","neutral200","TextButton","props","spaces","primary100","motion","easings","easeOutQuad","dragProps","isDesktop","useIsDesktop","displayValue","values","accordionRef","useRef","componentKey","slice","join","handlerId","isDragging","handleKeyDown","boxRef","dropRef","dragRef","dragPreviewRef","useDragAndDrop","ItemTypes","COMPONENT","displayedValue","onStart","getEmptyImage","captureDraggingState","composedAccordionRefs","useComposedRefs","composedBoxRefs","handleMoveUp","useCallback","e","stopPropagation","handleMoveDown","canMoveUp","canMoveDown","_Fragment","Preview","Item","ref","Header","Trigger","Actions","IconButton","variant","Trash","data-handler-id","onKeyDown","Drag","ArrowUp","ArrowDown","Content","Flex","background","padding","StyledSpan","tag","primary500"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { useNotification, useField, useForm, createRulesEngine, useIsDesktop } from '@strapi/admin/strapi-admin';
4
4
  import { Accordion, TextButton, Box, VisuallyHidden, useComposedRefs, IconButton, Flex } from '@strapi/design-system';
5
- import { Plus, Trash, Drag } from '@strapi/icons';
5
+ import { Plus, Trash, Drag, ArrowUp, ArrowDown } from '@strapi/icons';
6
6
  import { getEmptyImage } from 'react-dnd-html5-backend';
7
7
  import { useIntl } from 'react-intl';
8
8
  import { useLocation } from 'react-router-dom';
@@ -208,6 +208,7 @@ const RepeatableComponent = ({ attribute, disabled, name, mainField, children, l
208
208
  onDropItem: handleDropItem,
209
209
  onGrabItem: handleGrabItem,
210
210
  __temp_key__: key,
211
+ totalLength: value.length,
211
212
  children: layout.map((row, index)=>{
212
213
  const visibleFields = row.filter(({ ...field })=>{
213
214
  const condition = field.attribute.conditions?.visible;
@@ -298,7 +299,7 @@ const TextButtonCustom = styled(TextButton)`
298
299
  const Component = ({ disabled, index, name, mainField = {
299
300
  name: 'id',
300
301
  type: 'integer'
301
- }, children, onDeleteComponent, toggleCollapses, __temp_key__, ...dragProps })=>{
302
+ }, children, onDeleteComponent, toggleCollapses, __temp_key__, totalLength, onMoveItem, ...dragProps })=>{
302
303
  const { formatMessage } = useIntl();
303
304
  const isDesktop = useIsDesktop();
304
305
  const displayValue = useForm('RepeatableComponent', (state)=>{
@@ -325,6 +326,7 @@ const Component = ({ disabled, index, name, mainField = {
325
326
  // Close all collapses
326
327
  toggleCollapses();
327
328
  },
329
+ onMoveItem,
328
330
  ...dragProps
329
331
  });
330
332
  React.useEffect(()=>{
@@ -337,6 +339,27 @@ const Component = ({ disabled, index, name, mainField = {
337
339
  ]);
338
340
  const composedAccordionRefs = useComposedRefs(accordionRef, dragRef);
339
341
  const composedBoxRefs = useComposedRefs(boxRef, dropRef);
342
+ const handleMoveUp = React.useCallback((e)=>{
343
+ e.stopPropagation();
344
+ if (index > 0 && onMoveItem) {
345
+ onMoveItem(index - 1, index);
346
+ }
347
+ }, [
348
+ index,
349
+ onMoveItem
350
+ ]);
351
+ const handleMoveDown = React.useCallback((e)=>{
352
+ e.stopPropagation();
353
+ if (index < totalLength - 1 && onMoveItem) {
354
+ onMoveItem(index + 1, index);
355
+ }
356
+ }, [
357
+ index,
358
+ totalLength,
359
+ onMoveItem
360
+ ]);
361
+ const canMoveUp = index > 0;
362
+ const canMoveDown = index < totalLength - 1;
340
363
  return /*#__PURE__*/ jsx(Fragment, {
341
364
  children: isDragging ? /*#__PURE__*/ jsx(Preview, {}) : /*#__PURE__*/ jsxs(Accordion.Item, {
342
365
  ref: composedBoxRefs,
@@ -371,6 +394,30 @@ const Component = ({ disabled, index, name, mainField = {
371
394
  }),
372
395
  onKeyDown: handleKeyDown,
373
396
  children: /*#__PURE__*/ jsx(Drag, {})
397
+ }),
398
+ !isDesktop && /*#__PURE__*/ jsxs(Fragment, {
399
+ children: [
400
+ canMoveUp && /*#__PURE__*/ jsx(IconButton, {
401
+ disabled: disabled || !canMoveUp,
402
+ variant: "ghost",
403
+ onClick: handleMoveUp,
404
+ label: formatMessage({
405
+ id: getTranslation('components.DynamicZone.move-up'),
406
+ defaultMessage: 'Move up'
407
+ }),
408
+ children: /*#__PURE__*/ jsx(ArrowUp, {})
409
+ }),
410
+ canMoveDown && /*#__PURE__*/ jsx(IconButton, {
411
+ disabled: disabled || !canMoveDown,
412
+ variant: "ghost",
413
+ onClick: handleMoveDown,
414
+ label: formatMessage({
415
+ id: getTranslation('components.DynamicZone.move-down'),
416
+ defaultMessage: 'Move down'
417
+ }),
418
+ children: /*#__PURE__*/ jsx(ArrowDown, {})
419
+ })
420
+ ]
374
421
  })
375
422
  ]
376
423
  })