@strapi/content-manager 0.0.0-experimental.17b4116f461a49b8ce5386f7c8d79c511d40fb3b → 0.0.0-experimental.1bca8e0e074de8b0775bcddc7656fbc9e9f1393b

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 (174) hide show
  1. package/LICENSE +18 -3
  2. package/dist/_chunks/{CardDragPreview-DSVYodBX.js → CardDragPreview-C0QyJgRA.js} +10 -14
  3. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -0
  4. package/dist/_chunks/{CardDragPreview-ikSG4M46.mjs → CardDragPreview-DOxamsuj.mjs} +7 -9
  5. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -0
  6. package/dist/_chunks/{ComponentConfigurationPage-2iOVVhqV.js → ComponentConfigurationPage-5ukroXAh.js} +3 -3
  7. package/dist/_chunks/{ComponentConfigurationPage-2iOVVhqV.js.map → ComponentConfigurationPage-5ukroXAh.js.map} +1 -1
  8. package/dist/_chunks/{ComponentConfigurationPage-DjQBdcKF.mjs → ComponentConfigurationPage-BAgyHiMm.mjs} +3 -3
  9. package/dist/_chunks/{ComponentConfigurationPage-DjQBdcKF.mjs.map → ComponentConfigurationPage-BAgyHiMm.mjs.map} +1 -1
  10. package/dist/_chunks/{ComponentIcon-BBQsYCVn.js → ComponentIcon-BXdiCGQp.js} +8 -2
  11. package/dist/_chunks/ComponentIcon-BXdiCGQp.js.map +1 -0
  12. package/dist/_chunks/{ComponentIcon-BOFnK76n.mjs → ComponentIcon-u4bIXTFY.mjs} +9 -3
  13. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -0
  14. package/dist/_chunks/{EditConfigurationPage-BoBb-DLH.mjs → EditConfigurationPage-DmoXawIh.mjs} +3 -3
  15. package/dist/_chunks/{EditConfigurationPage-BoBb-DLH.mjs.map → EditConfigurationPage-DmoXawIh.mjs.map} +1 -1
  16. package/dist/_chunks/{EditConfigurationPage-B7dw5_cS.js → EditConfigurationPage-Xp7lun0f.js} +3 -3
  17. package/dist/_chunks/{EditConfigurationPage-B7dw5_cS.js.map → EditConfigurationPage-Xp7lun0f.js.map} +1 -1
  18. package/dist/_chunks/{EditViewPage-aUnqL-63.mjs → EditViewPage-BLsjc5F-.mjs} +47 -47
  19. package/dist/_chunks/EditViewPage-BLsjc5F-.mjs.map +1 -0
  20. package/dist/_chunks/{EditViewPage-KRG56aCq.js → EditViewPage-C-ukDOB7.js} +46 -48
  21. package/dist/_chunks/EditViewPage-C-ukDOB7.js.map +1 -0
  22. package/dist/_chunks/{Field-kq1c2TF1.js → Field-Bfph5SOd.js} +953 -782
  23. package/dist/_chunks/Field-Bfph5SOd.js.map +1 -0
  24. package/dist/_chunks/{Field-kVFO4ZKB.mjs → Field-Cs7duwWd.mjs} +901 -729
  25. package/dist/_chunks/Field-Cs7duwWd.mjs.map +1 -0
  26. package/dist/_chunks/{Form-CQ67ZifP.js → Form-CPYqIWDG.js} +39 -38
  27. package/dist/_chunks/Form-CPYqIWDG.js.map +1 -0
  28. package/dist/_chunks/{Form-Jgh5hGTu.mjs → Form-Dg_GS5TQ.mjs} +39 -37
  29. package/dist/_chunks/Form-Dg_GS5TQ.mjs.map +1 -0
  30. package/dist/_chunks/{History-BLEnudTX.js → History-DNQkXANT.js} +147 -50
  31. package/dist/_chunks/History-DNQkXANT.js.map +1 -0
  32. package/dist/_chunks/{History-DKhZAPcK.mjs → History-wrnHqf09.mjs} +146 -48
  33. package/dist/_chunks/History-wrnHqf09.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-Zso_LUjn.js → ListConfigurationPage-CUQxfpjT.js} +58 -59
  35. package/dist/_chunks/ListConfigurationPage-CUQxfpjT.js.map +1 -0
  36. package/dist/_chunks/{ListConfigurationPage-nrXcxNYi.mjs → ListConfigurationPage-DScmJVkW.mjs} +54 -54
  37. package/dist/_chunks/ListConfigurationPage-DScmJVkW.mjs.map +1 -0
  38. package/dist/_chunks/{ListViewPage-DsaOakWQ.js → ListViewPage-BsLiH2-2.js} +92 -108
  39. package/dist/_chunks/ListViewPage-BsLiH2-2.js.map +1 -0
  40. package/dist/_chunks/{ListViewPage-ChhYmA-L.mjs → ListViewPage-C4IvrMgY.mjs} +87 -103
  41. package/dist/_chunks/ListViewPage-C4IvrMgY.mjs.map +1 -0
  42. package/dist/_chunks/{NoContentTypePage-DPCuS9Y1.js → NoContentTypePage-BZ-PnGAf.js} +3 -3
  43. package/dist/_chunks/NoContentTypePage-BZ-PnGAf.js.map +1 -0
  44. package/dist/_chunks/{NoContentTypePage-BrdFcN33.mjs → NoContentTypePage-Djg8nPlj.mjs} +3 -3
  45. package/dist/_chunks/NoContentTypePage-Djg8nPlj.mjs.map +1 -0
  46. package/dist/_chunks/{NoPermissionsPage-B9dqrtTy.mjs → NoPermissionsPage-DSP7R-hv.mjs} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-B9dqrtTy.mjs.map → NoPermissionsPage-DSP7R-hv.mjs.map} +1 -1
  48. package/dist/_chunks/{NoPermissionsPage-DdyOfdKb.js → NoPermissionsPage-_lUqjGW3.js} +2 -2
  49. package/dist/_chunks/{NoPermissionsPage-DdyOfdKb.js.map → NoPermissionsPage-_lUqjGW3.js.map} +1 -1
  50. package/dist/_chunks/{Relations-DjFiYd7-.mjs → Relations-BZr8tL0R.mjs} +66 -56
  51. package/dist/_chunks/Relations-BZr8tL0R.mjs.map +1 -0
  52. package/dist/_chunks/{Relations-CY8Isqdu.js → Relations-CtELXYIK.js} +70 -61
  53. package/dist/_chunks/Relations-CtELXYIK.js.map +1 -0
  54. package/dist/_chunks/{en-MBPul9Su.mjs → en-BrCTWlZv.mjs} +11 -4
  55. package/dist/_chunks/{en-MBPul9Su.mjs.map → en-BrCTWlZv.mjs.map} +1 -1
  56. package/dist/_chunks/{en-C-V1_90f.js → en-uOUIxfcQ.js} +11 -4
  57. package/dist/_chunks/{en-C-V1_90f.js.map → en-uOUIxfcQ.js.map} +1 -1
  58. package/dist/_chunks/{index-DNa1J4HE.js → index-OerGjbAN.js} +1588 -837
  59. package/dist/_chunks/index-OerGjbAN.js.map +1 -0
  60. package/dist/_chunks/{index-CAc9yTnx.mjs → index-c_5DdJi-.mjs} +1610 -858
  61. package/dist/_chunks/index-c_5DdJi-.mjs.map +1 -0
  62. package/dist/_chunks/{layout-BqtLA6Lb.js → layout-Ci7qHlFb.js} +30 -27
  63. package/dist/_chunks/layout-Ci7qHlFb.js.map +1 -0
  64. package/dist/_chunks/{layout-CXsHbc3E.mjs → layout-oPBiO7RY.mjs} +29 -24
  65. package/dist/_chunks/layout-oPBiO7RY.mjs.map +1 -0
  66. package/dist/_chunks/{relations-mMFEcZRq.mjs → relations-BIdWFjdq.mjs} +2 -2
  67. package/dist/_chunks/{relations-mMFEcZRq.mjs.map → relations-BIdWFjdq.mjs.map} +1 -1
  68. package/dist/_chunks/{relations-BHY_KDJ_.js → relations-COBpStiF.js} +2 -2
  69. package/dist/_chunks/{relations-BHY_KDJ_.js.map → relations-COBpStiF.js.map} +1 -1
  70. package/dist/_chunks/useDragAndDrop-DdHgKsqq.mjs.map +1 -1
  71. package/dist/_chunks/useDragAndDrop-J0TUUbR6.js.map +1 -1
  72. package/dist/_chunks/usePrev-B9w_-eYc.js +15 -0
  73. package/dist/_chunks/usePrev-B9w_-eYc.js.map +1 -0
  74. package/dist/_chunks/usePrev-DH6iah0A.mjs +16 -0
  75. package/dist/_chunks/usePrev-DH6iah0A.mjs.map +1 -0
  76. package/dist/admin/index.js +2 -1
  77. package/dist/admin/index.js.map +1 -1
  78. package/dist/admin/index.mjs +5 -4
  79. package/dist/admin/src/components/ComponentIcon.d.ts +6 -3
  80. package/dist/admin/src/content-manager.d.ts +3 -3
  81. package/dist/admin/src/exports.d.ts +1 -0
  82. package/dist/admin/src/history/components/VersionInputRenderer.d.ts +1 -1
  83. package/dist/admin/src/history/index.d.ts +3 -0
  84. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  85. package/dist/admin/src/hooks/useDocument.d.ts +5 -8
  86. package/dist/admin/src/hooks/useDocumentActions.d.ts +24 -3
  87. package/dist/admin/src/hooks/useDocumentLayout.d.ts +2 -2
  88. package/dist/admin/src/hooks/useDragAndDrop.d.ts +4 -4
  89. package/dist/admin/src/hooks/useKeyboardDragAndDrop.d.ts +1 -1
  90. package/dist/admin/src/index.d.ts +1 -0
  91. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +11 -4
  92. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksInput.d.ts +3 -3
  93. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/constants.d.ts +4 -0
  94. package/dist/admin/src/pages/EditView/components/FormInputs/Component/Input.d.ts +2 -2
  95. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +3 -5
  96. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  97. package/dist/admin/src/pages/EditView/components/FormInputs/Relations.d.ts +30 -18
  98. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +2 -2
  99. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.d.ts +3 -49
  100. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/Field.d.ts +2 -2
  101. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +59 -52
  102. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +2 -10
  103. package/dist/admin/src/pages/ListView/components/BulkActions/Actions.d.ts +3 -30
  104. package/dist/admin/src/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.d.ts +2 -2
  105. package/dist/admin/src/pages/ListView/components/BulkActions/PublishAction.d.ts +9 -26
  106. package/dist/admin/src/services/api.d.ts +2 -3
  107. package/dist/admin/src/services/components.d.ts +2 -2
  108. package/dist/admin/src/services/contentTypes.d.ts +5 -5
  109. package/dist/admin/src/services/documents.d.ts +29 -17
  110. package/dist/admin/src/services/init.d.ts +2 -2
  111. package/dist/admin/src/services/relations.d.ts +3 -3
  112. package/dist/admin/src/services/uid.d.ts +3 -3
  113. package/dist/admin/src/utils/api.d.ts +4 -18
  114. package/dist/admin/src/utils/validation.d.ts +1 -6
  115. package/dist/server/index.js +303 -208
  116. package/dist/server/index.js.map +1 -1
  117. package/dist/server/index.mjs +305 -210
  118. package/dist/server/index.mjs.map +1 -1
  119. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  120. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  121. package/dist/server/src/controllers/uid.d.ts.map +1 -1
  122. package/dist/server/src/controllers/utils/metadata.d.ts +8 -0
  123. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -0
  124. package/dist/server/src/controllers/validation/dimensions.d.ts +11 -0
  125. package/dist/server/src/controllers/validation/dimensions.d.ts.map +1 -0
  126. package/dist/server/src/controllers/validation/index.d.ts +1 -1
  127. package/dist/server/src/history/services/history.d.ts.map +1 -1
  128. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  129. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  130. package/dist/server/src/index.d.ts +17 -33
  131. package/dist/server/src/index.d.ts.map +1 -1
  132. package/dist/server/src/services/document-manager.d.ts +11 -6
  133. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  134. package/dist/server/src/services/document-metadata.d.ts +8 -29
  135. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  136. package/dist/server/src/services/index.d.ts +17 -33
  137. package/dist/server/src/services/index.d.ts.map +1 -1
  138. package/dist/server/src/services/utils/populate.d.ts +8 -1
  139. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  140. package/dist/shared/contracts/collection-types.d.ts +14 -6
  141. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  142. package/dist/shared/contracts/relations.d.ts +2 -2
  143. package/dist/shared/contracts/relations.d.ts.map +1 -1
  144. package/package.json +13 -14
  145. package/dist/_chunks/CardDragPreview-DSVYodBX.js.map +0 -1
  146. package/dist/_chunks/CardDragPreview-ikSG4M46.mjs.map +0 -1
  147. package/dist/_chunks/ComponentIcon-BBQsYCVn.js.map +0 -1
  148. package/dist/_chunks/ComponentIcon-BOFnK76n.mjs.map +0 -1
  149. package/dist/_chunks/EditViewPage-KRG56aCq.js.map +0 -1
  150. package/dist/_chunks/EditViewPage-aUnqL-63.mjs.map +0 -1
  151. package/dist/_chunks/Field-kVFO4ZKB.mjs.map +0 -1
  152. package/dist/_chunks/Field-kq1c2TF1.js.map +0 -1
  153. package/dist/_chunks/Form-CQ67ZifP.js.map +0 -1
  154. package/dist/_chunks/Form-Jgh5hGTu.mjs.map +0 -1
  155. package/dist/_chunks/History-BLEnudTX.js.map +0 -1
  156. package/dist/_chunks/History-DKhZAPcK.mjs.map +0 -1
  157. package/dist/_chunks/ListConfigurationPage-Zso_LUjn.js.map +0 -1
  158. package/dist/_chunks/ListConfigurationPage-nrXcxNYi.mjs.map +0 -1
  159. package/dist/_chunks/ListViewPage-ChhYmA-L.mjs.map +0 -1
  160. package/dist/_chunks/ListViewPage-DsaOakWQ.js.map +0 -1
  161. package/dist/_chunks/NoContentTypePage-BrdFcN33.mjs.map +0 -1
  162. package/dist/_chunks/NoContentTypePage-DPCuS9Y1.js.map +0 -1
  163. package/dist/_chunks/Relations-CY8Isqdu.js.map +0 -1
  164. package/dist/_chunks/Relations-DjFiYd7-.mjs.map +0 -1
  165. package/dist/_chunks/index-CAc9yTnx.mjs.map +0 -1
  166. package/dist/_chunks/index-DNa1J4HE.js.map +0 -1
  167. package/dist/_chunks/layout-BqtLA6Lb.js.map +0 -1
  168. package/dist/_chunks/layout-CXsHbc3E.mjs.map +0 -1
  169. package/dist/_chunks/urls-CbOsUOoW.mjs +0 -7
  170. package/dist/_chunks/urls-CbOsUOoW.mjs.map +0 -1
  171. package/dist/_chunks/urls-DzZya_gm.js +0 -6
  172. package/dist/_chunks/urls-DzZya_gm.js.map +0 -1
  173. package/dist/server/src/controllers/utils/dimensions.d.ts +0 -5
  174. package/dist/server/src/controllers/utils/dimensions.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form-Dg_GS5TQ.mjs","sources":["../../admin/src/components/ConfigurationForm/EditFieldForm.tsx","../../admin/src/components/ConfigurationForm/Fields.tsx","../../admin/src/components/ConfigurationForm/Form.tsx"],"sourcesContent":["import {\n useNotification,\n InputRenderer,\n Form,\n InputProps,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Flex, Grid, Modal } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport { ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD } from '../../constants/attributes';\nimport { useGetInitialDataQuery } from '../../services/init';\nimport { capitalise } from '../../utils/strings';\nimport { getTranslation } from '../../utils/translations';\nimport { FieldTypeIcon } from '../FieldTypeIcon';\n\nimport { TEMP_FIELD_NAME } from './Fields';\n\nimport type { ConfigurationFormData } from './Form';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Constants\n * -----------------------------------------------------------------------------------------------*/\n\nconst FIELD_SCHEMA = yup.object().shape({\n label: yup.string().required(),\n description: yup.string(),\n editable: yup.boolean(),\n size: yup.number().required(),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * EditFieldForm\n * -----------------------------------------------------------------------------------------------*/\n\ninterface EditFieldFormProps {\n attribute?: Schema.Attribute.AnyAttribute;\n name: string;\n onClose: () => void;\n}\n\nconst EditFieldForm = ({ attribute, name, onClose }: EditFieldFormProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const { value, onChange } =\n useField<ConfigurationFormData['layout'][number]['children'][number]>(name);\n\n const { data: mainFieldOptions } = useGetInitialDataQuery(undefined, {\n selectFromResult: (res) => {\n if (attribute?.type !== 'relation' || !res.data) {\n return { data: [] };\n }\n\n if ('targetModel' in attribute && typeof attribute.targetModel === 'string') {\n const targetSchema = res.data.contentTypes.find(\n (schema) => schema.uid === attribute.targetModel\n );\n\n if (targetSchema) {\n return {\n data: Object.entries(targetSchema.attributes).reduce<\n Array<{ label: string; value: string }>\n >((acc, [key, attribute]) => {\n /**\n * Create the list of attributes from the schema as to which can\n * be our `mainField` and dictate the display name of the schema\n * we're editing.\n */\n if (!ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD.includes(attribute.type)) {\n acc.push({\n label: key,\n value: key,\n });\n }\n\n return acc;\n }, []),\n };\n }\n }\n\n return { data: [] };\n },\n skip: attribute?.type !== 'relation',\n });\n\n if (!value || value.name === TEMP_FIELD_NAME || !attribute) {\n // This is very unlikely to happen, but it ensures the form is not opened without a value.\n console.error(\n \"You've opened a field to edit without it being part of the form, this is likely a bug with Strapi. Please open an issue.\"\n );\n\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.containers.edit-settings.modal-form.error',\n defaultMessage: 'An error occurred while trying to open the form.',\n }),\n type: 'danger',\n });\n\n return null;\n }\n\n return (\n <Modal.Content>\n <Form\n method=\"PUT\"\n initialValues={value}\n validationSchema={FIELD_SCHEMA}\n onSubmit={(data) => {\n onChange(name, data);\n onClose();\n }}\n >\n <Modal.Header>\n <Flex gap={3}>\n <FieldTypeIcon type={attribute.type} />\n <Modal.Title>\n {formatMessage(\n {\n id: 'content-manager.containers.edit-settings.modal-form.label',\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: capitalise(value.name) }\n )}\n </Modal.Title>\n </Flex>\n </Modal.Header>\n <Modal.Body>\n <Grid.Root gap={4}>\n {[\n {\n name: 'label',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.label'),\n defaultMessage: 'Label',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'description',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.description'),\n defaultMessage: 'Description',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'placeholder',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.placeholder'),\n defaultMessage: 'Placeholder',\n }),\n size: 6,\n type: 'string' as const,\n },\n {\n name: 'editable',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.editable'),\n defaultMessage: 'Editable',\n }),\n size: 6,\n type: 'boolean' as const,\n },\n {\n name: 'mainField',\n label: formatMessage({\n id: getTranslation('containers.edit-settings.modal-form.mainField'),\n defaultMessage: 'Entry title',\n }),\n hint: formatMessage({\n id: getTranslation(\n 'containers.SettingPage.edit-settings.modal-form.mainField.hint'\n ),\n defaultMessage: 'Set the displayed field',\n }),\n size: 6,\n options: mainFieldOptions,\n type: 'enumeration' as const,\n },\n {\n name: 'size',\n label: formatMessage({\n id: getTranslation('containers.ListSettingsView.modal-form.size'),\n defaultMessage: 'Size',\n }),\n size: 6,\n options: [\n { value: '4', label: '33%' },\n { value: '6', label: '50%' },\n { value: '8', label: '66%' },\n { value: '12', label: '100%' },\n ],\n type: 'enumeration' as const,\n },\n ]\n .filter(filterFieldsBasedOnAttributeType(attribute.type))\n .map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size}>\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Modal.Footer>\n </Form>\n </Modal.Content>\n );\n};\n\n/**\n * @internal\n * @description not all edit fields have the same editable properties, it depends on the type\n * e.g. a dynamic zone can only change it's label.\n */\nconst filterFieldsBasedOnAttributeType = (type: Schema.Attribute.Kind) => (field: InputProps) => {\n switch (type) {\n case 'blocks':\n case 'richtext':\n return field.name !== 'size' && field.name !== 'mainField';\n case 'boolean':\n case 'media':\n return field.name !== 'placeholder' && field.name !== 'mainField';\n case 'component':\n case 'dynamiczone':\n return field.name === 'label' || field.name === 'editable';\n case 'json':\n return field.name !== 'placeholder' && field.name !== 'mainField' && field.name !== 'size';\n case 'relation':\n return true;\n default:\n return field.name !== 'mainField';\n }\n};\n\nexport { EditFieldForm };\nexport type { EditFieldFormProps };\n","import * as React from 'react';\n\nimport { useField, useForm } from '@strapi/admin/strapi-admin';\nimport {\n Modal,\n Box,\n Flex,\n Grid,\n IconButton,\n IconButtonComponent,\n Typography,\n useComposedRefs,\n Link,\n Menu,\n} from '@strapi/design-system';\nimport { Cog, Cross, Drag, Pencil, Plus } from '@strapi/icons';\nimport { generateNKeysBetween as generateNKeysBetweenImpl } from 'fractional-indexing';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { ItemTypes } from '../../constants/dragAndDrop';\nimport { type UseDragAndDropOptions, useDragAndDrop } from '../../hooks/useDragAndDrop';\nimport { getTranslation } from '../../utils/translations';\nimport { ComponentIcon } from '../ComponentIcon';\n\nimport { EditFieldForm, EditFieldFormProps } from './EditFieldForm';\n\nimport type { ConfigurationFormData, EditFieldSpacerLayout } from './Form';\nimport type { EditLayout } from '../../hooks/useDocumentLayout';\n\ntype FormField = ConfigurationFormData['layout'][number]['children'][number];\ntype Field = Omit<ConfigurationFormData['layout'][number]['children'][number], '__temp_key__'>;\n\n/* -------------------------------------------------------------------------------------------------\n * Fields\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FieldsProps extends Pick<EditLayout, 'metadatas'>, Pick<FieldProps, 'components'> {\n attributes: {\n [key: string]: FieldProps['attribute'];\n };\n fieldSizes: Record<string, number>;\n components: EditLayout['components'];\n}\n\nconst Fields = ({ attributes, fieldSizes, components, metadatas = {} }: FieldsProps) => {\n const { formatMessage } = useIntl();\n\n const layout = useForm<ConfigurationFormData['layout']>(\n 'Fields',\n (state) => state.values.layout ?? []\n );\n const onChange = useForm('Fields', (state) => state.onChange);\n const addFieldRow = useForm('Fields', (state) => state.addFieldRow);\n const removeFieldRow = useForm('Fields', (state) => state.removeFieldRow);\n\n const existingFields = layout.map((row) => row.children.map((field) => field.name)).flat();\n\n /**\n * Get the fields that are not already in the layout\n * But also check that they are visible before we give users\n * the option to display them. e.g. `id` is not visible.\n */\n const remainingFields = Object.entries(metadatas).reduce<Field[]>((acc, current) => {\n const [name, { visible, ...field }] = current;\n\n if (!existingFields.includes(name) && visible === true) {\n const type = attributes[name]?.type;\n const size = type ? fieldSizes[type] : 12;\n\n acc.push({\n ...field,\n label: field.label ?? name,\n name,\n size,\n });\n }\n\n return acc;\n }, []);\n\n const handleMoveField: FieldProps['onMoveField'] = (\n [newRowIndex, newFieldIndex],\n [currentRowIndex, currentFieldIndex]\n ) => {\n /**\n * Because this view has the constraint that the sum of field sizes cannot be greater\n * than 12, we don't use the form's method to move field rows, instead, we calculate\n * the new layout and set the entire form.\n */\n const newLayout = structuredClone(layout);\n\n /**\n * Remove field from the current layout space using splice so we have the item\n */\n const [field] = newLayout[currentRowIndex].children.splice(currentFieldIndex, 1);\n\n if (!field || field.name === TEMP_FIELD_NAME) {\n return;\n }\n\n const newRow = newLayout[newRowIndex].children;\n const [newFieldKey] = generateNKeysBetween(newRow, 1, currentFieldIndex, newFieldIndex);\n\n /**\n * Next we inject the field into it's new row at it's specified index, we then remove the spaces\n * if they exist and recalculate into potentially two arrays ONLY if the sizing is now over 12,\n * the row and the rest of the row that couldn't fit.\n *\n * for example, if i have a row of `[{size: 4}, {size: 6}]` and i add `{size: 8}` a index 0,\n * the new array will look like `[{size: 8}, {size: 4}, {size: 6}]` which breaks the limit of 12,\n * so instead we make two arrays for the new rows `[[{size: 8}, {size: 4}], [{size: 6}]]` which we\n * then inject at the original row point with spacers included.\n */\n newRow.splice(newFieldIndex, 0, { ...field, __temp_key__: newFieldKey });\n\n if (newLayout[newRowIndex].children.reduce((acc, curr) => acc + curr.size, 0) > 12) {\n const recalculatedRows = chunkArray(\n newLayout[newRowIndex].children.filter((field) => field.name !== TEMP_FIELD_NAME)\n );\n\n const rowKeys = generateNKeysBetween(\n newLayout,\n recalculatedRows.length,\n currentRowIndex,\n newRowIndex\n );\n\n newLayout.splice(\n newRowIndex,\n 1,\n ...recalculatedRows.map((row, index) => ({\n __temp_key__: rowKeys[index],\n children: row,\n }))\n );\n }\n\n /**\n * Now we remove our spacers from the rows so we can understand what dead rows exist:\n * - if there's only spacers left\n * - there's nothing in the row, e.g. a size 12 field left it.\n * These rows are then filtered out.\n * After that, we recalculate the spacers for the rows that need them.\n */\n const newLayoutWithSpacers = newLayout\n .map((row) => ({\n ...row,\n children: row.children.filter((field) => field.name !== TEMP_FIELD_NAME),\n }))\n .filter((row) => row.children.length > 0)\n .map((row) => {\n const totalSpaceTaken = row.children.reduce((acc, curr) => acc + curr.size, 0);\n\n if (totalSpaceTaken < 12) {\n const [spacerKey] = generateNKeysBetweenImpl(\n row.children.at(-1)?.__temp_key__,\n undefined,\n 1\n );\n\n return {\n ...row,\n children: [\n ...row.children,\n {\n name: TEMP_FIELD_NAME,\n size: 12 - totalSpaceTaken,\n __temp_key__: spacerKey,\n } satisfies EditFieldSpacerLayout,\n ],\n };\n }\n\n return row;\n });\n\n onChange('layout', newLayoutWithSpacers);\n };\n\n const handleRemoveField =\n (rowIndex: number, fieldIndex: number): FieldProps['onRemoveField'] =>\n () => {\n if (layout[rowIndex].children.length === 1) {\n removeFieldRow(`layout`, rowIndex);\n } else {\n onChange(`layout.${rowIndex}.children.${fieldIndex}`, undefined);\n }\n };\n\n const handleAddField = (field: Field) => () => {\n addFieldRow('layout', { children: [field] });\n };\n\n return (\n <Flex paddingTop={6} direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex alignItems=\"flex-start\" direction=\"column\" justifyContent=\"space-between\">\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: getTranslation('containers.list.displayedFields'),\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'containers.SettingPage.editSettings.description',\n defaultMessage: 'Drag & drop the fields to build the layout',\n })}\n </Typography>\n </Flex>\n <Box padding={4} hasRadius borderStyle=\"dashed\" borderWidth=\"1px\" borderColor=\"neutral300\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {layout.map((row, rowIndex) => (\n <Grid.Root gap={2} key={row.__temp_key__}>\n {row.children.map(({ size, ...field }, fieldIndex) => (\n <Grid.Item key={field.name} col={size}>\n <Field\n attribute={attributes[field.name]}\n components={components}\n index={[rowIndex, fieldIndex]}\n name={`layout.${rowIndex}.children.${fieldIndex}`}\n onMoveField={handleMoveField}\n onRemoveField={handleRemoveField(rowIndex, fieldIndex)}\n />\n </Grid.Item>\n ))}\n </Grid.Root>\n ))}\n <Menu.Root>\n <Menu.Trigger\n startIcon={<Plus />}\n endIcon={null}\n disabled={remainingFields.length === 0}\n fullWidth\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTranslation('containers.SettingPage.add.field'),\n defaultMessage: 'Insert another field',\n })}\n </Menu.Trigger>\n <Menu.Content>\n {remainingFields.map((field) => (\n <Menu.Item key={field.name} onSelect={handleAddField(field)}>\n {field.label}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Box>\n </Flex>\n );\n};\n\n/**\n * @internal\n * @description Small abstraction to solve within an array of fields where you can\n * add a field to the beginning or start, move back and forth what it's index range\n * should be when calculating it's new temp key\n */\nconst generateNKeysBetween = <Field extends { __temp_key__: string }>(\n field: Field[],\n count: number,\n currInd: number,\n newInd: number\n) => {\n const startKey = currInd > newInd ? field[newInd - 1]?.__temp_key__ : field[newInd]?.__temp_key__;\n const endKey = currInd > newInd ? field[newInd]?.__temp_key__ : field[newInd + 1]?.__temp_key__;\n\n return generateNKeysBetweenImpl(startKey, endKey, count);\n};\n\n/**\n * @internal\n * @description chunks a row of layouts by the max size we allow, 12. It does not add the\n * spacers again, that should be added separately.\n */\nconst chunkArray = (array: FormField[]) => {\n const result: Array<FormField[]> = [];\n let temp: FormField[] = [];\n\n array.reduce((acc, field) => {\n if (acc + field.size > 12) {\n result.push(temp);\n temp = [field];\n return field.size;\n } else {\n temp.push(field);\n return acc + field.size;\n }\n }, 0);\n\n if (temp.length > 0) {\n result.push(temp);\n }\n\n return result;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Field\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FieldProps extends Pick<EditFieldFormProps, 'name' | 'attribute'> {\n components: EditLayout['components'];\n index: [row: number, index: number];\n onMoveField: UseDragAndDropOptions<number[]>['onMoveItem'];\n onRemoveField: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nconst TEMP_FIELD_NAME = '_TEMP_';\n\n/**\n * Displays a field in the layout with drag options, also\n * opens a modal to edit the details of said field.\n */\nconst Field = ({ attribute, components, name, index, onMoveField, onRemoveField }: FieldProps) => {\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const { value } = useField<FormField>(name);\n\n const [{ isDragging }, objectRef, dropRef, dragRef, dragPreviewRef] = useDragAndDrop<\n Array<number>\n >(true, {\n dropSensitivity: 'immediate',\n type: ItemTypes.EDIT_FIELD,\n item: { index, label: value?.label, name },\n index,\n onMoveItem: onMoveField,\n });\n\n React.useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef]);\n\n const composedRefs = useComposedRefs<HTMLSpanElement>(dragRef, objectRef);\n\n const handleRemoveField: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n e.stopPropagation();\n onRemoveField(e);\n };\n\n const tempRefs = useComposedRefs<HTMLSpanElement>(dropRef, objectRef);\n\n if (!value) {\n return null;\n }\n\n if (value.name === TEMP_FIELD_NAME) {\n return <Flex tag=\"span\" height=\"100%\" style={{ opacity: 0 }} ref={tempRefs} />;\n }\n\n return (\n <Modal.Root open={isModalOpen} onOpenChange={setIsModalOpen}>\n <Flex\n borderColor=\"neutral150\"\n background=\"neutral100\"\n hasRadius\n style={{ opacity: isDragging ? 0.5 : 1 }}\n ref={dropRef}\n gap={3}\n cursor=\"pointer\"\n onClick={() => {\n setIsModalOpen(true);\n }}\n >\n <DragButton\n tag=\"span\"\n withTooltip={false}\n label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.move.field'),\n defaultMessage: 'Move {item}',\n },\n { item: value.label }\n )}\n onClick={(e) => e.stopPropagation()}\n ref={composedRefs}\n >\n <Drag />\n </DragButton>\n <Flex direction=\"column\" alignItems=\"flex-start\" grow={1} overflow=\"hidden\">\n <Flex gap={3} justifyContent=\"space-between\" width=\"100%\">\n <Typography ellipsis fontWeight=\"bold\">\n {value.label}\n </Typography>\n <Flex>\n <IconButton\n borderWidth={0}\n background=\"transparent\"\n onClick={(e) => {\n e.stopPropagation();\n setIsModalOpen(true);\n }}\n withTooltip={false}\n label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.edit.field'),\n defaultMessage: 'Edit {item}',\n },\n { item: value.label }\n )}\n >\n <Pencil />\n </IconButton>\n <IconButton\n borderWidth={0}\n onClick={handleRemoveField}\n background=\"transparent\"\n withTooltip={false}\n label={formatMessage(\n {\n id: getTranslation('components.DraggableCard.delete.field'),\n defaultMessage: 'Delete {item}',\n },\n { item: value.label }\n )}\n >\n <Cross />\n </IconButton>\n </Flex>\n </Flex>\n {attribute?.type === 'component' ? (\n <Flex\n paddingTop={3}\n paddingRight={3}\n paddingBottom={3}\n paddingLeft={0}\n alignItems=\"flex-start\"\n direction=\"column\"\n gap={2}\n width=\"100%\"\n >\n <Grid.Root gap={4} width=\"100%\">\n {components[attribute.component].layout.map((row) =>\n row.map(({ size, ...field }) => (\n <Grid.Item key={field.name} col={size}>\n <Flex\n alignItems=\"center\"\n background=\"neutral0\"\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={3}\n paddingRight={3}\n hasRadius\n borderColor=\"neutral200\"\n >\n <Typography textColor=\"neutral800\">{field.name}</Typography>\n </Flex>\n </Grid.Item>\n ))\n )}\n </Grid.Root>\n <Link\n // used to stop the edit form from appearing when we click here.\n onClick={(e) => e.stopPropagation()}\n startIcon={<Cog />}\n tag={NavLink}\n to={`../components/${attribute.component}/configurations/edit`}\n >\n {formatMessage({\n id: getTranslation('components.FieldItem.linkToComponentLayout'),\n defaultMessage: \"Set the component's layout\",\n })}\n </Link>\n </Flex>\n ) : null}\n {attribute?.type === 'dynamiczone' ? (\n <Flex\n paddingTop={3}\n paddingRight={3}\n paddingBottom={3}\n paddingLeft={0}\n alignItems=\"flex-start\"\n gap={2}\n width=\"100%\"\n >\n {attribute?.components.map((uid) => (\n <ComponentLink\n // used to stop the edit form from appearing when we click here.\n onClick={(e) => e.stopPropagation()}\n key={uid}\n to={`../components/${uid}/configurations/edit`}\n >\n <ComponentIcon icon={components[uid].settings.icon} />\n <Typography fontSize={1} textColor=\"neutral600\" fontWeight=\"bold\">\n {components[uid].settings.displayName}\n </Typography>\n </ComponentLink>\n ))}\n </Flex>\n ) : null}\n </Flex>\n </Flex>\n {value.name !== TEMP_FIELD_NAME && (\n <EditFieldForm attribute={attribute} name={name} onClose={() => setIsModalOpen(false)} />\n )}\n </Modal.Root>\n );\n};\n\nconst DragButton = styled<IconButtonComponent<'span'>>(IconButton)`\n height: unset;\n align-self: stretch;\n display: flex;\n align-items: center;\n padding: 0;\n border: none;\n background-color: transparent;\n border-radius: 0px;\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n cursor: all-scroll;\n\n svg {\n width: 1.2rem;\n height: 1.2rem;\n }\n`;\n\nconst ComponentLink = styled(NavLink)`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: ${({ theme }) => theme.spaces[1]};\n padding: ${(props) => props.theme.spaces[2]};\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n background: ${({ theme }) => theme.colors.neutral0};\n width: 14rem;\n border-radius: ${({ theme }) => theme.borderRadius};\n text-decoration: none;\n\n &:focus,\n &:hover {\n ${({ theme }) => `\n background-color: ${theme.colors.primary100};\n border-color: ${theme.colors.primary200};\n\n ${Typography} {\n color: ${theme.colors.primary600};\n }\n `}\n\n /* > ComponentIcon */\n > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\nexport { Fields, TEMP_FIELD_NAME };\nexport type { FieldsProps };\n","import * as React from 'react';\n\nimport {\n Form,\n FormProps,\n useForm,\n InputRenderer,\n BackButton,\n Layouts,\n} from '@strapi/admin/strapi-admin';\nimport { Button, Divider, Flex, Grid, Main, Typography } from '@strapi/design-system';\nimport { generateNKeysBetween } from 'fractional-indexing';\nimport pipe from 'lodash/fp/pipe';\nimport { useIntl } from 'react-intl';\n\nimport { ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD } from '../../constants/attributes';\nimport { capitalise } from '../../utils/strings';\nimport { getTranslation } from '../../utils/translations';\n\nimport { Fields, FieldsProps, TEMP_FIELD_NAME } from './Fields';\n\nimport type { EditFieldLayout, EditLayout } from '../../hooks/useDocumentLayout';\n\n/* -------------------------------------------------------------------------------------------------\n * ConfigurationForm\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfigurationFormProps extends Pick<FieldsProps, 'attributes' | 'fieldSizes'> {\n layout: EditLayout;\n onSubmit: FormProps<ConfigurationFormData>['onSubmit'];\n}\n\n/**\n * Every key in EditFieldLayout is turned to optional never and then we overwrite the ones we are using.\n */\n\ntype EditFieldSpacerLayout = {\n [key in keyof Omit<EditFieldLayout, 'name' | 'size'>]?: never;\n} & {\n description?: never;\n editable?: never;\n name: '_TEMP_';\n size: number;\n __temp_key__: string;\n};\n\ninterface ConfigurationFormData extends Pick<EditLayout, 'settings'> {\n layout: Array<{\n __temp_key__: string;\n children: Array<\n | (Pick<EditFieldLayout, 'label' | 'size' | 'name' | 'placeholder' | 'mainField'> & {\n description: EditFieldLayout['hint'];\n editable: EditFieldLayout['disabled'];\n __temp_key__: string;\n })\n | EditFieldSpacerLayout\n >;\n }>;\n}\n\nconst ConfigurationForm = ({\n attributes,\n fieldSizes,\n layout: editLayout,\n onSubmit,\n}: ConfigurationFormProps) => {\n const { components, settings, layout, metadatas } = editLayout;\n\n const { formatMessage } = useIntl();\n\n const initialValues: ConfigurationFormData = React.useMemo(() => {\n const transformations = pipe(\n flattenPanels,\n replaceMainFieldWithNameOnly,\n extractMetadata,\n addTmpSpaceToLayout,\n addTmpKeysToLayout\n );\n\n return {\n layout: transformations(layout),\n settings,\n };\n }, [layout, settings]);\n\n return (\n <Layouts.Root>\n <Main>\n <Form initialValues={initialValues} onSubmit={onSubmit} method=\"PUT\">\n <Header name={settings.displayName ?? ''} />\n <Layouts.Content>\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={6}\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root>\n <Grid.Item col={6} s={12}>\n <InputRenderer\n type=\"enumeration\"\n label={formatMessage({\n id: getTranslation('containers.SettingPage.editSettings.entry.title'),\n defaultMessage: 'Entry title',\n })}\n hint={formatMessage({\n id: getTranslation(\n 'containers.SettingPage.editSettings.entry.title.description'\n ),\n defaultMessage: 'Set the display field of your entry',\n })}\n name=\"settings.mainField\"\n options={Object.entries(attributes).reduce<\n Array<{ label: string; value: string }>\n >((acc, [key, attribute]) => {\n if (!attribute) {\n return acc;\n }\n\n /**\n * Create the list of attributes from the schema as to which can\n * be our `mainField` and dictate the display name of the schema\n * we're editing.\n */\n if (!ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD.includes(attribute.type)) {\n acc.push({\n label: key,\n value: key,\n });\n }\n\n return acc;\n }, [])}\n />\n </Grid.Item>\n <Grid.Item paddingTop={6} paddingBottom={6} col={12} s={12}>\n <Divider />\n </Grid.Item>\n <Grid.Item col={12} s={12}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: getTranslation('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n </Grid.Item>\n <Grid.Item col={12} s={12}>\n <Fields\n attributes={attributes}\n components={components}\n fieldSizes={fieldSizes}\n metadatas={metadatas}\n />\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Layouts.Content>\n </Form>\n </Main>\n </Layouts.Root>\n );\n};\n\n/**\n * @internal\n * @description Panels don't exist in the layout, so we flatten by one.\n */\nconst flattenPanels = (layout: EditLayout['layout']): EditLayout['layout'][number] =>\n layout.flat(1);\n\n/**\n * @internal\n * @description We don't need the mainField object in the layout, we only need the name.\n */\nconst replaceMainFieldWithNameOnly = (layout: EditLayout['layout'][number]) =>\n layout.map((row) =>\n row.map((field) => ({\n ...field,\n mainField: field.mainField?.name,\n }))\n );\n\n/**\n * @internal\n * @description We extract the metadata values from the field layout, because these are editable by the user.\n */\nconst extractMetadata = (\n layout: EditLayout['layout'][number]\n): Array<Exclude<ConfigurationFormData['layout'], { name: '_TEMP_' }>[number]['children']> => {\n return layout.map((row) =>\n row.map(({ label, disabled, hint, placeholder, size, name, mainField }) => ({\n label,\n editable: !disabled,\n description: hint,\n mainField,\n placeholder,\n size,\n name,\n __temp_key__: '',\n }))\n );\n};\n\n/**\n * @internal\n * @description Each row of the layout has a max size of 12 (based on bootstrap grid system)\n * So in order to offer a better drop zone we add the _TEMP_ div to complete the remaining substract (12 - existing)\n */\nconst addTmpSpaceToLayout = (\n layout: ReturnType<typeof extractMetadata>\n): Array<ConfigurationFormData['layout'][number]['children']> => [\n ...layout.map((row) => {\n const totalSpaceTaken = row.reduce((acc, field) => acc + field.size, 0);\n\n if (totalSpaceTaken < 12) {\n return [\n ...row,\n {\n name: TEMP_FIELD_NAME,\n size: 12 - totalSpaceTaken,\n __temp_key__: '',\n } satisfies EditFieldSpacerLayout,\n ];\n }\n\n return row;\n }),\n];\n\n/**\n * @internal\n * @description At this point of the transformations we have Field[][], but each row for the form should have a __temp_key__\n * applied. This means we need to change it so `Field` is nested under the children property.\n */\nconst addTmpKeysToLayout = (\n layout: ReturnType<typeof addTmpSpaceToLayout>\n): ConfigurationFormData['layout'] => {\n const keys = generateNKeysBetween(undefined, undefined, layout.length);\n\n return layout.map((row, rowIndex) => {\n const fieldKeys = generateNKeysBetween(undefined, undefined, row.length);\n\n return {\n __temp_key__: keys[rowIndex],\n children: row.map((field, fieldIndex) => {\n return {\n ...field,\n __temp_key__: fieldKeys[fieldIndex],\n };\n }),\n };\n });\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Header\n * -----------------------------------------------------------------------------------------------*/\n\ninterface HeaderProps {\n name: string;\n}\n\nconst Header = ({ name }: HeaderProps) => {\n const { formatMessage } = useIntl();\n const modified = useForm('Header', (state) => state.modified);\n const isSubmitting = useForm('Header', (state) => state.isSubmitting);\n\n return (\n <Layouts.Header\n title={formatMessage(\n {\n id: getTranslation('components.SettingsViewWrapper.pluginHeader.title'),\n defaultMessage: `Configure the view - {name}`,\n },\n { name: capitalise(name) }\n )}\n subtitle={formatMessage({\n id: getTranslation('components.SettingsViewWrapper.pluginHeader.description.edit-settings'),\n defaultMessage: 'Customize how the edit view will look like.',\n })}\n navigationAction={<BackButton />}\n primaryAction={\n <Button disabled={!modified} loading={isSubmitting} type=\"submit\">\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n );\n};\n\nexport { ConfigurationForm };\nexport type { ConfigurationFormProps, ConfigurationFormData, EditFieldSpacerLayout };\n"],"names":["attribute","field","generateNKeysBetweenImpl","generateNKeysBetween"],"mappings":"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"}
@@ -7,13 +7,13 @@ const designSystem = require("@strapi/design-system");
7
7
  const qs = require("qs");
8
8
  const reactIntl = require("react-intl");
9
9
  const reactRouterDom = require("react-router-dom");
10
- const index = require("./index-DNa1J4HE.js");
10
+ const index = require("./index-OerGjbAN.js");
11
11
  const pipe = require("lodash/fp/pipe");
12
12
  const hooks = require("./hooks-BAaaKPS_.js");
13
- const Field = require("./Field-kq1c2TF1.js");
13
+ const Field = require("./Field-Bfph5SOd.js");
14
14
  const Icons = require("@strapi/icons");
15
- const styled = require("styled-components");
16
- const relations = require("./relations-BHY_KDJ_.js");
15
+ const styledComponents = require("styled-components");
16
+ const relations = require("./relations-COBpStiF.js");
17
17
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
18
18
  function _interopNamespace(e) {
19
19
  if (e && e.__esModule)
@@ -35,14 +35,13 @@ function _interopNamespace(e) {
35
35
  }
36
36
  const React__namespace = /* @__PURE__ */ _interopNamespace(React);
37
37
  const pipe__default = /* @__PURE__ */ _interopDefault(pipe);
38
- const styled__default = /* @__PURE__ */ _interopDefault(styled);
39
- const StyledAlert = styled__default.default(designSystem.Alert).attrs({ closeLabel: "Close", onClose: () => {
38
+ const StyledAlert = styledComponents.styled(designSystem.Alert).attrs({ closeLabel: "Close", onClose: () => {
40
39
  } })`
41
40
  button {
42
41
  display: none;
43
42
  }
44
43
  `;
45
- const LinkEllipsis = styled__default.default(designSystem.Link)`
44
+ const LinkEllipsis = styledComponents.styled(designSystem.Link)`
46
45
  display: block;
47
46
 
48
47
  & > span {
@@ -55,13 +54,13 @@ const LinkEllipsis = styled__default.default(designSystem.Link)`
55
54
  const CustomRelationInput = (props) => {
56
55
  const { formatMessage } = reactIntl.useIntl();
57
56
  const field = strapiAdmin.useField(props.name);
58
- const formattedFieldValue = Array.isArray(field.value) ? {
59
- results: field.value,
60
- meta: { missingCount: 0 }
61
- } : field.value;
57
+ let formattedFieldValue;
58
+ if (field) {
59
+ formattedFieldValue = Array.isArray(field.value) ? { results: field.value, meta: { missingCount: 0 } } : field.value;
60
+ }
62
61
  if (!formattedFieldValue || formattedFieldValue.results.length === 0 && formattedFieldValue.meta.missingCount === 0) {
63
62
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
64
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.FieldLabel, { children: props.label }),
63
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { action: props.labelAction, children: props.label }),
65
64
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 1, children: /* @__PURE__ */ jsxRuntime.jsx(StyledAlert, { variant: "default", children: formatMessage({
66
65
  id: "content-manager.history.content.no-relations",
67
66
  defaultMessage: "No relations."
@@ -70,7 +69,7 @@ const CustomRelationInput = (props) => {
70
69
  }
71
70
  const { results, meta } = formattedFieldValue;
72
71
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
73
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.FieldLabel, { children: props.label }),
72
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: props.label }),
74
73
  results.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", gap: 2, marginTop: 1, alignItems: "stretch", children: results.map((relationData) => {
75
74
  const href = `../${index.COLLECTION_TYPES}/${props.attribute.targetModel}/${relationData.documentId}`;
76
75
  const label = relations.getRelationLabel(relationData, props.mainField);
@@ -86,14 +85,15 @@ const CustomRelationInput = (props) => {
86
85
  background: "neutral150",
87
86
  justifyContent: "space-between",
88
87
  children: [
89
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { minWidth: 0, paddingTop: 1, paddingBottom: 1, paddingRight: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: label, children: /* @__PURE__ */ jsxRuntime.jsx(LinkEllipsis, { forwardedAs: reactRouterDom.NavLink, to: href, children: label }) }) }),
88
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { minWidth: 0, paddingTop: 1, paddingBottom: 1, paddingRight: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Tooltip, { description: label, children: /* @__PURE__ */ jsxRuntime.jsx(LinkEllipsis, { tag: reactRouterDom.NavLink, to: href, children: label }) }) }),
90
89
  /* @__PURE__ */ jsxRuntime.jsx(index.DocumentStatus, { status: relationData.status })
91
90
  ]
92
91
  },
93
92
  relationData.documentId
94
93
  );
95
94
  }) }),
96
- meta.missingCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(
95
+ meta.missingCount > 0 && /* @ts-expect-error – we dont need closeLabel */
96
+ /* @__PURE__ */ jsxRuntime.jsx(
97
97
  StyledAlert,
98
98
  {
99
99
  marginTop: 1,
@@ -117,9 +117,9 @@ const CustomRelationInput = (props) => {
117
117
  ] });
118
118
  };
119
119
  const CustomMediaInput = (props) => {
120
- const {
121
- value: { results, meta }
122
- } = strapiAdmin.useField(props.name);
120
+ const { value } = strapiAdmin.useField(props.name);
121
+ const results = value ? value.results : [];
122
+ const meta = value ? value.meta : { missingCount: 0 };
123
123
  const { formatMessage } = reactIntl.useIntl();
124
124
  const fields = strapiAdmin.useStrapiApp("CustomMediaInput", (state) => state.fields);
125
125
  const MediaLibrary = fields.media;
@@ -150,12 +150,39 @@ const CustomMediaInput = (props) => {
150
150
  )
151
151
  ] });
152
152
  };
153
+ const getLabelAction = (labelAction) => {
154
+ if (!React__namespace.isValidElement(labelAction)) {
155
+ return labelAction;
156
+ }
157
+ const labelActionTitleId = labelAction.props.title.id;
158
+ if (labelActionTitleId === "i18n.Field.localized") {
159
+ return React__namespace.cloneElement(labelAction, {
160
+ ...labelAction.props,
161
+ title: {
162
+ id: "history.content.localized",
163
+ defaultMessage: "This value is specific to this locale. If you restore this version, the content will not be replaced for other locales."
164
+ }
165
+ });
166
+ }
167
+ if (labelActionTitleId === "i18n.Field.not-localized") {
168
+ return React__namespace.cloneElement(labelAction, {
169
+ ...labelAction.props,
170
+ title: {
171
+ id: "history.content.not-localized",
172
+ defaultMessage: "This value is common to all locales. If you restore this version and save the changes, the content will be replaced for all locales."
173
+ }
174
+ });
175
+ }
176
+ return labelAction;
177
+ };
153
178
  const VersionInputRenderer = ({
154
179
  visible,
155
180
  hint: providedHint,
156
181
  shouldIgnoreRBAC = false,
182
+ labelAction,
157
183
  ...props
158
184
  }) => {
185
+ const customLabelAction = getLabelAction(labelAction);
159
186
  const { formatMessage } = reactIntl.useIntl();
160
187
  const version = useHistoryContext("VersionContent", (state) => state.selectedVersion);
161
188
  const configuration = useHistoryContext("VersionContent", (state) => state.configuration);
@@ -189,7 +216,7 @@ const VersionInputRenderer = ({
189
216
  const addedAttributes = version.meta.unknownAttributes.added;
190
217
  if (Object.keys(addedAttributes).includes(props.name)) {
191
218
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", gap: 1, children: [
192
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.FieldLabel, { children: props.label }),
219
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Label, { children: props.label }),
193
220
  /* @__PURE__ */ jsxRuntime.jsx(
194
221
  StyledAlert,
195
222
  {
@@ -213,29 +240,46 @@ const VersionInputRenderer = ({
213
240
  if (attributeHasCustomFieldProperty(props.attribute)) {
214
241
  const CustomInput = lazyComponentStore[props.attribute.customField];
215
242
  if (CustomInput) {
216
- return /* @__PURE__ */ jsxRuntime.jsx(CustomInput, { ...props, hint, disabled: fieldIsDisabled });
243
+ return /* @__PURE__ */ jsxRuntime.jsx(
244
+ CustomInput,
245
+ {
246
+ ...props,
247
+ hint,
248
+ labelAction: customLabelAction,
249
+ disabled: fieldIsDisabled
250
+ }
251
+ );
217
252
  }
218
253
  return /* @__PURE__ */ jsxRuntime.jsx(
219
254
  strapiAdmin.InputRenderer,
220
255
  {
221
256
  ...props,
222
257
  hint,
258
+ labelAction: customLabelAction,
223
259
  type: props.attribute.customField,
224
260
  disabled: fieldIsDisabled
225
261
  }
226
262
  );
227
263
  }
228
264
  if (props.type === "media") {
229
- return /* @__PURE__ */ jsxRuntime.jsx(CustomMediaInput, { ...props, disabled: fieldIsDisabled });
265
+ return /* @__PURE__ */ jsxRuntime.jsx(CustomMediaInput, { ...props, labelAction: customLabelAction, disabled: fieldIsDisabled });
230
266
  }
231
267
  const addedInputTypes = Object.keys(fields);
232
268
  if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {
233
269
  const CustomInput = fields[props.type];
234
- return /* @__PURE__ */ jsxRuntime.jsx(CustomInput, { ...props, hint, disabled: fieldIsDisabled });
270
+ return /* @__PURE__ */ jsxRuntime.jsx(
271
+ CustomInput,
272
+ {
273
+ ...props,
274
+ hint,
275
+ labelAction: customLabelAction,
276
+ disabled: fieldIsDisabled
277
+ }
278
+ );
235
279
  }
236
280
  switch (props.type) {
237
281
  case "blocks":
238
- return /* @__PURE__ */ jsxRuntime.jsx(Field.BlocksInput, { ...props, hint, type: props.type, disabled: fieldIsDisabled });
282
+ return /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedBlocksInput, { ...props, hint, type: props.type, disabled: fieldIsDisabled });
239
283
  case "component":
240
284
  const { layout } = componentsLayout[props.attribute.component];
241
285
  const [remainingFieldsLayout] = getRemaingFieldsLayout({
@@ -245,29 +289,65 @@ const VersionInputRenderer = ({
245
289
  schemaAttributes: components[props.attribute.component].attributes
246
290
  });
247
291
  return /* @__PURE__ */ jsxRuntime.jsx(
248
- Field.ComponentInput,
292
+ Field.MemoizedComponentInput,
249
293
  {
250
294
  ...props,
251
295
  layout: [...layout, ...remainingFieldsLayout || []],
252
296
  hint,
297
+ labelAction: customLabelAction,
253
298
  disabled: fieldIsDisabled,
254
299
  children: (inputProps) => /* @__PURE__ */ jsxRuntime.jsx(VersionInputRenderer, { ...inputProps, shouldIgnoreRBAC: true })
255
300
  }
256
301
  );
257
302
  case "dynamiczone":
258
- return /* @__PURE__ */ jsxRuntime.jsx(Field.DynamicZone, { ...props, hint, disabled: fieldIsDisabled });
303
+ return /* @__PURE__ */ jsxRuntime.jsx(
304
+ Field.DynamicZone,
305
+ {
306
+ ...props,
307
+ hint,
308
+ labelAction: customLabelAction,
309
+ disabled: fieldIsDisabled
310
+ }
311
+ );
259
312
  case "relation":
260
- return /* @__PURE__ */ jsxRuntime.jsx(CustomRelationInput, { ...props, hint, disabled: fieldIsDisabled });
313
+ return /* @__PURE__ */ jsxRuntime.jsx(
314
+ CustomRelationInput,
315
+ {
316
+ ...props,
317
+ hint,
318
+ labelAction: customLabelAction,
319
+ disabled: fieldIsDisabled
320
+ }
321
+ );
261
322
  case "richtext":
262
- return /* @__PURE__ */ jsxRuntime.jsx(Field.Wysiwyg, { ...props, hint, type: props.type, disabled: fieldIsDisabled });
323
+ return /* @__PURE__ */ jsxRuntime.jsx(
324
+ Field.MemoizedWysiwyg,
325
+ {
326
+ ...props,
327
+ hint,
328
+ type: props.type,
329
+ labelAction: customLabelAction,
330
+ disabled: fieldIsDisabled
331
+ }
332
+ );
263
333
  case "uid":
264
- return /* @__PURE__ */ jsxRuntime.jsx(Field.UIDInput, { ...props, hint, type: props.type, disabled: fieldIsDisabled });
334
+ return /* @__PURE__ */ jsxRuntime.jsx(
335
+ Field.MemoizedUIDInput,
336
+ {
337
+ ...props,
338
+ hint,
339
+ type: props.type,
340
+ labelAction: customLabelAction,
341
+ disabled: fieldIsDisabled
342
+ }
343
+ );
265
344
  case "enumeration":
266
345
  return /* @__PURE__ */ jsxRuntime.jsx(
267
346
  strapiAdmin.InputRenderer,
268
347
  {
269
348
  ...props,
270
349
  hint,
350
+ labelAction: customLabelAction,
271
351
  options: props.attribute.enum.map((value) => ({ value })),
272
352
  type: props.customField ? "custom-field" : props.type,
273
353
  disabled: fieldIsDisabled
@@ -280,6 +360,7 @@ const VersionInputRenderer = ({
280
360
  {
281
361
  ...restProps,
282
362
  hint,
363
+ labelAction: customLabelAction,
283
364
  type: props.customField ? "custom-field" : props.type,
284
365
  disabled: fieldIsDisabled
285
366
  }
@@ -333,7 +414,7 @@ const FormPanel = ({ panel }) => {
333
414
  if (panel.some((row) => row.some((field) => field.type === "dynamiczone"))) {
334
415
  const [row] = panel;
335
416
  const [field] = row;
336
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.GridItem, { col: 12, s: 12, xs: 12, children: /* @__PURE__ */ jsxRuntime.jsx(VersionInputRenderer, { ...field }) }) }, field.name);
417
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 12, s: 12, xs: 12, children: /* @__PURE__ */ jsxRuntime.jsx(VersionInputRenderer, { ...field }) }) }, field.name);
337
418
  }
338
419
  return /* @__PURE__ */ jsxRuntime.jsx(
339
420
  designSystem.Box,
@@ -346,8 +427,8 @@ const FormPanel = ({ panel }) => {
346
427
  paddingTop: 6,
347
428
  paddingBottom: 6,
348
429
  borderColor: "neutral150",
349
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: panel.map((row, gridRowIndex) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid, { gap: 4, children: row.map(({ size, ...field }) => {
350
- return /* @__PURE__ */ jsxRuntime.jsx(designSystem.GridItem, { col: size, s: 12, xs: 12, children: /* @__PURE__ */ jsxRuntime.jsx(VersionInputRenderer, { ...field }) }, field.name);
430
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: panel.map((row, gridRowIndex) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
431
+ return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: size, s: 12, xs: 12, children: /* @__PURE__ */ jsxRuntime.jsx(VersionInputRenderer, { ...field }) }, field.name);
351
432
  }) }, gridRowIndex)) })
352
433
  }
353
434
  );
@@ -479,12 +560,12 @@ const VersionHeader = ({ headerId }) => {
479
560
  const pluginsQueryParams = qs.stringify({ plugins: query.plugins }, { encode: false });
480
561
  if (collectionType === index.COLLECTION_TYPES) {
481
562
  return {
482
- pathname: `/content-manager/${collectionType}/${version.contentType}/${version.relatedDocumentId}`,
563
+ pathname: "..",
483
564
  search: pluginsQueryParams
484
565
  };
485
566
  }
486
567
  return {
487
- pathname: `/content-manager/${collectionType}/${version.contentType}`,
568
+ pathname: "..",
488
569
  search: pluginsQueryParams
489
570
  };
490
571
  };
@@ -500,7 +581,7 @@ const VersionHeader = ({ headerId }) => {
500
581
  body: { contentType: version.contentType }
501
582
  });
502
583
  if ("data" in response) {
503
- navigate(getNextNavigation());
584
+ navigate(getNextNavigation(), { relative: "path" });
504
585
  toggleNotification({
505
586
  type: "success",
506
587
  title: formatMessage({
@@ -529,7 +610,7 @@ const VersionHeader = ({ headerId }) => {
529
610
  });
530
611
  }
531
612
  };
532
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
613
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Dialog.Root, { open: isConfirmDialogOpen, onOpenChange: setIsConfirmDialogOpen, children: [
533
614
  /* @__PURE__ */ jsxRuntime.jsx(
534
615
  strapiAdmin.Layouts.BaseHeader,
535
616
  {
@@ -556,8 +637,10 @@ const VersionHeader = ({ headerId }) => {
556
637
  designSystem.Link,
557
638
  {
558
639
  startIcon: /* @__PURE__ */ jsxRuntime.jsx(Icons.ArrowLeft, {}),
559
- as: reactRouterDom.NavLink,
640
+ tag: reactRouterDom.NavLink,
560
641
  to: getNextNavigation(),
642
+ relative: "path",
643
+ isExternal: false,
561
644
  children: formatMessage({
562
645
  id: "global.back",
563
646
  defaultMessage: "Back"
@@ -565,7 +648,7 @@ const VersionHeader = ({ headerId }) => {
565
648
  }
566
649
  ),
567
650
  sticky: false,
568
- primaryAction: /* @__PURE__ */ jsxRuntime.jsx(
651
+ primaryAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Dialog.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(
569
652
  designSystem.Button,
570
653
  {
571
654
  disabled: !allowedActions.canUpdate || isCurrentVersion,
@@ -577,16 +660,13 @@ const VersionHeader = ({ headerId }) => {
577
660
  defaultMessage: "Restore"
578
661
  })
579
662
  }
580
- )
663
+ ) })
581
664
  }
582
665
  ),
583
666
  /* @__PURE__ */ jsxRuntime.jsx(
584
667
  strapiAdmin.ConfirmDialog,
585
668
  {
586
- isOpen: isConfirmDialogOpen,
587
- onClose: () => setIsConfirmDialogOpen(false),
588
669
  onConfirm: handleRestore,
589
- icon: /* @__PURE__ */ jsxRuntime.jsx(Icons.WarningCircle, {}),
590
670
  endAction: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "secondary", onClick: handleRestore, loading: isLoading, children: formatMessage({
591
671
  id: "content-manager.history.restore.confirm.button",
592
672
  defaultMessage: "Restore"
@@ -600,6 +680,7 @@ const VersionHeader = ({ headerId }) => {
600
680
  gap: 2,
601
681
  textAlign: "center",
602
682
  children: [
683
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.WarningCircle, { width: "24px", height: "24px", fill: "danger600" }) }),
603
684
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: formatMessage({
604
685
  id: "content-manager.history.restore.confirm.title",
605
686
  defaultMessage: "Are you sure you want to restore this version?"
@@ -672,23 +753,24 @@ const VersionCard = ({ version, isCurrent }) => {
672
753
  borderWidth: "1px",
673
754
  borderStyle: "solid",
674
755
  borderColor: isActive ? "primary600" : "neutral200",
756
+ color: "neutral800",
675
757
  paddingTop: 4,
676
758
  paddingBottom: 4,
677
759
  paddingLeft: 5,
678
760
  paddingRight: 5,
679
- as: reactRouterDom.Link,
761
+ tag: reactRouterDom.Link,
680
762
  to: `?${qs.stringify({ ...query, id: version.id })}`,
681
763
  style: { textDecoration: "none" },
682
764
  children: [
683
765
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 1, alignItems: "flex-start", children: [
684
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { as: "h3", fontWeight: "semiBold", children: formatDate(version.createdAt, {
766
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h3", fontWeight: "semiBold", children: formatDate(version.createdAt, {
685
767
  day: "numeric",
686
768
  month: "numeric",
687
769
  year: "numeric",
688
770
  hour: "2-digit",
689
771
  minute: "2-digit"
690
772
  }) }),
691
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { as: "p", variant: "pi", textColor: "neutral600", children: formatMessage(
773
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "p", variant: "pi", textColor: "neutral600", children: formatMessage(
692
774
  {
693
775
  id: "content-manager.history.sidebar.versionDescription",
694
776
  defaultMessage: "{distanceToNow}{isAnonymous, select, true {} other { by {author}}}{isCurrent, select, true { <b>(current)</b>} other {}}"
@@ -744,7 +826,7 @@ const VersionsList = () => {
744
826
  borderColor: "neutral200",
745
827
  borderWidth: "0 0 0 1px",
746
828
  borderStyle: "solid",
747
- as: "aside",
829
+ tag: "aside",
748
830
  children: [
749
831
  /* @__PURE__ */ jsxRuntime.jsxs(
750
832
  designSystem.Flex,
@@ -755,9 +837,9 @@ const VersionsList = () => {
755
837
  borderColor: "neutral200",
756
838
  borderWidth: "0 0 1px",
757
839
  borderStyle: "solid",
758
- as: "header",
840
+ tag: "header",
759
841
  children: [
760
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { as: "h2", variant: "omega", fontWeight: "semiBold", children: formatMessage({
842
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { tag: "h2", variant: "omega", fontWeight: "semiBold", children: formatMessage({
761
843
  id: "content-manager.history.sidebar.title",
762
844
  defaultMessage: "Versions"
763
845
  }) }),
@@ -779,7 +861,7 @@ const VersionsList = () => {
779
861
  paddingBottom: 5,
780
862
  paddingLeft: 4,
781
863
  paddingRight: 4,
782
- as: "ul",
864
+ tag: "ul",
783
865
  alignItems: "stretch",
784
866
  children: versions.data.map((version, index2) => /* @__PURE__ */ jsxRuntime.jsx(
785
867
  "li",
@@ -846,7 +928,22 @@ const HistoryPage = () => {
846
928
  return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
847
929
  }
848
930
  if (!versionsResponse.isError && !versionsResponse.data?.data?.length) {
849
- return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.NoData, {});
931
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(
932
+ strapiAdmin.Page.NoData,
933
+ {
934
+ action: /* @__PURE__ */ jsxRuntime.jsx(
935
+ designSystem.Link,
936
+ {
937
+ tag: reactRouterDom.NavLink,
938
+ to: `/content-manager/${collectionType}/${slug}${documentId ? `/${documentId}` : ""}`,
939
+ children: formatMessage({
940
+ id: "global.back",
941
+ defaultMessage: "Back"
942
+ })
943
+ }
944
+ )
945
+ }
946
+ ) });
850
947
  }
851
948
  if (versionsResponse.data?.data?.length && !selectedVersionId) {
852
949
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -953,4 +1050,4 @@ const ProtectedHistoryPage = () => {
953
1050
  exports.HistoryProvider = HistoryProvider;
954
1051
  exports.ProtectedHistoryPage = ProtectedHistoryPage;
955
1052
  exports.useHistoryContext = useHistoryContext;
956
- //# sourceMappingURL=History-BLEnudTX.js.map
1053
+ //# sourceMappingURL=History-DNQkXANT.js.map