@strapi/content-manager 0.0.0-next.7f1333f1967e625c57ab16648c057aea08c9dddb → 0.0.0-next.837384c065457f44cba22eb6fb56079cc4b04a2b

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 (163) hide show
  1. package/dist/_chunks/CardDragPreview-C0QyJgRA.js.map +1 -1
  2. package/dist/_chunks/CardDragPreview-DOxamsuj.mjs.map +1 -1
  3. package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs → ComponentConfigurationPage-CzVt9QCC.mjs} +3 -3
  4. package/dist/_chunks/{ComponentConfigurationPage-CIjXcRAB.mjs.map → ComponentConfigurationPage-CzVt9QCC.mjs.map} +1 -1
  5. package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js → ComponentConfigurationPage-DYq8aqos.js} +4 -5
  6. package/dist/_chunks/{ComponentConfigurationPage-gsCd80MU.js.map → ComponentConfigurationPage-DYq8aqos.js.map} +1 -1
  7. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js → ComponentIcon-CRbtQEUV.js} +2 -3
  8. package/dist/_chunks/{ComponentIcon-BXdiCGQp.js.map → ComponentIcon-CRbtQEUV.js.map} +1 -1
  9. package/dist/_chunks/ComponentIcon-u4bIXTFY.mjs.map +1 -1
  10. package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js → EditConfigurationPage-C9IATpr0.js} +4 -5
  11. package/dist/_chunks/{EditConfigurationPage-DHDQKBzw.js.map → EditConfigurationPage-C9IATpr0.js.map} +1 -1
  12. package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs → EditConfigurationPage-CLDwrUv5.mjs} +3 -3
  13. package/dist/_chunks/{EditConfigurationPage-BglmD_BF.mjs.map → EditConfigurationPage-CLDwrUv5.mjs.map} +1 -1
  14. package/dist/_chunks/{EditViewPage-C4iTxUPU.js → EditViewPage-Ch-uBvbv.js} +38 -9
  15. package/dist/_chunks/EditViewPage-Ch-uBvbv.js.map +1 -0
  16. package/dist/_chunks/{EditViewPage-CiwVPMaK.mjs → EditViewPage-DtKM7Jgw.mjs} +38 -8
  17. package/dist/_chunks/EditViewPage-DtKM7Jgw.mjs.map +1 -0
  18. package/dist/_chunks/{Field-DhXEK8y1.js → Field-B9ADaInZ.js} +66 -67
  19. package/dist/_chunks/Field-B9ADaInZ.js.map +1 -0
  20. package/dist/_chunks/{Field-DIjL1b5d.mjs → Field-Bn1jgMeF.mjs} +65 -65
  21. package/dist/_chunks/Field-Bn1jgMeF.mjs.map +1 -0
  22. package/dist/_chunks/FieldTypeIcon-CMlNO8PE.mjs.map +1 -1
  23. package/dist/_chunks/FieldTypeIcon-Dnwq_IRF.js.map +1 -1
  24. package/dist/_chunks/{Form-CmNesrvR.mjs → Form-BB5i9Pxl.mjs} +3 -3
  25. package/dist/_chunks/{Form-CmNesrvR.mjs.map → Form-BB5i9Pxl.mjs.map} +1 -1
  26. package/dist/_chunks/{Form-CwmJ4sWe.js → Form-C3kjKrPw.js} +5 -6
  27. package/dist/_chunks/{Form-CwmJ4sWe.js.map → Form-C3kjKrPw.js.map} +1 -1
  28. package/dist/_chunks/{History-BLCCNgCt.js → History-AwrK0-SA.js} +22 -93
  29. package/dist/_chunks/History-AwrK0-SA.js.map +1 -0
  30. package/dist/_chunks/{History-D-99Wh30.mjs → History-Cw2Q7OQL.mjs} +22 -92
  31. package/dist/_chunks/History-Cw2Q7OQL.mjs.map +1 -0
  32. package/dist/_chunks/{ListConfigurationPage-JPWZz7Kg.mjs → ListConfigurationPage-B47JIu1e.mjs} +6 -5
  33. package/dist/_chunks/ListConfigurationPage-B47JIu1e.mjs.map +1 -0
  34. package/dist/_chunks/{ListConfigurationPage-DxWpeZrO.js → ListConfigurationPage-CNTJ0DBm.js} +6 -6
  35. package/dist/_chunks/ListConfigurationPage-CNTJ0DBm.js.map +1 -0
  36. package/dist/_chunks/{ListViewPage-CIQekSFz.js → ListViewPage-Be_UEBar.js} +64 -53
  37. package/dist/_chunks/ListViewPage-Be_UEBar.js.map +1 -0
  38. package/dist/_chunks/{ListViewPage-DSK3f0ST.mjs → ListViewPage-DuvjX6ra.mjs} +63 -51
  39. package/dist/_chunks/ListViewPage-DuvjX6ra.mjs.map +1 -0
  40. package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js → NoContentTypePage-B1J0KUCO.js} +2 -2
  41. package/dist/_chunks/{NoContentTypePage-C5cxKvC2.js.map → NoContentTypePage-B1J0KUCO.js.map} +1 -1
  42. package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs → NoContentTypePage-C6M-Q0Tv.mjs} +2 -2
  43. package/dist/_chunks/{NoContentTypePage-D99LU1YP.mjs.map → NoContentTypePage-C6M-Q0Tv.mjs.map} +1 -1
  44. package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs → NoPermissionsPage-CAi3zCAD.mjs} +2 -2
  45. package/dist/_chunks/{NoPermissionsPage-DBrBw-0y.mjs.map → NoPermissionsPage-CAi3zCAD.mjs.map} +1 -1
  46. package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js → NoPermissionsPage-CN34TlEE.js} +2 -2
  47. package/dist/_chunks/{NoPermissionsPage-Oy4tmUrW.js.map → NoPermissionsPage-CN34TlEE.js.map} +1 -1
  48. package/dist/_chunks/Preview-BrBRcL10.mjs +293 -0
  49. package/dist/_chunks/Preview-BrBRcL10.mjs.map +1 -0
  50. package/dist/_chunks/Preview-DOqm5jcJ.js +311 -0
  51. package/dist/_chunks/Preview-DOqm5jcJ.js.map +1 -0
  52. package/dist/_chunks/{Relations-BBmhcWFV.mjs → Relations-_K-HYOiM.mjs} +9 -8
  53. package/dist/_chunks/Relations-_K-HYOiM.mjs.map +1 -0
  54. package/dist/_chunks/{Relations-eG-9p_qS.js → Relations-xtKZHtTN.js} +10 -10
  55. package/dist/_chunks/Relations-xtKZHtTN.js.map +1 -0
  56. package/dist/_chunks/{en-Bm0D0IWz.js → en-BK8Xyl5I.js} +16 -4
  57. package/dist/_chunks/{en-Bm0D0IWz.js.map → en-BK8Xyl5I.js.map} +1 -1
  58. package/dist/_chunks/{en-DKV44jRb.mjs → en-Dtk_ot79.mjs} +16 -4
  59. package/dist/_chunks/{en-DKV44jRb.mjs.map → en-Dtk_ot79.mjs.map} +1 -1
  60. package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
  61. package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
  62. package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
  63. package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
  64. package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
  65. package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
  66. package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
  67. package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
  68. package/dist/_chunks/hooks-BAaaKPS_.js.map +1 -1
  69. package/dist/_chunks/{index-BIWDoFLK.js → index-BlX-OdHL.js} +325 -178
  70. package/dist/_chunks/index-BlX-OdHL.js.map +1 -0
  71. package/dist/_chunks/{index-BrUzbQ30.mjs → index-tETMKK2G.mjs} +328 -180
  72. package/dist/_chunks/index-tETMKK2G.mjs.map +1 -0
  73. package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
  74. package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
  75. package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
  76. package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
  77. package/dist/_chunks/{layout-_5-cXs34.mjs → layout-BaQBaz56.mjs} +4 -4
  78. package/dist/_chunks/{layout-_5-cXs34.mjs.map → layout-BaQBaz56.mjs.map} +1 -1
  79. package/dist/_chunks/{layout-lMc9i1-Z.js → layout-D8Sz3KxF.js} +5 -6
  80. package/dist/_chunks/{layout-lMc9i1-Z.js.map → layout-D8Sz3KxF.js.map} +1 -1
  81. package/dist/_chunks/objects-BcXOv6_9.js.map +1 -1
  82. package/dist/_chunks/objects-D6yBsdmx.mjs.map +1 -1
  83. package/dist/_chunks/{relations-BRHithi8.js → relations-CAbbX8Sa.js} +6 -3
  84. package/dist/_chunks/relations-CAbbX8Sa.js.map +1 -0
  85. package/dist/_chunks/{relations-B_VLk-DD.mjs → relations-CsfmCqOU.mjs} +6 -3
  86. package/dist/_chunks/relations-CsfmCqOU.mjs.map +1 -0
  87. package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -1
  88. package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -1
  89. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js → useDragAndDrop-BMtgCYzL.js} +5 -9
  90. package/dist/_chunks/{useDragAndDrop-J0TUUbR6.js.map → useDragAndDrop-BMtgCYzL.js.map} +1 -1
  91. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs → useDragAndDrop-DJ6jqvZN.mjs} +4 -7
  92. package/dist/_chunks/{useDragAndDrop-DdHgKsqq.mjs.map → useDragAndDrop-DJ6jqvZN.mjs.map} +1 -1
  93. package/dist/admin/index.js +1 -1
  94. package/dist/admin/index.mjs +4 -4
  95. package/dist/admin/src/content-manager.d.ts +3 -2
  96. package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
  97. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  98. package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
  99. package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
  100. package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
  101. package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
  102. package/dist/admin/src/preview/index.d.ts +1 -1
  103. package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
  104. package/dist/admin/src/preview/routes.d.ts +3 -0
  105. package/dist/admin/src/preview/services/preview.d.ts +3 -0
  106. package/dist/admin/src/router.d.ts +1 -1
  107. package/dist/admin/src/services/documents.d.ts +0 -3
  108. package/dist/server/index.js +362 -172
  109. package/dist/server/index.js.map +1 -1
  110. package/dist/server/index.mjs +362 -171
  111. package/dist/server/index.mjs.map +1 -1
  112. package/dist/server/src/controllers/index.d.ts.map +1 -1
  113. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  114. package/dist/server/src/history/services/utils.d.ts +2 -3
  115. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  116. package/dist/server/src/preview/controllers/index.d.ts +2 -0
  117. package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
  118. package/dist/server/src/preview/controllers/preview.d.ts +13 -0
  119. package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
  120. package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
  121. package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
  122. package/dist/server/src/preview/index.d.ts.map +1 -1
  123. package/dist/server/src/preview/routes/index.d.ts +8 -0
  124. package/dist/server/src/preview/routes/index.d.ts.map +1 -0
  125. package/dist/server/src/preview/routes/preview.d.ts +4 -0
  126. package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
  127. package/dist/server/src/preview/services/index.d.ts +16 -0
  128. package/dist/server/src/preview/services/index.d.ts.map +1 -0
  129. package/dist/server/src/preview/services/preview-config.d.ts +32 -0
  130. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
  131. package/dist/server/src/preview/services/preview.d.ts +12 -0
  132. package/dist/server/src/preview/services/preview.d.ts.map +1 -0
  133. package/dist/server/src/preview/utils.d.ts +19 -0
  134. package/dist/server/src/preview/utils.d.ts.map +1 -0
  135. package/dist/server/src/register.d.ts.map +1 -1
  136. package/dist/server/src/routes/index.d.ts.map +1 -1
  137. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  138. package/dist/server/src/services/index.d.ts.map +1 -1
  139. package/dist/shared/contracts/index.d.ts +1 -0
  140. package/dist/shared/contracts/index.d.ts.map +1 -1
  141. package/dist/shared/contracts/preview.d.ts +27 -0
  142. package/dist/shared/contracts/preview.d.ts.map +1 -0
  143. package/dist/shared/index.js +4 -0
  144. package/dist/shared/index.js.map +1 -1
  145. package/dist/shared/index.mjs +4 -0
  146. package/dist/shared/index.mjs.map +1 -1
  147. package/package.json +11 -11
  148. package/dist/_chunks/EditViewPage-C4iTxUPU.js.map +0 -1
  149. package/dist/_chunks/EditViewPage-CiwVPMaK.mjs.map +0 -1
  150. package/dist/_chunks/Field-DIjL1b5d.mjs.map +0 -1
  151. package/dist/_chunks/Field-DhXEK8y1.js.map +0 -1
  152. package/dist/_chunks/History-BLCCNgCt.js.map +0 -1
  153. package/dist/_chunks/History-D-99Wh30.mjs.map +0 -1
  154. package/dist/_chunks/ListConfigurationPage-DxWpeZrO.js.map +0 -1
  155. package/dist/_chunks/ListConfigurationPage-JPWZz7Kg.mjs.map +0 -1
  156. package/dist/_chunks/ListViewPage-CIQekSFz.js.map +0 -1
  157. package/dist/_chunks/ListViewPage-DSK3f0ST.mjs.map +0 -1
  158. package/dist/_chunks/Relations-BBmhcWFV.mjs.map +0 -1
  159. package/dist/_chunks/Relations-eG-9p_qS.js.map +0 -1
  160. package/dist/_chunks/index-BIWDoFLK.js.map +0 -1
  161. package/dist/_chunks/index-BrUzbQ30.mjs.map +0 -1
  162. package/dist/_chunks/relations-BRHithi8.js.map +0 -1
  163. package/dist/_chunks/relations-B_VLk-DD.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditViewPage-Ch-uBvbv.js","sources":["../../admin/src/hooks/useOnce.ts","../../admin/src/pages/EditView/components/FormLayout.tsx","../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\nexport const useOnce = (effect: React.EffectCallback) => React.useEffect(effect, emptyDeps);\n\nconst emptyDeps: React.DependencyList = [];\n","import { Box, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { EditLayout } from '../../../hooks/useDocumentLayout';\n\nimport { InputRenderer } from './InputRenderer';\n\ninterface FormLayoutProps extends Pick<EditLayout, 'layout'> {}\n\nconst FormLayout = ({ layout }: FormLayoutProps) => {\n const { formatMessage } = useIntl();\n const { model } = useDoc();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((panel, index) => {\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n key={index}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => (\n <Grid.Root key={gridRowIndex} gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n return (\n <Grid.Item\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n );\n};\n\nexport { FormLayout, FormLayoutProps };\n","import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDoc } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\nimport { transformDocument } from './utils/data';\nimport { createDefaultForm } from './utils/forms';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n } = useDoc();\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n */\n const initialValues = React.useMemo(() => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n const form = document?.id ? document : createDefaultForm(schema, components);\n\n return transformDocument(schema, components)(form);\n }, [document, isCreatingDocument, isSingleType, schema, components]);\n\n if (hasError) {\n return <Page.Error />;\n }\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n /**\n * We look to see what the mainField is from the configuration, if it's an id\n * we don't use it because it's a uuid format and not very user friendly.\n * Instead, we display the schema name for single-type documents\n * or \"Untitled\".\n */\n let documentTitle = 'Untitled';\n if (mainField !== 'id' && document?.[mainField]) {\n documentTitle = document[mainField];\n } else if (isSingleType && schema?.info.displayName) {\n documentTitle = schema.info.displayName;\n }\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{documentTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n {({ resetForm }) => (\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={documentTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <Blocker\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n onProceed={resetForm}\n />\n </>\n )}\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["React","useIntl","useDoc","jsx","Flex","index","Grid","InputRenderer","Box","useLocation","useQueryParams","useNotification","useDocumentRBAC","SINGLE_TYPES","useDocumentLayout","useLazyComponents","createDefaultForm","transformDocument","Page","status","createYupSchema","jsxs","Main","Form","Fragment","Header","Tabs","getTranslation","Panels","Blocker","styled","useParams","useRBAC","PERMISSIONS","permissions","DocumentRBAC"],"mappings":"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"}
@@ -5,16 +5,25 @@ import { Flex, Grid, Box, Main, Tabs } from "@strapi/design-system";
5
5
  import { useIntl } from "react-intl";
6
6
  import { useLocation, useParams } from "react-router-dom";
7
7
  import { styled } from "styled-components";
8
- import { c as useDoc, f as useDocumentRBAC, h as useDocumentLayout, i as createYupSchema, j as Header, g as getTranslation, P as Panels, k as PERMISSIONS, l as DocumentRBAC, S as SINGLE_TYPES } from "./index-BrUzbQ30.mjs";
9
- import { M as MemoizedInputRenderer, u as useLazyComponents, c as createDefaultForm, t as transformDocument } from "./Field-DIjL1b5d.mjs";
8
+ import { c as useDoc, f as useDocumentRBAC, h as useDocumentLayout, i as createYupSchema, j as Header, g as getTranslation, P as Panels, k as PERMISSIONS, l as DocumentRBAC, S as SINGLE_TYPES } from "./index-tETMKK2G.mjs";
9
+ import { M as MemoizedInputRenderer, u as useLazyComponents, c as createDefaultForm, t as transformDocument } from "./Field-Bn1jgMeF.mjs";
10
10
  const useOnce = (effect) => React.useEffect(effect, emptyDeps);
11
11
  const emptyDeps = [];
12
12
  const FormLayout = ({ layout }) => {
13
+ const { formatMessage } = useIntl();
14
+ const { model } = useDoc();
13
15
  return /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((panel, index) => {
14
16
  if (panel.some((row) => row.some((field) => field.type === "dynamiczone"))) {
15
17
  const [row] = panel;
16
18
  const [field] = row;
17
- return /* @__PURE__ */ jsx(Grid.Root, { gap: 4, children: /* @__PURE__ */ jsx(Grid.Item, { col: 12, s: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsx(MemoizedInputRenderer, { ...field }) }) }, field.name);
19
+ const fieldWithTranslatedLabel = {
20
+ ...field,
21
+ label: formatMessage({
22
+ id: `content-manager.content-types.${model}.${field.name}`,
23
+ defaultMessage: field.label
24
+ })
25
+ };
26
+ return /* @__PURE__ */ jsx(Grid.Root, { gap: 4, children: /* @__PURE__ */ jsx(Grid.Item, { col: 12, s: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsx(MemoizedInputRenderer, { ...fieldWithTranslatedLabel }) }) }, field.name);
18
27
  }
19
28
  return /* @__PURE__ */ jsx(
20
29
  Box,
@@ -28,6 +37,13 @@ const FormLayout = ({ layout }) => {
28
37
  paddingBottom: 6,
29
38
  borderColor: "neutral150",
30
39
  children: /* @__PURE__ */ jsx(Flex, { direction: "column", alignItems: "stretch", gap: 6, children: panel.map((row, gridRowIndex) => /* @__PURE__ */ jsx(Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
40
+ const fieldWithTranslatedLabel = {
41
+ ...field,
42
+ label: formatMessage({
43
+ id: `content-manager.content-types.${model}.${field.name}`,
44
+ defaultMessage: field.label
45
+ })
46
+ };
31
47
  return /* @__PURE__ */ jsx(
32
48
  Grid.Item,
33
49
  {
@@ -36,7 +52,7 @@ const FormLayout = ({ layout }) => {
36
52
  xs: 12,
37
53
  direction: "column",
38
54
  alignItems: "stretch",
39
- children: /* @__PURE__ */ jsx(MemoizedInputRenderer, { ...field })
55
+ children: /* @__PURE__ */ jsx(MemoizedInputRenderer, { ...fieldWithTranslatedLabel })
40
56
  },
41
57
  field.name
42
58
  );
@@ -112,9 +128,21 @@ const EditViewPage = () => {
112
128
  setQuery({ status: status2 }, "push", true);
113
129
  }
114
130
  };
115
- const documentTitle = mainField !== "id" && document?.[mainField] ? document[mainField] : "Untitled";
131
+ let documentTitle = "Untitled";
132
+ if (mainField !== "id" && document?.[mainField]) {
133
+ documentTitle = document[mainField];
134
+ } else if (isSingleType && schema?.info.displayName) {
135
+ documentTitle = schema.info.displayName;
136
+ }
137
+ const validateSync = (values, options) => {
138
+ const yupSchema = createYupSchema(schema?.attributes, components, {
139
+ status,
140
+ ...options
141
+ });
142
+ return yupSchema.validateSync(values, { abortEarly: false });
143
+ };
116
144
  return /* @__PURE__ */ jsxs(Main, { paddingLeft: 10, paddingRight: 10, children: [
117
- /* @__PURE__ */ jsx(Page.Title, { children: `${documentTitle}` }),
145
+ /* @__PURE__ */ jsx(Page.Title, { children: documentTitle }),
118
146
  /* @__PURE__ */ jsx(
119
147
  Form,
120
148
  {
@@ -128,6 +156,7 @@ const EditViewPage = () => {
128
156
  });
129
157
  return yupSchema.validate(values, { abortEarly: false });
130
158
  },
159
+ initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
131
160
  children: ({ resetForm }) => /* @__PURE__ */ jsxs(Fragment, { children: [
132
161
  /* @__PURE__ */ jsx(
133
162
  Header,
@@ -219,6 +248,7 @@ const ProtectedEditViewPage = () => {
219
248
  };
220
249
  export {
221
250
  EditViewPage,
222
- ProtectedEditViewPage
251
+ ProtectedEditViewPage,
252
+ getDocumentStatus
223
253
  };
224
- //# sourceMappingURL=EditViewPage-CiwVPMaK.mjs.map
254
+ //# sourceMappingURL=EditViewPage-DtKM7Jgw.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditViewPage-DtKM7Jgw.mjs","sources":["../../admin/src/hooks/useOnce.ts","../../admin/src/pages/EditView/components/FormLayout.tsx","../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\nexport const useOnce = (effect: React.EffectCallback) => React.useEffect(effect, emptyDeps);\n\nconst emptyDeps: React.DependencyList = [];\n","import { Box, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { EditLayout } from '../../../hooks/useDocumentLayout';\n\nimport { InputRenderer } from './InputRenderer';\n\ninterface FormLayoutProps extends Pick<EditLayout, 'layout'> {}\n\nconst FormLayout = ({ layout }: FormLayoutProps) => {\n const { formatMessage } = useIntl();\n const { model } = useDoc();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((panel, index) => {\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n key={index}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => (\n <Grid.Root key={gridRowIndex} gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n return (\n <Grid.Item\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n );\n};\n\nexport { FormLayout, FormLayoutProps };\n","import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDoc } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\nimport { transformDocument } from './utils/data';\nimport { createDefaultForm } from './utils/forms';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n } = useDoc();\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n */\n const initialValues = React.useMemo(() => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n const form = document?.id ? document : createDefaultForm(schema, components);\n\n return transformDocument(schema, components)(form);\n }, [document, isCreatingDocument, isSingleType, schema, components]);\n\n if (hasError) {\n return <Page.Error />;\n }\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n /**\n * We look to see what the mainField is from the configuration, if it's an id\n * we don't use it because it's a uuid format and not very user friendly.\n * Instead, we display the schema name for single-type documents\n * or \"Untitled\".\n */\n let documentTitle = 'Untitled';\n if (mainField !== 'id' && document?.[mainField]) {\n documentTitle = document[mainField];\n } else if (isSingleType && schema?.info.displayName) {\n documentTitle = schema.info.displayName;\n }\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{documentTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n {({ resetForm }) => (\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={documentTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <Blocker\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n onProceed={resetForm}\n />\n </>\n )}\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["InputRenderer","status","permissions"],"mappings":"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"}
@@ -5,14 +5,14 @@ const strapiAdmin = require("@strapi/admin/strapi-admin");
5
5
  const designSystem = require("@strapi/design-system");
6
6
  const pipe$1 = require("lodash/fp/pipe");
7
7
  const reactIntl = require("react-intl");
8
- const index = require("./index-BIWDoFLK.js");
8
+ const index = require("./index-BlX-OdHL.js");
9
9
  const fractionalIndexing = require("fractional-indexing");
10
- const Relations = require("./Relations-eG-9p_qS.js");
10
+ const Relations = require("./Relations-xtKZHtTN.js");
11
11
  const Icons = require("@strapi/icons");
12
12
  const styledComponents = require("styled-components");
13
- const ComponentIcon = require("./ComponentIcon-BXdiCGQp.js");
13
+ const ComponentIcon = require("./ComponentIcon-CRbtQEUV.js");
14
14
  const reactDndHtml5Backend = require("react-dnd-html5-backend");
15
- const useDragAndDrop = require("./useDragAndDrop-J0TUUbR6.js");
15
+ const useDragAndDrop = require("./useDragAndDrop-BMtgCYzL.js");
16
16
  const objects = require("./objects-BcXOv6_9.js");
17
17
  const slate = require("slate");
18
18
  const slateHistory = require("slate-history");
@@ -37,8 +37,7 @@ require("highlight.js/styles/solarized-dark.css");
37
37
  require("codemirror5/addon/display/placeholder");
38
38
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
39
39
  function _interopNamespace(e) {
40
- if (e && e.__esModule)
41
- return e;
40
+ if (e && e.__esModule) return e;
42
41
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
43
42
  if (e) {
44
43
  for (const k in e) {
@@ -542,7 +541,7 @@ const CodeEditor = (props) => {
542
541
  const codeBlocks = {
543
542
  code: {
544
543
  renderElement: (props) => /* @__PURE__ */ jsxRuntime.jsx(CodeEditor, { ...props }),
545
- icon: Icons.Code,
544
+ icon: Icons.CodeBlock,
546
545
  label: {
547
546
  id: "components.Blocks.blocks.code",
548
547
  defaultMessage: "Code block"
@@ -731,8 +730,7 @@ const ImageDialog = () => {
731
730
  const [isOpen, setIsOpen] = React__namespace.useState(true);
732
731
  const { editor } = useBlocksEditorContext("ImageDialog");
733
732
  const components = strapiAdmin.useStrapiApp("ImageDialog", (state) => state.components);
734
- if (!components || !isOpen)
735
- return null;
733
+ if (!components || !isOpen) return null;
736
734
  const MediaLibraryDialog = components["media-library"];
737
735
  const insertImages = (images) => {
738
736
  slate.Transforms.unwrapNodes(editor, {
@@ -741,14 +739,12 @@ const ImageDialog = () => {
741
739
  });
742
740
  const nodeEntryBeingReplaced = slate.Editor.above(editor, {
743
741
  match(node) {
744
- if (slate.Editor.isEditor(node))
745
- return false;
742
+ if (slate.Editor.isEditor(node)) return false;
746
743
  const isInlineNode = ["text", "link"].includes(node.type);
747
744
  return !isInlineNode;
748
745
  }
749
746
  });
750
- if (!nodeEntryBeingReplaced)
751
- return;
747
+ if (!nodeEntryBeingReplaced) return;
752
748
  const [, pathToInsert] = nodeEntryBeingReplaced;
753
749
  slate.Transforms.removeNodes(editor);
754
750
  const nodesToInsert = images.map((image) => {
@@ -926,8 +922,7 @@ const LinkContent = React__namespace.forwardRef(
926
922
  slateReact.ReactEditor.focus(editor);
927
923
  };
928
924
  React__namespace.useEffect(() => {
929
- if (popoverOpen)
930
- linkInputRef.current?.focus();
925
+ if (popoverOpen) linkInputRef.current?.focus();
931
926
  }, [popoverOpen]);
932
927
  const inputNotDirty = !linkText || !linkUrl || link.url && link.url === linkUrl && elementText && elementText === linkText;
933
928
  return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Popover.Root, { open: popoverOpen, children: [
@@ -997,11 +992,11 @@ const LinkContent = React__namespace.forwardRef(
997
992
  ),
998
993
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 2, children: [
999
994
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", onClick: handleClose, children: formatMessage({
1000
- id: "components.Blocks.popover.cancel",
995
+ id: "global.cancel",
1001
996
  defaultMessage: "Cancel"
1002
997
  }) }),
1003
998
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { disabled: Boolean(inputNotDirty) || isSaveDisabled, onClick: handleSave, children: formatMessage({
1004
- id: "components.Blocks.popover.save",
999
+ id: "global.save",
1005
1000
  defaultMessage: "Save"
1006
1001
  }) })
1007
1002
  ] })
@@ -1082,8 +1077,7 @@ const isText$1 = (node) => {
1082
1077
  return slate.Node.isNode(node) && !slate.Editor.isEditor(node) && node.type === "text";
1083
1078
  };
1084
1079
  const handleBackspaceKeyOnList = (editor, event) => {
1085
- if (!editor.selection)
1086
- return;
1080
+ if (!editor.selection) return;
1087
1081
  const [currentListItem, currentListItemPath] = slate.Editor.parent(editor, editor.selection.anchor);
1088
1082
  const [currentList, currentListPath] = slate.Editor.parent(editor, currentListItemPath);
1089
1083
  const isListEmpty = currentList.children.length === 1 && isText$1(currentListItem.children[0]) && currentListItem.children[0].text === "";
@@ -1192,8 +1186,7 @@ const handleEnterKeyOnList = (editor) => {
1192
1186
  };
1193
1187
  const handleConvertToList = (editor, format) => {
1194
1188
  const convertedPath = baseHandleConvert(editor, { type: "list-item" });
1195
- if (!convertedPath)
1196
- return;
1189
+ if (!convertedPath) return;
1197
1190
  slate.Transforms.wrapNodes(editor, { type: "list", format, children: [] }, { at: convertedPath });
1198
1191
  };
1199
1192
  const handleTabOnList = (editor) => {
@@ -1205,8 +1198,7 @@ const handleTabOnList = (editor) => {
1205
1198
  }
1206
1199
  const [currentListItem, currentListItemPath] = currentListItemEntry;
1207
1200
  const [currentList] = slate.Editor.parent(editor, currentListItemPath);
1208
- if (currentListItem === currentList.children[0])
1209
- return;
1201
+ if (currentListItem === currentList.children[0]) return;
1210
1202
  const currentListItemIndex = currentList.children.findIndex((item) => item === currentListItem);
1211
1203
  const previousNode = currentList.children[currentListItemIndex - 1];
1212
1204
  if (previousNode.type === "list") {
@@ -1573,8 +1565,7 @@ const isListNode = (node) => {
1573
1565
  const ListButton = ({ block, format }) => {
1574
1566
  const { editor, disabled, blocks } = useBlocksEditorContext("ListButton");
1575
1567
  const isListActive = () => {
1576
- if (!editor.selection)
1577
- return false;
1568
+ if (!editor.selection) return false;
1578
1569
  const currentListEntry = slate.Editor.above(editor, {
1579
1570
  match: (node) => !slate.Editor.isEditor(node) && node.type === "list",
1580
1571
  at: editor.selection.anchor
@@ -1648,8 +1639,7 @@ const LinkButton = ({ disabled }) => {
1648
1639
  const { editor } = useBlocksEditorContext("LinkButton");
1649
1640
  const isLinkActive = () => {
1650
1641
  const { selection } = editor;
1651
- if (!selection)
1652
- return false;
1642
+ if (!selection) return false;
1653
1643
  const [match] = Array.from(
1654
1644
  slate.Editor.nodes(editor, {
1655
1645
  at: slate.Editor.unhangRange(editor, selection),
@@ -1855,8 +1845,7 @@ const DragAndDropElement = ({
1855
1845
  displayedValue: children
1856
1846
  },
1857
1847
  onDropItem(currentIndex, newIndex) {
1858
- if (newIndex)
1859
- handleMoveBlock(newIndex, currentIndex);
1848
+ if (newIndex) handleMoveBlock(newIndex, currentIndex);
1860
1849
  }
1861
1850
  });
1862
1851
  const composedBoxRefs = designSystem.useComposedRefs(blockRef, dropRef);
@@ -2000,8 +1989,7 @@ const BlocksContent = ({ placeholder, ariaLabelId }) => {
2000
1989
  [modifiers2]
2001
1990
  );
2002
1991
  const handleMoveBlocks = (editor2, event) => {
2003
- if (!editor2.selection)
2004
- return;
1992
+ if (!editor2.selection) return;
2005
1993
  const start = slate.Range.start(editor2.selection);
2006
1994
  const currentIndex = [start.path[0]];
2007
1995
  let newIndexPosition = 0;
@@ -2138,8 +2126,7 @@ const BlocksContent = ({ placeholder, ariaLabelId }) => {
2138
2126
  }
2139
2127
  };
2140
2128
  const handleScrollSelectionIntoView = () => {
2141
- if (!editor.selection)
2142
- return;
2129
+ if (!editor.selection) return;
2143
2130
  const domRange = slateReact.ReactEditor.toDOMRange(editor, editor.selection);
2144
2131
  const domRect = domRange.getBoundingClientRect();
2145
2132
  const blocksInput = blocksRef.current;
@@ -2333,8 +2320,7 @@ const InlineCode = styledComponents.styled.code`
2333
2320
  `;
2334
2321
  const baseCheckIsActive = (editor, name2) => {
2335
2322
  const marks = slate.Editor.marks(editor);
2336
- if (!marks)
2337
- return false;
2323
+ if (!marks) return false;
2338
2324
  return Boolean(marks[name2]);
2339
2325
  };
2340
2326
  const baseHandleToggle = (editor, name2) => {
@@ -2658,7 +2644,7 @@ const Initializer = ({ disabled, name: name2, onClick }) => {
2658
2644
  designSystem.Box,
2659
2645
  {
2660
2646
  tag: "button",
2661
- background: "neutral100",
2647
+ background: disabled ? "neutral150" : "neutral100",
2662
2648
  borderColor: field.error ? "danger600" : "neutral200",
2663
2649
  hasRadius: true,
2664
2650
  disabled,
@@ -2666,32 +2652,32 @@ const Initializer = ({ disabled, name: name2, onClick }) => {
2666
2652
  paddingTop: 9,
2667
2653
  paddingBottom: 9,
2668
2654
  type: "button",
2655
+ style: { cursor: disabled ? "not-allowed" : "pointer" },
2669
2656
  children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", gap: 2, children: [
2670
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(CircleIcon, {}) }),
2671
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "primary600", variant: "pi", fontWeight: "bold", children: formatMessage({
2672
- id: index.getTranslation("components.empty-repeatable"),
2673
- defaultMessage: "No entry yet. Click on the button below to add one."
2674
- }) }) })
2657
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", color: disabled ? "neutral500" : "primary600", children: /* @__PURE__ */ jsxRuntime.jsx(Icons.PlusCircle, { width: "3.2rem", height: "3.2rem" }) }),
2658
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
2659
+ designSystem.Typography,
2660
+ {
2661
+ textColor: disabled ? "neutral600" : "primary600",
2662
+ variant: "pi",
2663
+ fontWeight: "bold",
2664
+ children: formatMessage({
2665
+ id: index.getTranslation("components.empty-repeatable"),
2666
+ defaultMessage: "No entry yet. Click to add one."
2667
+ })
2668
+ }
2669
+ ) })
2675
2670
  ] })
2676
2671
  }
2677
2672
  ) });
2678
2673
  };
2679
- const CircleIcon = styledComponents.styled(Icons.PlusCircle)`
2680
- width: 2.4rem;
2681
- height: 2.4rem;
2682
- > circle {
2683
- fill: ${({ theme }) => theme.colors.primary200};
2684
- }
2685
- > path {
2686
- fill: ${({ theme }) => theme.colors.primary600};
2687
- }
2688
- `;
2689
2674
  const NonRepeatableComponent = ({
2690
2675
  attribute,
2691
2676
  name: name2,
2692
2677
  children,
2693
2678
  layout
2694
2679
  }) => {
2680
+ const { formatMessage } = reactIntl.useIntl();
2695
2681
  const { value } = strapiAdmin.useField(name2);
2696
2682
  const level = Relations.useComponent("NonRepeatableComponent", (state) => state.level);
2697
2683
  const isNested = level > 0;
@@ -2708,6 +2694,10 @@ const NonRepeatableComponent = ({
2708
2694
  children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((row, index2) => {
2709
2695
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
2710
2696
  const completeFieldName = `${name2}.${field.name}`;
2697
+ const translatedLabel = formatMessage({
2698
+ id: `content-manager.components.${attribute.component}.${field.name}`,
2699
+ defaultMessage: field.label
2700
+ });
2711
2701
  return /* @__PURE__ */ jsxRuntime.jsx(
2712
2702
  designSystem.Grid.Item,
2713
2703
  {
@@ -2716,7 +2706,7 @@ const NonRepeatableComponent = ({
2716
2706
  xs: 12,
2717
2707
  direction: "column",
2718
2708
  alignItems: "stretch",
2719
- children: children({ ...field, name: completeFieldName })
2709
+ children: children({ ...field, label: translatedLabel, name: completeFieldName })
2720
2710
  },
2721
2711
  completeFieldName
2722
2712
  );
@@ -2918,6 +2908,10 @@ const RepeatableComponent = ({
2918
2908
  children: layout.map((row, index22) => {
2919
2909
  return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
2920
2910
  const completeFieldName = `${nameWithIndex}.${field.name}`;
2911
+ const translatedLabel = formatMessage({
2912
+ id: `content-manager.components.${attribute.component}.${field.name}`,
2913
+ defaultMessage: field.label
2914
+ });
2921
2915
  return /* @__PURE__ */ jsxRuntime.jsx(
2922
2916
  designSystem.Grid.Item,
2923
2917
  {
@@ -2926,7 +2920,11 @@ const RepeatableComponent = ({
2926
2920
  xs: 12,
2927
2921
  direction: "column",
2928
2922
  alignItems: "stretch",
2929
- children: children({ ...field, name: completeFieldName })
2923
+ children: children({
2924
+ ...field,
2925
+ label: translatedLabel,
2926
+ name: completeFieldName
2927
+ })
2930
2928
  },
2931
2929
  completeFieldName
2932
2930
  );
@@ -3770,8 +3768,7 @@ const Wrapper = styledComponents.styled.div`
3770
3768
  `;
3771
3769
  var listRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/, emptyListRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/, unorderedListRE = /[*+-]\s/;
3772
3770
  function newlineAndIndentContinueMarkdownList(cm) {
3773
- if (cm.getOption("disableInput"))
3774
- return CodeMirror__default.default.Pass;
3771
+ if (cm.getOption("disableInput")) return CodeMirror__default.default.Pass;
3775
3772
  var ranges = cm.listSelections(), replacements = [];
3776
3773
  for (var i = 0; i < ranges.length; i++) {
3777
3774
  var pos = ranges[i].head;
@@ -3805,8 +3802,7 @@ function newlineAndIndentContinueMarkdownList(cm) {
3805
3802
  var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(">") >= 0);
3806
3803
  var bullet = numbered ? parseInt(match[3], 10) + 1 + match[4] : match[2].replace("x", " ");
3807
3804
  replacements[i] = "\n" + indent + bullet + after;
3808
- if (numbered)
3809
- incrementRemainingMarkdownListNumbers(cm, pos);
3805
+ if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);
3810
3806
  }
3811
3807
  }
3812
3808
  cm.replaceSelections(replacements);
@@ -3824,10 +3820,8 @@ function incrementRemainingMarkdownListNumbers(cm, pos) {
3824
3820
  var newNumber = parseInt(startItem[3], 10) + lookAhead - skipCount;
3825
3821
  var nextNumber = parseInt(nextItem[3], 10), itemNumber = nextNumber;
3826
3822
  if (startIndent === nextIndent && !isNaN(nextNumber)) {
3827
- if (newNumber === nextNumber)
3828
- itemNumber = nextNumber + 1;
3829
- if (newNumber > nextNumber)
3830
- itemNumber = newNumber + 1;
3823
+ if (newNumber === nextNumber) itemNumber = nextNumber + 1;
3824
+ if (newNumber > nextNumber) itemNumber = newNumber + 1;
3831
3825
  cm.replaceRange(
3832
3826
  nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),
3833
3827
  {
@@ -3840,10 +3834,8 @@ function incrementRemainingMarkdownListNumbers(cm, pos) {
3840
3834
  }
3841
3835
  );
3842
3836
  } else {
3843
- if (startIndent.length > nextIndent.length)
3844
- return;
3845
- if (startIndent.length < nextIndent.length && lookAhead === 1)
3846
- return;
3837
+ if (startIndent.length > nextIndent.length) return;
3838
+ if (startIndent.length < nextIndent.length && lookAhead === 1) return;
3847
3839
  skipCount += 1;
3848
3840
  }
3849
3841
  }
@@ -5271,6 +5263,13 @@ const DynamicComponent = ({
5271
5263
  alignItems: "stretch",
5272
5264
  children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
5273
5265
  const fieldName = `${name2}.${index$1}.${field.name}`;
5266
+ const fieldWithTranslatedLabel = {
5267
+ ...field,
5268
+ label: formatMessage({
5269
+ id: `content-manager.components.${componentUid}.${field.name}`,
5270
+ defaultMessage: field.label
5271
+ })
5272
+ };
5274
5273
  return /* @__PURE__ */ jsxRuntime.jsx(
5275
5274
  designSystem.Grid.Item,
5276
5275
  {
@@ -5279,7 +5278,7 @@ const DynamicComponent = ({
5279
5278
  xs: 12,
5280
5279
  direction: "column",
5281
5280
  alignItems: "stretch",
5282
- children: /* @__PURE__ */ jsxRuntime.jsx(MemoizedInputRenderer, { ...field, name: fieldName })
5281
+ children: /* @__PURE__ */ jsxRuntime.jsx(MemoizedInputRenderer, { ...fieldWithTranslatedLabel, name: fieldName })
5283
5282
  },
5284
5283
  fieldName
5285
5284
  );
@@ -5592,4 +5591,4 @@ exports.transformDocument = transformDocument;
5592
5591
  exports.useDynamicZone = useDynamicZone;
5593
5592
  exports.useFieldHint = useFieldHint;
5594
5593
  exports.useLazyComponents = useLazyComponents;
5595
- //# sourceMappingURL=Field-DhXEK8y1.js.map
5594
+ //# sourceMappingURL=Field-B9ADaInZ.js.map